sbit LED = P1^1; //测试脚
void cmp_isr() interrupt 21 using 1 //比较器中断向量入口
{
CMPCR1 &= ~CMPIF; //清除完成标志
#include <REG51.H>
LED = !!(CMPCR1 & CMPRES); //将比较器结果CMPRES输出到测试口显示
}
void main()
{
CMPCR1 = 0; //初始化比较器控制寄存器1
CMPCR2 = 0; //初始化比较器控制寄存器2
CMPCR1 &= ~PIS; //选择外部管脚P5.5(CMPP)为比较器的正极输入源
// CMPCR1 |= PIS; //选择ADCIS[2:0]所选的ADCIN为比较器的正极输入源
CMPCR1 &= ~NIS; //选择内部BandGap电压VBandGap为比较器的负极输入源
// CMPCR1 |= NIS; //选择外部管脚P5.4(CMPN)为比较器的负极输入源
CMPCR1 &= ~CMPOE; //禁用比较器的比较结果输出
// CMPCR1 |= CMPOE; //使能比较器的比较结果输出到P1.2
CMPCR2 &= ~INVCMPO; //比较器的比较结果正常输出到P1.2
// CMPCR2 |= INVCMPO; //比较器的比较结果取反后输出到P1.2
CMPCR2 &= ~DISFLT; //不禁用(使能)比较器输出端的0.1uS虑波电路
// CMPCR2 |= DISFLT; //禁用比较器输出端的0.1uS虑波电路
CMPCR2 &= ~LCDTY; //比较器结果不去抖动,直接输出
// CMPCR2 |= (DISFLT & 0x10); //比较器结果在经过16个时钟后再输出
CMPCR1 |= PIE; //使能比较器的上升沿中断
// CMPCR1 |= NIE; //使能比较器的下降沿中断
CMPCR1 |= CMPEN; //使能比较器
EA = 1;
while (1);
}
|