chs0 chs1 chs2,是三位二进制数,0~7,对应P1口的引脚号P1.0~P1.7,如P1.1作模拟量输入,则 chs2 chs1 chs0 =001,这是在启动转换和读转换结果时要写到ADC_CONTR寄存器的值。
而P1ASF是用8个位对应每个引脚,则P1ASF=0000 0010,即P1.1作模拟量输入。
想把测到的电压转换之后通过P2口输出,接到LED,是想用8个LED显示吗,这显示的是8位二进制数,而A/D转换的结果是10位二进制数,即是00 0000 0000~11 1111 1111,对应的十进制数是0-1023。所以,最好还是用4位数码管直接显示这十进制数更直观。
做A/D转换时,先初始化P1ASF寄存器。
实现A/D转换要写一个子程序:
unsigned int adc_in(unsigned char n)//n为模拟量输入位通道值,即chs2 chs1 chs0
三位二进制数的值,0~7
{ ADC_CONTR = 0xe8 + n; //启动转换,设置转换速度
while((ADC_CONTR&0x10)==0) ; //等待转换结束
return(ADC_RES*4+ADC_RESL); //读转换结果
}
子程序返回无符号的整形数,即转换结果。
再定义转换结果的变量:
unsigned int ADCX;
在主程序中调用:
ADCX=adc_in(n); //这个n 就是chs2 chs1 chs0的值
调用子程序后得到的转换结果就在ADCX中。