📄 gg504_ad1.asm
字号:
DATA SEGMENT
CNT0 EQU 280H
CNT1 EQU 281H
CNT2 EQU 282H
PCTL1 EQU 283H
PA EQU 290H
PB EQU 291H
PC EQU 292H
PCTL2 EQU 293H
IN0 EQU 2A0H
IN1 EQU 2A1H
IN2 EQU 2A2H
IN3 EQU 2A3H
IN4 EQU 2A4H
IN5 EQU 2A5H
IN6 EQU 2A6H
IN7 EQU 2A7H
COUNT EQU 80H
DAT DB COUNT DUP(0)
MSG DB 'IN0:$'
NEXTL DB 0AH,0DH,0AH,0DH,'$'
SPACE DB ' $'
TAB DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,08H,03H,0A7H,21H,06H,0EH ;;;0~F编码
DATA ENDS
STACK SEGMENT PARA STACK
DW 20H DUP (0)
STACK ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK
START: MOV AX, DATA
MOV DS, AX
MOV AL, 00100111B ;8253初始化,通道0工作于方式3,产生方波
MOV DX, PCTL1
OUT DX, AL
MOV AL, 10H ;写通道0初值
MOV DX, CNT0
OUT DX, AL
MOV AL, 01100101B ;通道1工作于方式2,产生负脉冲
MOV DX, PCTL1
OUT DX, AL
MOV AL, 10H ;写通道2初值
MOV DX, CNT1
OUT DX, AL
MOV AL, 10001000B ;8255初始化:A口B口输出,C口输入
MOV DX, PCTL2
OUT DX, AL
MOV AL, 0
MOV DX, PA
OUT DX, AL
LEA SI, DAT
MOV CH, COUNT
L: MOV CL, 8
MOV DX, IN0
L0: MOV AL, 00H ;起动
OUT DX, AL
PUSH DX
MOV DX, PC
L1: IN AL, DX ;测试EOC -> PC7
TEST AL, 80H
JZ L1
POP DX
IN AL, DX ;转换并存储
MOV [SI], AL
CALL PRINTDX ;显示路号
CALL CRTVIEW ;在CRT上显示
L2: CALL LEDVIEW ;在LED上显示
PUSH DX
PUSH AX
MOV DX, PC
IN AL, DX
TEST AL, 01000000B ;是否产生负脉冲 8253 OUT1 -> PC6
POP AX
POP DX
JNZ L2
PUSH DX
L3: MOV DX, PC
IN AL, DX
TEST AL, 01000000B ;负脉冲是否结束 8253 OUT1 -> PC6
JZ L3
POP DX
INC SI
INC DX
DEC CH
JZ STOP ;是否结束
PUSH DX
LEA DX, SPACE ;打印空格
MOV AH, 09H
INT 21H
POP DX
DEC CL
JNZ L0 ;是否换行
LEA DX, NEXTL ;换行显示
MOV AH, 09H
INT 21H
JMP L
STOP: MOV AH, 4CH
INT 21H
PRINTDX PROC ;显示路号
PUSH CX
PUSH DX
PUSH AX
AND DL, 0FH
ADD DL, 30H
MOV MSG[2], DL
LEA DX, MSG ;显示路号
MOV AH, 09H
INT 21H
POP AX
POP DX
POP CX
RET
PRINTDX ENDP
CRTVIEW PROC ;在CRT上显示
PUSH CX
PUSH DX
PUSH AX
MOV CX, 02H
PRINT: PUSH CX
MOV CL, 4
ROL AL, CL
MOV DL, AL
AND DL, 0FH
ADD DL, 30H
CMP DL, '9'
JNA CRT
ADD DL, 07H
CRT: PUSH AX
MOV AH, 02H
INT 21H
POP AX
POP CX
LOOP PRINT
POP AX
POP DX
POP CX
RET
CRTVIEW ENDP
LEDVIEW PROC ;在LED上显示
PUSH CX
PUSH DX
LEA BX, TAB
PUSH DX
MOV DX, PA
MOV AL, 0FFH ;熄灭消影
OUT DX, AL
MOV AL, 11110111B ;显示路号 LED3
MOV DX, PA
OUT DX, AL
POP DX
MOV AL, DL
AND AL, 0FH
XLAT
MOV DX, PB
OUT DX, AL
MOV AL, 0FFH ;熄灭消影
OUT DX, AL
MOV AL, 11111101B ;显示高位 LED1
MOV DX, PA
OUT DX, AL
MOV CL, 4
ROL BYTE PTR [SI], CL
MOV AL, [SI]
AND AL, 0FH
XLAT
MOV DX, PB
OUT DX, AL
MOV AL, 0FFH ;熄灭消影
OUT DX, AL
MOV AL, 11111110B ;显示低位 LED0
MOV DX, PA
OUT DX, AL
MOV CL, 4
ROL BYTE PTR [SI], CL
MOV AL, [SI]
AND AL, 0FH
XLAT
MOV DX, PB
OUT DX, AL
POP DX
POP CX
RET
LEDVIEW ENDP
D100US PROC ;延时子程序
PUSH CX
MOV CX, 0642H
NEXT: DEC CX
JNZ NEXT
POP CX
RET
D100US ENDP
COSEG ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -