|
|
easyprobe8052F单片机仿真开发系统简介 |
▲ 双CPU架构,全开放设计,不占系统资源。
▲ 完全实时仿真,最高速度可达40MHz。
▲ 轻巧实用,可以不使用仿真电缆而直接插入用户目标板,便于现场调试。
▲ 以115200bps通过RS232串口与主机通信。
▲ 支持8X31/32/51/52/54/58及78C31/32/51/52/54/58等芯片。
▲ 28kB仿真存储区,包括64kB程序存储区和64kB数据存储区。
▲ 可按下列属性进行映射:-Overlay(Internal):内部,Target(External):外部。 | |
MCS-51单片机的中断系统 |
深圳市凌雁电子有限公司 |
[4]. 中断的控制
对于中断控制,在上一节中我们已经对TCON和SCON进行了分析,其实它们两个寄存器也是中断的控制寄存器,负责对中断的部分功能进行控制。我们这里谈论的是另外两个控制寄存器IE和IP。
MCS-51的对中断的开放和屏蔽是由中断允许寄存器IE控制来实现的,IE的结构格式如下。
|
表3 IE寄存器结构 |
IE |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
EA |
- |
- |
ES |
ET1 |
EX1 |
ET0 |
EX0 |
位地址 |
AFH |
|
|
ACH |
ABH |
AAH |
A9H |
A8H |
下面我们对IE寄存器的各控制位进行介绍:
△ EA:中断总控制位,EA=1,CPU开放中断。EA=0,CPU禁止所有中断。
△ ES: 串行口中断控制位,ES=1允许串行口中断,ES=0,屏蔽串行口中断。
△ ET1: 定时/计数器T1中断控制位。ET1=1,允许T1中断,ET1=0,禁止T1中断。
△ EX1: 外中断1中断控制位,EX1=1,允许外中断1中断,EX1=0,禁止外中断1中断。
△ ET0: 定时/计数器T0中断控制位。ET1=1,允许T0中断,ET1=0,禁止T0中断。
△ EX0: 外中断0中断控制位,EX1=1,允许外中断0中断,EX1=0,禁止外中断0中断。
MCS-51有两个中断优先级,即高优先级和低优先级,每个中断源都可设置为高或低中断优先级。如果有一低优先级的中断正在执行,那么高优先级的中断出现中断请求时,CPU则会响应这个高有限级的中断,也即高优先级的中断可以打断低优先级的中断。而若CPU正在处理一个高优先级的中断,此时,就算是有低优先级的中断发出中断请求,CPU也不会理会这个中断,而是继续执行正在执行的中断服务程序,一直到程序结束,执行最后一条返回指令,返回主程序然后再执行一条指令后才会响应新的中断请求。
为了实现上述功能,MCS-51的中断系统有两个不可寻址的优先级状态触发器,一个指出CPU是否在执行高优先级中断服务程序,另一个指出CPU是否正在执行低优先级的中断服务程序,这两个中断触发器的1状态分别屏蔽所有中断申请和同一级别的其他中断申请,此外,MCS-51还有一个申请优先级寄存IP,IP的格式如下,字节地址是B8H。
|
表4 IP中断控制寄存器结构 |
IP |
D7 |
D6 |
D5 |
D4 |
D3 |
D2 |
D1 |
D0 |
- |
- |
- |
PS |
PT1 |
Px1 |
PT0 |
PX0 |
位地址 |
|
|
|
BCH |
BBH |
BAH |
B9H |
B8H |
△ PS: 串行口中断口优先级控制位,PS=1,串行口中断声明为高优先级中断,PS=0,串行口定义为低优先级中断。
△ PT1: 定时器1优先级控制位。PT1=1,声明定时器1为高优先级中断,PT1=0定义定时器1为低优先级中断。
△ PX1: 外中断1优先级控制位。PT1=1,声明外中断1为高优先级中断,PX1=0定义外中断1为低优先级中断。
△ PT0: 定时器0优先级控制位。PT1=1,声明定时器0为高优先级中断,PT1=0定义定时器0为低优先级中断。
△ PX0: 外中断0优先级控制位。PT1=1,声明外中断0为高优先级中断,PX1=0定义外中断0为低优先级中断。
[5]. 中断的响应
MCS-51CPU在每一个机器周期顺序检查每一个中断源,在机器周期的S6按优先级处理所有被激活的中断请求,此时,如果CPU没有正在处理更高或相同优先级的中断,或者现在的机器周期不是所执行指令的最后一个机器周期,或者CPU不是正在执行RETI指令或访问IE和IP的指令(因为按MCS-51中断系统的特性规定,在执行完这些指令之后,还要在继续执行一条指令,才会响应中断),CPU在下一个机器周期响应激活了的最高级中断请求。
中断响应的主要内容就是由硬件自动生成一条长调用LCALL addr16指令,这里的addr16就是程序存储器中相应的中断区入口地址,这些中断源的服务程序入口地址如下:
|
表5 个中断源的服务程序入口地址 |
中断源 |
入口地址 |
外中断0 |
0003H |
定时/计数器0 |
000BH |
外中断1 |
0013H |
定时/计数器0 |
001BH |
串行口中断 |
0023H |
生成LCALL指令后,CPU紧跟着便执行之.首先将PC(程序计数器)的内容压入堆栈保护断点,然后把中断入口地址赋予PC,CPU便按新的PC地址(即中断服务程序入口地址)执行程序。
值得一提的是,各中断区只有8个单元,一般情况下(除非中断程序非常简单),都不可能安装下一个完整的中断服务程序。因此,通常是在这些入口地址区放置一条无条件转移指令,使程序按转移的实际地址去执行真正的中断服务程序。 |
|