📄 8255a0-3.asm
字号:
;-------------------------------------------------------
; 程序说明
;实现功能:通过8255A(方式0)实现对输入数据在数码管上显示
;用户可反复输入新的显示数字,当输入数据中包含字母或是
;仅为一个回车时,程序退回DOS
;
;测试专用,仅供参考,适用于唐都TD-PIT实验箱 胖大海
;-------------------------------------------------------
DATA SEGMENT
IBUF DB 5,0,5 DUP(?) ;输入缓冲区
D_TABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;段码表
W_TABLE DB 1111B,1110B,1101B,1011B,0111B ;位码表
INFOR1 DB "Please input number(0~9999):$" ;提示信息
INFOR2 DB 10,13,"$" ;回车换行
DATA ENDS
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
DSTRING MACRO MESSAGE ;显示提示信息的宏
PUSH DX
PUSH AX
MOV DX,OFFSET MESSAGE
MOV AH,09H
INT 21H
POP AX
POP DX
ENDM
MOV DX,1043H ;定义控制器端口地址
MOV AL,10000000B ;定义方式字,方式0、B口输出段码(PB0-PB7对应接A-Dp)、
;C口低4位输出位码(PC0-PC3对应接数码管的低位-高位)、
;A口没用到,随便设,这里定义的是输出
OUT DX,AL ;送方式字
DSTRING INFOR1 ;显示输入数字的提示,范围0~9999
INPUT:
MOV DX,OFFSET IBUF ;读入输入数据
MOV AH,0AH
INT 21H
DSTRING INFOR2
;----------------------------------------------------------
;一位一位地分析数据。不能为空,不能为字符,如果符合要求则将该位ASIC码转成二进制,并存回存储区。
MOV CL,IBUF+1
CMP CL,0 ;不能为空
JE STOP_PRO
MOV CH,0
MOV SI,OFFSET IBUF+2
CHECK: MOV AL,[SI]
CMP AL,39H ;不能为字符
JG STOP_PRO
CMP AL,30H
JL STOP_PRO
AND BYTE PTR[SI],0FH ;如果符合要求则将该位ASIC码转成二进制,并存回原处
INC SI
LOOP CHECK
;------------------------------------------------------------
;------------------------------------------------------------
;通过8255A将数据显示到数码管上
LOOPR: MOV CL,IBUF+1
MOV CH,0
MOV SI,OFFSET IBUF+2
LOOP1:
MOV BX,OFFSET D_TABLE ;先送段码到B口
MOV AL,[SI]
XLAT D_TABLE
MOV DX,1041H
OUT DX,AL
MOV BX,OFFSET W_TABLE ;再送位码到C口
MOV AL,CL
XLAT W_TABLE
MOV DX,1042H
OUT DX,AL
MOV BX,0FFFFH ;这是通过循环实现延迟
WAIT2: DEC BX
CMP BX,0
JNE WAIT2
INC SI
LOOP LOOP1
;------------------------------------------------------------
MOV AH,11 ;调用DOS的11号功能,判断是否有按键按下
INT 21H
CMP AL,0 ;如果没按键则功能调用返回值AL=0,所以将AL和0比较一下
JE LOOPR ;相等则继续循环显示,反之退出
MOV AL,0FH ;将数码管关掉,节约电力
MOV DX,1042H
OUT DX,AL
JMP INPUT ;当有按键时开始新的显示过程.
;程序退出是通过在输入数字时输入回车或字符来退出
STOP_PRO:
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -