📄 控制步进电机角度(单步正确全速有问题).asm
字号:
KB17: NOP
NOKEY4:
LJMP JIAN_ZI
KEYWORK:MOV R0,40H
MOV @R0,QU_JIANZHI ;得到键值 查表得各值
LCALL DELAY
MOV A,40H
INC A
MOV 40H,A
CJNE A,#2CH,WAITFREE
ACALL time1s
MOV R6,28H
MOV R5,29H
MOV R4,2AH
MOV A,28H ;显示百位的数字 (扫描的数)
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV 50H,A
CLR A
MOV A,29H ;显示十位的数字
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV 51H,A
CLR A
MOV A,2AH ;显示个位的数字
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV 52H,A
CLR A
MOV 28H,A
MOV 29H,A
MOV 2AH,A
MOV A,2BH
CJNE A,#12,LOOP ;送显示部分
LJMP DISPLAY0
LOOP: CLR A
MOV 28H,A
MOV 29H,A
MOV 2AH,A
MOV 2BH,A
MOV 40H,#28H
LJMP MAIN
WAITFREE:
MOV A,P1
MOV QU_JIANZHI,#00H
ANL A,#0FH
XRL A,#0FH
JNZ WAITFREE
LJMP JIAN_ZI ;转JIAN_ZI 循环
RET
;*******************************************
;******************************************************
;******************运算**************************
YUNSUAN:MOV R7,#12H ;运算(十进制转十六进制)
MOV R3,#100
MOV A,R6
MOV B,R3
MUL AB
MOV R1,B
XCH A,R5
MOV B,#10
MUL AB
MOV R2,A
ADD A,R4
ADD A,R5
MOV R0,A
MOV A,#00H
MOV R6,A
MOV R5,A
MOV R4,A
MOV R3,A
MOV R2,A
CLR C
MOV A,R1 ;双字节除以单字节(结果存在R1)
SUBB A,R7
JC DV50
SETB OV
RET
DV50: MOV R6,#8
DV51: MOV A,R0
RLC A
MOV R0,A
MOV A,R1
RLC A
MOV R1,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DV52
MOV R1,A
DV52: CPL C
MOV A,R3
RLC A
MOV R3,A
DJNZ R6,DV51
MOV A,R1
ADD A,R1
SUBB A,R7
JC DV54
DV54: CLR OV
MOV A,R3
MOV B,#0AH
MUL AB
mov R5,A
mov r4,b
cjne r4,#00h,de
de: cjne r5,#00h,main0
ljmp main
main0:MOV A,31H ;判断正反转
CJNE A,#10, MAIN4
mov p3,#01H ;电机工作部分
acall time2ms
dec r5
cjne r5,#00h,main1
cjne r4,#00h,zhuang
ljmp fu_wei
zhuang:acall pan
ljmp main1
main1:mov p3,#03h ;正
acall time2ms
dec r5
cjne r5,#00h,main2
cjne r4,#00h,zhuang1
ljmp fu_wei
zhuang1:acall pan
ljmp main2
main2:mov p3,#07h
acall time2ms
dec r5
cjne r5,#00h,main3
cjne r4,#00h,zhuang2
ljmp fu_wei
zhuang2:acall pan
ljmp main3
main3:mov p3,#05h
acall time2ms
dec r5
cjne r5,#00h,main0
cjne r4,#00h,zhuang3
ljmp fu_wei
zhuang3:acall pan
ljmp main0
MAIN4:MOV P3,#05H ;反
ACALL time2ms
dec r5
cjne r5,#00h,main5
cjne r4,#00h,zhuang4
ljmp fu_wei
zhuang4:acall pan
ljmp main5
LJMP fu_wei
MAIN5:MOV P3,#07H
ACALL time2ms
dec r5
cjne r5,#00h,main6
cjne r4,#00h,zhuang5
ljmp fu_wei
zhuang5:acall pan
ljmp main6
LJMP fu_wei
MAIN6:MOV P3,#03H
ACALL time2ms
dec r5
cjne r5,#00h,main7
cjne r4,#00h,zhuang6
ljmp fu_wei
zhuang6:acall pan
ljmp main7
LJMP fu_wei
MAIN7:MOV P3,#01H
ACALL time2ms
dec r5
cjne r5,#00h,main4
cjne r4,#00h,zhuang7
ljmp fu_wei
zhuang7:acall pan
ljmp main4
LJMP fu_wei
;************************************************ ;减法的补码
pan: dec r4
dec r5
mov r5,#00h
ret
;************************************
ting:mov p2,#00h ;电机停止
ljmp main
ret
;*********************************************
fu_wei:clr a ;复位清零 回到主程序
mov r0,a
mov r1,a
mov r2,a
mov r3,a
mov r4,a
mov r4,a
mov r6,a
mov 28h,a
mov 29h,a
mov 2ah,a
mov 2bh,a
ljmp main
;****************************************************88
WRI: PUSH ACC
CLR RS
SETB RW
WRI1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRI1
CLR RW
MOV P0,COM
SETB E
CLR E
POP ACC
RET
;******************************************以上是写指令子程序
WRD: PUSH ACC
CLR RS
SETB RW
WRD1: MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,WRD1
SETB RS
CLR RW
MOV P0,DAT
SETB E
CLR E
POP ACC
RET
;******************************************以上是写数据子程序
;*************************************
;* *
;* 延时513 us *
;* *
;*************************************
;
;513微秒延时程序
DELAY: MOV R2,#0FEH
DELAY1: DJNZ R2,DELAY1
RET
;
;
;
;*****************************************************
time2ms: mov r7,#50
time2ms1:mov r6,#220
nop
time2ms2:djnz r6,time2ms2
djnz r7,time2ms1
ret
;*****************************************************
;*************************************
;* *
;* 延时10ms *
;* *
;*************************************
;
;10毫秒延时程序
;延时1S
;*****************************************************
time1s: mov r5,#08h ;1001.401ms
time1s_1: mov r6,#0f4h ;125.173ms
time1s_2: mov r7,#0ffh ;511us
djnz r7,$
djnz r6,time1s_2
djnz r5,time1s_1
ret
;*****************************************************
DL10MS: MOV R3,#14H
DL10MS1: LCALL DELAY
DJNZ R3,DL10MS1
RET
;***********************表
TABLE: DB 30H,31H,32H,33H,34H ;01234
DB 35H,36H,37H,38H,39H ;56789
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -