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);
}
|