A/D转换寄存器总表:
寄存器 |
地址 |
名称 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
初始初 |
P1_ADC_EN |
97H |
允许P1.x 成为A/D口 |
P17 |
P16 |
P15 |
P14 |
P13 |
P12 |
P11 |
P10 |
0000 0000 |
ADC_ CONTR |
C5H |
A/D转换 控制寄存器 |
- |
- |
- |
ADC_FLAG |
ADC_START |
CHS2 |
CHS1 |
CHS0 |
xxx0 0000 |
ADC_DATA |
C6H |
A/D转换 结果寄存器 |
- |
- |
- |
- |
- |
- |
- |
- |
0000 0000 |
(1) P1_ADC_EN:特殊功能寄存器
P1.x作为A/D转换输入通道来用允许特殊功能寄存器。相应位为“1”时,对应的P1.x口作为A/D转换使用,内部上拉电阻自动断开。
(2) ADC_CONTR:特殊功能寄存器
CHS2/CHS1/CHS0是模拟输入通道选择,CHS2/CHS1/CHS0的取值如下表所示:
CHS2 |
CHS1 |
CHS0 |
模拟输入通道选择 |
0 |
0 |
0 |
选择P1.0为A/D输入 |
0 |
0 |
1 |
选择P1.1为A/D输入 |
0 |
1 |
0 |
选择P1.2为A/D输入 |
0 |
1 |
1 |
选择P1.3为A/D输入 |
1 |
0 |
0 |
选择P1.4为A/D输入 |
1 |
0 |
1 |
选择P1.5为A/D输入 |
1 |
1 |
0 |
选择P1.6为A/D输入 |
1 |
1 |
1 |
选择P1.7为A/D输入 |
ADC_START是模拟/数字转换(ADC)启动控制位,设置为1时,开始转换。
ADC_FLAG是模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1。
(3) ADC_DATA: A/D转换结果特殊功能寄存器
模拟/数字转换结果计算公式为 结果=256×Vin/Vcc
Vin是模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。
内置ADC的使用例程:
STC_ADC.h:
sfr P1_ADC_EN=0x97;
sfr ADC_CONTR=0xc5;
sfr ADC_DATA=0xc6;
int GetAD(unsigned char channel)//channel为要取的通道号(0~7)
{
unsigned char AD_finished=0;
ADC_DATA=0;
ADC_CONTR=channel;
ADC_CONTR|=0x08;
while(!AD_finished)
AD_finished=(ADC_CONTR&0x10);
ADC_CONTR&=0xF7;
return (ADC_DATA);
}
void AD_Init(unsigned char ADin)// ADC 初始化,ADin为八位2进制数,分别对应AD7~0,置1代表打开此路
{
P1=P1|ADin;//要设置为A/D转换的P1.x口,先设为高
P1_ADC_EN=ADin;
}
_main.c:
#include
#include
/*
-------------------------------------------------
此程序用以说明STC单片机ADC的使用方法
-------------------------------------------------
*/
void delay(unsigned time)
{
while(time--);
}
void main()
{
AD_Init(0x63);//0110,0011,要设置为A/D转换的P1.x口,先设置为高
//0110,0011,P1的P1.0,P1.1,P1.5,P1.6设置为A/D转换输入脚
//断开P1.0,P1.1,P1.5,P1.6内部上拉电阻
while(1)
{
P2=GetAD(0);
delay(10000);
P2=GetAD(1);
delay(10000);
P2=GetAD(5);
delay(10000);
P2=GetAD(6);
delay(10000);
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』