第一章 外部中斷與按鍵硬件原理圖分析
中斷在單片機里非常常用,專門來處理緊急事件。比如: 串口接收中斷可以實時知道有數據到達,定時器超時中斷可以實時知道時間到達,外部中斷可以實時知道外部設備產生了事件需要立即處理。
CC2530一個有18個中斷源,每個中斷源都由各自的一系列特殊功能寄存器來進行控制。可以配置相關特殊功能寄存器,設置18個中斷源的優先級以及使能中斷申請響應。
CC2530的P0、P1和P2端口中的每個引腳都具有外部中斷輸入功能,要使某些引腳具有外部中斷功能,需要對IENx寄存器、PxIEN寄存器和PICTL寄存器進行適當的設置。
除了各個中斷源都有自己的中斷使能開關之外,中斷系統還有一個總開關,可以同"EA = 1;"來打開總中斷。
P0、P1和P2端口分別使用P0IF、P1IF和P2IF作為中斷標志位,任何一個端口組上的引腳產生外部中斷時,都會將對應端口組的中斷標志自動置位。注意,外部中斷標志必須在中斷服務函數中手工清除,否則CPU會反復進入中斷。 端口狀態標志寄存器P0IFG、P1IGF和P2IFG,分別對應3個端口中各引腳的中斷觸發狀態,當某引腳發生外部中斷觸發時,對應的標志位會自動置位,這個標志同樣需要手工清除。
中斷服務函數與一般自定義函數不同,有特定的書寫格式:
<1> 在每一個中斷服務函數之前,都要加上一句起始語句:
#pragma vector = <中斷向量>
<中斷向量>表示接下來要寫的中斷服務函數是為那個中斷源服務的,該 語句有兩種寫法:
#pragma vector = 0x7B 或者 #pragma vector = P1INT_VECTOR
前者是中斷向量的入口地址,后者是頭文件“ioCC2530.h”中的宏定義。
<2> _ _interrupt關鍵字表示該函數是一個中斷服務函數,<函數名稱>可以 自定義,函數體不能帶有參數,也不能有返回值。
復制代碼
一般在單片機里學習外部中斷時,都采用獨立按鍵配置學習,方便演示效果;
下面就介紹按鍵的外部中斷配置流程,并編寫示例代碼。
第二章 配置按鍵中斷步驟
第三章 按鍵中斷代碼配置示例
#include
//定義LED燈的端口
#define LED1 P1_2
#define LED2 P1_3
//定義KEY按鍵的端口
#define KEY1 P1_0 //定義按鍵為P1_0口控制
#define KEY2 P1_1 //定義按鍵為P1_1口控制
/*
函數功能:LED燈IO口初始化
硬件連接:LED1-->P1_2 , LED2-->P1_3
*/
void LED_Init(void)
{
P1DIR |=0x3<<2; //配置P1_2、P1_3為輸出模式
LED1 = 1;
LED2 = 1;
}
/*
函數功能:初始化按鍵為中斷模式
硬件連接:KEY1-->P1_0 KEY2-->P1_1
*/
void KEY_InterruptInit(void)
{
P1DIR&=~(0x3<<0); //配置P1_0、P1_1為輸入模式
P1INP|= 0x3<<0; //上拉
P1IEN|= 0x3<<0; //中斷使能
PICTL|= 0x1<<1; //下降沿觸發(P1口所有端口都共用一個配置)
IEN2 |= 0x1<<4; //端口P1中斷使能
P1IFG&= ~(0x3<<0);//清除中斷標志位
EA = 1; //使能總中斷
}
void delay10ms(void) //誤差 0us
{
unsigned char a,b,c;
for(c=193;c>0;c--)
for(b=118;b>0;b--)
for(a=2;a>0;a--);
}
/*
函數功能:P1端口中斷處理函數
*/
#pragma vector = P1INT_VECTOR //聲明P1口中斷服務函數的位置
__interrupt void P1_Interrupt(void) //中斷服務函數的名字的可以隨意命名
{
if(P1IFG&1<<0) //判斷按鍵1中斷
{
delay10ms();
if(!KEY1)
{
LED1 = !LED1;
}
P1IFG&=~(1<<0); //清中斷狀態
}
if(P1IFG&1<<1) //判斷按鍵2中斷
{
delay10ms();
if(!KEY2)
{
LED2 = !LED2;
}
P1IFG&=~(1<<1); //清中斷狀態
}
P1IF = 0; //清P1口中斷標志
}
/*主函數*/
void main(void)
{
LED_Init();//初始化LED燈控制IO口
KEY_InterruptInit();//按鍵初始化
while(1)
{
}
}
審核編輯:湯梓紅
-
單片機
+關注
關注
6035文章
44554瀏覽量
634653 -
CC2530
+關注
關注
19文章
221瀏覽量
58001 -
外部中斷
+關注
關注
1文章
131瀏覽量
15816
發布評論請先 登錄
相關推薦
評論