首页 > 技术文章 > MSP430比较器小结

droidxin 2013-11-10 19:07 原文

 

 

比较器就是模拟电压比较器。该模拟外设可以用于外部模拟信号的检测或者电源电压的监测

比较器包括:同向和反向输入端的输入多路选择器,比较器,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呢?

这些都是我的猜想~~~希望能有高手指导指导,嘿嘿

推荐阅读