8255交通灯Word格式文档下载.docx
《8255交通灯Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《8255交通灯Word格式文档下载.docx(25页珍藏版)》请在冰点文库上搜索。
数理与信息工程学院07计算机专升本孙斌
指导教师:
余水宝
第1节引言
近年来,随着科技的迅猛发展,单片机在各行各业中的应用不断扩张和深入。
与此同时,也带动了传统控制、检测等各项技术的日益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但只有单片机方面的知识仍然是不够的,还应根据具体的硬件结构,软硬件结合,这样才能设计制作出具有相应的基本应用功能的系统,尔后再在此基础上不断完善,使系统更加趋于成熟。
在单片机的诸多实际应用系统中,交通红绿灯的应用系统设计是较早和较为普遍及广泛的。
相信通过对交通灯控制系统的设计,对于提高自身的软硬件能力,尤其是单片机的实际应用能力会有相当大的裨益与收获。
1.1交通灯控制系统概述
当今社会,红绿灯普遍存在于各个街道路口,为疏导川流不息的交通车辆起着不可忽略的重要作用。
交通红绿信号灯的出现,使交通得以有效管制,对于疏导交通流量、提高道路通行能力,减少交通事故的发生有着明显效果。
红绿信号灯的含义为:
绿灯是通行信号,面对绿灯的车辆可以直行,左转弯和右转弯,除非另一种标志禁止某一种转向。
左右转弯车辆都必须让合法地正在路口内行驶的车辆和过人行横道的行人优先通行;
红灯是禁行信号,面对红灯的车辆必须在交叉路口的停车线后停车。
黄灯是警告信号,面对黄灯的车辆不能越过停车线,但车辆已十分接近停车线而不能安全停车时可以进入交叉路口。
本交通灯控制系统,由于器材等原因的限制,以红绿两色灯的亮灭控制为主要研究对象,但其仍然具有较强的实用性且操作简单、扩展功能强。
1.2本设计的主要任务
由于器材等原因的限制,本设计的主要任务是利用可编程接口芯片8255A、8523和中断控制器8259设计一个基于单片机的交通灯控制系统,要求能在TDN86/51实验箱和PC机上,根据交通灯的实际亮灭规律成功的对其进行控制。
根据实验实际情况,将交通灯的亮灭规律定义如下:
设有一个十字路口,1、3为南,北方向,2、4为东,西方向,初始态为1、3路口的绿灯亮,2、4路口的红灯亮,数码显示管开始倒计时,1、3路口方向通车。
数码显示管的数值为零后,1、3路口的绿灯熄灭,1、3路口的红灯亮,同时2、4路口的绿灯亮,数码显示管重新置入初值,2、4路口方向开始通车。
数码显示管的数值为零后,2、4路口的绿灯熄灭,再切换到1、3路口方向。
之后,重复上述过程。
1.3主要设计思路
在TDN86/51实验箱上完成硬件电路的搭建,PC机上完成程序的编写,调试。
用8088做CPU,8253做定时器,8255做LED和数码显示管的接口芯片,8259做中断控制器。
数码显示管的初值定为60秒,8253定时时间为1秒,定时时间到引起中断,执行中断服务程序。
在中断服务程序中,检查数码显示管的数值是否为零,若为零,则改变1、3和2、4交通灯的状态,数码显示管置初值;
否则,数码显示管当前值减一,交通灯状态不变。
第2节系统部分主要硬件设计及原理
在本交通灯控制系统设计过程中,用到了8255(可编程并行通信接口芯片),8259(可编程中断控制器),74LS373(地址锁存器),74LS245(双向数据传送器),8284(时钟发生器),和8253(定时计数器)。
用8088做CPU,用8253做定时器,8259做中断控制器。
2.1各芯片间的关系及原理
8253的OUT0输出到8259的IRQ0上,8259的INT发出中断请求信号到8088的INTR,8088的
(低电平有效)发出中断响应信号给8259的
,用8255来连接数码显示管的接口芯片和发光二级管,8088CPU数据信号和地址信号通过8282,8286发送出去,用32K的62256存储器来存储这些程序和数据。
地址通过138译码器进行译码。
2.2138译码器地址译码的设计原理
图2-1138译码器地址译码的设计原理
译码器有3个控制端,分别为G(高电平有效),
(低电平有效),
(低电平有效),当G=1,GA和GB全为0时,译码器处于工作状态。
根据8255的端口号:
60H,61H,62H,63H,8259的端口地址:
20H,21H。
8253的端口号:
40H,41H,42H,43H,分别写出他们的16位二进制表示形式,可观察出从A7——A15及A2——A3都是0,连接到或门上。
A4,A5,A6位中的数是变化的,分别接到A,B,C三个端口中。
Y2的端口号为20H,21H,所以与8259的
(低电平有效)相连,Y4与8253的
(低电平有效)相连,Y6与8255的
相连。
2.3各接口芯片引脚的介绍及其功能
8088CPU包括16条数据线和20条地址线,和其他的控制信号共同构成了40个引脚的双列直插式封装结构。
它有两种工作方式:
最大模式和最小模式。
在本设计中采用了最小模式。
由于8088的外形数据总线只需8条,因此分时复用地址数据总线只有AD7——AD0,而A1——A8专门用来传送地址。
在T1状态下,复位A16——A19通过8282地址锁存器输入到存储器中,T2——T4状态下,复用信号AD0——AD7通过8282输入到存储器中,A8——15直接输入到存储器中。
RD(低电平有效)读信号,三态输出,表示当前CPU正在读存储器或I/O端
WR(低电平有效)写信号,三态输出,表示当前CPU正在写存储器或I/O端口。
M/IO存储器或I/O端口访问信号,当它为高电平时,表示当前CPU正在访问I/O端口;
为低电平时,表示当前CPU正在访问存储器。
READY准备就绪信号,外部输入,高电平有效。
表示CPU访问的存储器或I/O端口已经为传送做好准备。
INTR中断请求信号,由外部输入,电平触发,高电平有效,当它有效时,表示外部向CPU发出中断请求。
CPU在每个指令的最后一个时钟周期对它进行测试。
INTA(低电平有效)中断响应信号,外部输入,用来响应外部发来的INTR信号,在中断响应周期中,可作为读选通信号。
NMI不可屏蔽中断请求信号,由外部输入,边沿触发,正跳沿有效,CPU一旦测试到NMI请求有效,待当前指令执行完就自动从中断入口地址表中找到类型2中断服务程序的入口地址,并去执行。
RESET复位信号,由外部输入,高电平有效。
它至少保持4个时钟周期。
CPU接受到该信号后,停止进行的操作,并将标志寄存器、段寄存器、IP和指令队列等复位到初始状态。
ALE地址锁存允许信号,由外部输入,高电平有效,它可作为8283的选通信号。
DT/R数据发送/接受控制信号,在该设计中用来控制数据的传送方向。
当它为高电平时,表示数据从CPU向外部输出,为低电平时,表示数据从外部向CPU输入。
DEN(低电平有效),数据允许信号,三态输出。
在最小模式下用来做数据收发器的选通信号。
CLK主时钟信号,由8284时钟发生器输入。
SS0总线高字节有效信号,三态输出,低电平有效,它与DT/R,IO/M一起表示8088在最小模式下的工作周期状态。
8255是可编程并行通信接口芯片,一共有40个引脚。
与外设相连接的有:
PA7——PA0:
A口数据信号线,在该设计中连接数码显示管的位码。
PB7——PB0:
B口数据信号线,在该设计中连接数码显示管的段码。
PC7——PC0:
C口数据信号线,在设计中连接红绿灯的D0——D7接口。
与CPU相连的RESET:
复位信号,高电平有效。
当该信号来到时,所有内部寄存器都被清除。
D7——D0是8255A的数据线,和系统数据总线相连。
CS:
片选信号,低电平有效。
A1、A0为端口选择信号,8255A内部有3类数据端口和1个控制端口,共4个端口,当A1,A0为00时,选中A端口;
为01时,选中B端口;
为10时,选中C端口;
当为11时,选中控制口。
其地址分别为:
60H,61H,62H,63H。
8259是可编程中断控制器(PCI),又称优先级控制器具有+5V电源供电,可与其它8259A芯片级联开扩大中断功能。
在该设计中,为了实现中断和定时的功能,8259的IRQ7与8253的OUT2产生级联,IRQ0与8253中的IRQ0产生级联。
IR0——IR7与外部设备连接的中断请求输入引脚。
D0-D7,WR(低电平有效),RD(低电平有效),INTA(低电平有效),INT。
与CPU连接的数据通路和控制信号。
用于8259A级联的引脚CAS0——CAS2,SP/EN。
端口地址选择信号CS,A0。
8282地址锁存器,具有8位数据输入端DI7——DI0及8位数据输出端DO7——DO0,当STB端的选通脉冲变为低电平时,DI0——DI7的数据被锁存起来,当输出允许信号OE为低电平时,数据才会出现在8282的数据输出端DO7——DO0,否则,三态缓冲器的输出DO7——DO0处于高阻状态,在8086/8088系列微机中,8282/8283用来作为地址锁存器,用ALE信号作为选通脉冲STB输入。
这样才能在总线周期的第一个时钟周期经过总线将地址信息锁存于8283中,从而保证了在整个总线周期内存储器和I/O接口芯片都能获得稳定的地址信息。
8253是计数/定时控制器,一共有三个计数器。
每个计数器都有三个引脚。
CLK脉冲输入引脚:
计数器对该引脚输入的脉冲进行计数。
它的输入脉冲可以是任何脉冲提供的。
GATE门控脉冲输入引脚:
这是外部控制计数器工作的脉冲输入引脚,当GATEW为0时禁止计数器工作,为1时允许工作。
OUT计数到0/定时时间到输出引脚:
当计数到0时,该引脚输出。
在不同的工作方式下,输出不同形式的信号。
8284时钟发生器:
8284除了为CPU和系统提供时钟信号外,还提供经时钟同步的复位信号RESET和就绪信号READY。
X1,X2晶体输入端,它连接外接晶体的接线端,晶体频率是CPU时钟频率的3倍。
CLK处理器时钟(输出)它用作8086/8088CPU以及直接与处理器局部总线相连的器件的时钟信号或定时信号。
CLK信号频率是晶体频率的1/3,其高电平为4.5V,用于驱动MOS器件。
2.48255与数码显示管的连接如下图所示
图2-28255与数码显示管的连接图
说明:
8255数码显示管及二极管的连接:
8255中B口分别连接到数码显示管的段码a,b,c,d,e,f上,A口分别连接到数码显示管的位码x1,x2,x3,x4中,C口连接到发光二极管的PC0——PC6(A口和B口和数码显示管的连接可根据实际程序设计改变)。
2.58253和8259的电路连接图如下
图2-38253和8259的电路连接图
8253中OUT2连接到8259的IR7中,产生中断,发送中断类型码到8088中,8088根据中断类型码从存储器中找到中断向量,读取中断向量程序,判断数码显示管中的数值是否为0,若为0,则红、绿等交替;
否则,数值-1。
定时1s,产生中断请求,如此反复,实现了设计要求。
第3节系统软件设计
本交通灯控制系统选用汇编语言编写主程序以及各芯片调试子程序。
并努力做到:
界面友好、操作方便;
实现功能要求;
模块功能明确。
3.1主程序流程图
图3-1主程序流程图
;
8259A初始化,其中地址为20H,21H
moval,13h;
设置ICW1,单片,上升沿触发,需要设置ICW4
out20h,al;
ICW1写入8259A的偶地址中
moval,08h;
设置ICW2,中断类型号的基值(即IR0的类型号)为08H
out21h,al;
ICW2写入8259A的奇地址中
由于是单片8259,所以不需要设置ICW3
moval,09h;
设置ICW4,非自动结束,缓冲方式,完全嵌套
ICW4写入8259A的奇地址中
moval,6fh;
设置OCW1,开放4和7的中断请求口
OCW1写入8259A的奇地址中
8255A初始化,其中地址A口:
60H,B口:
61H,C口:
62H,控制口:
63H
moval,80h;
设置8255A工作方式控制字,A、B口都为方式0,输出
out63h,al
moval,0ffh
out61h,al
8253初始化,其中地址为通道0:
40H,通道1:
41H,通道2:
42H,控制寄存器:
43H
moval,35h;
设置8253控制字,通道0为工作方式2,BCD计数,先读写低字节,后读写高字节
out43h,al
moval,00h;
设置计数通道0的计数初值,先送低字节
out40h,al
moval,50h;
计数通道0的计数初值高字节
moval,0b1h;
设置8253控制字,通道2为工作方式0,BCD计数,先读写低字节,后读写高字节
moval,37h;
把计数初值写入通道2,先送低字节
out42h,al
moval,02h;
计数通道2的计数初值高字节
sti;
初始化完毕,开中断
3.2中断服务程序流程
图3-2中断服务程序流程图
中断服务程序
irq7:
pushax;
保护现场
pushcx
moval,37h;
out42h,al
moval,02h;
out42h,al
xordi,di
movcx,2
movdi,offsetnumber
l5:
cmpwordptr[di],0;
先比较个位再比较十位
jzl7
decwordptr[di]
jmpexit
l7:
adddi,2
cmpwordptr[di],0
jnel3
movsi,offsetaa;
将aa的地址送si;
moval,byteptr[si];
内容送al
out62h,al
notal;
先输出再取反,实现红绿灯的交替
movbyteptr[si],al;
重新对al赋值
movwordptr[di],6
jmpexit
l3:
subdi,2
movwordptr[di],9
cmpwordptr[di],0
jzl4
decwordptr[di]
l4:
movwordptr[di],5
loopl5
exit:
popcx;
恢复现场
popax
moval,20h
out20h,al;
发中断结束命令
sti;
开中断,因为系统在响应中断时,除了保护断点外,还自动关闭了中断允许位
iret;
中断返回
3.3实现红绿灯交替的流程图
图3-3红绿灯交替的流程图
设计思路:
1、3为南,北方向,2、4为东,西方向,初始态为4个路口的红灯全亮。
之后,1、3路口的绿灯亮,2、4路口的红灯亮,数码显示管开始倒计时,1、3路口方向通车。
3.4源程序清单
用8253定时时钟,8259A作中断,8255传送数据给4位的数码显示管
datasegment
tabledb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh
numberdw4dup(0);
开辟了4个字空间,用来存放四个数码显示管要显示的数字
aadb0c3h
dataends
stacksegmentstack
dw64dup(?
)
stackends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
cli;
关中断开始初始化
把中断服务程序的入口地址写入中断向量表中,使用的中断类型号为0FH
pushds
xorax,ax
movsi,4*0fh;
找到该中断类型号在中断向量表中的首地址
movax,offsetirq7
addax,2000h
movwordptr[si],ax;
把中断服务程序的偏移地址放入低字中
movax,0
movwordptr[si+2],ax;
把中断服务程序的段地址放入高字中
popds
8259A初始化,其中地址为20H和21H
moval,13h;
moval,08h;
out21h,al;
moval,09h;
moval,6fh;
moval,80h;
out63h,al
moval,0ffh
out61h,al;
B口屏蔽
moval,35h;
设置8253控制字,通道0为工作方式2,BCD计数,先读写低字节,后读写高字节(方式2不用写初值)
out43h,al
moval,00h;
out40h,al
moval,50h;
moval,0b1h;
out43h,al
4位数码显示管动态显示,并等待中断
moval,0fh
out62h,al
calldelay
again:
xorbx,bx;
将bx清零
movcx,02h
movah,0feh
next:
movsi,offsettable;
用si来存放段码
addsi,[number+bx]
moval,byteptr[si];
把段码送B口
cmpcx,02h
jzl6;
结果相等则转移
oral,80h;
置1,控制小数点亮
l6:
out61h,al
moval,ah;
把位码送A口
out60h,al
calldelay;
延时2ms
moval,0ffh;
关闭显示管
rolah,1;
获得下一个位码
addbx,2;
指向下一个要显示的段码
movsi,[number+bx]
moval,byteptr[si]
subbx,2
loopnext
jmpagain
pushax;
先比较个位,再比较十位
movsi,offsetaa
moval,byteptr[si]
notal
延时子程序
delay:
pushcx
movcl,0fh
l2:
movch,0fh
l1:
decch
jnzl1
deccl
jnzl2
popcx
ret
codeends
endstart
第4节总结
本系统的实现,根本上得益于老师教授的各方面知识,因为只有拥有老师教授的这些知识的基础上,本人才能进一步思考和摸索,才会有本系统的实现。
所以,在此向老师表示感谢。
通过对此次本交通灯控制系统的设计,使得自身对