第五章
MCS-51的中断系统
1),中断源
1.MCS-51的中断源和中断标志
8031,8051和 8751有五级中断
8032,8052和 8752有六级中断
80C32,80C252和 87C252有七级中断以 8051五级中断为例介绍。
2个外部中断
2个定时器溢出中断
1个串行口中断每个中断源有 高低 两个优先级,可以通过软件设置,能实现 二级 嵌套。
响应原则,① 高级可以嵌套低级
② 同级不能互相嵌套
③ 若同级同时申请,按固有顺序
INT0 — 0003H
T0 — 000BH
INT1 — 0013H
T1 — 001BH
串行口中断 — 0023H
( 1)外部中断源
INT0 INT1和 低电平或负边沿触发
TCON( IT0和 IT1)
S5P2 时刻检测电平触发( IT0=0) 检测一次边沿触发( IT1=1 ) 检测两次前一次高电平,后一次低电平,触发信号必须保持一个机器周期以上,才能保证检测到。
( 2)定时器溢出中断源内部定时器中断产生,两个 16位加 1计数器 /
定时器,计数器计满后自动产生溢出中断。
( 3)串行口中断源发送中断,发送完一帧数产生中断接收中断,接收完一帧数产生中断共用一个中断地址中断产生时自动置位串行口寄存器 TI和 RI
2),中断标志
8051在 S5P2时检测中断源发来的中断请求信号后先使相应中断标志位置位,在下一个机器周期检测这些中断标志位状态,以决定是否响应该中断。
( 1)定时器控制寄存器 TCON
( 2)串行口控制寄存器 SCON
0:无接收中断
1:有接收中断
0:无发送中断
1:有发送中断注,串行口电路向 CPU发出串行口中断请求的同时也使中断标志位置位,TI和 RI标志也可供 CPU查询,
进入中断服务程序后利用软件使标志为复位。
2,MCS-51对中断请求的控制
1).中断允许的控制
MCS-51没有专门的开中断和关中断指令,中断的开放和关闭是通过中断允许寄存器 IE进行两级控制的。
总控位
1级控制
2级控制
2),中断优先级的控制对中断优先级的控制比较简单,所有中断都可由指令设定为高级或低级两个中断优先级,以便 CPU对所有中断实现两级中断嵌套。
3,MCS-51对中断的响应
1).中断响应的条件
① CPU必须开中断,即中断允许位 EA= 1,
CPU处于中断工作方式。
② IE中,申请中断的中断允许位为 1,即允许此中断源向 CPU申请中断,并且中断源提出中断申请。
③ 申请中断的中断源优先级别较高(优先级排队到位)。
④ CPU执行完一条完整的指令之后,若正在执行的指令是中断返回指令( RETI)或者对专用寄存器 IE、
IP进行读 /写的指令时,CPU不会马上响应中断请求,
至少再执行完一条其它指令才会响应中断。
2),中断响应过程中断响应至少需要 3个机器周期,CPU在每个 S5P2
期间顺序采样每个中断源,CPU在下一个机器周期
S6期间按优先级顺序查询中断标志,如果查询到某个中断标志为 1,将在接下来的机器周期 S1期间按优先级进行中断处理。
① 断点保护硬件生成长调用指令自动把断点地址压入堆栈保护,中断入口地址送 PC,执行中断服务程。
② 关闭中断在响应中断期间关闭中断,免受其他中断的干扰。
中断入口地址处经常不放真正的中断服务程序入口地址,为什么?
中断服务程序的最后一条,是 RETI,中断服务程序结束后,断点出栈,装入 PC,使程序返回到主程序断点继续执行。
3).中断响应时间所谓中断响应时间是指 CPU检测到中断请求信号到转入中断服务程序入口所需要的机器周期数。
MCS-51单片机响应中断的最短时间为 3个机器周期。若 CPU检测到中断请求信号时间正好是一条指令的最后一个机器周期,则不需等待就可以立即响应。所谓响应中断就是由内部硬件执行一条长调用指令,需要 2个机器周期,加上检测需要 1个机器周期,一共需要 3个机器周期才开始执行中断服务程序。
若中断检测时正在执行 RETI或访问 IE或 IP指令的第一个机器周期,这样包括检测在内需要 2个机器周期 (以上三条指令均需两个机器周期 );若紧接着要执行的指令恰好是执行时间最长的乘除法指令,其执行时间均为 4个机器周期;再用 2个机器周期执行一条长调用指令才转入中断服务程序。这样,总共需要 8个机器周期。
3~8个机器周期 !
4).中断请求的撤除在中断请求被响应前,中断源发出的中断请求是由 CPU锁存在特殊功能寄存器 TCON和 SCON的相应中断标志位中。一旦某个中断请求得到响应,
CPU必须在中断返回前,把它的相应中断标志位复位成,0”状态;否则 MCS-51就会因为中断标志未得到及时撤除而重复响应同一中断请求。
MCS-51中外部中断、定时器 /计数器中断以及串行口中断的中断请求的撤除方法不同。
① T0/T1中断撤除 自动清除 TF0 TF1
② TX/RX中断撤除不能自动撤除,必须软件清,0”
CLR RI
CLR TI
ANL SCON,#0FCH
③ 外部中断请求的撤除对于负边沿触发的外部中断,CPU在响应中断后是用硬件自动清除中断请求标志 IE0或 IE1。
电平触发时,虽然自动清除中断请求标志 IE0
或 IE1。但不及时撤除的话会重复响应中断,必须采取措施。
INSVR:ANL P1,#0FEH
ORL P1,#01
RETI
END
4 中断系统的应用
1),MCS-51中断系统的初始化指用户对特殊功能寄存器 SFR( TCON,SCON,IE,IP)
中的各控制位进行赋值初始化中断系统步骤:
CPU开中断或关中断
设定相应中断源的中断允许控制
设定所用中断源的中断优先级
若为外部中断,则应规定中断触发方式例,请写出 INT1为低电平触发的中断系统初始化程序程序,
方法一:采用位操作指令
SETB EA ;开中断
SETB EX1 ;开 INT1中断
SETB PX1 ;令 INT1为高优先级
CLR IT1 ;令 INT1为电平触发方法二:采用字节型指令
MOV IE,#84H ; 开 INT1中断
ORL IP,#04H ; 令 INT1为高优先级
ANL TCON,#0FBH ;令 INT1为电平触发
2).主程序
( 1)主程序的起始地址
MCS-51系列单片机复位后,( PC)= 0000H,
而 0003H~ 002BH分别为各个中断源的入口地址。
所以编程时应在 0000H处写一跳转指令(一般为长转移指令),使 CPU在执行程序时,从 0000H跳过各中断源的入口地址。主程序是以跳转的目标地址作为起始地址开始编写,一般从 0030H开始。
( 2)主程序的初始化内容由于 MCS-51系统单片机复位后,特殊功能寄存器 IE,IP的内容均为 00H,所以应对 IE,IP进行初始化编程,以开放 CPU中断,允许某些中断源中断和设置中断优先级等 。
3),中断服务程序
( 1)中断服务程序的起始地址当 CPU接收到中断请求信号并予以响应后,CPU把当前的 PC内容压入栈中进行保护,然后转入相应的中断服务程序入口处执行。
( 2)中断服务程序编制中的注意事项
① 视需要确定是否保护现场。
②及时清除那些不能自动清除的中断标志,以免产生错误的中断。
③ 中断服务程序中的,PUSH”与,POP”指令必须成对使用,以确保中断服务程序的正确返回。
④主程序与中断服务程序间的参数传递方法与主程序和子程序的参数传递方式相同,可通过寄存器、存储单元、堆栈和变量等方式传送。
例,如图所示,将 P1口的
P1.4~P1.7作为输入位,
P1.0~P1.3作为输出位。
要求利用 8031将开关所设的数据读入单片机,并依次通过 P1.0~P1.3输出,
驱动发光二极管,以检查
P1.4~P1.7输入的电平情况 (高电平 LED亮) 。现要求采用中断触发方式,每中断一次完成一次读 /写操作,写出 CPU响应 INT0中断时的主程序和中断服务程序主程序:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INTER
ORG 0030H
MAIN,SETB EX0
SETB IT0
SETB EA
HERE,SJMP HERE
中断服务程序:
ORG 0200H
INTER,MOV P1,#0F0H
MOV A,P1
SWAP A
MOV P1,A
RETI
END