嵌入式(二十三):中断

1、硬件中断系统
a、中断的概念:
在执行程序的过程中,由于某种外界的原因,必须尽快终止当前的程序执行,而去执行相应的处理程序,待处理结束后,在回来继续执行被终止的程序。这种机制——称计算机中断系统
b、计算机系统中传送数据的几种方式:
例如:数据块输入/出到IO设备
①、正常程序——顺序地(不仅传送数据)
②、中断机制——事件触发(不仅传送数据)
③、DMA传送——专门的(仅传送数据)
c、中断的优点:
①、提供对异常事件响应机制,提高计算机效率
②、有效提高计算机实时性
d、中断系统的主要问题:
①、中断源(中断事件、异常事件)
②、中断优先级
③、中断嵌套
④、中断响应
⑤、中断返回
2、8051(标准51)的中断系统:
a、5个中断源:
①、具有二个中断优先级(高优先级、低优先级,同一级内也有优先)
②、中断服务程序可以嵌套
③、允许或禁止向CPU请求中断
b、有关的特殊功能寄存器(SFR)有:
①、中断允许寄存器IE
②、中断优先级控制寄存器IP
注:
均可位寻址。
另中断源寄存器(TCON、SCON中的有关位)
c、中断系统结构:
在这里插入图片描述
d、中断源:
①、外部中断源:
INT0——外部中断0(与P3.2脚复用)
INT1——外部中断1(与P3.3脚复用)
注:
IE0、IE1、IT0、IT1在TCON的低四位
触发方式控制位:
IT0(IT1)=0:低电平触发;
IT0(IT1)=1:边沿触发
中断标志IE0(IE1)=1时,产生中断,CPU响应后由硬件自动清零。(注意:电平触发时,应在中断返回前撤除中断源)
②、内部中断源
T0 ——定时器0溢出
T1 ——定时器1溢出
TI、RI ——串行通信
注: 
中断标志TF0 (TF1) :定时器T0 (T1)溢出时,置1,产生中断请求;CPU响应中断后由硬件自动清零
串行口中断标志TI(发送中断标志)、 RI(接收中断标志):
TI或RI为1时产生串行中断(同一个中断),TI、RI必须由软件清零
TI中断:发送完一帧字符时,硬件自动置TI为1
RI中断:接收到一帧字符时,硬件自动置RI为1
③、中断标志位:
中断请求实际上是由对应的中断标志位产生的(IE0、IE1、TF0、TF1、TI或RI)
中断标志位在中断事件发生时自动置“1”,CPU响应中断后,对应的标志位一般自动清“0”(除开RI、TI外)
RI、TI必须由软件清“0” 
中断标志位也可以软件访问(读/写),通过软件置“1”,也可以产生中断
e、中断控制:
①、中断使能控制IE(A8H):
EA — — ES ET1 EX1 ET0 EX0
注意:复位时,禁止所有中断
②、中断优先级控制 IP(B8H)
— — — PS PT1 PX1 PT0 PX0
每一中断源可编程为高优先级或低优先级中断;可实现二级嵌套
③、默认的优先次序
(高)INT0、C/T0、INT1、C/T1、串行口中断(低)
f、中断的响应过程:
每个机器周期都自动检查每一中断源,若查询到某个中断标志位为1 ,且不是下述情况之一,则将在下一个机器周期响应次序最高中断请求。
因为跳转语句的时间不确定,所以不建议软件重装,而是自动重装。
①、CPU正在处理相同或更高级的中断请求;
②、现在的机器周期不是执行指令的最后一个机器 周期
③、正在执行的指令是RETI或对IE、IP的写操作指令。(执行这些指令后,至少再执行一条指令后才会响应中断)
g、CPU响应中断时完成工作
①、置位相应的优先级状态触发器
②、保留断点,即PC值压栈、SP+2,上电复位时,SP的值为08H。
注意,如果堆栈与内存冲突,编译器无法发现;堆栈问题很难发现。
③、清相应的中断标志位:IE0、IE1、TF0或TF1
④、转向中断服务程序的入口地址,即送PC为中断入口地址
h、硬件中断返回:
当执行到 RETI(return)时,硬件中断服务程序返回到原中断位置,并将中断时内部硬件保留的PC值放到PC中
注:
①、中断返回前,保证中断请求的撤除
②、RET——CALL语句(子程序)返回
③、各个中断源的中断入口地址均已由系统规定,不能改动。
中断源: INT0、 C/T0、 INT1、 C/T1、 串行口
入口地址:0003H、000BH、0013H、001BH、0023H
C语言中断号(interrupt): 0 1 2 3 4
(ROM中7个特殊地址)
3、C51中断控制(软件书写):
a、TH0和TL0是一组十六位定时器,实际上就是一个寄存器,当时钟走到这一个十六位的数值的时候,会中断一次,执行一次所有标有interrupt 1的中断函数。一般用(65535-a)/256来表示a1us的高八位,用(65535-a)%256来表示a1us的低八位。这个初值时指计数器开始计数的时候从这个数开始,直到产生溢出,然后执行中断函数。
b、IE1外部中断1,当为1的时候外部中断向cpu请求中断,cpu响应时执行中断函数并清零IE1,IE0同理
c、TMOD是定时器控制寄存器,对于定时器0的工作方式有:
0x00(方式0,16位自动重装计数器),
0x01(方式1,16位计数器),
0x2(方式2,8位自动加载计数器),
0x3(方式3,仅适用于T0),一般来讲都选用方式1;
同样的,对于定时器1的工作方式有:
0x00(16位自动重装计数器),
0x10(16位计数器),
0x20,0x30(此时无效)四种方式。
d、TCON主要用于控制定时/计数器的启动/停止,保存T0、T1的溢出和中断标志
e、RI接收中断标志位,当为1时表示接收完第八位数据
f、EA为0的时候禁止所有中断,否则由个别位控制开启中断。当有中断函数的时候记得设置为1
g、ET0定时器0的中断允许,为1时允许
h、EX0外部中断INT0的中断允许
i、ES串口中断允许控制位,1开串口中断,0关串口中断
j、TR0是开启定时器0,即允许T0计数;TR1开启定时器1,即允许T1计数
k、当定时器工作在计数方式时,外部事件可通过引脚P34(对应T0)或P35(对应T1)进行输入
l、中断方式:
外部中断0,interrupt 0,优先级最高;
定时/计数0中断,interrupt 1,优先级次之;
外部中断1,interrupt 2,;
定时/计数器1中断,interrupt 3,;
串口中断,interrupt 4
在这里插入图片描述
4、中断系统的初始化过程:
a、设定各功能部件的工作方式
b、开相应中断源的中断(设置IE)
c、设定中断优先级(设置IP)
d、启动功能部件工作
e、注:
①、现场保护与恢复问题
PUSH direct: SP+1、(SP)<- (direct)
POP direct : (direct) <- (SP)、SP-1
②、堆栈与堆栈指针SP问题
C51单片机堆栈在RAM区,地址向上增长(+)
SP指向堆顶单元
SP上电复位值=07H(从第1组工作寄存器开始!)
③、工作寄存器组选择问题
RS0、RS1
④、编程策略:汇报策略、C语言(编译器策略)

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/106426767