實驗內容
數碼管循環顯示0123456789abcdef-
電路圖

電路分析
端口地址和控制字地址主要看電路圖,片選信號由譯碼器的\(\overline{IO1}\)引腳給出,即\(A_{12}-A_9\)為0001B時,片選信號有效。

地址線\(A_2A_1\)送給8255,選擇芯片上的寄存器。8255A上有4個寄存器,其中,\(A_2A_1\)為00時選擇端口A,\(A_2A_1\)為01時選擇端口B,\(A_2A_1\)為10時選擇端口C,\(A_2A_1\)為11時選擇控制寄存器。
針對這題,為討論方便,設其他地址線都為0。

端口A地址:\(A_{19}-A_0:0000 0000 0001 0000 0000B = 200H\)
端口B地址:\(A_{19}-A_0:0000 0000 0001 0000 0010B = 202H\)
端口C地址:\(A_{19}-A_0:0000 0000 0001 0000 0100B = 204H\)
控制字地址:\(A_{19}-A_0:0000 0000 0001 0000 0110B = 206H\)
代碼
DATA SEGMENT
PORTD EQU 0206H
PORTA EQU 0200H
REGIS EQU 10000000B ;A OUT A工作方式0
LED DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH
DATA ENDS
STACK SEGMENT
DW 128 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
;設置8255工作方式
MOV DX,PORTD
MOV AL,REGIS
OUT DX,AL
;設置輸出端口為端口A
MOV DX,PORTA
G1:
;取LED數組的首地址
MOV SI,OFFSET LED
G2:
MOV AL,[SI]
OUT DX,AL;輸出顯示
;延時操作
CALL DELAY
;如果當前值等於數組最后一個數的值則從頭開始
CMP AL,0BFH
JE G1
;地址加一
INC SI
;跳轉到G2
JMP G2
MOV AH,4CH
INT 21H
;延時函數
DELAY PROC NEAR
PUSH BX
PUSH CX
MOV BX,200H
FOR1:MOV CX,200H
FOR2:LOOP FOR2
DEC BX
JNZ FOR1
POP CX
POP BX
RET
DELAY ENDP
CODE ENDS
END START
