实验内容
数码管循环显示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