实验一 交通灯控制8255A
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二交通灯控制实验(8255A)
一、实验目的
1、掌握并行接口8255的基本原理
2、掌握8255的编程方法
二、实验内容
如图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通变化规律燃灭。
三、编程提示
1、8255地址分析:控制寄存器地址: 021BH
A口地址: 0218H
C口地址: 021AH
2、十字路口交通灯的变化规律要求
(1)南北路口的绿灯、东西路口的红灯同时亮三秒;
(2)南北路口的黄灯闪烁三次,同时东西路口的红灯继续亮;
(3)南北路口的红灯、东西路口的绿灯同时亮三秒;
(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁三次;
(5)转(1)重复。
3、C口置数分析
由于发光二极管是共阴极相连,所以若要其发亮应给高电平;黄灯闪烁是让其不断交替亮灭来实现;同时分析可知只要有绿灯亮,灯就会持续亮三秒,黄灯亮就会闪烁三次。
四、汇编语言程序
STACKA SEGMENT STACK
DB 100H DUP(?)
STACKA ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,10000000B ;A口输出,C口输出
MOV DX,021BH
OUT DX,AL
L0: MOV AL,00100100B ;南北绿灯亮,东西红灯亮
MOV DX,021AH
CALL DALLY ;长延时
MOV CX,3 ;黄灯闪烁次数
L1: MOV AL,01000100B ;南北黄灯闪烁,东西红灯亮 OUT DX,AL
CALL DALLY1 ;短延时
MOV AL,00000100B
OUT DX,AL
CALL DALLY1 ;短延时
LOOP L1
MOV AL,10000001B ;南北红灯亮,东西绿灯亮
OUT DX,AL
CALL DALLY ;长延时
MOV CX,3
L2: MOV AL,10000010B ;南北红灯亮,东西黄灯闪烁 OUT DX,AL
CALL DALLY1 ;短延时
MOV AL,10000000B
OUT DX,AL
CALL DALLY1 ;短延时
LOOP L2
MOV DL,0FFH ;有键按下吗?
MOV AH,06H
INT 21H
JZ L0 ;无键按下则ZF=1,跳转重复 MOV AH,4CH
INT 21H ;返回DOS
DALLY PROC ;长延时程序
PUSH DX
PUSH CX
PUSH AX
MOV CX,0FFFFH
T1: MOV AX,0FFFFH
T2: DEC AX
JNZ T2
LOOP T1
POP AX
POP CX
POP DX
RET
DALLY ENDP
DALLY1 PROC ;短延时程序
PUSH DX
MOV CX,0FFFFH
T3: MOV DX,4000H
T4: DEC DX
JNZ T4
LOOP T3
POP DX
POP CX
RET
DALLY1 ENDP
CODE ENDS
END START
五、程序设计流程图
开始
设置8255C口
南北路口的绿灯、东西路口的红灯亮
长延时
南北路口的黄灯闪烁,东西路口红灯亮
南北路口的红灯、东西路口的绿灯亮
长延时
南北路口红灯亮、东西路口黄灯亮闪烁
N
有键按下吗?
Y
返回DOS
六、总结
交通灯实验程序编写的过程中,最常遇到的问题主要是由于延时时间的不确定所导致的
闪烁不明显,因此必须设定足够长时间的延迟才能使人眼分辨。在本例中,我采用较为简单循环嵌套结构。经过多次计算后最终确定了长亮时嵌套两层0FFFFH,闪烁时嵌套一层0FFFH和一层4000H。实验效果比较理想。8255A的工作原理比较简单,实验现象也十分稳定,实验整体比较顺利。