微机实验:8255控制数码管

8255控制数码管

如图5所示,8255A的片选接译码器IO5的输出,A0接地址总线的A1,A1接地址总线的A2,因此8255A的PA口、PB口、PC口、控制口的地址分别为0FFD0H、0FFD2H、0FFD4H、0FFD6H。
在这里插入图片描述
图5
7段数码管共阴极接法如图6所示。
在这里插入图片描述

比如显示7,abc段高电平点亮,因此D2D1D0为1,D7D6D5D4D3为0,故7的段选码为00000111B,即07H。
若采用共阳极接法,比如显示7,abc段低电平点亮,因此D2D1D0为0,D7D6D5D4D3为1,故7的段选码为11111000B,即0F8H。
如图5所示,本次试验7段数码管采用共阳极接法。数字0~9的段选码依次为0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H。
8255A的PA口工作于方式0,输出。
问题:若有一片8255A的连接如图7所示,端口地址的范围保持不变,在PC0连接了一个开关。
在这里插入图片描述
图7
实现以下程序要求:
当开关合上,数码管循环显示0~9,当开关断开,数码管显示的数字保持不变。
在这里插入图片描述

IOA	EQU 0FFD0H
IOB	EQU 0FFD2H
IOC	EQU 0FFD4H
IOCON EQU 0FFD6H

DATA SEGMENT
  TABLE DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DATA ENDS

CODE SEGMENT
	ASSUME CS:CODE,DS:DATA
START:
	MOV AX,DATA
	MOV DS,AX
	
	LEA SI, TABLE
	;控制方式初始化
	MOV AL,10001001B
	MOV DX,IOCON
	OUT DX,AL
		
A1:	
	MOV AL,[SI]
	MOV DX,IOA
	OUT DX,AL
	MOV DX,IOC
	IN	AL,DX
	TEST AL,00000001B	
	JNZ A1
	CALL DELAY
	CMP BYTE PTR[SI],0
	JNZ A2
	LEA SI, TABLE 
A2:	
	INC SI
	JMP A1
	
DELAY	PROC                    
	MOV    CX,0FFFFH
NEXT:	
	NOP
	LOOP	NEXT
	RET                   
DELAY	ENDP
	
CODE ENDS
	END START