交通灯实时控制系统.docx
《交通灯实时控制系统.docx》由会员分享,可在线阅读,更多相关《交通灯实时控制系统.docx(18页珍藏版)》请在冰豆网上搜索。
交通灯实时控制系统
1需求分析
1.1课程设计题目
交通灯实时控制系统。
伴随着社会的发展以及人们生活水平的提高,汽车的数量在不断的增加,交通的问题日益突出,单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。
以下就是运用数字电子设计出的交通灯:
用红灯来控制支路的交通通行,用绿灯来控制主干道的交通通行。
1.2设计目的
1)巩固和加深课堂所学知识;
2)学习掌握一般软硬件的设计方法和查询、运用资料的能力;
3)通过在TDN集成开发环境中对交通灯实时控制系统的设计与制作,综合应用8253、8259、8255芯片,深入了解和掌握利用可编程8255A进行控制的原理与方法;
4)通过这次课程设计,将课本上的理论知识和实际的应用有机的结合起来,以提高分析和解决问题的实际能力,通过对汇编语言程序代码的设计,编写,修改以提高自己实际编程能力。
1.3设计任务
1)任务:
设计一个交通灯控制系统
要求综合运用8259、8253、8255芯片设计十字路口的交通信号灯控制系统。
支线与主干线允许通车15秒,当支线允许通车时(15秒)中,若主干线15秒内已有10辆车到来,则申请中断,允许主干线通车,实现无交叉点通过。
2)设计任务要完成实验方案论证,进行十字路口的交通信号灯控制电路设计,画出电路原理图及实验电路图;搭建实验电路,进行软件编程、调试、运行以及使用说明文档的建立等一整套工作任务。
交通指示灯如图1-1
图1.1
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.循环以上步骤。
通过分析灯亮的规律,总结出如下的功能表:
表2-1交通灯亮灭功能表
灯
通车
南
红D7
北
红D6
东
红D5
西
红D4
南
绿D3
北
绿D2
东
绿D1
西
绿D0
东通车
0
0
1
0
1
1
0
1
南通车
1
0
0
0
0
1
1
1
西通车
0
0
0
1
1
1
1
0
北通车
0
1
0
0
1
0
1
1
2.1.2系统原理图
系统原理图如图2-1所示
图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程序总设计流程图
图4-1程序流程图
4.2延时1s子程序DELLAY1S流程图
此延时子程序不光实现延时,还调用了LED1子程序显示了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就返回的功能。
具体流程就如下。
图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这种芯片有了进一步的了解。
知道了它在实际应用中的功能以及它们初始化的方法。
这次课程设计从需求分析到设计,是一个完整的体系,这提高了我分析问题的能力。
当遇到问题时,回到书本,查找实际问题所需的理论知识,将理论和实际结合起来,以得到问题的解,这提高了我解决实际问题的能力。
其实课程设计和真正的实际需求还是有些差别的,比如我最开始就是以实际需求来分析灯的编码的,但是花了很长时间,最后发现8个灯根本实现不了实际生活中的交通灯的变化方式。
所以最后借用了同学告诉的编码方式,才得到正确结果。
本设计还有一个缺陷就是在本设计中,那个1秒的时间间隔只是一个模拟的数字,并不是准确的1秒。
但是该是如何使用8253分频实现真正1秒的时间间隔,这还有待改进。
设计者:
陈楠
日期:
2014年6月12日
附录:
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;填偏移量矢量
MOVAX,CS;段地址CS
MOVSI,003EH
MOV[SI],AX
POPDS
INAL,21H;读IMR
ANDAL,7FH;允许IR7中断
OUT21H,AL
STI;开中断
S0:
MOVAL,11001100B;状态0,东西方向通车15s,南北方向禁止通行
OUT60H,AL
MOVCX,15;延时25s
T0:
CALLDELLAY1S
LOOPT0
S1:
MOVAL,11001111B;状态1,东西方向允许通车5s闪灯,南北方向禁止通行
MOVCX,05H
OUT60H,AL
CALLDELLAY1S
DECCX
T1:
MOVAL,11001100B;东西方向5s闪灯,每秒亮灭一次
OUT60H,AL
CALLDELLAY1S
MOVAL,11001111B
OUT60H,AL
CALLDELLAY1S
MOVAL,11001100B
OUT60H,AL
CALLDELLAY1S
DECCX
MOVAL,11001111B
OUT60H,AL
CALLDELLAY1S
DECCX
JNZT1
S2:
MOVAL,00110011B;状态2,南北方向通车15s,东西方向禁止通行
OUT60H,AL
MOVCX,15;延时15s
T2:
CALLDELLAY1S
LOOPT2
S3:
MOVAL,00111111B;状态3,南北方向允许通车5s闪灯,东西方向禁止通行
MOVCX,05H
OUT60H,AL
CALLDELLAY1S
DECCX
T3:
MOVAL,00110011B;南北方向5s闪灯,每秒亮灭一次
OUT60H,AL
CALLDELLAY1S
MOVAL,00111111B
OUT60H,AL
CALLDELLAY1S
DECCX
MOVAL,00110011B
OUT60H,AL
CALLDELLAY1S
MOVAL,00111111B
OUT60H,AL
CALLDELLAY1S
DECCX
JNZT3
JMPS0
DELLAY1S:
;延时1s的子程序,实现延时1s并在数码管中显示CX中的内容
PUSHAX
PUSHBX
PUSHCX
CALLLED1
MOVCX,0FFFFH
D0:
PUSHAX
POPAX
LOOPD0
POPCX
POPBX
POPAX
RET
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
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
CODEENDS
ENDSTART
参考文献
[1]彭虎,周佩玲《微机原理与接口技术》北京,电子工业出版社2011
[2]王爽《汇编语言》北京,清华大学出版社2007
设计过程中质疑(或答辩)记载:
1.8255各端口的作用及初始化编程。
答:
A端口显示指示灯,B端口显示倒计时的高4位,C端口显示倒计时的低4位,IRQ7为中断接口。
8255的初始化:
MOVAL,80H
UT63H,AL
2.设几高5位为08H,从IRQ7引入中断中的中断类型n为多少,向量地址是多少?
答:
指导教师评语:
评分:
签名:
年月日