初步探討Zigbee之通用IO(中斷例子)

2530是允許中斷嵌套的,中斷有優先級

這裏寫圖片描述

    18箇中斷組成6箇中斷優先組,每組三個中斷源,各組的中斷優先級可以通過配置寄存器來設置,且允許中斷嵌套。

這裏寫圖片描述

相同的組的優先級由以下表格進行輪詢

這裏寫圖片描述

注意:如果執行的程序不允許被其他中斷源打斷,記得進入中斷後關閉總中斷響應

以下是端口0 的中斷分以下步驟:

  1. 清除中斷標誌位
  2. 允許端口(具體的端口中斷)
  3. 打開P0口所有的中斷
  4. 打開總中斷
#include<iocc2530.h>
#define LED1 P1_0
#define  SW  P1_5

void LEDinit();
int delay(int len);
void LEDinit()
{
    P1SEL&=~(1<<0);
    P1DIR|=(1<<0);
}

int  delay(int len)
{
    int i;
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);
    for(i=0;i<len;i++);


}
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
    if(P0IFG&0x20) //清除P0_5的標誌位
    {  
       P0IFG=0;
       LED1=~LED1;
    }

}
void init(void)
{
   P0IFG&=0x00;  //清除標誌位
   P0IE=1;      //端口0使能
   P0IEN|=0x10;   //端口 P0_5
   PICTL=0X00;     //下降沿產生中斷
   EA=1;
}
void main(void)
{
   init();
   LEDinit();
   LED1=1;  
   delay(100);
   while(1);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章