初步探讨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);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章