1 任务及要求
1.1 设计任务
交通信号灯的控制:
(1)通过 8255A 并口来控制 LED 发光二极管的亮灭。
(2)A 口控制红灯,B 口控制黄灯,C 口控制绿灯。
(3)输出为 0 则亮,输出为 1 则灭。
(4)用 8253 定时来控制变换时间 。
1.2 设计要求
设有一个十字路口,1、3 为南,北方向,2、4 为东西方向,初始态为 4 个
路口的红灯全亮。之后,1、3 路口的绿灯亮,2、4 路口的红灯亮,1、3 路口方
向通车。延迟 30 秒后,1、3 路口的绿灯熄灭,而 1,3 路口的黄灯开始闪烁(1HZ)。
闪烁 5 次后,1、3 路口的红灯亮,同时 2、4 路口的绿灯亮,2、4 路口方向开始
通车。延迟 30 秒时间后,2、4 路口的绿灯熄灭,而黄灯开始闪烁。闪烁 5 次后,
再切换到 1、3 路口方向。之后,重复上述过程。
2 设计思想
2.1 硬件设计思想
通过并行接口芯片 8255A 和 8086 计算机的硬件连接,以及通过 8253 延时
的方法,来实现十字路口交通灯的模拟控制。
如硬件连接图所示,红灯(RLED),黄灯(YLEDD)和绿灯(GLED)分别接在 8255
的 A,B,C 口的低四位端口,PA0,PA1,PA2,PA3 分别接 1,2,3,4 路口的红
灯,B,C 口类推。8086 工作在最小模式,低八位端口 AD0~AD7 接到 8255 和 8253
的 D0~D7,AD8~AD15 通过地址锁存器 8282,接到三八译码器,译码后分别连到 8255
和 8253 的 CS 片选端。8253 的三个门控端接+5V,CLOCK0 接由分频器产生的 1MHZ
的时钟脉冲,OUT0 接到 CLOCK1 和 CLOCK2,OUT1 接到 8086 的 AD18,8086 通过检
测此端口是否有高电平来判断是否 30S 定时到。OUT2 产生 1MHZ 方波通过或门和
8255 的 B 口共同控制黄灯的闪烁。
2.2 软件思想设计
1
通过双重循环来实现交通灯的控制。开始让红灯全部亮,绿灯和黄灯全部
熄灭,让南北方向的绿灯亮,东西方向的红灯亮。第一层循环用来控制十字路口
的灯的循环切换。在第一层循环中嵌套一层循环来控制 8253 延时 30 秒时间是否
到,如果未到,继续让南北方向的绿灯亮,东西方向的红灯亮。如果已经延时
30 秒,则退出循环,让南北方向绿灯灭,东西方向红灯不变,南北方向黄灯开
始闪烁。接着又嵌套一层循环来控制黄灯的闪烁次数,如果黄灯未闪烁 5 次则继
续等待,如果黄灯闪烁已经达到 5 次则退出循环,让南北路口的红灯亮,同时
东西路口的绿灯亮,东西路口方向开始通车;再延时 30 秒,东西方向绿灯灭,
黄灯闪烁 5 次,返回到初始化后一条语句,又开始重复上述过程。
3 电路原理及电路图
3.1 电路原理
由于 8255A 与 8086CPU 是以低八位数据线相连接的,所以 8255A 的 1A 、 0A 线
分别与 8086CPU 的 2A 、 1A 线相连,而将 8086 的 0A 线作为选通信号。如果是按
8255A 内部地址来看,则在图中它的地址是 PA 口地址即(CS+000H),PB 口地址为
(CS+001H),PC 口地址为(CS+002H),命令控制口地址为(CS+003H),其中,CS
为 8255 片选信号 CS 的首地址;若是按 8086CPU 地址来看,则 8255A 的地址是
PA 口地址即(CS+000H),PB 口地址为(CS+002H),PC 口地址为(CS+004H),命令
控制口地址为(CS+006H)。当 CS=0288H,则 PA 口地址为 0288H,PB 口地址为
028AH,PC 口地址为 028CH,命令控制口地址为 028EH。
3.2 电路原理图
2
4 流程图
4.1 流程图
图 3-1 电路原理图
3
初始化;
延时 30 秒,让绿灯
红灯亮,南北路口方
向通车;
黄灯闪烁 5 次;
南北路口的红灯亮,同时
东西路口的绿灯亮,东西
路口方向开始通车;
东西路口的绿灯熄灭,而黄灯
开始闪烁。闪烁 5 次后,再切
换到南北路口方向;
初始化 8255,8253
红灯全亮
绿灯黄灯全灭
1,3 绿灯亮
2,4 红灯亮
等待 8253 延时 30s 时间
是否到?
N
Y
1,3 绿灯灭
2,4 红灯不变
1,3 黄灯闪烁
等待黄灯闪烁 5 次?
N
Y
1,3 红灯亮
2,4 绿灯亮
8253 延时 30s
2,4 绿灯灭
黄灯闪烁 5 次
图 4-1 流程图
4
5 程序清单
INIT:
DATA SEGMENT; 设置数据段,以及端口地址分配
PORTA EQU 218H
PORTB EQU 219H
PORTC EQU 21AH
PTCON8255 EQU 21BH
PORT0 EQU 238H
PORT1 EQU 239H
PORT2 EQU 240H
PTCON8253 EQU 241H
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
MOV AX,DATA
MOV DS,AX
MOV DX, PTCON8253
MOV AL,36H
OUT DX,AL
MOV DX,PORT0
MOV AX,2710H
OUT DX,AL
MOV AL,AH
OUT DX,AL;通道 0 工作方式 3 周期 0.01s
MOV DX, PTCON8253
MOV AL,71H
OUT DX,AL;通道 1 工作方式 1
MOV DX, PTCON8253
MOV AL,96H
OUT DX,AL
5
STA:
MOV DX,PORT2
MOV AL,64H
OUT DX,AL;通道 2 工作方式 3 周期 1s 8253 初始化完成
MOV DX, PTCON8255
MOV AL,80H
OUT DX,AL;8255 初始化 A,B,C 口均工作在方式 0
MOV DX,PORTA
MOV AL,0
OUT DX,AL
MOV DX,PORTB
MOV AL,0FH
OUT DX,AL
MOV DX,PORTC
MOV AL,0FH
OUT DX,AL;灯初始化完成
MOV DX,PORTA
MOV AL,0A0H
OUT DX,AL
MOV DX,PORTB
MOV AL,0F0H
OUT DX,AL
MOV DX,PORTC
MOV AL,50H
OUT DX,AL;1,3 绿灯亮,2,4 红灯亮
MOV DX,PORT1
MOV AX,0BB8H
OUT DX,AL
MOV AL,AH
OUT DX,AL;8253 通道 1 赋值 开始计时
SCAN1: MOV AL,0
MOV DX,PTCON8255
6
FLA1:
TEST1:
MOV AL,90H
OUT DX,AL
MOV DX,PORTA
IN AL,DX
AND AL,0FH
CMP AL,1
JNZ SCAN1;扫描 PA7 口
MOV DX, PTCON8255
MOV AL,80H
OUT DX,AL
MOV DX,PORTC
MOV AL,0F0H
OUT DX,AL
MOV DX,PORTB
MOV AL,50H
OUT DX,AL
MOV CX,0
MOV DX,PTCON8255;检测 PB7
MOV AL,82H
OUT DX,AL
MOV DX,PORTB
IN AL,DX
AND AL,0FH
MOV AH,AL
MOV DX,PTCON8255
MOV AL,82H
OUT DX,AL
MOV DX,PORTB
IN AL,DX
AND AL,0FH
XOR AL,AH
7
ADD CL,AL
CMP CL,9
JNZ TEST1;闪烁 5 次
MOV DX, PTCON8255
MOV AL,80H
OUT DX,AL
MOV DX,PORTA
MOV AL,50H
OUT DX,AL
MOV DX,PORTB
MOV AL,0F0H
OUT DX,AL
MOV DX,PORTC
MOV AL,0A0H;1,3 红灯亮,2,4 绿灯亮
MOV DX,PORT1
MOV AX,0BB8H
OUT DX,AL
MOV AL,AH
OUT DX,AL;8253 通道 1 赋值 开始计时
SCAN2: MOV AL,0
MOV DX,PTCON8255
MOV AL,90H
OUT DX,AL
MOV DX,PORTA
IN AL,DX
AND AL,0FH
CMP AL,1
JNZ SCAN2
MOV DX, PTCON8255
MOV AL,80H
OUT DX,AL
8
FLA2: