中断使用interrupt 关键字和终端编号0-4来实现:
返回值 函数名 interrupt n
n对应中断源的编号,中断编号告诉中断器中断程序的入口地址,它对应着IE寄存器中的使能位,即IE寄存器中的0位对应着外部中断0。
8051单片机的中断源以及终端编号如下:
中断编号 中断源 入口地址
0 外部中断0 0003H
1 定时器/计数器0 溢出 000BH
2 外部中断1 0013H
3 定时器/计数器1 溢出 001BH
4 串行口中断 0023H
在51系列单片机中,有的单片机多达32哥中断源,所以终端编号是0-31.
当正在执行一个特定的任务时,可能有更紧急的事情需要CPU处理,这就涉及到了中断优先级。高优先级中断可以中断正在处理的低优先级中断程序,因而最好给每种优先级程序分配不同的寄存器组。在C51中可使用using指定寄存器组,using后的变量为0-3的常整数,分别表示51单片机内的4哥寄存器组。中断函数的完整语法如下:
返回值 函数名([参数])[模式][重入]interrupt n[usingn]
unsigned int interruptcnt;
unsigned char second;
void timer0(void) interrupt 1 using 2
if(++interruptcnt==4000) // 计数到4000
second++; //另一个计数器
interruptcnt=0; //计数器清零