FAQ 标题:MSP430F149比较器是怎么回事?
FAQ 正文:
这是比较器
A的逻辑图,比价器A由4个部分组成标号
1:内部参考电压发生器,可以产生0.25V,0.50v的参考电压标号
2,:外部电压输入端,CA0对应P2.3,CA1对应P2.4标号
3:内部比较器,今天上课刚好上了比较器,也就是正输入端大于负输入端的时候,比较器输出一个1,同时产生一个中断标志位标号
4:也就是比较结果输入端
因此,一般的模版就可以出来了1
:设置内部的参考电压2
:打开外部的输入端3
:设置外部I/O的属性,也就是P2.3或者P2.4的输入属性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<msp430x14x.h>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; } } }
一周热门 更多>