msp430f149外中斷問題

2021-07-16 10:18:50 字數 1241 閱讀 8727

msp430的外中斷歸根到底 其實只需要兩個部分的配置就可以了:

1. 引腳配置

2. 中斷函式配置

一 引腳配置(以引腳p2.1為例)

p2dir = 0x01;//配置為輸入

p2ie   |= 0x01;

p2ies |= 0x01;

其他暫存器可配置,可不配置。注意引腳功能選擇為一般引腳,不是功能引腳。雖然引腳的配置很簡單,但是只要出錯,就無法產生中斷。

二 中斷函式配置

#pragma vector =port2_vector

__interrupt void tangle_make(void)  

中斷函式比較簡單,只需要記得將中斷標誌位清0就可以了。

注意:引發外中斷的外模組最好能夠與系統的電源模組使用乙個電源,使用其他電源供電會產生外中斷頻發狀態。

2023年8月18號更新

最近一直卡在外中斷和串列埠中斷之間。自己在檢視了一會原版的手冊之後,發現以下幾個問題。

q1:在外中斷程式中開總中斷,有的時候總是莫名的卡死。

q2:給外中斷加上外部觸發模組,比如紅外,門磁等模組時,外中斷總是不停的觸發。

q3:外中斷觸發後,程式還能執行,不過每到串列埠中斷就需要外中斷促進程式往下跑。

a1:這個問題涉及到中斷巢狀問題。

對於多源中斷,需要手動清除標誌位。比如:p1、p2的中斷,需要手動清楚相應的標誌位。如果在這種中斷中使用「_eint();」,開中斷,而在開啟中斷之前,沒有進行原來中斷標識位的清除工作,就會有相同的中斷不斷的進行巢狀。而導致堆疊溢位引起復位,所以在這類中斷中,必須先清除標誌位,再開啟中斷開關。要不然等著宕機吧。

總之,就是說在開總中斷之前,需要將多源中斷標誌位清掉。

a2:這個問題我到現在也不是很明白為什麼會這樣,不過我還是有幾個經驗可以寫下來。

首先,必須保證硬體的正常,一般的紅外模組不需要外加電阻什麼的,可以直接接在io口上。測量紅外輸出引腳的高低電平是不是正常的,高的時候是不是接近3v,低的時候是不是0v。(在3v情況下,低電平為0.9-1.3v,高電平

為1.5-1.9v。1.3v-1.5v為不穩定狀態。)

其次,並沒有配置什麼上拉下拉電阻。就是依照上面的3個暫存器配置的。可以用。(晶元是msp430f149)。

硬體沒有問題,就是要用軟體來解決了:

第一種方法:在外中斷中關閉 外中斷使能,然後在外部程式合適的地方再開啟。

第二種方法:在外中斷中 加入消抖,就可以了。至於為什麼,我也不清楚。。

MSP430F149 中斷及案例

msp430f149內部有三種型別中斷 系統復位中斷,不可遮蔽中斷,可遮蔽中斷 中斷過程 完成當前正在執行的指令 把pc暫存器內容入棧 把sr暫存器內容入棧 如果同時有多個中斷,則選擇優先順序最高的中斷 如果中斷是單源中斷,則中斷標誌位自動復位 如果中斷是多源中斷,則需要中斷服務程式復位 sr清零,...

msp430f149的低功耗模式

430的低功耗確實很強啊,雖然和vr微控制器比起來速度慢了好多。在cpu進行工作時,如果沒有什麼事情幹,就得進入低功耗模式啦,lmpx 0 4 這幾種模式的具體事項就是如下的,得記住了。一,執行模式 msp430具有一種活動模式和五種軟體可選的低功耗執行模式。乙個中斷事件可以將晶元從五種低功耗模式中...

MSP430F149按鍵中斷暫存器配置

p20 p23為led,p11為按鍵。按下為低電平。使用中斷函式按下一次按鍵則led狀態反轉一次。include io430.h include in430.h void select xt2 void while ifg1 ofifg bcsctl2 selm 2 sels mclk和smclk選...