中斷是微控制器實時地處理內部或外部事件的一種內部機制。當某種內部或外部事件發生時,微控制器的中斷系統將迫使cpu 暫停正在執行的程式,轉而去進行中斷事件的處理,中斷處理完畢後,又返回被中斷的程式處,繼續執行下去。
中斷處理過程:
(1)保護被中斷程序現場。為了在中斷處理結束後能夠使程序準確地返回到中斷點,系統必須儲存當前處理機程式狀態和程式計數器pc 等的值。
(2)分析中斷原因,轉去執行相應的中斷處理程式。在多個中斷請求同時發生時,處理優先順序最高的中斷源發出的中斷請求。
(3)恢復被中斷程序的現場,cpu 繼續執行原來被中斷的程序。
【本實驗的設計思路】
開發板上已把s1 按鍵與p0.1 相連,本實驗想要達到的效果就是,通過按鍵s1 觸發p0.1的中斷,進而在中斷服務子程式中控制led1 的亮/滅。與外部中斷相關sfr 暫存器有3 個sfr:ea、ien1、pictl(各sfr 詳細介紹請查閱《cc2530 中文手冊》),開啟各級中斷使能,涉及:
ea —— 總中斷使能;(第一級使能)
開啟中斷總開關和使能p0_1 口中斷ea = 1;這個是總開關,18 個中斷源對應著有18 個獨自的中斷開關,只有將總開關開啟,然後再開啟相應的小開關,這樣你想要允許的總開關才能奏效。
ien1 —— p0 中斷使能;(第二次級能)
pictl.3 —— p0.1 口中斷使能;(第**使能)
設定p0_1 口中斷使能
p0ien |= 0x02;
cc2530 微控制器共有18 個中斷源,
每乙個中斷都有乙個相應的中斷使能特殊功能暫存器,
對應位設定為1,使能中斷位,當設定為0 遮蔽相應的中斷位;這裡我們使用的是p0_1,
所以我們通過p0ien |= 0x02 將p0_1 置一。
pictl.0 —— 設定p0.1 口輸入下降沿引起中斷觸發。
然後在主函式中使用 while(1) 等待中斷即可。**如下:
#include #define led1 p1_0
#define led2 p1_1
#define uchar unsigned char
#define uint unsigned int
/*****************************************
//io 及led 初始化 p01
*****************************************/
void init_io_and_led(void)
/*****************************************
//主函式
*****************************************/
void main(void)
#pragma vector = p0int_vector
__interrupt void p0_isr(void)
p0ifg = 0; //清中斷標誌
}
中斷服務程式的編寫有其固定格式,這在前面講定時器timer中斷方式的使用時也已經使用過了。在中斷服務程式中首先進行了判斷,到底是哪個中斷標誌被置位了。然後先清除中斷標誌,然後對led燈進行反轉。中斷服務程式(格式)如下:
#pragma vector = p0int_vector
__interrupt void p0_isr(void)
p0ifg = 0; //清中斷標誌
}
cc2530 中斷格式
格式如下:
#pragma vector = p0int_vector
__interrupt void p0_isr(void)
a)p0int_vector——設定 的中斷向量名
by:霜月孤鳥
2015.12.7
CC2530學習筆記
第四單元 定時器計數器應用 1 定時器 計數器的分類 cc2530中共包括5個定時器 計數器,分別是定時器1 定時器2 定時器3 定時器4和睡眠定時器。2 定時器 計數器的作用 1 計數器功能 對任意時間間隔的輸入訊號的個數進行計數,一般用來對外界事件進行 計數。其輸入訊號一般來自微控制器外部開關型...
CC2530的系列課程
本課程主要是cc2530的系列課程,並附上原始碼。課程內容大體安排如下 第一章 zigbee簡介 第二章 zigbee軟體開發平台的搭建 zigbee cc2530 系列教程 3 點亮1個led實驗 zigbee cc2530 系列教程 4 按鍵控制led實驗 zigbee cc2530 系列教程 ...
CC2530學習筆記(1) IO埠
cc2530學習筆記 1 io埠 cc2530是針對ieee 802.15.4,zigbee和rf4ce應用的真正片上系統 soc 解決方案。它能夠以非常低的總物料成本構建強大的網路節點。cc2530將領先的射頻收發器的卓越效能與業界標準增強型8051 mcu,系統內可程式設計快閃儲存器,8 kb ...