注册会员
- 积分
- 196
- 威望
- 247
- 贡献
- 39
- 兑换币
- 0
- 注册时间
- 2010-10-13
- 在线时间
- 1 小时
|
6.1 中断系统
51单片机 2009-07-21 08:43 阅读60 评论0 字号: 大大 中中 小小 6.1.3 80C51的中断系统的总体结构
80C51单片机有5个中断源2个优先级,这5个中断源是外部中断 、 ,定时计数器中断T0、T1,串行中断RI/TI,如图6-2左边所示 。每个中断源可用中断允许寄存器IE中的各位开放或禁止其中断,如图2中间部分所示。2个中断优先级是高优先级与低优先级,每个中断源可由中断优先权寄存器IP中各位设置其优先级。如图2右边所示,每个中断源的开放、禁止及优先级可以用软件设置。
1.中断请求标志
(1)中断标志寄存器TCON
TCON为特殊功能寄存器,其地址为88H,TCON中8位含义及位地址如图6-3所示。TCON的低4位用于外部中断 、 ,其中:IT0与IT1为外部中断方式的选择位,IE0、IE1为外部中断触发标志位。高4位用于定时计数器T1、T0,其中TF0、TF1为定时中断触发标志位,TR0与TR1为定时器运行控制位。因为TCON可位寻址操作,所以可用SETB与CLR指令将TCON各位清零或置1。
(2)外部中断
外部中断 有2种,即低电平与负脉冲方式。IT0=0 ; 引脚输入低电平产生中断。 IT0=1 ;由 引脚输入负脉冲使IE0置1。
当CPU响应中断时,由硬件自动将IE0清零,以避免重复中断。
与 中断请求方式是相同,
例6-1 将 设置为低电平中断, 将 设置为负脉冲中断。
解: CLR IT0
SETB IT1
(3)定时器中断
80C51单片机有2个定时器T0与T1。T0与T1是通过其内部加1计数器溢出后将定时器中断标志TF0(或TF1)置1来向CPU请求中断的。
①定时器T0
定时器中断标志TF0:当T0的加1计数器发生溢出时,将TF0置1(T0的加1计数器将在定时器一节中介绍)。
TF0=1 ;表示T0向CPU发中断请求。
TF0=0 ;表示T0未向CPU发中断请求。
②定时器T1(与T0类同)
(4)串行中断:在串行通讯时,接收到一帧信息后串行口将接收中断标志RI置1,发送完一帧信息后串行口将发送中断标志TI置1,以此来向CPU发中断请求。
注意:RI、TI必须硬件清零。
2.中断控制
(1)中断允许控制寄存器IE
EA
×
×
ES
ET1
EX1
ET0
EX0
位地址 AF AE AD AC AB AA A9 A8
①CPU中断允许位EA
EA=1 :CPU允许中断; EA=0 :CPU禁止中断。
②各中断源中断允许位
IE寄存器中ES为串行中断允许位,ET1与ET0为定时器T1与T0的中断允许位,EX1与EX0为外部中断 与 的中断允许位。各位取1时允许中断,取0时禁止中断。
(2)中断优先级的设置寄存器IP
×
×
×
PS
PT1
PX1
PT0
PX0
位地址 BF BE BD BC BB BA B9 B8
IPi= 1 ;表示第i个中断源为高优先级。
IPi=0 ;表示第i个中断源为低优先级。
例6-2 设置:外部中断 为负脉冲请求中断,高优先级,开中断。外部中断 为低电平请求中断,低优先级,开中断。
解: SETB IT0 ;设置 为负脉冲中断
SETB PX0 ;设置高优先级
SETB EX0 ;开中断
CLR IT1 ;设置 低电平中断
CLR PX1 ;设置低优先级
SETB EX1 ;开中断
SETB EA ;CPU开中断
(3)优先级处理原则
① 不同级同时申请:先高后低。即先响应高优先级中断请求,然后再响应低优先级中断。
②处理低级中断又收到高级中断:停低转高。即:暂停低优级中断,执行高优级中断。
③处理高级中断又收到低级中断:高不睬低。即:继续执行高优先级中断。
④同级同时申请:按 →T0→ →T1→TI/RI次序响应。
<>
中断响应过程包括保护断点和将程序转向中断服务程序的入口地址。80C51系列单片机各中断源的入口地址由硬件事先设定,分配如下:
中断源 入口地址
外部中断0 0003H
定时器0中断 000BH
外部中断1 0013H
定时器1中断 001BH
串行口中断 0023H
将定时器1中断,其中断服务程序入口地址地址跳转到CONT的指令为:
ORG 001BH ;定时器1中断入口
LJMP CONT ;转向中断服务程序
<>
一般包括两部分内容:一是保护现场,二是完成中断源请求的服务。
<>
中断返回是指中断服务完后,计算机返回原来断开的位置(即断点)。继续执行原来的程序。中断返回由中断返回指令RETI来实现。该指令的功能是把断点地址从堆栈中弹出,送回到程序计数器PC,此外,还通知中断系统己完成中断处理,并同时清除优先级状态触发器,特别要注意不能用“RET”指令代替“RETI”指令。
参考资料:http://blog.163.com/liuyunfeng484/blog/static/6683171520096218436461/
4回答者: aleda |
|