实验二--外部中断实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
桂林电子科技大学
一、实验目的
1 学习外部中断指令的基本使用方法;
2 学习外部中断处理程序的编程方法。
二、实验内容
1在实验一内容的基础上增加允许急救车优先通过的要求;
2 急救车到达时(产生外部中断),交通信号为全红,以便让急救车通过
3 急救车通过路口时间为10秒(四个红灯亮10秒)。
急救车通过后,交通灯恢复原状态(中断前的状态);
4 中断申请信号为单脉冲“”。
三、实验原理图
四、实验程序框
五、实验步骤
1、检查试验仪,确认相应单片机放置位置,确认无误后将试验仪的USB 数据线连接电脑;
2、打开单片机电源开关,运行MEFlash 软件,确认电脑与试验仪连接成功;
3、将A T89S52的P0和P2口用短接线LED 灯的端口相连;
4、运行KC 编辑软件,调整好程序,并生成相应的.HEX 文件;
5、使用MEFlash 软件,将生成的.HEX 文件烧录到单片机中,运行成功;
6、测试中断是否运行正常,进行调试,确保程序正常运行。
六、实验程序清单
#include<reg51.h>
//*******延时1ms 秒********
void delay(unsigned int i)
{
unsigned int j;
while(i--)
交通灯程序的流程图
{
//对于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) ;
P2=0xFF; //东西绿灯灭,黄灯闪烁5次
blink(5);
P0=0x3F; //东西红灯亮
P2=0xCF; //南北绿灯亮
delay(2000) ;
P0=0x3F; //东西红灯亮,黄灯闪烁5次
blink(5);
}
}
void int0(void)interrupt 0
{
unsigned int Temp0;
unsigned int Temp2;
EA=0;
Temp0=P0; //储存初始端口状态
Temp2=P2;
P0=0x0F; //东西红灯亮
P2=0xFF; //南北绿灯亮
delay(2000) ;
P0=Temp0; //返回中断前端口状态
P2=Temp2;
EA=1;
}
七、实验分析
该实验主要是检查外部中断的用法及其注意的事项(比如中断时要保护现场和恢复现场)。
观察中断是其地址所发生的变化。
在调试过程中,主要调试中断程序的运行,首先需要关闭外部中断,然后储存当前前的状态,即将P0和P2口的值分别赋给Temp0和Temp2两个局部变量;中断程序结束时,重新将Temp0和Temp2分别赋给P0和P2,并将中断打开。
此实验实现了实验要求。