;由P1輸出,正轉200步(1圈),再反轉200步(1圈),
;#11H為1相驅動,#33H為2相驅動
;速度為 1/(0.05XTIMES) 步/秒
STEPS: EQU 200 ;步數設定
TIMES EQU 10 ;時間延遲次數
PHASE EQU 11H ;激磁方式
OUT REG P1 ;指定輸出埠
;======================================================
ORG 0 ;程序開始位置
CALL POSITION ;呼叫定位副程序
START: MOV A, #PHASE ;指定驅動信號
;=============正轉=====================================
MOV R4, #STEPS ;指定正轉步數
RL_1: MOV OUT, A ;輸出驅動信號
MOV R5, #TIMES ;指定重復數
CALL DELAY ;呼叫延遲副程序
RL A ;下壹個驅動信號
DJNZ R4, RL_1 ;是否已200步?
;=============反轉=====================================
MOV R4, #STEPS ;指定正轉步數
RR_1: MOV OUT, A ;輸出驅動信號
MOV R5, #TIMES ;指定重復數
CALL DELAY ;呼叫延遲副程序
RR A ;下壹個驅動信號
DJNZ R4, RR_1 ;是否已200步?
;=============延遲副程序==R5x0.05秒===================
DELAY: MOV R7, #100
這是正傳反轉
;利用DELAY副程序(0.05秒XR5), 產生驅動信號
;由P1輸出
;#11H為1相驅動, #33H為2相驅動
;速度為 1/(0.05XTIMES) 步/秒
TIMES EQU 10
PHASE EQU 11H
OUT REG P1
ORG 0
CALL POSITION ;呼叫定位副程序
MOV A, #PHASE ;指定驅動信號
RL_1: MOV OUT, A ;輸出驅動信號
MOV R5, #TIMES ;指定重復數
CALL DELAY ;呼叫延遲副程序
RL A ;下壹個驅動信號
JMP RL_1 ;跳至RL_1形成回圈
;================================================
DELAY: MOV R7, #100
D1: MOV R6, #250
DJNZ R6, $
DJNZ R7, D1
DJNZ R5, DELAY
RET
;=======定位副程序===============================
POSITION:
MOV 30H, #4 ;四個驅動信號
MOV A, #PHASE ;指定驅動信號
P_1: MOV OUT, A ;輸出驅動信號
MOV R5, #TIMES ;指定重復數
CALL DELAY ;呼叫延遲副程序
RL A ;下壹個驅動信號
DJNZ 30H, P_1 ;跳至RL_1形成回圈
RET
;==================================================
END
這是單步驅動