📄 motor.asm
字号:
ORG 0000H
STOP: ORL P1, #0FFH ; 步进马达停止
LOOP: JNB P2.0, FOR2 ; 是否按P2.0,是则正转
JNB P2.1, REV2 ; 是否按P2.1,是则逆转
JNB P2.2, STOP1 ; 是否按P2.2,是则停止
JMP LOOP
FOR: MOV R0, #00H ; 正转至TABLE取码指针初值
FOR1: MOV A, R0 ; 至TABLE取码
MOV DPTR, #TABLE
MOVC A, @A+DPTR
JZ FOR ; 是否取到结束码(00H)?
CPL A ; 将ACC反相
MOV P1, A ; 输出至P1,正转
JNB P2.2, STOP1 ; 是否按2.2,是则停止运行
JNB P2.1, REV2 ; 是否按2.1,是则逆转
CALL DELAY ; 步进马达转速
INC R0 ; 取下一个码
JMP FOR1
REV: MOV R0, #05H ; 逆转至TABLE取消指针初值
REV1: MOV A, R0 ; 至TABLE取码
MOV DPTR, #TABLE
MOVC A, @A+DPTR
JZ REV ; 是否取到结束码(00H)?
CPL A ; 将ACC反相
MOV P1, A ; 输出至P1,逆转
JNB P2.2, STOP1 ; 是否按P2.2,是则停止运转
JNB P2.0, FOR2 ; 是否按P2.0,是则正转
CALL DELAY ; 步进马达转速
INC R0 ; 取下一个码
JMP REV1
STOP1: CALL DELAY ; 按P2.2消除抖动
JNB P2.2, $ ; P2.2放开否
CALL DELAY ; 放开消除抖动
JMP STOP
FOR2: CALL DELAY ; 按P2.0消除抖动
JNB P2.0, $ ; P2.0放开否
CALL DELAY ; 放开消除抖动
JMP FOR
REV2: CALL DELAY ; 按P2.1消除抖动
JNB P2.1, $ ; P2.1放开否
CALL DELAY ; 放开消除抖动
JMP REV
DELAY: MOV R1, #40 ; 步进马达转速20ms
D1: MOV R2, #248
DJNZ R2, $
DJNZ R1, D1
RET
TABLE: DB 03H, 09H, 0CH, 06H ; 正转
DB 00 ; 逆转结束码
DB 03H, 06H, 0CH, 09H ; 逆转
DB 00 ; 逆转结束码
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -