一、单片机中止体系
1、根本特色
有5个固定的中止源,其间3个在片内,2个在片外,它们在程序存储器ROM中都别离有各自固定的中止进口地址,由此进入中止服务程序(ISR);这5个固定的中止源都别离有两级中止优先级:高优先级和低优先级;可构成中止嵌套;有2个特别功用寄存器用于中止操控的编程(IE和IP);关于8052单片机来说,增加了第三个中止源:定时器/计数器T2的中止;
外部中止源:
(1)、外部中止0:INT0,由P3.2(12号引脚)口引进,低电平或下降沿触发;
(2)、外部中止1:INT1,由P3.3(13号引脚)口引进,低电平或下降沿触发;
这两个外部中止的操控位锁存在定时器/计数器的作业状况操控寄存器TCON的低4位;
内部中止源:
(1)、定时器/计数器T0中止:由T0的计数寄存器TH0/TL0的值在溢出回0时触发;
(2)、定时器/计数器T1中止:由T1的计数寄存器TH1/TL1的值在溢出回0时触发;
(3)、串口中止RI/TI:串行口中止,由串行口在完结1帧字符的接纳(RI)/发送(TI)时触发;
这三个内部中止源的操控位别离锁存在特别功用寄存器TCON和SCON中;
2、中止体系的结构
如图:
二、中止操控寄存器
1、中止答应操控寄存器IE(A8H)
中止答应操控寄存器IE存储在特别功用寄存器区,字节地址是A8H,位地址从低到高依次是A8H,A9H,AAH,ABH,ACH,ADH,AFH;
寄存器IE操控着CPU对中止源总的敞开或制止,以及对每个中止源的敞开或制止;
IE的格局如图:
2、中止优先级操控寄存器IP(B8H)
中止优先级操控寄存器IP存储在特别功用寄存器区,字节地址是B8H,位地址从低到高依次是B8H,B9H,BAH,BBH,BCH,BDH,BEH,BFH;
IP用来锁存优先级的操控位,即:设定中止源归于两级中止中的哪一级;
(1)、中止优先级的呼应:体系复位之后,IP的低5位悉数被清0,并将一切中止源设置为低优先级中止;假如几个具有相同优先级的中止源一起向CPU恳求中止,那么,哪一个中止源优先得到中止服务,这一点取决于这些中止源在CPU内部挂号的排队序号(便是中止序号);CPU经过内部硬件查询挂号的中止序号,按天然优先级逐一呼应各个中止恳求;中止源在CPU内部挂号的中止序号是由硬件主动构成的,无需人工手动生成,其次序如下:INT0–>T0–>INT1–>T1–>RI/TI;
IP的格局如图:
三、中止呼应
1、呼应进程:
下列任何一种状况存在时,中止恳求将被封闭;
(1)、CPU当时正在履行一个同级或高一级的中止服务程序;
(2)、CPU当时正在履行的那条指令还没有履行完;
(3)、CPU当时正在履行的指令是RETI指令或这是对IE/IP寄存器进行读写操作的指令,履行这些指令之后,至少还要再履行一条指令才会呼应中止;
2、中止进口地址:
中止得到呼应后,主动铲除中止恳求标志(关于串口中止恳求标志,要用软件来清0),由硬件主动将程序计数器PC的内容(断点地址)压入仓库维护,然后将对应的中止矢量(中止进口地址)装入程序计数器PC, 使程序转到中止服务程序中履行并完结呼应的中止服务;
各个中止源在程序存储器ROM中的中止进口地址和中止序号如下表所示:
四、C51中止程序
1、中止服务程序的格局:
回来值类型 中止函数名([参数表]) [形式] [重入] interrupt <中止序号n> [using m] //n∈[0,31],m∈[0,3],m和n不答应是表达式;
{
//中止处理函数的完成代码
}
关于中止服务程序来说,函数不能有回来值和参数,所以,回来值类型和参数类型均写成void;
Keil C51运用特定的编译器指令分配寄存器组;当时作业寄存器组由PSW中的RS1和RS0两位设置,两个位共有4个值[0,3],用using指定,;using关键字只能用于声明终端服务函数,它在中止服务函数进口处将当时寄存器组的值保存下来,并在中止服务函数中运用指定的寄存器组,在中止服务函数推出之前,恢恢复寄存器组;
例如:
void isr_service(void) interrupt 4 using 2
{
//…..;
}
2、 编写中止服务函数时留意的事项:
A、若要在履行当时中止处理函数时制止更高优先级的中止,可用软件方法先封闭CPU对中止的呼应,在中止处理函数回来之前,再敞开中止;
B、外部电平触发的中止信号不会被锁存.若在外部电平出现时被中止屏蔽,而在中止辨认之前,电平消失,则它被彻底疏忽—中止处理自身不能锁存外部电平恳求;
C、INT0、T0、INT1、T1的中止标志在CPU呼应中止之后被主动清0,可是串口中止标志RI/TI和T2的中止标志TF2不会主动被清0,必须在软件中手工地清0,否则会当即发生重复中止,程序堕入死循环;关于串口中止,一般还要判别是RI仍是TI中止;
D、为了进步中止呼应的实时性,中止服务程序应尽量简略,并防止运用杂乱的变量类型及算术运算;一般在中止服务程序中运用一些标志,由主程序或相应布景程序依据标志做呼应的处理;