📄 da.asm
字号:
;EXP_Analog_to_Digital
.486
;-------------------------------------------
DSEG SEGMENT USE16
A_0809 EQU 230H
OLD0C DD ?
T_DELY DD 500000
DISPLAY1 DB 4 DUP(0)
RESULT DB ?
TIME2 DD 1000 ;延时1ms所用常量
TAB2 DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;译码器
TEN DW 10
MESG DB 'SRART ',0AH,0DH,'$' ;显示提示消息
SSE DB 196
DSEG ENDS
;-------------------------------------------
CSEG SEGMENT USE16
STARTUP:
ASSUME CS:CSEG,DS:DSEG
MOV AX,DSEG
MOV DS,AX
MOV AH,09H ;屏幕显示
MOV DX,OFFSET MESG
INT 21H
CLI
CALL RD0C
CALL WR0C
CALL I8259 ;8259初始化
STI
MOV DX,A_0809
OUT DX,AL
RLOOP:
CALL DISP
MOV AH,1 ;按下任意键返回DOS
INT 16H
JZ RLOOP
EXIT:
CALL RESET1
MOV AH,4CH ;退出, 并清零显示
MOV AL,0H
MOV DX,201H
OUT DX,AL
INT 21H
;-------------------------------------------
SERVICE PROC
PUSH DS
PUSH AX
PUSH BX
MOV AX,DSEG
MOV DS,AX
MOV DX,A_0809 ;模->数转换
IN AL,DX
MOV DX,230H
OUT DX,AL
MUL SSE
MOV DX,0
DIV TEN ;无符号除法,商在AL中,余数在AH中
MOV DISPLAY1[4],DL ;最低位,显示在数码管最右边
MOV DX,0
DIV TEN
MOV DISPLAY1[3],DL
MOV DX,0
DIV TEN
MOV DISPLAY1[2],DL
MOV DX,0
DIV TEN
MOV DISPLAY1[1],DL
MOV DISPLAY1[0],AL ;转化完毕
MOV AL,20H ;中断结束命令
OUT 20H,AL
POP BX
POP AX
POP DS
IRET
SERVICE ENDP
;-------------------------------------------
;DELY PROC
; PUSH CX
; PUSH DX
; PUSH AX
; MOV AH,86H
; MOV CX,WORD PTR T_DELY+2
; MOV DX,WORD PTR T_DELY
; INT 15H
; POP AX
; POP DX
; POP CX
; RET
;DELY ENDP
;---------------8259--------------
I8259 PROC
IN AL,21H
AND AL,11101111B
OUT 21H,AL
RET
I8259 ENDP
;---------------READ--------------
RD0C PROC
MOV AX,350CH
INT 21H
MOV WORD PTR OLD0C,BX
MOV WORD PTR OLD0C+2,ES
RET
RD0C ENDP
;---------------WRITE-------------
WR0C PROC
PUSH DS
MOV AX,CSEG
MOV DS,AX
MOV DX,OFFSET SERVICE
MOV AX,250CH
INT 21H
POP DS
RET
WR0C ENDP
;--------------RESET-------------
RESET1 PROC
PUSH DX
PUSH AX
MOV DX,WORD PTR OLD0C
MOV DS,WORD PTR OLD0C+2
MOV AX,250CH
INT 21H
IN AL,21H
OR AL,00010000B
OUT 21H,AL ;屏蔽用户中断
POP AX
POP DX
RET
RESET1 ENDP
;---------------------------------
;-----------------数码管扫描显示--------------------------
DISP PROC
;数码管的CS端接200H~207H
MOV AL,[DISPLAY1]
MOV BX,OFFSET TAB2 ;查7段译码表
XLAT TAB2 ;数字编码存入AL
OR AL,80H
MOV DX,201H
OUT DX,AL ;输出字型码
MOV DX,200H
MOV AL,01H
OUT DX,AL ;第一位显示
CALL DELAY2 ;延时1ms
MOV AL,[DISPLAY1+1]
MOV BX,OFFSET TAB2 ;查7段译码表
XLAT TAB2 ;数字编码存入AL
MOV DX,201H
OUT DX,AL ;输出字型码
MOV DX,200H
MOV AL,02H
OUT DX,AL ;第二位显示
CALL DELAY2 ;延时1ms
MOV AL,[DISPLAY1+2]
MOV BX,OFFSET TAB2 ;查7段译码表
XLAT TAB2 ;数字编码存入AL
MOV DX,201H
OUT DX,AL ;输出字型码
MOV DX,200H
MOV AL,04H
OUT DX,AL ;第三位显示
CALL DELAY2 ;延时1ms
MOV AL,[DISPLAY1+3]
MOV BX,OFFSET TAB2 ;查7段译码表
XLAT TAB2 ;数字编码存入AL
MOV DX,201H
OUT DX,AL ;输出字型码
MOV DX,200H
MOV AL,08H
OUT DX,AL ;第四位显示
CALL DELAY2 ;延时1ms
DISP ENDP
;------------------------------------------------------
;--------------;延时1ms---------------
DELAY2 PROC
MOV AH,86H
MOV CX,WORD PTR TIME2+2
MOV DX,WORD PTR TIME2
INT 15H
RET
DELAY2 ENDP
;-------------------------------------
CSEG ENDS
END STARTUP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -