這兩天研究了一下430的比較器,開始的時候,沒有看懂是怎么一回事,在網(wǎng)站看這方面的博客,好像懂了,但是一到編程,就變得無從下手,但是,皇天不負(fù)有心人,筆者還是把他弄懂了
其實這里就是看懂一幅圖,兩個寄存器,明白工作原理就可以了
這是比較器A的邏輯圖,比價器A由4個部分組成
標(biāo)號1:內(nèi)部參考電壓發(fā)生器,可以產(chǎn)生0.25V,0.50v的參考電壓
標(biāo)號2,:外部電壓輸入端,CA0對應(yīng)P2.3,CA1對應(yīng)P2.4
標(biāo)號3:內(nèi)部比較器,今天上課剛好上了比較器,也就是正輸入端大于負(fù)輸入端的時候,比較器輸出一個1,同時產(chǎn)生一個中斷標(biāo)志位
標(biāo)號4:也就是比較結(jié)果輸入端
因此,一般的模版就可以出來了
1:設(shè)置內(nèi)部的參考電壓
2:打開外部的輸入端
3:設(shè)置外部I/O的屬性,也就是P2.3或者P2.4的輸入屬性
4:判斷輸出的結(jié)果
步驟一對應(yīng)上個步驟的1:這時候就要熟悉寄存器了,比較器A有兩個寄存器CACTL1,CACTL2
設(shè)置內(nèi)部參考電壓是用CACTL1:這里舉一個模版例子:CACTL1 = CARSEL+CAREF1+CAON;
翻譯就是,將CACTL1 = 內(nèi)部參考電壓在比較器的正向端輸入還是反向端輸入+選擇是0.25V參考電壓還是0.5V參考電壓+打開比較器A
步驟二對應(yīng)上個步驟的2
打開外部的輸入端:用的是CACTL2,CACTL2=P2CAO
翻譯就是,外部選擇的是P2CAO也就是講P2.3作為輸入端,
步驟三:設(shè)置I/O屬性
P2DIR = 0x00;//把IO設(shè)為比較器的輸入端
P2SEL "=BIT3;
步驟四:比較輸入輸出結(jié)果:
這時候也要熟悉寄存器了,CACTL2中的最低位,也就是CAOUT,如果正向端大于負(fù)向端的話,cout變?yōu)?,這時候典型的判斷語句就是
if((CACTL2|0xfe) == 0xff)//最低位如果置位為1的話,CACTL1中的最低位,也就是比較器的中斷標(biāo)志位也會置位
{
進(jìn)一步操作;
中斷標(biāo)志置位為1
}
示例代碼:將P2.3輸入的電壓與0.25進(jìn)行比較,如果大于的話,點亮led燈,并將中斷標(biāo)志清除
#include
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
CACTL1 =CARSEL +CAREF1 +CAON;
CACTL2 = P2CA0;
P2DIR = 0x00;//把IO設(shè)為比較器的輸入端
P2SEL |=BIT3;
P3OUT |=BIT5;
P3DIR |=BIT5;
while(1)
{
if((CACTL2 |0xfe)==0xff)
{
P3OUT &=~BIT5; //比較電壓是否超過0。25V
CACTL1 &=0xfe; //清除中斷標(biāo)志
}
else
{
P3OUT |=BIT5;
}
}
}