掌握通过 8255A 并口传输数据的方法,以控制发光二极管的亮与灭。 利用 Proteus 仿真 8255A 控制交通灯,用 8255A 做输出口,控制十二个 LED 亮灭,模拟交通灯管理。 包含连线图,连线图文件,以及汇编源码。 源代码: CODE SEGMENT ;8255A 控制交通灯程序 ASSUME CS:CODE IOCONPT EQU 86H;8255 控制口 IOAPT EQU 80H ;PA 口 IOBPT EQU 82H;PB 口 IOCPT EQU 84H;PC 口 START:MOV AL,10000010B ;PB 输入,PA,PC 输出 MOV DX,IOCONPT OUT DX,AL ;写命令字 MOV DX,IOBPT ;读 PB 口 IN AL,DX MOV BYTE PTRDS:[0601H],AL ;保存 PB 口数据 MOV DX,IOCONPT ;8255 控制口 MOV AL,10010010B OUT DX,AL ;写命令字,PA,PB,PC 输出 MOV DX,IOBPT ; MOV AL,DS:[0601H] OR AL,0F0H OUT DX,AL MOV DX,IOCPT MOV AL,0F0H OUT DX,AL ;四路口红灯全亮 CALL DELAY1 ;延时 IOLED0: MOV AL,01011010B MOV DX,IOCPT OUT DX,AL ;南北绿灯亮,东西红灯亮 CALL DELAY1 ;延时 CALL DELAY1 ;延时 OR AL,0F0H OUT DX,AL ;南北绿灯灭 MOV CX,8H ;闪烁8次? IOLED1: MOV DX,IOBPT MOV AL,DS:[0601H] AND AL,10101111B OUT DX,AL ;南北黄灯亮 CALL DELAY2 ;延时 OR AL,01010000B OUT DX,AL ;南北黄灯灭 CALL DELAY2 ;延时 LOOP IOLED1 ;南北黄灯闪烁 8 次 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL ;四路口红灯全亮 CALL DELAY2 ;延时 MOV AL,10100000B OUT DX,AL ;东西绿灯亮 CALL DELAY1 ;延时 CALL DELAY1 OR AL,0F0H OUT DX,AL ;东西绿灯灭 MOV CX,8H IOLED2: MOV DX,IOBPT MOV AL,DS:[0601H] AND AL,01011111B ;因为是与,保留低四位 OUT DX,AL ;东西黄灯亮 CALL DELAY2 ;延时 OR AL,11110000B OUT DX,AL ;东西黄灯灭 CALL DELAY2 ;延时 LOOP IOLED2 ;东西黄灯闪烁 8 次 MOV DX,IOCPT MOV AL,0F0H OUT DX,AL ;四路口红灯全亮 CALL DELAY2 JMP IOLED0 ;循环继续 DELAY1: PUSH AX PUSH CX MOV CX,0030H DELY2: CALL DELAY2 LOOP DELY2 POP CX POP AX RET DELAY2: PUSH CX MOV CX,1500H DELA1: LOOP DELA1 POP CX RET CODE ENDS END START
|