中断理论
中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单
片机的中断系统将迫使 CPU 暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去。中断又分外部中断和内部中断。
寄存器介绍
P0IEN:各个控制口的中断使能, 0 为中断禁止, 1 为中断使能。
P0INP:设置各个 I/O 口的输入模式, 0 为上拉/下拉, 1 为三态模式。
PICTL:设置各个I/O口的中断触发方式, 0 上升沿触发, 1 下降沿触发。
IEN1:中断使能 1, 0 为中断禁止, 1 为中断使能
P0IFG:中断状态标志寄存器,当输入端口有中断请求时,相应的标志位将置 1。
外部中断初始化的代码
void ext_init(void)
{
P0SEL &= ~0x10; //通用IO
P0DIR &= ~0x10; //作输入
P0INP &= ~0x10; //0:上拉、 1:下拉
P0IEN |= 0x10; //开P0 口中断
PICTL &=~ 0x01; //下降沿触发
P0IFG &= ~0x10; //P0.4 中断标志清 0
P0IE = 1; //P0 中断使能
EA = 1; //总中断使能
}
中断服务函数的代码
#pragma vector = P0INT_VECTOR
__interrupt void P0_ISR(void)
{
EA = 0; //关中断
if((P0IFG & 0x10 ) >0 ) //按键中断 ,P0_4
{
P0IFG &= ~0x10; //P0.4中断标志清0
LED1 =!LED1;
}
P0IF = 0; //P0中断标志清0
EA = 1; //开中断
}
主函数中调用中断初始函数,连续按下 CC2530 主板上 KEY 按键,会发现当按键被按下时, LED 的亮灭状态会发生改变。