;步进电机程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Z45 EQU 16
Z5 EQU 1
ZY EQU 2
K1 EQU P0.0 ; 正转
K2 EQU P0.1 ; 反转
K3 EQU P0.2 ; 停止
K4 EQU P0.3 ; 加速
K5 EQU P0.4 ; 减速
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
JMP MAIN
ORG 0003H
LJMP INT0
ORG 0013H
LJMP INT1
ORG 0030H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN: SETB EA ;开中断
SETB EX0
SETB EX1
STOP: MOV P1,#0F0H ;步进电机停止
LOOP: JNB K1,Z_M2 ;是否按K1,是则正转
JNB K2,F_M2 ;是否按K2,是则反转
JNB K3,STOP1 ;是否按K3,是则停止
JMP LOOP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT0:
MOV R0, #00H
MOV R7, #Z5
LCALL LP1
RETI
INT1:
MOV R0, #00H
MOV R7, #Z45
LCALL LP1
RETI
LP1:
MOV R0, #00H
MOV R1, #ZY
LP2:
MOV A, R0
MOV DPTR, #TABLE_F
MOVC A,@A+DPTR
MOV P1, A
LCALL DELAY
INC R0
JNZ LP2
MOV R0, #00H
DJNZ R1, LP2
MOV R1, #ZY
DJNZ R7, LP2
MOV P1, #0F0H
RET
STOP1: ACALL DELAY ;按K3消抖
JNB K3, $
ACALL DELAY
JMP STOP
Z_M2: ACALL DELAY ;按K1消抖
JNB K1, $
ACALL DELAY
JMP Z_M
F_M2: ACALL DELAY ;按K2消抖
JNB K2, $
ACALL DELAY
JMP F_M
;----------正转子程序
Z_M: MOV R0,#00H ;正转常速
Z_M1: MOV A, R0
MOV DPTR, #TABLE_Z
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY
INC R0
JNZ Z_M1
JNB K3,STOP1 ;判断K3是否按下,是则停止
JNB K2,F_M2 ;判断K2是否按下,是则反转常速
JNB K4,JIA_Z ;正转加速
JNB K5,JIAN_Z ;正转减速
JMP Z_M
JIA_Z: MOV R0,#00H ;正转加速
Z_JIA: MOV A, R0
MOV DPTR, #TABLE_Z
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY1
INC R0
JNZ Z_JIA
JNB K3,STOP1 ;判断K3是否按下,是则停止
JNB K2,F_M2 ;判断K2是否按下,是则反转常速
JNB K5,JIAN_Z ;正转减速
JNB K1,Z_M2 ;判断K1是否按下,是则正转转常速
JMP JIA_Z
JIAN_Z: MOV R0,#00H ;正转减速
Z_JIAN: MOV A, R0
MOV DPTR, #TABLE_Z
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY2
INC R0
JNZ Z_JIAN
JNB K3,STOP1 ;判断K3是否按下,是则停止
JNB K2,F_M2 ;判断K2是否按下,是则反转常速
JNB K4,JIA_Z ;正转加速
JNB K1,Z_M2 ;判断K1是否按下,是则正转转常速
JMP JIAN_Z
RET
STOP2: ACALL DELAY ;按K3消抖
JNB K3, $
ACALL DELAY
JMP STOP
Z_M3: ACALL DELAY ;按K1消抖
JNB K1, $
ACALL DELAY
JMP Z_M
F_M3: ACALL DELAY ;按K2消抖
JNB K2, $
ACALL DELAY
JMP F_M
;----------反转子程
F_M: MOV R0, #00
MOV R1, #01
F_M1: MOV A, R0
MOV DPTR, #TABLE_F
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY
INC R0
JNZ F_M1
JNB K3,STOP2 ;判断K3是否按下,是则停止
JNB K1,Z_M3 ;判断K1是否按下,是则正转常速
JNB K4,JIA_F ;反转加速
JNB K5,JIAN_F ;反转减速
JMP F_M
JIA_F: MOV R0, #00H
F_JIA: MOV A, R0
MOV DPTR, #TABLE_F
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY1
INC R0
JNZ F_JIA
JNB K3,STOP2 ;判断K3是否按下,是则停止
JNB K2,F_M3 ;判断K2是否按下,是则反转常速
JNB K5,JIAN_F ;反转减速
JNB K1,Z_M3 ;判断K1是否按下,是则正转常速
JMP JIA_F
JIAN_F: MOV R0, #00H
F_JIAN: MOV A, R0
MOV DPTR, #TABLE_F
MOVC A,@A+DPTR
MOV P1, A
ACALL DELAY2
INC R0
JNZ F_JIAN
JNB K3,STOP2 ;判断K3是否按下,是则停止
JNB K2,F_M3 ;判断K2是否按下,是则反转常速
JNB K4,JIA_F ;反转加速
JNB K1,Z_M3 ;判断K1是否按下,是则正转常速
JMP JIAN_F
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DELAY: MOV 30H,#8 ;延时 4ms
D0: MOV 31H, #250
DJNZ 31H, $
DJNZ 30H, D0
RET
DELAY1: MOV 30H,#5 ;延时 2.5ms
D1: MOV 31H, #250
DJNZ 31H, $
DJNZ 30H, D1
RET
DELAY2:MOV 30H,#15 ;延时 7.5ms
D2: MOV 31H, #250
DJNZ 31H, $
DJNZ 30H, D2
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TABLE_Z: ;反转运行时序表
DB 0F8H, 0FCH, 0F4H, 0F6H, 0F2H, 0F3H, 0F1H, 0F9H
DB 00H ;反转结束标记
TABLE_F: ;正转运行时序表
DB 0F9H, 0F1H, 0F3H, 0F2H, 0F6H, 0F4H, 0FCH, 0F8H
DB 00H ;正转结束标记
END