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