这两天研讨了一下430的比较器,开端的时分,没有看懂是怎样一回事,在网站看这方面的博客,如同懂了,可是一到编程,就变得无从下手,可是,皇天不负有心人,笔者仍是把他弄懂了
其实这儿便是看懂一幅图,两个寄存器,理解作业原理就能够了
这是比较器A的逻辑图,比价器A由4个部分组成
标号1:内部参阅电压发生器,能够发生0.25V,0.50v的参阅电压
标号2,:外部电压输入端,CA0对应P2.3,CA1对应P2.4
标号3:内部比较器,今日上课刚好上了比较器,也便是正输入端大于负输入端的时分,比较器输出一个1,一起发生一个中止标志位
标号4:也便是比较成果输入端
因而,一般的模版就能够出来了
1:设置内部的参阅电压
2:翻开外部的输入端
4:判别输出的成果
过程一对应上个过程的1:这时分就要了解寄存器了,比较器A有两个寄存器CACTL1,CACTL2
设置内部参阅电压是用CACTL1:这儿举一个模版比如:CACTL1 = CARSEL+CAREF1+CAON;
翻译便是,将CACTL1 = 内部参阅电压在比较器的正向端输入仍是反向端输入+挑选是0.25V参阅电压仍是0.5V参阅电压+翻开比较器A
过程二对应上个过程的2
翻开外部的输入端:用的是CACTL2,CACTL2=P2CAO
翻译便是,外部挑选的是P2CAO也便是讲P2.3作为输入端,
过程三:设置I/O特点
P2DIR = 0x00;//把IO设为比较器的输入端
P2SEL “=BIT3;
过程四:比较输入输出成果:
这时分也要了解寄存器了,CACTL2中的最低位,也便是CAOUT,假如正向端大于负向端的话,cout变为1,这时分典型的判别句子便是
if((CACTL2|0xfe) == 0xff)//最低位假如置位为1的话,CACTL1中的最低位,也便是比较器的中止标志位也会置位
{
进一步操作;
中止标志置位为1
}
示例代码:将P2.3输入的电压与0.25进行比较,假如大于的话,点亮led灯,并将中止标志铲除
#include
void main( void )
{
// Stop watchdog TImer to prevent TIme out reset
WDTCTL = WDTPW + WDTHOLD;
CACTL1 =CARSEL +CAREF1 +CAON;
CACTL2 = P2CA0;
P2DIR = 0x00;//把IO设为比较器的输入端
P2SEL |=BIT3;
P3OUT |=BIT5;
P3DIR |=BIT5;
while(1)
{
if((CACTL2 |0xfe)==0xff)
{
P3OUT &=~BIT5; //比较电压是否超越0。25V
CACTL1 &=0xfe; //铲除中止标志
}
else
{
P3OUT |=BIT5;
}
}
}