基于8086交通灯课程设计说明书.docx
- 文档编号:2790024
- 上传时间:2023-05-04
- 格式:DOCX
- 页数:22
- 大小:134.58KB
基于8086交通灯课程设计说明书.docx
《基于8086交通灯课程设计说明书.docx》由会员分享,可在线阅读,更多相关《基于8086交通灯课程设计说明书.docx(22页珍藏版)》请在冰点文库上搜索。
基于8086交通灯课程设计说明书
武汉纺织大学
微机原理及应用
课程设计说明书
姓名
学号
学院
外经贸学院
班级
题目
基于8086/8088的交通灯程序设计
指导教师
周国鹏
2010年6月
一、需求分析……………………………………………………………2
1、课题背景………………………………………………………2
2、课题训练内容…………………………………………………2
3、设备需求……………………………………………………….2
4、功能需求……………………………………………………….2
二、设计方案…………………………………………………………..3
1、基于8255A的分析……………………………………………3
2、基于8259A的分析……………………………………………4
3、中断分析.....................................................................................4
三、详细设计…………………………………………………………..5
1、信号灯显示模块.....................................5
2、LED显示模块………………………………………………….6
3、中断子程序模块……………………………………………….6
4、整合所有模块………………………………………………….6
5、硬件原理及电路图……………………………………………7
6、程序源代码…………………………………………………….9
四、设计总计…………………………………………………………..15
五、参考资料…………………………………………………………..16
一、需求分析
1、课题背景
现代城市交通日益拥挤,为保证交通安全,防止交通阻塞,在城市交通井然有序,交通信号灯便出为此出现在人们眼中。
十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。
.2、课题训练内容
设计一个基于8086/8088微型计算机的一个交通信号灯控制系统,要求能完成基本的交通灯控制,如红、绿、黄三种灯的定时交替点亮与熄灭;能提供行人通过时的临时信号修改;能提供当时当地的温度、湿度信息;提供基本的键盘输入。
要求学生了解8086/8088微型计算机控制系统的基本设计方法与思路,能独立查阅资料并汇总,具备一定的控制系统设计能力,掌握绘制电路原理图的能力,能编写一定难度的汇编程序并调试。
3、设备需求
①.8086系统微机一台。
②温度传感器(可自选)和湿度传感器(可自选)、信号放大器。
③8253定时/计数器和8255A并行接口芯片、8259A、ADC0809。
④小键盘一个,红,黄,绿,发光二极管。
⑤LED发光二极管6个。
4、功能需求
本课题设计制作一个交通信号灯实时控制系统。
①.在一个十字路口的一条主干道和一条支干到上分别装上一套红,黄,绿三种信号灯;用按键模拟十字路口的车辆检测传感器信号;用二个LED显示停靠车辆数和二个LED显示红(或)绿灯的时间。
②在一般情况下,主、支干道上的绿灯--黄灯--红灯每24秒交替变换。
(红灯6s,绿灯12s,黄灯6秒)
③当检测到主干道为红灯而且干道上超过29辆车时(用按键K1模拟干道上停靠车辆),且从干道上没有车辆时,支干道的绿灯转为黄灯,持续6s后,又变为红灯,同时主干道由红灯变为绿灯。
④反之,当检测到支干道为红灯而且干道上超过29辆车时(用按键K1模拟干道上停靠车辆),支干道的绿灯转为黄灯,持续6s后,又变为红灯,同时支干道由红灯变为绿灯。
⑤当检测到特殊车辆经过时(用按键K2模拟),主从干道都变成红灯,当检测到车辆经过后(再次按下按键3),恢复原来红绿灯情况。
二、设计方案
1,基于8255A的分析。
根据课题内容,在本课题系统中,微机需要检测2按键送来的主,干道车辆到达信号及特殊车辆信号,并按一定的条件发出主、支干道6个信号灯的控制信号,以及LED显示器的控制信号。
根据如(图1)的8255内部结构及引脚,显然,用一片8255A完全可以满足上述要求。
可对于8255A作如下安排。
PA0~PA7用来给信号灯在不同时刻发送不同状态的信号。
PB0~PB7用来给LED发送LED驱动码。
PC0~PC3用来发送对LED的控制信号,PC4~PC7暂时还未用到。
其8255电路图如下(图2):
图18255内部结构及引脚
图28255接线图
2、基于8259A的分析。
另端口A工作与方式0的无条件数据传输方式,用以控制交通灯的亮灭;端口B工作与方式1的输入方式,并设置为允许中断;将端口C的PC2,PC3接到负脉冲源上,使得每按一下按钮时分别表示支干道上有一辆车过来和主干道上有一辆车过来,而将PC0接到中断请求线上,模拟当干道上有特殊车辆来时,由中断请求线向CPU发出中断,CPU响应中断后发出控制信号来控制主,支干道交通灯变为状态。
端口C的低4位用作输出接口,用来控制LED显示。
3,有关中断技术的功能,可以采用8259外部中断来控制特殊车辆的到来和红灯路口的阻塞车辆数。
再用K1、K2来模拟阻塞车辆和特殊车辆。
其8259与K1、K2按键连线如下(图3):
8259
KK2-
KK2+
KK1-
KK1+
IRQ7
IRQ6
图38259中断控制和K1、K2接线图
本模块主要用到以上5种硬件,各种硬件相连,组成整个系统的硬件系统。
但是除了硬件系统外,还需要有软件来驱动硬件间相互配合执行,现给出其流程如下图4:
Y
N
N
开始
主干道绿灯,支干道红灯
设置中断向量,初始化8259开中断
主干道黄灯支干道红灯;闪烁;倒计时4秒
主干道红灯,支干道绿灯
主干道红灯,支干道黄灯;闪烁倒计时4秒
Main>=29&&到计时到0
Main>=29&&到计时到0
Y
图4系统软件流程图
三、详细设计
根据本小组对本课题的分析,最后确定将本课题分为如下四个模块:
1,信号灯显示模块:
本模块分六个子程序,其功能分别是主干道绿灯支干道红灯,主干道黄灯支干道红灯,主干道红灯分干道绿灯,主干道红灯,分干道黄灯。
主支干道都红灯,主支干道灯都灭。
在程序中分别是子程序light1,light2,light3,light4,light5,light6.
2,LED显示模块:
此模块分五个子程序,其功能分别是,led根据父程序通过ax和数据段main传过来的值控制4个LED的数字显示。
Led1、led2两个子程序分别通过ax的值显示倒计时。
led3,led4两个子程序分别通过main的值和buffer对应的驱动码显示阻塞车辆数。
3,中断子程序模块,此模块分两个子程序,irq6用来处理K1触发的中断。
此中断用来表示阻塞了一辆车,即main加一。
irq7用来处理K2触发的中断,此中断用来处理十字路口来了一辆特殊车辆,即两条路的信号灯都成红灯,倒计时暂停。
其中断子程序的流程图如下图五:
图5中断子程序流程图
4,此模块主要实现本课题的逻辑,即通过本调用以上三个模块的子程序将现整个课题连起来,并让整个系统能连续的运行,因此也负责整个程序的时序。
本模块实现了整个系统的主程序,具体流程包括两重循环,三次分支,每一重用来循环控制信号灯四个基本状态的轮流转换,第二重循环用来控制时序及LED。
第一次分支是根据每一重循环下的每个基本状态分别显示不同的信号灯,第二个分支是,根据数据段中的main来判断阻塞车辆是不是过多,是否需要信号灯的转换。
第三个分支是根据信号灯是否黄灯时来商定要信号灯是否要闪烁。
另外此模块还要负责中断的初始化,及开中断的时间。
这也是本个负责的模块,其主要流程如图4和图6。
图6中断控制图
5、硬件原理及电路图
图7硬件原理及电路图
6、程序源代码
stacksegmentstack;定义堆栈段
db64dup(?
);申请64个字节的空间
stackends
datasegment;定义数据段
bufferdw5b6fh,5b7fh,5b07h,5b7dh,5b6dh,5b66h,
5b4fh,5b5bh,5b06h,5b3fh
dw066fh,067fh,0607h,067dh,066dh,0666h,
064fh,065bh,0606h,063fh
dw3f6fh,3f7fh,3f07h,3f7dh,3f6dh,3f66h,
3f4fh,3f5bh,3f06h,3f3fh;定义从29~0的LED驱动码
maindb00h;定义main用来存放阻塞车辆数
zhuangtaidw00h;用来存放交通灯的最近状态
zhongduandw00h;用来存放中断时倒计时的状态
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data;程序开始
movds,ax
;中断向量初始化
pushds;保护ds现场
movax,0000h
movds,ax;将0至入ds
movax,offsetirq6
addax,2000h
movsi,0038h
mov[si],ax;将irq6的首地址偏移地址放入第16个中断向量字的低字中
movax,0000h
movsi,003ah
mov[si],ax;将irq6的首地址段地址放入第16个中断向量字的高字中
movax,offsetirq7
addax,2000h
movsi,003ch
mov[si],ax;将irq7的首地址偏移地址放入第16个中断向量字的低字中
movax,0000h
movsi,003eh
mov[si],ax;将irq7的首地址段地址放入第16个中断向量字的高字中
popds
;中断向量初始化完毕
moval,80h
out63h,al;8255初始化
leabx,buffer
movdx,60h;dx,si两个寄存器的值用来控制LED显示的值
again:
movcx,4
jump:
movzhuangtai,cx;记录最近交通灯的状态
cmpcx,4
jeaaaa1
cmpcx,3
jeaaaa2
cmpcx,2
jeaaaa3
jumpaaaa4;根据cx确定的状态输出交通灯(二级管表示)
aaaa:
moval,0
movmain,al
pushcx;每一个新的状态将阻塞车辆数清零
;qiao
next3:
movcx,23h;根据cx值通过延时得出一秒的时间
movax,29
cmpmain,al
jezongd;阻塞车辆数大于等于30时交通灯转换状态
next2:
cmpcx,25h;根据cx的值,在黄灯时,闪烁
jaeshan2
cmpcx,19h
jaeshan
cmpcx,0ch
jaeshan2
jumpshan
aaas:
pushcx
callzdcsh;中断初始化
movax,[bx+si]
xchgal,ah
callled;LED显示当前倒计时数和阻塞车辆数
popcx
loopnext2
incsi
incsi
movzhuangduan,si
cmpsi,dx
jnenext3;倒计时
zongd:
popcx
loopjump
jumpagain;状态循环转换
;主程序逻辑结束
aaaa1:
movsi,0;调用第一种信号灯状态代码,si=0表示从29开始倒计时
calllight1
jumpaaaa
aaaa2:
movsi,54;调用第二种信号灯状态代码,si=54表示从2开始倒计时calllight2
jumpaaaa
aaaa3:
movsi,0;调用第三种信号灯状态代码,si=0表示从29开始倒计时
calllight3
jumpaaaa
aaaa4:
movsi,54;调用第四种信号灯状态代码,si=54表示从2开始倒计时
calllight4
jumpaaaa
shan:
pushax;黄灯时闪烁代码中的灯灭
movax,zhuangtai;根据信当前状态判断是否是黄灯
cmpax,3
jeshan1;状态三和一是黄灯,让灯灭
cmpax,1
jeshan1
popax
jumpaaas;else返回原程序
shan1:
calllight6;灯灭
popax
jmpaaas
shan2:
pushax;黄灯时闪烁代码中的黄灯亮
movax,zhuangtai;根据信当前状态判断是否是黄灯
cmpax,3
jeshan3;状态三时,主干道黄灯,支干道红灯
cmpax,1
jeshan4
jmpshan5;状态一时,主干道红灯,支干道黄灯
shan3:
calllight2;主干道黄灯,支干道红灯
jmpchan5
shan4:
calllight4;主干道红灯,支干道黄灯
shan5:
popax
jmpaaas
;中断子程序
irq6:
sti;当按键K1高电平触发时irq6时,开中断
pushax
moval,29
cmpmain,al;阻塞车辆数小于30时
jezon
incmain;阻塞车辆数加一
zon:
popax
iret
irq7:
sti;当按键K2高电平触发时irq7时,开中断
pushax
pushbx
pushcx
calllight5;主,支干道灯都是红灯
movcx,00e0h;开始延时3秒
movbx,offsetbuffer
movsi,zhongduan
1111:
pushcx
movax,[bx+si]
xchgal,ah
callled;根据中断时刻倒计时时间暂停的LED显示
popcx
loop1111
;中断子程序逻辑完后,返回现场
movaxzhuangtai;根据不同的状态信号灯返回现场
cmpax,4
jezhuangtai1;判断为状态一时
cmpax,3
jezhuangtai2;判断为状态二时
cmpax,2
jezhuangtai3;判断为状态三时
jmpzhuangtai4;判断为状态四时
zhuangtai1:
calllight1;返回状态一的现场
jmpend2
zhuangtai2:
calllight2;返回状态二的现场
jmpend2
zhuangtai3:
calllight3;返回状态三的现场
jmpend2
zhuangtai4:
calllight4;返回状态四的现场
end2:
popcx;寄存器返回现场
popbx
popax
iret
;中断初始化
zdcshproc
pushax
moval,13h
out20h,al;给8259送入ICW1控制字
moval,08h
out21h,al;给8259送入ICW2控制字
moval,09h
out21h,al;给8259送入ICW3控制字
moval,odh
out21h,al;给8259送入ICW4控制字
sti;开中断
popax
ret
zdcshendp
ledproc;控制四个LED的显示
pushcx;保护父程序环境
callled1;显示每一个LED
movcx,0617h
delay1:
loopdelay1
moval,ah
callled2;显示第二个LED
movcx,0617h
delay2:
loopdelay2
callled3;显示第三个LED
movcx,0617h
delay3:
loopdelay3
callled4;显示第四个LED
movcx,0617h
delay4:
loopdelay4
popcx
ret
ledendp
led1:
proc;控制第一个LED的显示
pushax
movah,al
pushax
movah,al
moval,11111110b
out62h,al;初始化第一个LED
moval,ah
out61h,al;显示第一个LED的值(al传来的)
popax
ret
led1endp
led2proc;控制第二个LED的显示
pushax
movah,al
moval,11111101b
out62h,al;初始化第一个LED
moval,ah
out61h,al;显示第二个LED的值(al传来的)
popax
ret
led2endp
led3proc;控制第三个LED的显示
pushax
pushbx
moval11111011h
out62h,al;初始化第一个LED
leabx,buffer
moval,29
subal,main
addal,al
incal
xlat;通过main计算出阻塞车辆数的十位LED驱动码
out61h,al;显示第三个LED
popbx
popax
ret
led3endp
led4proc;控制第四个LED的显示
pushax
pushbx
moval,11110111b
out62h,al;初始化第一个LED
moval,29
subal,main
addal,al
xlat;通过main计算出阻塞车辆数的个位LED驱动码
out61h,al;显示第四个LED
popbx
popax
ret
;wu
light1proc;交通灯第一种状态下的二级管情况
pushax
moval,01111101b;(主干道绿灯,次干道红灯)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light1endp
light2proc;交通灯第二种状态下的二级管情况
pushax
moval,01111011b;(主干道黄灯,次干道红灯)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light2endp
light3proc;交通灯第三种状态下的二级管情况
pushax
moval,10111110b;(主干道红灯,次干道绿灯)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light3endp
light4proc;交通灯第四种状态下的二级管情况
pushax
moval,11011110b;(主干道红灯,次干道黄灯)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light4endp
light5proc;交通灯第五种状态下的二级管情况
pushax
moval,01111110b;(主干道红灯,次干道红灯)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light5endp
light6proc;交通灯第六种状态下的二级管情况
pushax
moval,0ffh;(主、次干道灯全灭)
out60h,al;将要显示的灯对应的值通过PA0~7控制灯亮
popax
ret
light6endp
codeends
endstart
四、设计总结
本次课程设计是要设计一个交通灯系统,主要功能如上已有细述。
在本次对交通灯的设计过程中以此来加深对微机接口技术的理解,提高了自己的动手能力。
首先着手对硬件电路的设计,本次课程设计主要采用了8255A接口电路、8259中断控制器这两个芯片电路。
由于对各个芯片不熟悉,通过课本了解到了它们的引脚及功能、工作方式、内部结构和控制字。
然后就是对程序的设计,想要设计出一个实用的控制系统需要了解程序流程,先画出了流程图,然后对代码进行编写,在编写过程中遇到了很多问题。
如当初8259中断不会用,对芯片的不了解也导致编程的很多的问题,要么灯都不显示,要么灯显示不全,再要么红灯绿灯时间分配不合理,又比如最初写出的中断程序时只能发生一次中断,实现无法记录车辆信息;再比如在实在特殊车辆经过的irq7中断子程序时不知怎么回到原环环境等等。
最后经过一段时间的研究,查阅了很多资料并和同学讨论后终于一一解决。
经过为期一个星期的课程设计,我获益颇多。
将微机接口技术中的理论与实践相结合起来,对芯片的功能也有了进一步认识理解。
最后希望通过以后的学习,不断提升自身各方面的能力,如对专业知识的掌握程度,动手实践能力等。
经过此次的课程设计,我们学会了合作。
我们要形成自己的设计思想,以便在今后的专业课形成自己的风格。
同时在多多锻炼自己的动手能力,以便在以后的工作能独立完成一些设计项目。
五、参考资料
1、郑学监周斌微型计算机原理及应用(第三版)北京:
清华大学出版社2001
2、朱定华.微机原理、汇编与接口技术.北京:
清华大学出版社2005年
3、周明德.微机原理与接口技术实验指导与习题集.北京:
人民邮电出版社.2002年
5、王忠民等.微型计算机原理.西安:
西安电子科技大学出版社.2003年7月
6、洪永强.微机原理与接口技术.北京:
科学出版社.2004年
7、电子线路CAD实用教程潘永雄等编著陕西:
西安电子科技大学出版社,2006
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8086 交通灯 课程设计 说明书