zigbee學習之路(四):按鍵控制(中斷方式)


一.前言

       通過上次的學習,我們學習了如何用按鍵控制led,但是在實際應用中,這種查詢方式占用了cpu的時間,如果通過中斷控制就可以解決這個問題,我們今天就來學習按鍵控制的中斷方式。

二.原理分析

      傳統的51單片機如果要使用中斷,也要對相應的寄存器進行控制,cc2530芯片也不例外,而且相對復雜。需要配置多個中斷寄存器,下面來一一介紹。

這個寄存器是來控制端口0中斷使能的,要開啟中斷,應設為1.

這個是配置各種中斷使能的,我們只需要配置P0IE.

這個是配置中斷觸發方式的,根據上次的按鍵原理圖,我們應該選擇低下降沿觸發模式。

中斷狀態標志位,當中斷沒有發生或者結束時,應將標志位置0.

三.程序代碼

#include <ioCC2530.h>

#define uint unsigned int

#define uchar unsigned char

#define LED1 P1_0      //LED1為P1_0端口控制

#define LED2 P1_1      //LED2為P1_1端口控制

#define LED3 P1_4      //LED3為P1_4端口控制

//函數聲明 void Delayms(uint);    

//延時函數 void InitLed(void); 

//LED_IO初始化 void KeyInit(void);    

//KEY_IO初始化

/************** 函 數 名  : Delayms  功能描述  : 毫秒延時  輸入參數  : xms:延時時間,如 i=xms 即延時i毫秒  輸出參數  : none  返 回 值  : none **/

void Delayms(uint xms)

{     uint i,j;   

  for(i=xms;i>0;i--)      

for(j=587;j>0;j--);

}

/******************* 函 數 名  : InitLed  功能描述  : LED_IO初始化  輸入參數  : none  輸出參數  : none  返 回 值  : none *********************************/

void InitLed(void)

{     P1DIR |= 0xff;       //P1端口定義為輸出   

  LED1 = 1;            //LED1燈熄滅    

LED2 = 1;            //LED2燈熄滅    

LED3 = 1;            //LED3燈熄滅 }

/*********************  函 數 名  : InitKey  功能描述  : KEY_IO初始化(中斷方式配置)  輸入參數  : none  輸出參數  : none  返 回 值  : none ******************/

void InitKey(void)

{     P0IEN |= 0x10;  //設置P0_4為中斷方式    

IEN1 |= 0x20;   //允許P0口中斷    

PICTL |= 0x01;  //下降沿觸發    

P0IFG = 0x00;   //清中斷標志位  

   EA = 1;         //開總中斷 }

/**************  函 數 名  : P0_ISR  功能描述  : 中斷處理函數  輸入參數  : none  輸出參數  : none  返 回 值  : none ***********/

#pragma vector = P0INT_VECTOR         //格式:#pragma vector = 中斷向量

__interrupt void P0_ISR(void)     //接着是中斷處理程序(函數名可以任意取)

{     LED1=~LED1;      //改變LED狀態    

LED2=~LED2;    

LED3=~LED3;        

P0IFG = 0;       //清中斷標志  

   P0IF = 0; }

/******************* 函 數 名  : main  功能描述  : KEY測試(通用IO中斷的使用)  輸入參數  : NONE   輸出參數  : NONE  返 回 值  : NONE ************/

void main(void)

{     InitLed();  //調用初始化函數   

  InitKey();    

    while(1);     }

四.總結

led的控制函數和之前一樣,大家要注意中斷函數的定義,這是一種定義中斷的格式,還有一定要使POIF=0,用來清除標志位,這樣中斷才能發生,還有大家學會用模塊化的思想去寫程序。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM