51手记之标准51---中断系统
MCS51提供5个中断源,每个中断源有2个中断优先级,可实现两级中断服务程序嵌套;优先级相同的中断服务程序不会发生嵌套。
1.中断源
包括两个外部中断、两个定时器溢出中断和一个串行口中断。
1)外部中断源:
MCS51有两条外部中断请求输入线,允许外部中断源以低电平或负边沿两种中断触发方式来输入中断请求信号
中断请求标志位IE0、IE1,
控制寄存器:TCON
2)定时器溢出中断源:
属于内部中断,8031内部有两个16位的定时器/计数器,受内部定时脉冲(主脉冲经12分频后)或T0/T1引脚上输入的外部定时脉冲控制。定时器T0/T1在定时脉冲作用下从全“1”变为全“0”时可以自动向CPU提出溢出中断请求,以表明定时器T0或T1的定时时间已到。定时器T0/T1的定时时间可由用户通过程序设定,以便CPU在定时器溢出中断服务程序内进行计时。
3)串行口中断源:
属于内部中断,串行口中断分为串行口发送中断和串行口接收中断两种。在串行口进行发送/接收数据时,每当串行口发送/接收完一组串行数据时,串行口电路自动使串行口控制寄存器SCON中的RI葳TI中断标志位置位,并自动向CPU发出串行口中断,CPU响应串行口中断后便立即转入串行口中断服务程序执行。
2.中断控制
CPU对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器IE控制。每个中断源优先级的设定,则由中断优先级寄存器IP控制。
8031内部中断系统对各中断源中断优先级有一个统一的规定,各中断源按规定从高到低的排列顺序为:
外部中断0→ 定时器中断T0→ 外部中断1 →定时器中断T1→ 串行口中断
3.中断响应
CPU在每个机器周期的S5P2期间采样中断标志,在下一个机器周期的S6期间按先后顺序查询中断标志。在查询到某一中断标志为1时,则在下一个机器周期S1期间按优先级别进行中断处理。中断系统通过硬件生成长调用指令LCALL,将程序转移到中断入口地址单元,执行相应的中断服务程序。
响应中断时,CPU先置位优先级状态触发器,接着再执行由硬件产生的长调用指令LCALL。该指令将程序计数器PC的内容压入堆栈保护起来。但对诸如PSW、累加器A等寄存器并不保护(需要时可由软件保护)。然后将对应的中断入口地址装入程序计数器PC,使程序转移到该中断入口地址单元,去执行中断服务程序。
CPU响应中断请求后,在中断返回(RETI指令)前,必须撤除请求,否则会错误地再一次引起中断响应。