交通灯控制器的设计
一、实验要求
通过采用并行口8255A和定时器/计数器8253编写一模仿交通灯程序,在微机原理实验仪上调试,运行后可以看到LED灯在不停的红绿交替亮。
二、实验目的:
熟悉和掌握并行口8255A和定时器/计数器8253的初始化和综合使用。
三、实验电路及连接图:
根据实验要求设计实验原理图,并标明端口地址。
????????将8253和8255的A0、A1和实验平台上地址总线的A0、A1连接上,8253的CS连接至地址端口的320H,8255的CS连接至地址端口的340H(8253的通道0、控制口地址为320H、323H;8255的A口、C口、控制口地址分别为340H、342H、343H)。将8253的OUT0连接到8255的PC0。将8255的PA0、PA1、PA4、PA5对应连接到LED发光二极管的L3、L2、L7、L6。
????????计数次数问题。8253每个记数通道的记数范围为0~65536次。输入脉冲频率为5MHz=5×106Hz,则其周期为T=1÷5MHz = 2×10-7S。如果需要延时0.01S,则需要记数0.01÷(2×10-7)=50000次。因此,如果需要延时5秒,需要500个0.01秒,即延时子程序TIME中的循环次数为500次。
四、代码
CODE SEGMENT
ASSUME CS: CODE
START: MOV AL, 10000001B ;8255的A口方式0,输出,PC0-PC3输入
MOV DX, 343H ; 将工作方式控制字送往8255的控口
OUT DX, AL
MOV AL, 01110110B ;使用8253的通道1,方式3,方波发生器
MOV DX, 323H ; 将控制字送往8253的控口
OUT DX, AL
MOV AX, 50000 ;将计数初值50000送到通道1,先低后高
MOV DX, 321H
OUT DX, AL
MOV AL, AH
OUT DX, AL
AGAIN: MOV BX, 0 ;置循环次数
MOV DX, 340H ; A口输出红绿灯信号
MOV AL, 11011110B ; 南北红灯亮,东西绿灯亮
OUT DX, AL
CALL TIME ;调用延时程序,延时5s
MOV BX, 0
MOV DX, 340H ; A口输出红绿灯信号
MOV AL, 11101101B ;南北绿灯亮,东西红灯亮
OUT DX, AL
CALL TIME ;调用延时程序,延时5s
JMP AGAIN
TIME PROC ;检测一个方波计数周期(高电平-低电平)
MOV DX, 342H ;检测PC0是否为1,直到为0结束
RE1: IN AL, DX
AND AL, 1
CMP AL, 1
JE RE1
RE2: IN AL, DX ;检测PC0是否为0,直到为1结束
AND AL, 1
CMP AL, 0
JE RE2
INC BX ;循环次数加1
CMP BX, 500 ;循环共计500次,为5s
JL RE1
RET
TIME ENDP
CODE ENDS
END START
五、思考题
(1)如果要求绿灯熄灭之前闪烁两次(即绿灯灭0.5秒、亮0.5秒、灭0.5秒、亮0.5秒,然后熄灭),应该怎样修改程序?
(2)如果再添加黄灯(南北黄灯连接在PA2引脚,东西黄灯连接在PA6引脚):绿灯闪烁两次后黄灯亮,黄灯亮2秒后红灯亮。应该怎样修改程序??
DATA SEGMENT
TTT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AL,10000001B
MOV DX,343H
OUT DX,AL
MOV AL,01110110B
MOV DX,323H
OUT DX,AL
MOV AX,50000
MOV DX,321H
OUT DX,AL
MOV AL,AH
OUT DX,AL
AGAIN:
;南北绿灯东西红灯先一起亮5s
MOV BX,0
MOV DX,340H
MOV AL,11011110B
OUT DX,AL
MOV TTT,500
CALL TIME
;南北绿灯灭0.5s
MOV BX,0
MOV DX,340H
MOV AL,11111110B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯亮0.5s
MOV BX,0
MOV DX,340H
MOV AL,11011110B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯灭0.5s
MOV BX,0
MOV DX,340H
MOV AL,11111110B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯亮0.5s
MOV BX,0
MOV DX,340H
MOV AL,11011110B
OUT DX,AL
MOV TTT,50
CALL TIME
;南北黄灯亮2s
MOV BX,0
MOV DX,340H
MOV AL,11111011B
OUT DX,AL
MOV TTT,200
CALL TIME
;东西绿灯南北红灯先一起亮5s
MOV BX,0
MOV DX,340H
MOV AL,11101101B
OUT DX,AL
MOV TTT,500
CALL TIME
;东西绿灯灭0.5s
MOV BX,0
MOV DX,340H
MOV AL,11101111B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯亮0.5s
MOV BX,0
MOV DX,340H
MOV AL,11101101B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯灭0.5s
MOV BX,0
MOV DX,340H
MOV AL,11101111B
OUT DX,AL
MOV TTT,50
CALL TIME
;绿灯亮0.5s
MOV BX,0
MOV DX,340H
MOV AL,11101101B
OUT DX,AL
MOV TTT,50
CALL TIME
;东西黄灯亮2s
MOV BX,0
MOV DX,340H
MOV AL,10111111B
OUT DX,AL
MOV TTT,200
CALL TIME
JMP AGAIN
TIME PROC
MOV DX,342H
RE1:
IN AL,DX
TEST AL,00000001B
JNZ RE1
RE2:
IN AL,DX
TEST AL,00000001B
JZ RE2
INC BX
CMP BX,TTT
JL RE1
RET
TIME ENDP
CODE ENDS
END START
|