电路图
连接引脚:P07
寄存器设置
1、ADCCFG
模拟io使能:ADCCFG |= 0x80; //由于引脚为P07,第7位置为1(1000 0000)
模拟io禁用:ADCCFG &= (0x80^0xFF);
//(0x80^0xFF=1000 0000 ^ 1111 1111 = 0111 1111)该异或操作相当于取反,给第7位置为0。
2、ADCCON3
ECH[3:0]: 因为连接引脚为P07,所以通道选择AIN7,0到3位设为0111。
EDIV[5:4]:抽取率选择64(7位),4、5设置为00。
EREF[6:7]:选择AVDD5引脚,6、7位设置为10。
由此:ADCCON3 = 0x87; //(1000 01111)
3、ADCCON1
①开启转换,将第六位设置为1:ADCCON1 |= 0x40;
②循环检测ADCCON1的最高位是否为1,为1则代表转换完成:while(!(ADCCON1 & 0x80));//判断7位是否为1。
4、ADCL、ADCH
读取ADCL、ADCH的值。
驱动代码
uint16 myApp_ReadGasLevel(void){uint16 reading = 0;//P07作为模拟io,第七位设为1,(1000 0000)ADCCFG |= 0x80;//ADCCON3设置参考电压AVDD5引脚(10)。抽取率64,7位(00)。设置通道7:AIN7(0111)。(1000 0111)ADCCON3 = 0x87;//开启下一转换,ADCCON1第6位设为1ADCCON1 |= 0x40;//循环判断转换是否完成,ADCCON1高位是否唯一while(!(ADCCON & 0x80));//禁用使能,第七位设为0ADCDFG &= (0x80 ^ 0xFF);//读取ADCL、ADCHreading = ADCL;reading = (uint16)(ADCH << 8);reading >>= 8;return (reading);}