⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8255a0-3.asm

📁 这是接口课程设计时做的一个控制电机转动的程序
💻 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 + -