实验二--外部中断实验报告
时间:2025-04-30
时间:2025-04-30
1在实验一内容的基础上增加允许急救车优先通过的要求;2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过3 急救车通过路口时间为10秒(四个红灯亮10秒)。急救车通过后,交通灯恢复原状态(中断前的状态);4 中断申请信号为单脉冲 “ ”。
桂林电子科技大学
一、实验目的
1 学习外部中断指令的基本使用方法;
2 学习外部中断处理程序的编程方法。
二、实验内容
1在实验一内容的基础上增加允许急救车优先通过的要求;
2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过
3 急救车通过路口时间为10秒(四个红灯亮10秒)。急救车通过后,交通灯恢复原状态(中断前的状态);
4 中断申请信号为单脉冲 ”。
三、实验原理图
1在实验一内容的基础上增加允许急救车优先通过的要求;2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过3 急救车通过路口时间为10秒(四个红灯亮10秒)。急救车通过后,交通灯恢复原状态(中断前的状态);4 中断申请信号为单脉冲 “ ”。
四、实验程序框
交通灯程序的流程图
五、实验步骤
1、检查试验仪,确认相应单片机放置位置,确认无误后将试验仪的USB数据线连接电脑;
2、打开单片机电源开关,运行MEFlash软件,确认电脑与试验仪连接成功;
3、将AT89S52的P0和P2口用短接线LED灯的端口相连;
4、运行KC编辑软件,调整好程序,并生成相应的.HEX文件;
5、使用MEFlash软件,将生成的.HEX文件烧录到单片机中,运行成功;
6、测试中断是否运行正常,进行调试,确保程序正常运行。
六、实验程序清单
#include<reg51.h>
//*******延时1ms秒********
void delay(unsigned int i)
{
unsigned int j;
while(i--)
1在实验一内容的基础上增加允许急救车优先通过的要求;2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过3 急救车通过路口时间为10秒(四个红灯亮10秒)。急救车通过后,交通灯恢复原状态(中断前的状态);4 中断申请信号为单脉冲 “ ”。
{
//对于11.0592M晶振延时越是1ms
for(j=0;j<125;j++)
{
{;}
}
}
}
//*****延时结束*******
// k 代表黄灯闪烁的次数
void blink(unsigned int k)
{
for(;k>0;k--) //黄灯闪烁5次
{ P2=0xF0; delay(300); P2=0xFF;
delay(300);
}
}
//******主函数******
//******主函数******
void main()
{
P0=0x0F; //初始状态东西南北红灯全亮
P2=0xFF;
delay(2000) ;
EA=1; //开启中断
IT0=0 ;
EX0=1;
//D27到D24分别代表东西南北绿灯
//D07到D04分别代表东西南北红灯
// D23到D20四灯代表黄灯
while(1)
{
P0=0xCF;
P2=0x3F; //南北红灯亮 //东西绿灯亮
delay(2000) ;
1在实验一内容的基础上增加允许急救车优先通过的要求;2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过3 急救车通过路口时间为10秒(四个红灯亮10秒)。急救车通过后,交通灯恢复原状态(中断前的状态);4 中断申请信号为单脉冲 “ ”。
P2=0xFF; //东西绿灯灭,黄灯闪烁5次
blink(5);
P0=0x3F; //东西红灯亮
P2=0xCF; //南北绿灯亮
delay(2000) ;
P0=0x3F;
blink(5); } //东西红灯亮 ,黄灯闪烁5次
}
void int0(void)interrupt 0
{
unsigned int Temp0;
unsigned int Temp2; EA=0; Temp0=P0; //储存初始端口状态 Temp2=P2; P0=0x0F; //东西红灯亮 P2=0xFF; //南北绿灯亮 P0=Temp0; //返回中断前端口状态 P2=Temp2; EA=1; }
该实验主要是检查外部中断的用法及其注意的事项(比如中断时要保护现场和恢复现场)。观察中断是其地址所发生的变化。
在调试过程中,主要调试中断程序的运行,首先需要关闭外部中断,然后储存当前前的状态,即将P0和P2口的值分别赋给Temp0和Temp2两个局部变量;中断程序结束时,重新将Temp0和Temp2分别赋给P0和P2,并将中断打开。
此实验实现了实验要求。
delay(2000) ; 七、实验分析