微机原理交通灯实时控制系统.doc
《微机原理交通灯实时控制系统.doc》由会员分享,可在线阅读,更多相关《微机原理交通灯实时控制系统.doc(21页珍藏版)》请在冰点文库上搜索。
武汉理工大学华夏学院
课程设计报告书
课程名称:
微机原理与接口课程设计
题目:
交通灯实时控制系统
系名:
信息工程系
专业班级:
软件2101
姓名:
XXX
学号:
****************
指导教师:
李朝纯
2012年12月28日
1
课程设计任务书
学生姓名:
XXX专业班级:
软件2101
指导教师:
李朝纯工作单位:
信息工程系
设计题目:
交通灯实时控制系统
初始条件:
1、某十字路口的车辆通行按步序参考表A进行
2、TDN86/88型多功能微机实验平台
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
主要任务:
1.画出硬件原理图(接口芯片和外设部分、交通灯与路口对应关系)和实验连线图;
2.交通灯控制方式是南、北、东、西四个路口轮流通行(无交叉点通行控制方式,步序见参考表A);绿灯亮表示允许通车(20秒)、红灯亮表示不允许通车(15秒)。
各路口由允许通车到不允许通车黄灯亮(用红灯闪烁5秒钟表示);
3.用2位7段LED数码管上显示路口当前通行时间的倒计时。
*4.各路口允许通车时间内,若有异常事件发生(用开关模拟中断信号的产生),则所有灯闪烁10秒钟,返回原处继续。
设计报告撰写格式要求:
(按提供的设计报告统一格式撰写)
设计报告应包含以下内容:
①设计任务与要求②总体方案与说明
③硬件原理图与说明④实验电路图与说明
⑤软件主要模块流程图 ⑥源程序清单与注释
⑦系统调式、问题分析与解决方案;
⑧小结与体会
附录:
①源程序(必须有简单注释)②使用说明③参考资料
时间安排:
12月24日
布置题目,确定任务、查找相关资料
12月25日~12月27日
功能分析,硬件设计,拟定实验电路,编写程序,调试程序、运行系统;
12月28日
答辩后撰写设计报告。
12月28日下午4:
00前交设计报告。
指导教师签字:
2012年12月24日
系主任签字:
年月日
目录
1需求分析 1
1.1课程设计题目 1
1.2设计目的 1
1.3设计任务 1
1.4软硬件运行环境及开发工具 2
1.4.1软硬件运行环境 2
1.4.2开发工具 2
2.概要设计 2
2.1交通灯实时控制系统设计原理及方法 2
2.1.1设计原理 2
2.1.2系统原理图 3
2.1.3电路原理 3
2.1.4设计方法 4
3三. 详细设计 4
3.1硬件设计与软件设计 4
3.1.18255A芯片 4
3.1.28259芯片 5
3.2硬件电路的设计与实现 5
3.3软件设计 6
3.3.1红绿灯时间控制 6
3.3.2本实验中的中断的运用 6
4软件主要模块流程图 7
4.1程序总设计流程图 7
4.2延时1s子程序DELLAY1S流程图 8
4.3IRQ7中断子程序流程图 9
5.系统调试 11
5.1系统调试 11
5.2操作说明及运行结果 11
5.2.1操作说明 11
5.2.2运行结果 11
6.课程设计小结 12
附录:
13
参考文献 16
1需求分析
1.1课程设计题目
交通灯实时控制系统。
伴随着社会的发展以及人们生活水平的提高,汽车的数量在不断的增加,交通的问题日益突出,单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
以下就是运用数字电子设计出的交通灯:
用红灯来控制支路的交通通行,用绿灯来控制主干道的交通通行(说明:
本设计不遵循红灯停,绿灯行的交通规则,只要灯亮就表示可以通行)。
1.2设计目的
1)巩固和加深课堂所学知识;
2)学习掌握一般软硬件的设计方法和查询、运用资料的能力;
3)通过在TDN集成开发环境中对交通灯实时控制系统的设计与制作,综合应用8253、8259、8255芯片,深入了解和掌握利用可编程8255A进行控制的原理与方法;
4)通过这次课程设计,将课本上的理论知识和实际的应用有机的结合起来,以提高分析和解决问题的实际能力,通过对汇编语言程序代码的设计,编写,修改以提高自己实际编程能力。
1.3设计任务
1)任务:
设计一个交通灯控制系统
要求综合运用8259、8253、8255芯片设计十字路口的交通信号灯控制系统。
支线与主干线允许通车15秒,当支线允许通车时(15秒)中,若主干线15秒内已有10辆车到来,则申请中断,允许主干线通车,实现无交叉点通过。
如图1-1所示。
图1-1模拟通行示意图
2)设计任务要完成实验方案论证,进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图;搭建实验电路,进行软件编程、调试、运行以及使用说明文档的建立等一整套工作任务。
进行十字路口的交通信号灯控制程序设计(采用汇编语言);系统联调,提交一个符合上述功能要求的十字路口的交通信号灯控制系统设计。
1.4软硬件运行环境及开发工具
1.4.1软硬件运行环境
TDN88实验平台,PC机,导线,汇编语言编译软件。
1.4.2开发工具
TDN86/88教学实验系统,PC机。
2.概要设计
2.1交通灯实时控制系统设计原理及方法
2.1.1设计原理
通过并行接口芯片8255和计算机的硬件连接,通过软件计时,来实现十字路口交通灯的模拟控制,用8259芯片,得到CPU的中断响应后,提供中断类型号,从而
快速寻找到该中断源的中断服务程序的入口地址,转去执行中断服务序。
通过并行接口芯片8255和计算机的硬件连接,通过软件延时计数,来实现十字路口交通灯的模拟控制。
即用D5,D4,D1,D0亮表示车辆允许东西方向通行,D7,D6,D3,D2亮表示车辆允许南北方向通行。
用8259芯片,得到CPU的中断响应后,提供中断类型号,从而快速寻找到该中断源的中断服务程序的入口地址,转去执行中断服务程序。
实验中:
‘0’表示灯亮,‘1’表示灯灭
通过课程设计要求找出灯亮的规律:
1.东西方向绿灯亮,南北方向红灯亮,延续20秒。
2.20秒钟的最后5秒,东西方向绿灯以频率1HZ闪烁5次,南北方向红灯亮。
3.东西方向红灯亮,南北方向绿灯亮,延20秒。
4.20秒钟的最后5秒,南北方向绿灯以频率1HZ闪烁5次,东西方向红灯亮。
5.循环以上步骤。
通过分析灯亮的规律,总结出如下的功能表:
灯
状态
南北
红D7
南北
红D6
东西
红D5
东西
红D4
南北
绿D3
南北
绿D2
东西
绿D1
东西
绿D0
状态1
1
1
0
0
1
1
0
0
状态2
1
1
0
0
1
1
0
1
0
1
状态3
0
0
1
1
0
0
1
1
状态4
0
0
1
1
0
1
0
1
1
1
表2-1交通灯亮灭功能表
2.1.2系统原理图
系统原理图如图2-1所示
D0D1D2D3D4D5D6D7
CUP
A0A1A9
M/IO
A8
A7
A6
A5
INT
D1D2D3D4D5D6D7
D0PA0
D1PA1D2PA2D3PA3D4PA4D5PA5D6PA6D7PA7
8255PB0
A0.
A1.
PB7PC0
CS.
.
PC7
LED七段码显示器
A2
G1
G2A
G2B
CY4
B
A
LED七段码显示器
8259
INTA IRQ7
KK1
图2-1系统原理图
2.1.3电路原理
本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
硬件电路由R-S触发器电路、发光二极管模块、8255可编程并行接口模块和紧急中断模块8259组成。
2.1.4设计方法
通过分析8255、8259各端口地址,设计合理的地址译码电路。
8259的地址为20H、21H,8255的端口地址为60H、61H、62H、63H。
红、绿灯分别接在8255的A口的高四位和低四位端口,PA0~PA7分别连接到D0~D7来控制8个灯的亮灭,用以模拟交通灯。
B口和C口接两个两片数码管显示器进行倒计时。
用开关模拟中断信号的产生,则要用到8259芯片。
8259的中断请求输入管脚IRQ7与KK1相连。
每按动一次KK1,产生一次中断请求信号。
当8259接收到中断请求信号之后,便开始执行中断,实现8个灯的闪烁。
系统的程序设计最关键的就是延时程序的编写,因为要在延时的同时用两个LED数码管同步显示倒计数,这给程序设计带来了难题。
现提出如下解决方案:
在进入每个状态时,给寄存器CX置初值表示要倒计时的时间,然后开始把CX循环减1,直到0进入下一个状态。
在CX减1循环中每循环一次,调用延时1s的子程序DELLAY1S,这样假如在状态0给CX置初值20,则会延时20s;如果在每次调用的延时1s的子程序DELLAY1S中,再调用显示CX的值的子程序LED1给2个LED数码管显示,就实现了与延时同步的倒计数显示。
这样就实现了延时与倒计数的同步。
程序主要是由主程序、延时1s子程序DELLAY1S、LED显示CX子程序LED1、中断服务程序IRQ7组成。
在主程序中包括对8255初始化、中断程序入口地址的填写、中断IRQ7开放,各种状态的依次处理。
3. 详细设计
3.1硬件设计与软件设计
3.1.18255A芯片
8255A芯片是一种通用的可编程并行I/O接口芯片。
它包含有3个8位端口,称为A口,B口,C口。
其中A口包含8个I/O引脚(PA0~PA7),B口包含8个I/O引脚(PB0~PB7),C口包含8个I/O引脚(PC0~PC7)。
该芯片有3种工作方式,称为0方式,1方式,2方式。
本实验选取8259A的A口、B口、C口都作为输出端口,工作方式选0方式。
所以8259A的方式命令字为10000000B,即80H。
端口地址为60H~63H。
其初始化编程为:
MOVAL,10000000B
.OUT63H,AL
图3-1系统中的8255A芯片
3.1.28259芯片
8259A芯片内部含有中断请求寄存器,用来存放由外部输入的中断请求信号IR7~IR0。
当某个输入端为高电平时,该寄存器相应位置“1”。
本实验中需要从IR7请求中断,因此采用中断屏蔽方式,将IR6~IR0都设为高电平,即将寄存器IR6~IR0置“1”。
所以其方式命令字为01111111B,即7FH。
端口地址为20H~21H
其初始化编程为:
MOVAX,0000H
MOVDS,AX ;数据段清零
MOVAX,OFFSETIRQ7;装入中断程序入口地址
MOVSI,003CH
MOV[SI],AXMOVAX,CS
MOVSI,003EHMOV[SI],AXPOPDS
INAL,21H;读中断屏蔽寄存器IMR
ANDAL,7FH
OUT21H,AL;开放IRQ7
STI;开中断
3.2硬件电路的设计与实现
图3-2控制中断实验图
图3-3硬件设计实验图
3.3软件设计
3.3.1红绿灯时间控制
本实验中有15秒和5秒的延时,我们先编写一个一秒的延时程序,然后再分别调用这个一秒的延时子程序,MOVCX,25中的cx控制时间,延时一秒子程序如下:
DELLAY1S:
PUSHAXPOPAX
PUSHBXLOOPD0
PUSHCXPOPCX
CALLLED1POPBX
MOVCX,0FFFFHPOPAX
D0:
PUSHAXRET
3.3.2本实验中的中断的运用
MOVAX,OFFSETIRQ7;取中断程序入口地址(相对地址)
本实验中使用的是中断请求输入IRQ7,当你按KK1时,执行中断程序,灯会闪烁,程序如下
IRQ7:
OUT60H,ALMOVAL,20H;结束中断
CALLDELLAY1SOUT20H,AL
NOTALIRET
DECBX
JNZIR7
POPCX
POPBX
POPAX
4软件主要模块流程图
4.1程序总设计流程图
开始
8255初始化
装入中断向量
8259初始化
D0、D1绿灯亮,D4、D5红灯亮
DDD
延时15S是否到
N
Y
D0、D1绿灯闪烁
延时5S是否到
N
Y
D2、D3绿灯亮,D6、D7红灯亮
N
延时15S是否到
Y
N
Y
D0、D1绿灯闪烁
延时5S是否到
Y
N
Y
结束
图4-1程序流程图
4.2延时1s子程序DELLAY1S流程图
此延时子程序不光实现延时,还调用了LED1子程序显示了CX的内容,实现延时的同时倒计数的显示。
具体流程如下:
开始
AX,BX,CX,进栈
调用LED1子程序在LED中显示CX的内容
CX=0FFFH
AX进栈,AX出栈,CX-1
CX==0?
AX,BX,CX出栈
返回
图4-2实验延时1秒流程图
子程序如下:
LED1:
PUSHCX;数码管显示数字
PUSHAX
MOVAX,CX
MOVBL,0AH
MOVAH,0
DIVBL;商放在AL,余数放在AH
MOVBX,OFFSETTAB1;取段码表首地址
XLAT
OUT61H,AL;输出显示
MOVCX,0600H
ADD2:
LOOPADD2
MOVAL,AH
MOVBX,OFFSETTAB1
XLAT
OUT62H,AL
MOVCX,0600H
ADD3:
LOOPADD3
POPAX
POPCX
RET
4.3IRQ7中断子程序流程图
IRQ7中断子程序是实现所有灯闪烁10s就返回的功能。
具体流程就如下。
开始
AX,BX,CX进栈
CX清零,调用1s延时子程序时LED数码管显示00
置AL=0FFH,BX=0AH
从C口输出AL值,用于把
灯灭掉(AL=00H)或全点亮(AL=0FFH)
调用1s延时子程序
AL取反,BX-1
否
判断BX是否为0
是
AX,BX,CX出栈
中断结束、返回
图4-3中断服务程序流程图
中断实现代码如下:
IRQ7:
PUSHAX;外中断服务子程序,所有灯闪10秒
PUSHBX
PUSHCX
MOVCX,0
MOVAL,0FFH
MOVBX,0AH
IR7:
OUT60H,AL
CALLDELLAY1S
NOTAL
DECBX
JNZIR7
POPCX
POPBX
POPAX
MOVAL,20H;结束中断
OUT20H,AL
IRET
5.系统调试
5.1系统调试
1.使用串行通讯现将实验系统与PC微机相连
2.正确搭接好相关实验电路
3.接通电源,双击试验系统快捷方式,开启试验系统如下图
4.点击菜单栏“文件”按钮,选择建新文件。
即可开始输入源程序。
输入程序后,点击保存按钮,进行保存。
5.点击编译按钮,对源程序进行汇编,生成目标文件(*.obj)。
汇编信息显示与屏幕,若出现错误,修改源程序,直至正确。
6.汇编无误后,对汇编生成的*.Obj文件进行链接,链接信息显示于屏幕上,生成*。
EXE可执行文件。
7点击加载按钮,加载*.EXE程序。
屏幕显示信息。
8.加载成功,RUN,运行程序。
9.开始时候东西方向绿灯亮,南北方向红灯亮20秒,最后5秒时候绿灯会闪烁。
南北方向绿灯亮,东西方向红灯亮20秒,最后5秒时候绿灯会闪烁。
10.在9过程中,若用户按下KK1,则会出现8个灯一起闪烁10秒,然后回到按之前状态,继续循环步骤9中过程。
5.2操作说明及运行结果
5.2.1操作说明
1.按实验接线图接线。
2.输入程序并检查无误,经汇编,连接后装入系统。
3.运行程序。
观察灯的变化,将KK1按1下,会出现红绿灯交替闪烁10秒
5.2.2运行结果
D0,D1亮表示东西方向绿灯亮准行,D4,D5亮表示南北方向红灯亮,持续20秒;当准行时间到最后5秒时,准行方向绿灯闪烁。
D2,D3亮表示南北方向绿灯亮准行,D6,D7表示东西方向红灯亮持续时间20秒,当准行时间到最后5秒时,准行方向绿灯闪烁。
此过程课程设计要求相符合。
6.课程设计小结
通过这次课程设计,我对8255、8259、8253这三种芯片有了进一步的了解。
知道了它们在实际应用中的功能以及它们初始化的方法。
这次课程设计从需求分析到设计,是一个完整的体系,这提高了我分析问题的能力。
当遇到问题时,回到书本,查找实际问题所需的理论知识,将理论和实际结合起来,以得到问题的解,这提高了我解决实际问题的能力。
其实课程设计和真正的实际需求还是有些差别的,比如我最开始就是以实际需求来分析灯的编码的,但是花了很长时间,最后发现8个灯根本实现不了实际生活中的交通灯的变化方式。
所以最后用老师告诉的编码方式,才得到正确结果。
本设计还有一个缺陷就是在本设计中,那个1秒的时间间隔只是一个模拟的数字,并不是准确的1秒。
但是该是如何使用8253分频实现真正1秒的时间间隔,这还有待改进。
在本次课程设计中我深有感触的是上学期学的汇编指令都不怎么记得了,这对于接口编程来说实在是个巨大的Bug。
指令不记得当然写程序就慢了!
以后会复习一下8086汇编指令的。
设计者:
日期:
2012年12月28日
附录:
DATASEGMENT
TAB1DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H
DATAENDS
STACKSEGMENTSTACK
DW64DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
CLI
MOVAL,80H ;8255A初始化,A,B,C作为输出口
OUT63H,AL
PUSHDS
MOVAX,0000H
MOVDS,AX ;数据段清零
MOVAX,OFFSETIRQ7;取中断程序入口地址(相对地址)
MOVSI,003CH ;填8259中断7中断矢量
MOV[SI],AX ;填偏移量矢量