17.4.6 新版比较器的多路复用应用(比较器+ADC输入通道) 由于比较器的正极可以选择ADC的模拟输入通道,因此可以通过多路选择器和分时复用可实现多个比较器的应用。 注意:当比较器正极选择ADC输入通道时,请务必要打开ADC_CONTR寄存器中的ADC电源控制位ADC_POWER和ADC通道选择位ADC_CHS C语言代码
//测试工作频率为11.0592MHz #include "stc8h.h" #include "intrins.h" void main() { P_SW2 |= 0x80; //使能访问XFR P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P1M0 &= 0xfe; //设置P1.0为输入口 P1M1 |= 0x01; ADC_CONTR = 0x80; //使能ADC模块并选择P1.0为ADC输入脚 CMPEXCFG = 0x00; // CMPEXCFG &= ~0x03; //P3.7为CMP+输入脚 // CMPEXCFG |= 0x01; //P5.0为CMP+输入脚 // CMPEXCFG |= 0x02; //P5.1为CMP+输入脚 CMPEXCFG |= 0x03; //ADC输入脚为CMP+输入脚 CMPEXCFG &= ~0x04; //P3.6为CMP-输入脚 // CMPEXCFG |= 0x04; //内部1.19V参考电压为CMP-输入脚 CMPCR2 = 0x00; CMPCR1 = 0x00; CMPCR1 |= 0x02; //使能比较器输出 CMPCR1 |= 0x80; //使能比较器模块 while (1); }
汇编代码
;测试工作频率为11.0592MHz P_SW2 DATA 0BAH CMPCR1 DATA 0E6H CMPCR2 DATA 0E7H ADC_CONTR DATA 0BCH P1M1 DATA 091H P1M0 DATA 092H P0M1 DATA 093H P0M0 DATA 094H P2M1 DATA 095H P2M0 DATA 096H P3M1 DATA 0B1H P3M0 DATA 0B2H P4M1 DATA 0B3H P4M0 DATA 0B4H P5M1 DATA 0C9H P5M0 DATA 0CAH CMPEXCFG XDATA 0FEAEH ORG 0000H LJMP MAIN ORG 0100H MAIN: MOV SP, #5FH ORL P_SW2,#80H ;使能访问XFR MOV P0M0, #00H MOV P0M1, #00H MOV P1M0, #00H MOV P1M1, #00H MOV P2M0, #00H MOV P2M1, #00H MOV P3M0, #00H MOV P3M1, #00H MOV P4M0, #00H MOV P4M1, #00H MOV P5M0, #00H MOV P5M1, #00H ANL P1M0,#0FEH ;设置P1.0为输入口 ORL P1M1,#01H MOV ADC_CONTR,#80H ;使能ADC模块并选择P1.0为ADC输入脚 MOV DPTR,# CMPEXCFG CLR A ; ANL A,#NOT 03H ; P3.7为CMP+输入脚 ; ORL A,#01H ; P5.0为CMP+输入脚 ; ORL A,#02H ; P5.1为CMP+输入脚 ORL A,#03H ;ADC输入脚为CMP+输入脚 ANL A,#NOT 04H ; P3.6为CMP-输入脚 ; ORL A,# 04H ;内部1.19V参考信号源为CMP-输入脚 MOVX @DPTR,A MOV CMPCR2,#00H MOV CMPCR1,#00H ORL CMPCR1,#02H ;使能比较器输出 ORL CMPCR1,#80H ;使能比较器模块 LOOP: JMP LOOP END
|