微机原理课程设计交通灯.docx
《微机原理课程设计交通灯.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计交通灯.docx(15页珍藏版)》请在冰豆网上搜索。

微机原理课程设计交通灯
二○一一~二○一二学年第二学期
信息科学与工程学院
课程设计报告书
课程名称:
微机原理课程设计
班级:
电子信息工程2009级6班
学号:
200904135150
姓名:
张强
指导教师:
徐守明
二○一二年二月二十日
十字路口交通灯控制系统设计
一、摘要
随着现代科学技术的进步,自动化控制技术越来越多地被运用到生产生活当中。
现代交通的发展,对自动化控制技术也提出了较高的要求,如何科学有效对交通流量进行管理,已成为一项社会课题。
在课程设计的背景下,本系统运用了8255和8253芯片,基于8086CPU实现了通过B口控制南北东西方向的红绿灯的循环点亮,实现了对交通流量的模拟协调调度。
另外,本系统还有手动测试功能。
关键词:
交通灯;8255;8253;LED;模拟控制
Keywords:
trafficlight;8253;8255;LED;analogcontrol
二、设计任务及要求
利用“微机实验系统”的8255可编程接口的A口(PA7-PA0)、B口(PB7-PB0)、C口(PC7-PC0)控制发光二级管(红、绿灯)的L1-L8和开关KK1-KK2,使发光二级管按照十字路口交通灯的规律交替发光,模拟交通信号灯的工作。
●发光二级管(LED)显示电路
①8个LEDL1-L8,4个红灯、4个绿灯
②L=0LED亮;L=LED灭
●开关对交通灯的控制
①开关KK2=0红灯皆亮;开关KK2=1绿灯皆亮
②开关KK1=0启动交通灯的亮灭;开关KK1=1停止交通灯的亮灭(所有发光二级管皆灭)
●交通灯亮灭规律参考
2北方向绿灯亮、东西方向红灯亮20秒
②南北方向红灯亮、东西方向绿灯亮20秒
●适当地加一些额外功能
重复上述过程
注:
20秒定时由8253控制
三、总体设计思路
说明:
其中KK3用于管理开关KK1、KK2;
分析题意,红绿灯可直接接在8255的A、B、C任意一个口上,灯的亮灭可直接由8086输出0,1控制;开关用于控制红绿灯的工作状态,可以从A、B、C任意一个口进行读进判断;八段数码管的倒计时显示部分的位码有74LS273进行输入,段码则是经过8255端口输出。
(一)定时方案选择评估
方案一:
可利用8253定时计数器的工作方式0,使用查询方式,当计数(0.1S)到了的时候,从而产生0.1S的延时子程序,通过循环调用产生20S的延时。
这种方法理论上是可行的,不过在实际操作过程中,由于只是单次变化,难以观察测试;
方案二:
利用8253的定时计数器的方式3输出方波,通过级联的方式,产生周期为2S的方波,通过查询的方式,使在每个电平期间,使每10个周期的方波红绿灯工作在一种状态,实现了红绿灯的20秒延时。
这种方式延时较长,易于观察,而且相对稳定。
通过比较,我最终选择了方式2,使用了8253定时计数器产生周期为2S的方波,用于20S延时。
(二)开关控制设计思路
开关控制思路如下框图:
是
是
启动相应的开关后,开关控制相应的工作状态;
(三)数码管20秒倒数显示
实验过程中用到的八段数码显示器实际上是接口芯片8279的一部分,这次实验也只用到了八段数码管,因此无须对8279进行初始化方式选择。
显示的原理如下:
段码
位码
(四)系统原理
通过并行接口芯片8255A和8086计算机的硬件连接,以及通过8253延时的方法,来实现十字路口交通灯的模拟控制。
红灯(RLED)、绿灯(GLED)分别接在8255的B口的8位端口。
8086工作在最小模式,8255片选端接到CPU的选片段CS0,A、B口作为输出口,C口作为输入口,8255的C口的第一二、四位接到开关K1、K2、K3,第三位接到C口第三位,用于检测电平;8253片选端接到CPU的选片段CS1,通过级联的方式输出需要的方波信号;74LS273片选端接到CPU的选片段CS2,用于锁存位码。
红绿灯的转换由软件编程实现。
四、硬件设计
以下为硬件电路图,其中8255片选端接到CS0,PA口接到数显管的段码输出端口LED-A至LED-G,B口接到LED灯的电平输入口,C口的PC0、PC1和PC3接到K1、K2、K3;8253接到CS1,GATE0和GATE1接到+5V电平,8253clk0接到375KHZ的CLK4,out0接clk1,out1接到PC2;74LS273的片选端接到CS2,D0至D5接到八段数显管的位码输入端LED1至LED6。
软件设计
开关控制的流程框图在开关控制设计思路已做介绍,下面着重介绍交通灯正常工作的延时流程图:
该程序要实现的功能可分为外接芯片初始化部分、开关判断部分、延时部分、电平以及数码管显示部分。
(一)芯片初始化:
movdx,04a6h
;8255初始化
moval,10001001b
outdx,al
movdx,04a0h
moval,0ffh
outdx,al
movdx,04b6h
;初始化8253,产生2S的方波
moval,00110110b
outdx,al
movax,37500
movdx,04b0h
outdx,al
moval,ah
outdx,al
movdx,04b6h
moval,01110110b
outdx,al
movdx,04b2h
movax,20
outdx,al
moval,ah
outdx,al
movdx,04a2h;熄灭所有led灯
moval,0ffh
outdx,al
(二)开关判断部分:
D1:
movdx,04a4h
inal,dx
testal,08h
jzKK1
;若开关3有变化,跳回KK1
KK2:
movdx,04a4h
;KK2控制开关全红或者全绿
inal,dx
testal,08h
;判断是否开关3有没有变化
jzKK1
movdx,04a4h
inal,dx
testal,02h
jzZ1
jnzZ2
Z2:
moval,01010101b;使开关全绿
movdx,04a2h
outdx,al
jmpKK2
Z1:
moval,10101010b
;使开关全红
movdx,04a2h
outdx,al
jmpKK2
KK1:
;启动控制交通灯的控制开关
movdx,04a4h
;判断开关KK3是否又有变化
inal,dx
testal,08h;
jnzKK2
movdx,04a4h
inal,dx
testal,01h
jzST
movdx,04a4h
moval,0ffh
outdx,al
jmpKK1
(三)、1S延时子程序
;检测电平变化,判断是否秒加一
DECT:
pushsi
;堆栈保护进行地址保护
DECTread:
callDISPLAY
;调用显示子程序
leasi,dianping
movah,[si]
andah,1
movdx,04a4h
;判断电平,若有跳变则[si]+1
inal,dx
roral,1
roral,1
andah,1
cmpal,ah
jzDECTread
mov[si],al
popsi
ret
(四)交通灯正常工作电平控制部分
ST:
P:
movdx,04a4h
;再次判断开关KK3是否改变
inal,dx
testal,08h
jnzKK2
movdx,04a4h
;读取启动开关的电平,若开关为低,则启动交通灯
inal,dx
testal,01h
jnzdone
pushsi
leasi,WOS
moval,[si]
testal,01h
jzEW
jmpSN
done:
movdx,04a2h
;若KK1为1,则全部熄灭
moval,0ffh
outdx,al
jmpP
SN:
movdx,04a2h
;南北方向的红灯亮
moval,01011010b
outdx,al
callDECT
pushsi
leasi,LT
moval,[si]
cmpal,0
jzOSN
;20秒计数到了
decal
mov[si],al
pushbx
movbl,10
divbl
leasi,DAT
mov[si+1],al
moval,ah
mov[si],al
popbx
popsi
jmpP
OSN:
pushsi
;判断跳到东西南北的标志位
leasi,WOS
moval,0
mov[si],al
popsi
pushsi
leasi,LT
moval,20
mov[si],al
leasi,DAT
pushbx
movbl,10
divbl
mov[si+1],al
mov[si],ah
popbx
popsi
K2:
jmpP
;跳的步数太多,分多次跳
EW:
movdx,04a2h
;东西方向的红灯亮
moval,10100101b
outdx,al
callDECT
pushsi
leasi,LT
moval,[si]
cmpal,0
jzOEW
;20秒倒记时间到了没?
decal
mov[si],al
pushbx
movbl,10
divbl
leasi,DAT
mov[si+1],al
moval,ah
mov[si],al
popbx
popsi
jmpK2
OEW:
pushsi
;判断跳到东西南北的标志位
leasi,WOS
moval,1
mov[si],al
popsi
pushsi
leasi,LT
moval,20
mov[si],20
leasi,DAT
pushbx
movbl,10
divbl
mov[si+1],al
mov[si],ah
popbx
popsi
jmpK2
(五)数码管显示部分
DISPLAY:
pushsi
pushbx
moval,0feh
movcx,2
again:
pushcx
leasi,DAT
movcx,3
desploop:
movdx,04c0h
outdx,al;273输出位码
rolal,1
pushax
moval,[si]
incsi
leabx,BUFFER
XLAT
movdx,04a0h
outdx,al;8255A口输出段码
calldelay;延时
popax
loopdesploop
popcx
loopagain
popbx
popsi
ret
delay:
pushcx
movcx,5fh
delayloop:
loopdelayloop
popcx
ret
源程序代码可参见附录(交通灯_吴汉强.asm)
五、调试记录及结果分析
由于在学微机原理的同时还学习单片机,所以在做这个课程设计的时候,对软硬件的理解比一般的同学深刻,调试过程中遇到的问题可以很快地得到解决。
在满足基本要求的过程中,我还加入了八段数码管的20秒倒数计数功能。
此次设计由于时间相对较紧张,因此没有实现计时到达的LED闪烁的效果。
在上机调试中发现,由于此软件延时的时间均为估算时间,不是特别准确,对于交通要求特别高的地方不宜采用。
如果是放到一个大的交通灯系统中,会影响到各个交通灯的运行时间,可能整个系统对交通的指挥调度会大大偏离理论计算,不能有效地防止和消除交通堵塞现象。
不过这个模拟交通灯的程序具有很强的经典性,稍加修改可以运用于实际生产中。
六、设计总结
我不得不说,每次进行课程设计我都充满了期待,这次也不例外。
它既考验了一个人对于专业知识的掌握程度,更是对一个人毅力耐力的一次检阅。
一个星期的时间固然很短,但是当你认真对待每一分每一秒,认真的做每个实验。
在学习单片机的过程中,每当上微机的实验课的时候觉得很熟悉,因为单片机更趋近于硬件。
现在到了微机原理的课程设计,就有一种天翻地覆的感觉了,微机课上虽然讲指令多一点,但是接触了更多的硬件,就需要转换思维方式,思考解决用软件语言解决硬件问题。
几天的时间一直呆在实验室里,晚上也是到很晚才回去。
有人问,“你的程序不是已经做好了吗?
干嘛还在这里做?
”引用一句同学的话,“当你生活好了的时候,你就想着更好的生活”,当你做出来一个功能时,你就会想着做第二个功能。
这就是一种追求。
经过几天的反复实验调试,我对于8053、8255芯片的功能用途的理解更加到位,对于八段数码管的显示原理的理解更加透彻,对于接口的运用更加娴熟,几天的时间,软硬件的结合能力得到进一步的提升。
我深刻地体会到一个道理,代码是一个一个指令组成的,一个一个指令则是由键盘一个一个敲出来的。
敲代码的过程其实就是你的思考过程。
七、参考资料
《微型计算机原理与接口技术》(第二版),李伯成,清华大学出版社;
《新版汇编语言程序设计》,钱哓捷,电子工业出版社
参考链接: