一、单片机的外部中断0和1分别接入按键,用于控制发光二极管的显示状态。具体要求如下:
1、外部中断0输入引脚P3.2接一只按钮开关k1,外部中断1输入引脚P3.3接一只按钮开关k2。
2、单片机P1端口接8只LED灯。
3、k1和k2都未按下时,P1口的8只LED呈流水灯显示;仅k1按下再松开时,上下各4只LED交替闪烁10次,然后再回到流水灯显示;若k2按下再松开时,P1口的8只LED全部闪烁10次,然后再回到流水灯显示。要求两个外部中断的优先级相同。
二、实验原理
中断系统结构见图6-2。中断系统有6个中断请求源(简称中断源),2个中断优先级,可实现2级中断服务程序嵌套。每一中断源可用软件独立控制为允许中断或关闭中断状态;每一个中断源的优先级均可用软件设置。
** 图6-2 AT89S52的中断系统结构**
- 中断请求源
由图6-2,中断系统共有6个中断请求源,它们是:
(1)INT0*—外部中断请求0,外部中断请求信号(低电平或负跳变有效)由INT0引脚输入,中断请求标志为IE0。
(2)INT1—外部中断请求1,外部中断请求信号(低电平或负跳变有效)由INT1*引脚输入,中断请求标志为IE1。
(3)定时器/计数器T0计数溢出的中断请求,标志为TF0。
(4)定时器/计数器T1计数溢出的中断请求,标志为TF1。
(5)串行口中断请求,标志为发送中断TI或接收中断RI。
(6)定时器/计数器T2的中断请求源,含有计数溢出(TF2)和“捕捉”(EXF2)两种中断请求标志,经或门共用一个中断向量。两种中断触发是由T2的两种不同工作方式决定的。
三、实验步骤
1、分析电路中外部中断触发的条件。
(1)当P3.2引脚上的电平由高变低时,会触发INT0中断;
(2)当P3.3引脚上的电平由高变低时,会触发INT1中断.
2、设计硬件电路原理图,画出实际接线图
3、根据实验任务设计出相应的程序
#include <reg51.h>
#define uchar unsigned char
uchar int0_F=0;
uchar int1_F=0;
void Delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void main( )
{
uchar code display[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar a;
uchar n;
uchar m;
int0_F=0;
int1_F=0;
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
IP=0;
for(;;)
{
if(int0_F)
{
int0_F=0;
for(n=0;n<10;n++)
{
P1=0x0f;
Delay(500);
P1=0xf0;
Delay(500);
}
}
if(int1_F)
{
int1_F=0;
for(m=0;m<10;m++)
{
P1=0;
Delay(500);
P1=0xff;
Delay(500);
}
}
for(a=0;a<8;a++)
{
Delay(500);
P1=display[a];
}
}
}
void int0(void) interrupt 0 using 1
{
int0_F=1;
}
void int1(void) interrupt 2 using 2
{
int1_F=1;
}
四、实验结果
(1)k1和k2都未按下时,P1口的8只LED呈流水灯显示;
(2)仅k1按下再松开时,上下各4只LED交替闪烁10次,然后再回到流水灯显示;
(3)若k2按下再松开时,P1口的8只LED全部闪烁10次,然后再回到流水灯显示。
五、思考题
1、如果k1、k2两个按键同时按下并同时松开,P1口的LED是什么状态?
答:如果 k1和 k2两个按键同时按下并同时松开,理论上应该同时触发两个中断。然而,由于中断是异步发生的,实际的执行顺序可能会受到多种因素的影响,包括中断响应时间、中断嵌套等。因此,我们无法准确预测P1口的LED状态,因为它取决于中断触发的时机和处理器的调度。
2、在单片机系统中什么场合下采用中断技术?
答:(1)具有故障处理功能:
当系统中的某个部分出现故障时,中断技术可以让CPU立即中断当前任务,转而处理故障,以防止问题扩大。这种机制有助于提高系统的稳定性和可靠性。
(2)实现分时操作:
通过中断技术,单片机可以在多个任务之间切换,为每个任务分配一定的处理时间。这种分时操作模式使得单片机能够为多个I/O设备服务,提高了资源的利用效率。
(3)处理异步事件:
在许多应用场景中,事件的发生是不可预测的,例如用户的按键操作或者外部传感器的变化。中断技术可以让CPU在这些异步事件发生时立即作出反应,而不是等待主程序周期性地检查这些事件。