《微机原理与接口技术》课程设计报告
设计题目: 交通灯控制系统的设计
一、研究目的与意义
随着社会经济的发展,城市交通问题越来越引起人们的关注。人、车、路三者关系的协调,已成为交通管理部门需要解决的重要问题之一。城市交通控制系统是用于城市交通数据监测、交通信号灯控制与交通疏导的计算机综合管理系统,它是现代城市交通监控指挥系统中最重要的组成部分。所以,如何采用合适的控制方法,最大限度利用好耗费巨资修建的城市高速道路,缓解主干道与匝道、城区同周边地区的交通拥堵状况,越来越成为交通运输管理和城市规划部门亟待解决的主要问题。
在大、中城市,十字道口的红绿灯是交通法规的无声命令,是司机和行人的行为准则。十字道口的交通红绿灯控制是保证交通安全和道路畅通的关键。当前,国内大多数城市正在采用“自动”红绿交通灯,它具有固定的“红灯—绿灯”转换间隔,并自动切换。它们一般由“通行与禁止时间控制显示、红黄绿三色信号灯和方向指示灯”三部分组成。在交通灯的通行与禁止时间控制显示中,通常要么东西、南北两方向各50秒;要么根据交通规律,东西方向60秒,南北方向40秒,时间控制都是固定的。交通灯的时间控制显示,以固定时间值预先“固化”在单片机中,每次只是以一定周期交替变化。但是,实际上不同时刻的车辆流通状况是十分复杂的,是高度非线性的、随机的,还经常受认为因素的影响。采用定时控制经常造成道路有效应用时间的浪费,出现绿灯方向车辆较少,红灯方向车辆积压。其最大的缺陷就在于当路况发生变化时,不能满足司机与路人的实际需要,轻者造成时间上的浪费,重者直接导致交通堵塞。
二、系统总体分析
系统使用8086及数码管、LED灯,实现红绿灯转换倒计时以及红路灯转换。
使用8086、8255、8253、数码管、交通灯构成电路。由于8086数据I/O口与地址I/O口分时复用,故使用地址锁存器,根据ALE信号先将地址锁存,然后输出实际有效数据信号。
8255有三个端口PA、PB、PC口,其中PC口又可以分为高四位与低四位分别进行操作。在本系统中,PA口与PB口、PC口低四位输出信号,PC口高四位输入信号。在系统设计初始时,我设计了两个时钟信号来源,分别是直接使用1HZ脉冲信号计时和使用1MHZ CLOCK的8253芯片计时。经过反复思考与实验,最终发现脉冲信号与8086速度无法匹配,故舍去。
三、系统硬件设计
3.1 硬件设计说明
8086分为两种工作模式:最大模式与最小模式。8086处理器的最小工作模式在系统中只有一个微处理器,所有的总线控制信号都由此处理器产生。而最大工作模式在系统中包含两个或多个处理器,一个主处理器为8086,其他为协处理器。
根据系统的规模,选用8086最小工作模式,即8086第33号引脚MN/MX引脚接正电极。ready连接正极。
图1 8086最小系统连接
为平衡外设与CPU速率不匹配,使用8255芯片。
由于8086数据总线与地址总线复用,所以AD应与地址锁存器相连接,ALE作为锁存信号。同事AD应该与8255、8253连接。
3.2 分模块设计与主要器件描述
图2 锁存器阵列
74273锁存器:以ALE为锁存讯号,为上升沿触发,D0~D7端口为输入端,与8086 AD端口相连。Q0~Q7为分离出来的地址信号。
图3 译码电路
M/IO表示目前CPU对内存操作还是IO端口操作,所以此处作为译码芯片74154的一个片选信号。A、B、C、D为译码输入, IO0~IO15为译码输出。
图4 8253芯片
8253 CS—片选信号,由CPU输入,低电平有效,通常由端口地址的高位地址译码形成。
RD、WR——读/写控制命令,由CPU输入, 低电平有效。RD有效时,CPU读取由A1A0所选定的通道内计数器的内容。WR有效时,CPU将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。CPU对8253的读/写操作。
由于本系统选用软件触发,所以GATE上拉。为匹配速率,使用高频率的时钟信号,此处选择1MHZ。
图5 8255芯片
8255有3个通道A、B、C与外设连接,每个通道又有8根线与外设连接,所以8255可以用24根线与外设连接,若进行开关量控制,则8255可同时控制24路开关。各通道的引脚编号如下:
A口:编号为PA0~PA7,用于8255向外设输入输出8位并行数据。
B口:编号为PB0~PB7,用于8255向外设输入输出8位并行数据。
C口:编号为PC0~PC7,用于8255向外设输入输出8位并行数据,当8255工作于应答I/O方式时,C口用于应答信号的通信。
CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输.
RD:读信号线,当这个输入引脚为低跳变沿时,即/RD产生一个低脉冲且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低跳变沿时,即/WR产生一个低脉冲且/CS=0时,允许CPU将数据或控制字写入8255。
D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
图6 数码管与交通灯
3.3 系统硬件连接图
图7 电路图(1)
图8 电路图(2)
四、系统软件设计
4.1 软件设计说明
(简单说明控制软件的设计思路和控制流程)
4.2 程序流程图
4.3 程序清单
;8255
A_PORT EQU 200H
B_PORT EQU 202H
C_PORT EQU 204H
CRTL_PORT EQU 206H
;8253
PORT_0 EQU 400H
PORT_1 EQU 402H
PORT_2 EQU 404H
PORT_CRTL EQU 406H
STACK SEGMENT STACK
DB 256 DUP(?)
STACK ENDS
EDATA SEGMENT
DB 10 DUP(?)
EDATA ENDS
DATA SEGMENT
OUTBUFF DB 20 DUP(00H)
LEDTAB DB 03fh,006h,05bh,04fh,066h,06dh,07dh,007h,07fh,06fh,077h,07ch,039h,05eh,079h,071h
DATA ENDS
CODE SEGMENT PUBLIC 'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:EDATA
START: MOV AX, DATA
MOV DS, AX
MOV AX, EDATA
MOV ES, AX
MOV AX, STACK
MOV SS, AX
MOV AL, 088H
MOV DX, CRTL_PORT
OUT DX, AL
;8253
MOV AL, 34H
MOV DX, PORT_CRTL
OUT DX, AL
MOV AL, 1EH
MOV DX, PORT_0
OUT DX, AL
MOV AL, 03H
OUT DX, AL
MOV AX, 15
LEA DI, OUTBUFF
O4: CMP BYTE PTR[DI + 10], 00H
JNZ O1
INC BYTE PTR [DI + 10]
MOV DX, B_PORT
MOV AL, 0100B
OUT DX, AL
MOV AX, 5
JMP LOP1
O1: CMP BYTE PTR [DI + 10], 01H
JNZ O2
INC BYTE PTR [DI + 10]
MOV DX, B_PORT
MOV AL, 0010B
OUT DX, AL
MOV AX, 2
JMP LOP1
O2: CMP BYTE PTR [DI + 10], 02H
JNZ O3
INC BYTE PTR [DI + 10]
MOV DX, B_PORT
MOV AL, 0001B
OUT DX, AL
MOV AX, 5
JMP LOP1
O3: CMP BYTE PTR [DI + 10], 03H
JNZ O0
INC BYTE PTR [DI + 10]
MOV DX, B_PORT
MOV AL, 0010B
OUT DX, AL
MOV AX, 2
JMP LOP1
O0: CMP BYTE PTR [DI + 10], 04H
MOV AX, 00H
MOV [DI + 10], AX
JMP O4
LOP1:
PUSH AX
CALL DISP
MOV DX, C_PORT
IN AL, DX
TEST AL, 10H
JNZ nz
POP AX
DEC AX
JNZ LOP1
JMP O4
nz:
POP AX
JMP LOP1
;;显示
DISP PROC NEAR
AGAIN: PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
MOV CL, 0FEH
LEA SI, OUTBUFF
CALL D10
MOV [SI], AX
LEDDISP:
MOV AL, CL
MOV DX, C_PORT
OUT DX, AL
LEA BX, LEDTAB
MOV AL, [SI]
XLAT
MOV DX, A_PORT
OUT DX, AL
CALL DELAY_1S
MOV AL, 0H
MOV DX, A_PORT
OUT DX, AL
CMP CL, 0FDH
JZ NEXT
INC SI
ROL CL, 1
JMP LEDDISP
NEXT:
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DISP ENDP
;;延时
DELAY_1S PROC
PUSH CX
PUSH BX
MOV BX, 01H
D1:MOV CX, 06FH
D2:LOOP D2
DEC BX
JNZ D1
POP BX
POP CX
RET
DELAY_1S ENDP
;;进制转换
D10 PROC NEAR
PUSH BX
MOV BL, 10
DIV BL
POP BX
RET
D10 ENDP
CODE ENDS
END START