📄 dianji.asm
字号:
DATA SEGMENT
BUF DB 0
MESS DB 'K0-K6 控制步进电机转速!',0AH,0DH
DB 'K7 控制步进电机转向!','$'
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
LEA DX,MESS
MOV AH,09
INT 21H
MOV DX,28BH ;初始化8255,工作方式0,A口输出,B口,C口输入
MOV AL,8BH
OUT DX,AL
MOV BUF,33H
OUT1: MOV AL,BUF ; A口输出33H
MOV DX,288H
OUT DX,AL
MOV AH,0BH ;判断有无键按下
INT 21H
CMP AL,0
JZ IN1 ; 若ZF为0转IN1
MOV AH,4CH ;有键入则 返回DOS
INT 21H
IN1: MOV DX,28AH ; c端口
IN AL,DX ; 读开关状态并进行
TEST AL,01H ; 判断K0的状态
JNZ K0
TEST AL,02H ; 判断K1的状态
JNZ K1
TEST AL,04H ; 判断K2的状态
JNZ K2
TEST AL,08H ; 判断K3的状态
JNZ K3
TEST AL,10H ; 判断K4的状态
JNZ K4
TEST AL,20H ; 判断K5的状态
JNZ K5
TEST AL,40H ; 判断K6的状态
JNZ K6
STOP: MOV DX,288H ; A端口
MOV AL,0FFH
OUT dx,al
JMP OUT1 ;若无开关控制则转回out1
K0:MOV BL,04H ; 置K0延迟时间常数
SAM:TEST AL,80H ; 测试开关K7
JNZ ZX0
JMP NX0
K1:MOV BL,10H
JMP SAM
K2:MOV BL,20H
JMP SAM
K3:MOV BL,40H
JMP SAM
K4:MOV BL,80H
JMP SAM
K5:MOV BL,0C0H
JMP SAM
K6:MOV BL,0FFH
JMP SAM
ZX0:CALL DELAY
MOV AL,BUF
ROR AL,1
MOV BUF,AL
JMP OUT1
NX0:CALL DELAY
MOV AL,BUF
ROL AL,1
MOV BUF,AL
JMP OUT1
DELAY PROC NEAR ; 延迟子程序
INCX:MOV CX,0FFFFH
DELAY2:LOOP DELAY2
DEC BL ;置延迟时间常数bl
JNZ INCX
RET
DELAY ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -