内部比较器的用途是检测外部传感器的状态变化,例如霍尔开关,有金属接近的时候输出高电平,没有则输出低电平,为什么不直接用IO口来检测呢? 我想比较器跟普通 IO 检测一个很不同的地方就它有参考电压,设置一个合理的阀值就能让比较器正确的工作,这点是 IO 不能比拟的,而且比较器也有中断,方便程序的编写。
#include <htc.h>
__CONFIG(0xFF32);
#define LED0 RD0
/*
实验方法:
RA0(Vin-)和RA3(Vin+)的电平比较,并将结果输出到LED
*/
void CM_init(void)
{
TRISA=0x09; //RA0与RA3设置为输入
TRISD=0x00;
PORTD=0xff;
CMCON=0x02; //两个独立比较器,有C1OUT/C2OUT作为输出
CMIE=1;
GIE=1;
PEIE=1;
}
void main()
{
CM_init();
while(1);
}
void interrupt ISR(void)
{
if(CMIF)
{
CMIF=0;
LED0=C1OUT; //将比较器的结果输出到LED0
}
}