微机原理与接口技术 8255和8253综合应用之交通灯控制器的设计

交通灯控制器的设计

一、实验要求

通过采用并行口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次。

扫描二维码关注公众号,回复: 15681332 查看本文章

四、代码

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

猜你喜欢

转载自blog.csdn.net/weixin_45662399/article/details/124705858#comments_27329633
今日推荐