交通灯的设计与实现 11 概论十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。
十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。
当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。
它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。
在此次关于交通灯课程设计中控制系统主要有8255并行口、8253定时/计算器、8259单极中断控制器实验等芯片组成。
整个课程设计通过8253定时功能和8259中断功能来实现交通灯控制系统。
1.1 8255芯片概述1.1.1 8255内部结构图1.1.2 8255的端口介绍·A口:是一个独立的8位I/O口,它的内部有对数据输入/输出的锁存功能。
·B口:也是一个独立的8位I/O口,仅对输出数据的锁存功能。
·C口:可以看作是一个独立的8位I/O口;也可看作是两个独立的4位I/O陕西科技大学镐京学院课程设计(论文) 2口。
也是仅对输出数据进行锁存。
这三个端口均可看作是I/O口,但它们的结构和功能也稍有不同。
·A组和B组的控制电路这是两组根据CPU命令控制8255A工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255A的工作方式,也可以根据编程命令来对C口的指定位进行置/复位的操作。
A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位。
·数据总线缓冲器8位的双向的三态缓冲器。
作为8255A与系统总线连接的界面,输入/输出的数据,CPU的编程命令以及外设通过8255A传送的工作状态等信息,都是通过它来传输的。
·读/写控制逻辑读/写控制逻辑电路负责管理8255A的数据传输过程。
它接收片选信号CS及系统读信号RD、写信号WR、复位信号RESET,还有来自系统地址总线的口地址选择信号A0和A1。
1.1.3 8255的工作方式及硬件线路连接8255有三种工作方式,如下方式0 简单输入/输出――查询方式;A,B,C三个端口均可。
方式1 选通输入/输出――中断方式;A ,B,两个端口均可。
方式2 双向输入/输出――中断方式。
只有A端口才有使8255端口A工作在方式0并作为输入口,读取Kl-K8个开关量,PB工作在方式0作为输出口。
硬件线路连接8255 PC0-L3 PC1-7 PC2-L11 PC3-L15PC4-L2 PC5-6 PC6-L10 PC7-L14PB4-L1 PB5-L5 PB6-L9 PB7-L131.1.4 初始化程序MOV AL,80HOUT EE,ALMOV AL,00交通灯的设计与实现 3交通灯的设计与实现 3OUT EA,ALMOV AL,0f0HOUT EA,AL1.2 8253芯片简介1.2.1 8253基本功能介绍功能:可编程定时器/计数器,其定时与计数功能可由程序灵活地设定,设定后与CPU并行工作,不占用CPU的时间。
通道2工作在3方式下,提供计算一秒的中断请求信号。
①含有3个独立的16位计数器,能够进行3个16位的独立计数。
②每一个计数器具有六种工作方式;③能进行二进制/十进制计数(减法计数);④计数频率为0~2 MHz;⑤可作计数器或定时器。
8253有两条片内寄存器地址寻址线A0、A1,可寻 4 个片内寄存器。
u控制(命令)字地址 A1 = 1、A0 = 1u计数器 0 的R/W地址 A1 = 0、A0 = 0u计数器 1 的R/W地址 A1 = 0、A0 = 1u计数器 2 的R/W地址 A1 = 1、A0 = 01.2.2 8253的引脚与内部结构8253为24脚,双列直插封装。
其引脚排列与内部结构如图6.18所示。
和8255A 一样,其内部有一个三态数据缓冲器,以保证未选中时内部数据线和系统数据总线是“脱开”的。
三个计数器在使用时是独立的。
每一个计数器对外有三个引脚:CLK为计陕西科技大学镐京学院课程设计(论文) 4 数脉冲输入,GATE为门控信号(允许/禁止计数),OUT为输出信号。
每一个计数器占用一个I/O端口地址,加上控制字口,一片8253共占用4个I/O端口地址。
和8255A 一样,8253也设置了两个用于端口寻址的引脚A1和A0。
这两个信号与片选信号、CPu 读/写信号相配合,实现对8253内部端口的操作。
8253内部结构图如下:8253内部结构图1.2.3 8253的初始化程序MOV AL,00110110bOUT CONTROL,ALMOV AX,2500MOV DX,COUNT0OUT DX,ALMOV AL,AH交通灯的设计与实现 5OUT COUNT0 ,ALMOV AX,DATAMOV DS,AX1.38259芯片介绍1.3.1 8259主要功能及内部结构·一片8259A可以接受并管理8级可屏蔽中断请求,通过9片8259A级联可扩展至64级可屏蔽中断优先控制。
·对每一级中断都可以通过程序来屏蔽或允许。
·在中断响应周期,8259A可为CPU提供相应的中断类型码。
·8259A的初始化命令字共有4个ICW1-ICW4,进行初始化时要求ICW1-ICW4按一定的顺序写入。
8259内部结构陕西科技大学镐京学院课程设计(论文) 6 1.3.2 8259的初始化程序MOV DX,218HMOV AL,00010010bOUT DX,ALMOV AL,08HMOV DX,219HOUT DX,AL交通灯的设计与实现72 交通灯设计与实现2.1 总体方案设计交通灯的工作过程如下:设十字路口的1、3为南,北方向,2、4为东西方向,初始态为4个路口的红灯全亮。
之后,1、3路口的绿灯亮,2、4路口的红灯亮,1、3路口方向通车,2个路口的LED数码管开始倒计时25秒。
延迟20秒后,1、3路口的绿灯熄灭,而1,3路口的黄灯开始闪烁(1HZ)。
闪烁5次后,1、3路口的红灯亮,同时2、4路口的绿灯亮,2、4路口方向开始通车,2个路口的LED数码管重新开始倒计时25秒。
延迟20秒时间后,2、4路口的绿灯熄灭,而黄灯开始闪烁。
闪烁5次后,再切换到1、3路口方向。
之后,重复上述过程。
当有紧急情况时,2个方向都红灯亮,倒计时停止,车辆禁止通行,当紧急情况结束后,控制器恢复以前的状态继续工作。
在设计中采用6个发光二极管来模拟2个路口的黄红绿灯,每个路口用2个数码管来显示通行或禁止剩余的时间。
紧急情况用一个单脉冲发生单元申请中断来模拟,紧急情况结束后,再发一个中断来恢复以前的状态。
根据前面的介绍,本设计硬件由定时模块、发光二极管模块和紧急中断模块组成。
定时模块采用硬件定时和软件定时相结合的方法,用8253定时/计数器定时100ms,再用软件计时实现所需的定时。
发光二极管模块由8255控制发光二极管来实现。
紧急中断模块是由单脉冲发生单元和8279中断控制器组成。
程序主要是由定时子程序、发光二极管显示子程序、中断服务程序组成。
包括对8253、8255以及8259等可编程器件的初始化编程。
2.1.1 硬件设计本课题的设计可通过实验平台上的一些功能模块电路组成,由于各模块电路内陕西科技大学镐京学院课程设计(论文)8 部已经连接,用户在使用时只要设计模块间电路的连接,因此,硬件电路的设计及实现相对简单。
完整系统的硬件连接如图1所示。
硬件电路由定时模块、发光二极管模块和紧急中断模块组成。
(1)连接8255并行口实验控制交通灯实验电路运行并使其成功能通过软件控制其交通灯控制系统。
(2)连接8259单极中断控制器实验电路运行并使其成功能中断控制。
(3)连接8253定时/计数器实验电路运行并使其能定时/计数器功能,并产生方波。
(4)把上面3个实验电路全部连接起来,就是硬件控制的交通灯控制系统。
8253的计数器0来实现定时100ms。
Clk0接实验平台分频电路输出Q6,f=46875hz。
GATE0接8255的PA0,由8255输出来控制计数器的起停。
OUT0接8259的IRQ2,定时完成申请中断,进入中断服务程序。
发光二极管显示模块由8255输出来控制发光二极管的亮灭。
8255输出为低电平时,对应的发光二极管就点亮,否则就熄灭。
交通灯的对应关系如下:紧急中断模块是由单脉冲发生单元和8259中断控制器,单脉冲发生单元主要用来请求中断,然后做出紧急情况处理。
2.1.2 软件设计根据交通灯的工作过程和电路连接情况,交通灯的工作状况见下表所示。
正常工作时交通灯在前4个状态间运行,出现紧急情况进入状态5,紧急情况结束后,恢复原状态。
序号 交通灯工作情况PC 输出数据持续时间 下个状态 1 13绿灯亮,24红灯亮 C3H 20s 1 2 13黄灯闪烁,24红灯亮 A3H ,E3H 5s 2 3 13红灯亮,24绿灯亮 66H 20s 3 4 13红灯亮,24黄灯闪烁 65H,67H 5s 05所有红灯亮(紧急情况)63H不确定恢复原状态(1)软件设计思路本程序由主程序、定时中断子程序和外部中断子程序组成。
主程序主要负责系统初始化和等待中断。
定时中断子程序主要负责数码管显示刷新和红绿黄灯各种状态切换。
外部中断子程序负责紧急情况处理和处理完恢复。
8253计数的起停由8255的PA0控制,8255的PA0输出1时,8253开始计数,交通灯Q6OUT08253 GA TE0 Clk0P A08255 PC地址 CS1 译码 CS2 电路 CS3数码管显示模块IRQ2 8259IRQ3发光二极管电路单脉冲发生单元PC BUS 图1 系统硬件电路图按正常状态切换工作,PA0输出0时,计数器停止工作,交通灯不再按正常状态切换。
8253开始计数后每10ms发出一个中断申请信号,在中断子程序中先刷新数码管,然后判断当前状态,进入相应的处理程序进行处理。
当有紧急情况时进入外部中断服务子程序,先让8253停止计数,然后点亮所有的红灯,下一次外部中断处理时,恢复原来的交通灯状况,启动8253开始工作。
(2)主程序设计流程图开始↓置8255控制字82H,使B口数据保存在BL中↓读取PB口数据保存在BL中↓置8255控制字80H,使各端口均为输出口,且均工作于方式0↓使四个路口的红灯全亮↓延时一段时间→↓点亮1、3路口绿灯↓延时↓熄灭1、3路口绿灯↓1、3路口黄灯闪烁↓四个红灯全亮↓点亮2、4路口绿灯↓延时↓熄灭2、4路口绿灯↓2、4路口黄灯闪烁程序流程(1)首先写8255、8259、8253芯片的端口地址。
(2)初始化8255、8259、8253芯片(3)设置输出方式。
(4)写状态0的程序:东西红南北绿。
(5)写状态1的程序:东西方向黄灯闪烁,南北绿灯。