比较器就是模拟电压比较器。该模拟外设可以用于外部模拟信号的检测或者电源电压的监测
比较器包括:同向和反向输入端的输入多路选择器,比较器,RC滤波器,基准电压发生器;
我们主要需要设定两个寄存器CACTL1,CACTL2;
从图中可以看出,我们需要设定同向输入端的输入源,反向输入端的输入源;
从图中,我们可以看出,参考电压的选择是依靠Vcaref的
而参考电压是进入同向端还是进入反向端,则是由CARSEL和CAEx来决定的勒
同我们的参考电压进行比较的也就是CA0或者CA1了
通过CACTL2中的P2CA1,P2CA0来选择;
下面是一个基本的例程。
void main () { WDTCTL=WDTPW+WDTHOLD; CACTL1=CARSEL+CAREF0+CAON; CACTL2=P2CA0; P2DIR=0X00; //把IO设置成比较器的输入端 P2SEL|=BIT3; //选择片内外设比较器 P3DIR=0XFF;P3OUT=0XFF; while(1) { if((CACTL2|OXFE)==0XFF) { P3OUT&=~BIT0; CACTL1&=0XFE; //清除上升沿时发出的中断请求的标志位; } else { P3OUT|=BIT0; } } }
对于这个例子我有点小小的疑问:CACTL中的CAIE即中断使能,这个位默认为0,就是说中断不会发生,那么,为什么我们还需要把中断请求标志位清除使之为0呢??
对上面那个简单例程的猜想:
其中语句:P2DIR=0x00;
P2SEL|=BIT3;
这些在这个例程中,应该是不需要的,因为我根本就没有用到P2IN;
并没有让P2为比较器做数据输入输出的事情;
另外:
我觉得CACTL1&=0XFE;这句也可以不用,因为我根本就没有开启CAIE,没有开启中断使能,怎么又会有中断请求,怎么又会有中断标志位致1呢?
这些都是我的猜想~~~希望能有高手指导指导,嘿嘿