单片机实验三(急救车与交通灯)
- 格式:doc
- 大小:109.00 KB
- 文档页数:7
单片机技术与应用
实验报告
实验名称:外部中断实验(急救车与交通灯)班级:11062811
学号:11061118
姓名:吕琳涛
指导老师:谷雨
2013年5月20日
1. 实验要求
由以74LS273作为输出口,控制4个双色LED灯(可发红,绿,黄光),模拟交通灯管理,并允许急救车优先通过的要求。有急救车到达时,两向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。本实验以按键为中断申请,表示有急救车通过。
2. 实验目的
1.学习外部中断技术的基本使用方法。
2.学习中断处理程序的编程方法。
3. 程序说明:
在本次实验中,我们可以确定外部中断的作用是用于有救护车行驶过来时对程序的进行的简单的控制。对于正常的红绿灯的亮灭我们可以参考第一个实验中流水灯的设计理念。综上所述我们这一次的实验就是流水灯与外部中断的结合。
通过对七种情况的罗列
1 0 0 1 0 1 1 0 南北绿,东西红
0 1 1 0 1 0 0 1 南北红,东西绿
1 0 0 1 1 1 1 1 只亮东西红
0 1 1 0 1 1 1 1 只亮南北红
0 0 0 0 0 1 1 0 南北黄,东西红
0 0 0 0 1 0 0 1 南北红,东西黄
0 0 0 0 1 1 1 1 全红
我们可以利用XBYTE[0xf200]这个函数对这几种情况进行读取与显
示,在不同情况进行显示的过程中我们用以前的delay函数进行时间上的规划从而达到依次显示的效果。
0x0f 全红XBYTE[0xf200]=0x0f;
0x96 南北绿,东西红XBYTE[0xf200]=0x96;
0x9f 只亮东西红XBYTE[0xf200]=0x9f;
0x06 南北黄,东西红XBYTE[0xf200]=0x06;
0x69 南北红,东西绿XBYTE[0xf200]=0x69;
0x6f 只亮南北红XBYTE[0xf200]=0x6f;
0x09 南北红,东西黄XBYTE[0xf200]=0x09;
在具体的实验代码编写过程中,我们会用到EA=1;EX0=1;IT0=1;用于设定外部中断0为跳变沿触发方式,默认为电平触发方式。interrupt 0函数是处理有救护车驶过时的情况。
至此,程序编写完成,放入软件中进行编译和下载。
2. 上机调试说明
将程序编写成功后,我们就上机进行调试。
下载成功后,拨动k7这个拨动开关形成外部中断的信号,在单片机的实验板上我们可以清楚地看到随着时间灯南北东西的一对一对的红黄绿的交替闪烁。
然后以按键开光来表示救护车的通过,然后看见所有的灯都变成红色。至此实验仿真过程结束。
3. 写出源程序清单及执行结果。
源程序:
#include
#include
#include
#define uchar unsigned char·
#define uint unsigned int
void delay(uint xms)
{
unsigned int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
EA=1;
EX0=1;
IT0=1; //设定外部中断0为跳变沿触发方式,默认为电平触发方式IP=0x01; //外部中断0设置为高优先级中断
XBYTE[0xf200]=0x0f; //单片机端口P1输出0xf200绝对物理地址,全红
delay(5000); //延时5s
while(1)
{
XBYTE[0xf200]=0x96; //南北绿,东西红
delay(5000); //持续5s,之后为绿灯闪烁(绿转黄)XBYTE[0xf200]=0x9f;
delay(1000); //闪烁频率为1s
XBYTE[0xf200]=0x96;
delay(1000);
XBYTE[0xf200]=0x9f;
delay(1000);
XBYTE[0xf200]=0x96;
delay(1000);
XBYTE[0xf200]=0x9f;
delay(1000);
XBYTE[0xf200]=0x06; //黄灯持续5s
delay(5000);
XBYTE[0xf200]=0x69; //南北红,东西绿,持续5s
delay(5000);
XBYTE[0xf200]=0x6f;
delay(1000); //闪烁频率为1s
XBYTE[0xf200]=0x69;
delay(1000);
XBYTE[0xf200]=0x6f;
delay(1000);
XBYTE[0xf200]=0x69;
delay(1000);
XBYTE[0xf200]=0x6f;
delay(1000);
XBYTE[0xf200]=0x09;
delay(5000);
}
}
void exter0() interrupt 0 //中断服务程序,中断为外部中断0
{
XBYTE[0xf200]=0x0f;
delay(10000); //全红10s,急救车通过
}
4. 心得体会
本次实验中我们做的是一个交通灯的控制与救护车通过时的一个中断问题。我想这次实验是上两次实验的结合。然后我想对于一些看似很复杂的问题,如果我们可以将其分解为一些我们学过的会做的问题的话,问题就会迎刃而解。