基于可编程控制的交通红绿灯模拟系统设计
扫描二维码
随时随地手机看文章
1. 需求分析
本系统的设计首先必须了解交通路灯的亮灭规律。设有一个十字路口,1、3 为南,北方向, 2、4 为东,西方向,初始态为4 个路口的红灯全亮。之后, 1、3 路口的绿灯亮,2、4 路口的红灯亮, 1、3 路口方向通车。延迟一段时间后, 1、3 路口的绿灯熄灭,而1、3 路口的黄灯开始闪烁。闪烁若干次后, 1、3 路口的红灯亮, 同时 2、4 路口的绿灯亮, 2、4 路口方向开始通车。延迟一段时间后, 2、4 路口的绿灯熄灭,而黄灯开始闪烁。闪烁若干次后,再切换到1、3 路口方向。之后,重复上述过程。对于各组灯的亮灭,我们运用的是8255A 的输入输出功能。
2. 对于各组灯亮灭的时间控制方案
A 利用软件 –程序来完成对时间延时的控制。
此方案特点:软件定时是最简单的定时方法,它不需要硬件支持,只要让机器循环执行某一条或一系列指令,这些指令本身并没有具体的执行目的,但由于执行每条指令都需要一定的时间,重复执行这些指令就会占用一段固定的时间。因此,习惯上将这种延时方法称为软件延时。通过正确的选取指令和改变定时时间,灵活方便,而且节省费用。这种方法的缺点明显就是CPU 的利用律太低,在指定的循环期,CPU 不能去做任何其他有用的工作,而仅仅是在反复的循环,等待预定的定时时间到来,在许多情况下这样是不允许的[1]。比如,对动态存储器的定时刷新操作,只要处于开机状态,就需要一直不停地进行下去,显然不能采用软件延时。
B.利用芯片8253 芯片定时控制红绿灯的亮灭时间。
此方案特点:可编程定时器/计数器利用硬件电路和中断的方法控制定时,定时时间和范围完全有软件来确定和改变,并有微处理器的时钟信号提供时间基准,因这种时钟信号由晶体震荡器产生,故计时精确稳定。但该时钟信号频率太高,所以要把它送到专门的计数器/定时器芯片进行分频后,才能产生个中所需要的定时信号。用可编程定时器/计数器电路进行定时时,先要根据预定的定时时间,用指令对计数器/定时器芯片设定计算初值,然后启动芯片进行工作。计数器一旦开使工作后,CPU 就可以去做别的工作了,等计数器到了预定的时间,变自动形成一个输出信号,该信号可以向CPU 提出中断请求,通CPU 定时时间已到,使CPU 做相应的处理[2]。或者直接输出信号启动设备去工作。这种方法不但显著提高了CPU 的利用率,而且定时时间由软件来设置,使用起来十分的灵活方便,加上定时时间又很精确,所以获得了广泛的应用。
由上可知,该模拟系统设计的目的是控制车辆的有序流动,CPU 在程序执行过程中并没有其他的工作要做只是单一的使程序正常运行,所以也就不用考虑其利用率的问题的,在从节省资金的方面考虑第一种方案比第二种少用一个8253,而且第一种方案只用一个芯片在维修方面也比第二种方案方便。综合这些因素,我们最终选择第一种方案作为我们的设计方案。
3. 电路设计及功能
3.1 8255 原理及接线图
8255 是一种通用可编程并行输入输出接口芯片,通过对它进行编程,芯片可工作于不同的工作方式,用8255 作接口时,通常不需要附加外部逻辑电路就可直接为CPU 与外设之间提供数据通道,8255 内部包含3 个8 位输入输出端口A,B,C,通过外部24 根输入输出线与外设交换数据或进行通信联络。端口A 和端口B 都可以用作一个8 位的输入口或8 位的输出口,出口既可作8 位输入输出口又可分为两个4 位输入输出口,还常常用来配合A口和B 口工作,用来产生A 口和B 口的端口状态信号,8255A 有两类控制字,一类控制字用来定义各端口的工作方式,称为方式选择控制字,另一类控制字用于对C 端口的任一位置进行置位或者复位操作,称为置位复位控制字对8255A 进行编程时这两种控制字都要写入控制字寄存器中,但方式选择控制字的D7 位总是1,而置位复位控制字的D7 位总是0[3]。
3.2 系统设计应注意的问题
A .程序中应设定好8255A 的工作模式,使三个端口均工作于方式0,并处于输出态[4]。
B. 8255A 的A 端口地址为:300H, B 端口地址为: 301H, C 端口地址为: 302H, 控制口地址为:303H
C.8255A 可编程并行接口芯片的特性和编程命令: 8255A 具有两个人8 位(A 口和B 口)和两个4 位(C 口高/低4 位)并行I/O 端口。
4. 软件模拟界面
软件模拟界面如图1 所示。
图1 软件模拟界面
5. 软件模拟流程图
软件模拟流程图如图2 所示。
图 2 软件模拟流程图示意
6. 系统核心程序代码
7. 测试与分析
编写次程序的时候遇到的主要问题及解决方案:
A. 延时问题的解决:作者查阅了许多相关资料,最后选中程序中所用到的提取系统时间的这个方法,其原因主要是因为这段语句比较短,不容易出错,但是有一个缺点就是不能使所添入的时间加上系统时间大于等于24:00,要不就会出错,但是这个缺陷可以人工避免。
B. 循环问题的解决:针对该问题作者也尝试了很多方法,但最后选择了GOTO 跳转语句解决这个问题。虽然在高级程序语言中我们并不提倡使用GOTO 语句,但由于我们在此使用的汇编语言需要经常性地与硬件交互[5],使用该语句反而会使得问题解决起来最简单,最方便,程序易懂,且不易出错。
8. 结论
电子设计正在当今社会发挥越来越重要的作用,其采用的软硬件结合技术也逐渐成熟,该模拟系统正是采用软硬相结合的方法实现的[6]。该模拟交通红绿灯的设计实现对于读者了解在我们日常生活中发挥巨大作用的交通指挥系统很有帮助,其对于交通灯原理的揭示对于电子设计的探索研究提供了思路,相信随着时代的发展,我们能见证更多更好的电子设计产品问世。