為了寫一篇文章做鋪墊--提醒著自己,,,,,,
這兩天一直在尋找
#pragmavector=PORT1_VECTOR__interruptvoidP1_Interrupt()//P1口中斷函數(shù){}
對于這兩句話的解釋,最起碼讓自己感覺能說服自己
看了好多后自己的理解
#pragmavector=PORT1_VECTOR
通俗來講這句話是告訴C編譯器,你下面的函數(shù)是P1口的中斷函數(shù),P1口有中斷發(fā)生時(shí)就進(jìn)入下面這個(gè)函數(shù)
__interruptvoidP1_Interrupt()//P1口中斷函數(shù){}
那期間到底發(fā)生了什么其實(shí)MSP430內(nèi)部有一個(gè)中斷向量表----中斷向量表實(shí)際就是保存中斷函數(shù)入口地址的存儲(chǔ)單元空間假如說,下面是表的一段,,,,假如說,,,,,[object Object]
那么
#pragmavector=PORT1_VECTOR就應(yīng)該這樣理解告訴編譯器下面有一個(gè)P1口的中斷服務(wù)函數(shù),你應(yīng)該把這個(gè)中斷函數(shù)的地址放在
__interrupt //告訴編譯器這是個(gè)中斷服務(wù)函數(shù)
再舉一個(gè)例子,假設(shè)寫一個(gè)串口接收中斷函數(shù)
#pragmavector=UART0RX_VECTOR__interruptvoidUart_Receive(){ }
其實(shí)
#pragmavector=UART0RX_VECTOR后面的
UART0RX_VECTOR就是在告訴編譯器,下面的中斷函數(shù)是串口接收中斷服務(wù)函數(shù),你要把它的服務(wù)函數(shù)地址放到保存串口接收中斷服務(wù)函數(shù)的地址里
對了后面
PORT1_VECTORP1口中斷
PORT2_VECTORP2口中斷
UART0RX_VECTOR串口接收中斷
UART0TX_VECTOR串口發(fā)送中斷TIMER0_A0_VECTOR定時(shí)器A中斷
干脆盜一張圖
,,,,,,,,,
正事,
對于引腳中斷,學(xué)過51的都知道無非就是打開中斷,,然后選擇觸發(fā)方式,然后寫中斷函數(shù),然后再中斷函數(shù)里清除中斷標(biāo)志(假如說.它不自動(dòng)清除中斷標(biāo)志的話)
P1.2口有一的下降沿P1.0口的引腳反轉(zhuǎn)
#include"io430.h"voidmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1DIR"=BIT0;//p1.0輸出模式P1IE|=BIT2;//使能p1.2中斷P1IES|=BIT2;//下降沿觸發(fā)P1IFG&=~BIT2;//清除p1.2中斷,,感覺可有可無,加上更顯得代碼很完善__enable_interrupt();while(1){}}#pragmavector=PORT1_VECTOR__interruptvoidP1_Interrupt()//P1口中斷函數(shù){if(P1IFG&BIT2)//P1.2口來中斷啦{P1IFG&=~BIT2;//清除P1.2引腳中斷標(biāo)志位P1OUT^=BIT0;//P1.0引腳取反}}
假如說我P1.2和P1.3都想用中斷呢
P1.2口有一的下降沿P1.0口的引腳反轉(zhuǎn)
P1.3口有一的下降沿P1.1口的引腳反轉(zhuǎn)
#include"io430.h"voidmain(void){//StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1DIR"=BIT0;//p1.0輸出模式P1DIR|=BIT1;//p1.1輸出模式P1IE|=BIT2;//使能p1.2中斷P1IES|=BIT2;//下降沿觸發(fā)P1IFG&=~BIT2;//清除p1.2中斷P1IE|=BIT3;//使能p1.3中斷P1IES|=BIT3;//下降沿觸發(fā)P1IFG&=~BIT3;//清除p1.3中斷__enable_interrupt();while(1){}}#pragmavector=PORT1_VECTOR__interruptvoidP1_Interrupt()//P1口中斷函數(shù){if(P1IFG&BIT2)//如果P1.2有中斷{P1IFG&=~BIT2;//清除P1.2引腳中斷標(biāo)志位P1OUT^=BIT0;//P1.0引腳取反}if(P1IFG&BIT3)//如果P1.3有中斷{P1IFG&=~BIT3;//清除P1.3引腳中斷標(biāo)志位P1OUT^=BIT1;//P1.1引腳取反}}
其實(shí)自己有點(diǎn)疑惑,,,為什么燈同時(shí)亮滅呢!同時(shí)觸發(fā),同時(shí)檢測嗎?,難道P1口是一個(gè)整體,那就太好了,同時(shí)用中斷檢測多路,不怕信號同時(shí)到來,,,,,,