目录
一、中断系统
(一)中断结构
AT89S51系列单片机提供了5个中断请求源,它们分别是:外部中断0请求、定时器/计数器0中断请求、外部中断1请求、定时器/计数器1中断请求、串行口中断请求。下图为AT89S51的中断系统结构:
中断触发行为:
(二)中断寄存器
1、中断优先级寄存器IP
中断请求源有两个中断优先级,每一个中断请求源可由软件设置为高优先级中断或低优先级中断,也可实现两级中断嵌套。
所谓两级中断嵌套,就是AT89S51正在执行低优先级中断的服务所谓两级中断嵌套,就是AT89S51正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。两级嵌套如下图所示:
AT89S51片中有一个中断有限级寄存器IP,字节地址为B8H,可位寻址。只要用程序改变其内容,即可进行各中断源优先级设置,IP寄存器格式如下:
中断优先级寄存器IP各位含义:
(1) PS— 串行口中断优先级控制位,1一 高级; 0— 低级。
(2) PT1—T1中断优先级控制位,1一高级; 0— 低级。
(3) PX1—外部中断1中断优先级控制位,1一高级; 0—低级。
(4) PT0—T0中断优先级控制位,1一 高级; 0—低级。
(5) PX0—外部中断0中断优先级控制位,1一高级; 0—低级。
各中断源在同一优先级条件下,外部中断0中断优先权最高,串行口的优先权最低。
2、串行口控制寄存器SCON
各中断源开放或屏蔽,是由片内中断允许寄存器IE控制。IE字节地址为A8H,可进行位寻址。IE寄存器格式如图:
(1) TI一串口发送中断请求标志位。CPU将1字节的数据写入串口的发送缓冲器SBUF时,就启动一帧串行数据的发送,每发送完一帧串行数据后,硬件使TI自动置“1”。CPU响应串口发送中断时,并不清除TI中断请求标志,TI标志必须在中断服务程序中用指令对其清“0”。
(2) RI一串行口接收中断请求标志位。在串口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。CPU在响应串口接收中断时,RI标志,并不清“0”,须在中断服务程序中用指令对RI清“0”。
(三)外部中断应用
1、单一外中断
要求将外部中断0设置为电平触发。程序启动时,P2口上的8只LED全亮。每按一次按钮开关K1,使引脚接地,产生一个低电平触发的外中断请求,在中断服务程序中,让低4位的LED与高4位的LED交替闪烁5次。然后从中断返回,控制8只LED再次全亮。
#include <REGX52.H>
void Delay(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
EA=1; //总中断允许
EX0=1; //允许外部中断0中断
IT0=1; //设置外部中断为下降沿触发方式
while(1)
{
P2=0x00;
}
}
void Int0_Routine() interrupt 0
{
unsigned char i;
EX0=0; //禁止外部中断0中断
for(i=0;i<5;i++)
{
P2=0xf0;
Delay(500);
P2=0x0f;
Delay(500);
}
EX0=1; //中断返回前,打开外部中断0中断
}
2、两个外中断
在单片机P2口_上接有8只LED。在外部中断0输入引脚(P3.2) 接有一只按钮开关K1。在外部中断1输入引脚(P3.3) 接有一只按钮开关K2。要求K1和K2都未按下时,P2口的8只LED呈流水灯显示,仅K1 (P3.2)按下再松开时,上下各4只LED交替闪烁10次,然后再回到流水灯显示。如果按下再松开K2 (P3. 3)时,P2口的8只LED全部闪烁10次,然后再回到流水灯显示。设置两个外中断的优先级相同。
#include