zigbee笔记:二、zigbee外部中断

一、中断基础概念

中断:指计算机执行现行程序的过程中,出现某些急需处理的异常情况和特殊请求(满足中断条件),cpu暂时终止现行程序,而转去对随机发生的更紧迫的事件进行处理,在处理完毕后,cpu将自动返回原来的程序继续执行。(中断根据中断条件分类有,外部中断、定时中断等)

外部中断:使用外部中断是通过配置某一个IO,使得能够检测外部的中断信号;开启中断后,CPU自动检测中断条件,当外部中断条件满足时,cpu暂时终止现行程序,而转去处理中断函数的代码,处理完毕后,cpu将自动返回原来的程序继续执行。

1、外部中断开关逐级管理

要使用中断功能,首先要开启CPU的中断功能,中断功能的开启是逐级管理模式。本文以外部中断为例,如下图,只有对应的逐级开关都被开启时,才能开启对应的中断功能。其他类型的中断开启类似。

(1)中断总开关 EA,开启CPU总中断(EA=1);

(2)中断组开关PxIE,开启某一组IO的外部中断(PxIE=1);

(3)中断组内开关PxIEN,开启组内对应具体某IO口的中断(PxIEN=1);

注意:P0IE属于IEN1寄存器,而IEN1寄存器地址为0xB8,可以被8整除,所以P0IE被单独定义了可以直接赋值操作;而P1IE和P2IE属于IEN2寄存器,而IEN2寄存器的地址为0x9A,无法被8整除,所以IEN2的每个位没有被单独定义,只能通过配置IEN2寄存器来配置P1IE和P2IE。

(4)对应寄存器:

EA

PxIE

 PxIEN

2、中断触发方式

外部中断方式分为上升沿触发和下降沿触发,其触发方式的设置由寄存器PICTL控制。

3、中断标志

 

 (1)端口中断标志(PxIF寄存器)

PxIF标志位的作用是:哪个IO组触发中断,相应的PxIF位就为1。

(2)端口中断状态标志(PxIFG寄存器)

PxIFG寄存器的作用是:进入中断后,用于判断是相应IO组内哪个IO口触发了中断,哪个位就为1;中断条件发生在 I/O 引脚之一上面,P0-P2 中断标志寄存器 P0IFG、P1IFG 或 P2IFG 中相应的中断状态标志将设置为 1。不管引脚是否设置了它的中断使能位,中断状态标志都被设置。当中断已经执行,中断状态标志被清除,该标志写入 0。这个标志必须在清除 CPU 端口中断标志(PxIF)之前被清除。

4、中断函数

(1)中断向量

二、外部中断配置流程

根据上述外部中断的介绍,开启同一个外部中断流程如下:

(1)案例,通过P0_1口作为引起下降沿触发外部中断,使得P0_1控制的LED灯进行亮暗翻转。

#include<iocc2530.h>


//初始化一个按键中断
void initInterrupt()
{
    P0SEL &= 0xfd;  //中断口是P0_1
    P0DIR &= 0xfd;
    P0INP &=  0xfd;
    P2INP &=  0xdf;
    EA = 1;        //开启总中断
    P0IE = 1;     //开启组中断
    P0IEN |= 0x02;    //开启位中断
    PICTL |= 0x01;//下降沿触发


}

//  初始化一个LED  P1_0
void initLED()
{

    P1SEL &= 0xfe;
    P1DIR |= 0x01;
    P1_0 = 1;

}

void main()
{
    initInterrupt();     //初始化一个按键中断

    initLED(); //  初始化一个LED

    while(1);

}


#pragma vector=P0INT_VECTOR
__interrupt void P0_INT(void)
{
    if(P0IFG & 0x02) //判断是否是相应的IO位引起的中断
    {
        delayms( 10 ) ;
        if(P0_1 == 0)
        {
            P1_0 = ~P1_0;
        }
    }
    P0IFG = 0;   //清除中断标志
    P0IF = 0;     //清除中断标志
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值