📄 1.asm
字号:
hui3:lcall delay2 ;转完后停会后再转
JNB p1.3,h4
;jb p3.4 ,h3 (将来与自动状态接口用)
ljmp PP30
h4: MOV A,45H
CJNE A,#00H,PP3
MOV A,44H
CJNE A,#00H,PP3
LJMP PP30
PP3:INC R0
Ljmp rev11
PP30:JNB P3.0,hui404 ;完成调节步数后,将等第三次的启动信号
LJMP h4 ;若没有启动,则再次问有否要再走的步数
hui404:CLR 20H.2 ;清本次标志位
;############ 正转2 ##################################
hui44:SETB 20H.3 ; 本次的标志位置1
inc r0 ;换向时,相序调到对应相
mov a,r0
ljmp for11
forr:mov r0,#00h ;正转到tab取码指针初值
for11:mov a,r0 ;取码
mov dptr,#tablef ;
movc a,@a+dptr
jz forr ;是否到了结束码00h
ANL A,#11110000B ;取码的高4位
ANL P1,#00001111B ;取P1口的低4位
ORL A,P1 ;调整后的P1口的高4位与低4位合并
MOV P1,A ;P1口输出
SETB P1.2 ;开电机电源控制
lcall delay0 ;电机速度(时间间断)
mov p1,#0bh ;相断电
;每走一步,总步数减1
mov a,47h
jz g4
dec 47h
ljmp n4
g4:
mov a,46h
jz hui4
mov 47h,#0ffh
dec 46h
;判断正转步数是否完成
n4:lcall delay1 ;转动的辅助速度(时间间隔)
inc r0 ;没走完总步数,则取下一个码
ljmp for11 ;继续正转
hui4:lcall delay2 ;转完后停会后再转
JNB p1.3,h5
;jb p3.4 ,h3 (将来与自动状态接口用)
LJMP PP40
h5: MOV A,47H
CJNE A,#00H,PP4
MOV A,46H
CJNE A,#00H,PP4
LJMP PP40
PP4:INC R0
Ljmp for11
PP40:JNB P3.0,STOPPP
LJMP h5
STOPPP:CLR 20H.3 ;清本次标志位
LJMP ZH ;完成了一个周期,回到待机状态
;################### 脉冲加减输入中断程序 #######################
INT1INTER:PUSH PSW
PUSH ACC
SETB RS0
PULSEIN:JB P1.3,XX0 ;三个位均为低时,为加操作,否则查看是不是减操作
JB P1.0,XX0
JB P3.3,XX0
LJMP XXX0
XX0:LJMP XXXX0
XXX0:JB 20H.0 ,C0 ;判断是哪部分
JB 20H.1 ,C1
JB 20H.2 ,C2
JB 20H.3 ,C3
JB 20H.4 ,C4
JB 20H.5 ,C5
JB 20H.6 ,C6
JB 20H.7 ,C7
C0:MOV DDL,61H ;将要调节部分的原步数送回来加
MOV DDH,60H
LJMP JIA
C1:MOV DDL,63H
MOV DDH,62H
LJMP JIA
C2:MOV DDL,65H
MOV DDH,64H
LJMP JIA
C3:MOV DDL,67H
MOV DDH,65H
LJMP JIA
C4:MOV DDL,69H
MOV DDH,68H
LJMP JIA
C5:MOV DDL,6BH
MOV DDH,6AH
LJMP JIA
C6:MOV DDL,6DH
MOV DDH,6CH
LJMP JIA
C7:MOV DDL,6FH
MOV DDH,6EH
JIA:MOV A,DDL ;加到上限后,不再加,以0FFH为准
CJNE A,#0FFH,JJ
MOV A,DDH
CJNE A,#0FFH,JJ
LJMP KK
JJ:MOV A,DDL ;加处理
INC A
JZ RRR
INC DDL
LJMP H0
RRR:MOV A,DDH
INC A
JZ KK
MOV DDL,#00H
INC DDH
LJMP H0
KK:MOV DDL,#0FFH
MOV DDH,#0FFH
H0:LJMP HH ;加处理总退出
XXXX0:JB P1.3 ,XX1 ;三个位均为低时,为减操作,否则退出
JB P1.1 ,XX1
JB P3.3 ,XX1
LJMP XX2
XX1:LJMP HH
XX2:JB 20H.0 ,CC0 ;判断是哪部分
JB 20H.1 ,CC1
JB 20H.2 ,CC2
JB 20H.3 ,CC3
JB 20H.4 ,CC4
JB 20H.5 ,CC5
JB 20H.6 ,CC6
JB 20H.7 ,CC7
CC0:MOV DDL,61H ;将要调节部分的原步数送回来加
MOV DDH,60H
LJMP JIAN
CC1:MOV DDL,63H
MOV DDH,62H
LJMP JIAN
CC2:MOV DDL,65H
MOV DDH,64H
LJMP JIAN
CC3:MOV DDL,67H
MOV DDH,65H
LJMP JIAN
CC4:MOV DDL,69H
MOV DDH,68H
LJMP JIAN
CC5:MOV DDL,6BH
MOV DDH,6AH
LJMP JIAN
CC6:MOV DDL,6DH
MOV DDH,6CH
LJMP JIAN
CC7:MOV DDL,6FH
MOV DDH,6EH
JIAN: MOV A,DDL ;减到底限后,不再减,以#00H 为准
CJNE A,#00H,JJJ
MOV A,DDH
CJNE A,#00H,JJJ
LJMP MM
JJJ:MOV A,DDL ;减处理
JNZ PP
MOV A,DDH
JNZ LL
LJMP MM
PP:DEC DDL
LJMP HH
LL:MOV DDL,#0FFH
DEC DDH
LJMP HH
MM:MOV DDL,#00H
MOV DDH,#00H ;减退出
HH:JB 20H.0 ,CCC0 ;退出,判断是哪部分的
JB 20H.1 ,CCC1
JB 20H.2 ,CCC2
JB 20H.3 ,CCC3
JB 20H.4 ,CCC4
JB 20H.5 ,CCC5
JB 20H.6 ,CCC6
JB 20H.7 ,CCC7
CCC0:MOV 61H,DDL ;将调节的步数送出
MOV 60H,DDH
LJMP HHH
CCC1:MOV 63H,DDL
MOV 62H,DDH
LJMP HHH
CCC2:MOV 65H,DDL
MOV 64H,DDH
LJMP HHH
CCC3:MOV 67H,DDL
MOV 65H,DDH
LJMP HHH
CCC4:MOV 69H,DDL
MOV 68H,DDH
LJMP HHH
CCC5:MOV 6BH,DDL
MOV 6AH,DDH
LJMP HHH
CCC6:MOV 6DH,DDL
MOV 6CH,DDH
LJMP HHH
CCC7:MOV 6FH,DDL
MOV 6EH,DDH
HHH:POP PSW ;总退出
POP ACC
RETI
;###################### 延时时间 #########################
delay0: MOV TMOD,#00000001B ;定时0设为方式1
MOV TL0,#060H ;11.0592M的晶振,定时0.5MS
MOV TH0,#0FEH
SETB TR0
SETB EA
DE:JBC TF0,D0
SJMP DE
D0:RETI
delay1:push psw
push acc
setb psw.7
de2:mov r6,#7
de3:mov r5,#3
djnz r5,$
djnz r6,de3
clr psw.7
pop acc
pop psw
ret
delay2:push psw
push acc
setb psw.7
d2:mov r6,#250
d3:mov r5,#250
d4:mov r4,#1
djnz r4,$
djnz r5,d4
djnz r6,d3
clr psw.7
pop acc
pop psw
ret
delay3:push psw
push acc
setb psw.7
d22:mov r6,#60
d33:mov r5,#10
djnz r5,$
djnz r6,d33
clr psw.7
pop acc
pop psw
ret
;################# 相序通电表 #################################################
tablef: DB 94h,14h,34h,24h,64h,44h,0C4h,84h ;电机反转表 A-AB-B-BC-C-CD-D-DA
DB 00H
tablez: DB 94h,84h,0C4h,44h,64h,24h,34h,14h ;电机正转表 A-AD-D-DC-C-CB-B-BA
DB 00H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -