;****************任務八:四相步進電機的控制*************************
;注:本程序爲四相步進電機實驗用,適於四組線圈的電機。
;電路接法:P1.7 P1.6 P1.5 P1.4分別接晶體管驅動器A,B,C,D輸入端,
; 相應輸出端接步進電機的a,b,c,d四相,電機公共端接步進電機
; 電源正。
;*******************************************************************
ORG 0000H ;讓編譯程序從0地址開始
JMP STAR
ORG 0030H
STAR: MOV SP,#30H ;堆棧指針設定
MOV 21H,#00H ;初始步調清零(0-7)有效
MOV 20H,#4 ;速度選擇1至255(1最大)
MOV A, #200 ;轉200步
LOOP: MOV R3,#4 ;執行4次
L1: CALL BJDJ_4Z; ;正轉
DJNZ R3,L1
MOV R3, #10 ;停止一秒
L2: CALL YS_01S ;延時2 ms
DJNZ R3,L2
MOV R3, #4 ;執行4次
L3: CALL BJDJ_4F ;正轉
DJNZ R3,L3
MOV R3, #10 ;停止一秒
L4: CALL YS_01S
DJNZ R3,L4
JMP LOOP
PROC YS_01S, YS_20MS ;延時子程序定義
YS_01S: MOV R7,#10 ;R7中送入數值10
LP3: MOV R6,#100 ;R6中送入數值100
LP2: MOV R5,#100 ;R5中送入數值100
LP1: DJNZ R5,LP1 ;R5減1不爲0轉LP1
DJNZ R6,LP2 ;R6減1不爲0轉LP2
DJNZ R7,LP3 ;R7減1不爲0轉LP3
RET ;子程序返回
YS_20MS: MOV R7,#1 ;R7中送入數值1
JMP LP3 ;轉到LP3
END ;子程序編譯結束
;****************步進電機控制子程序*************************
;作用:四相步進電機角度及速度控制
;使用方法:先在速度寄存單元20H寫入速度值1至255(1最快)
將要轉過的步數寫入A(1-255),調用該正轉或反轉子程序。
;電路接法: P1.7, P1.6 ,P1.5, P1.4分別接晶體管驅動器A,B,C,D輸入端,
; 相應輸出端接步進電機的a,b,c,d四相,電機公共端接步進電機
; 電源正。
;資源佔用: 20H-速度,21H-步調,R0,B,DPTR
PROC BJDJ_4Z,BJDJ_4F
BJDJ_4Z: PUSH A
MOV R0,A ;步進數送R0
MOV DPTR,#MTAB ;控制碼地址送DPTR
MOV A, P1 ;P1口狀態送A
ANL A,#0FH ;清零高四位
MOV B,A ;保存P1口低四位狀態
LP2: INC 21H ;步調數加1
MOV A,21H ;步調數(0至7),每8步爲一個週期,該寄存
器記錄當前是第幾步
CJNE A,#08H,LP1 ;步調數不爲8轉
CLR A
MOV 21H,A
LP1: MOVC A,@A+DPTR ;查控制碼到A
ORL A,B ;P1口低4位狀態送A
MOV P1,A ; 送出控制碼
CALL YS_SD ;根據速度參數延時
DJNZ R0,LP2 ;步進數減1不爲0轉LP2
MOV A,#0F0H ;停止電機驅動
ORL A,B
MOV P1,A
POP A
RET ;子程序返回
BJDJ_4F: PUSH A
MOV R0,A ;步進數送R0
MOV DPTR,#MTAB ;控制碼地址送DPTR
MOV A, P1 ;P1口狀態送A
ANL A,#0FH ;清零高四位
MOV B,A ;保存P1口低四位狀態
LP4: DEC 21H ;步調數減1
MOV A,21H ;步調數(0至7),每減8步爲一個週期,該寄存器記錄當前是第幾步
CJNE A,#0FFH,LP3 ;步調數不爲8轉
MOV A,#07H
MOV 21H,A
LP3: MOVC A,@A+DPTR ;查控制碼到A
ORL A,B ;P1口低4位狀態送A
MOV P1,A ; 送出控制碼
CALL YS_SD ;根據速度參數延時
DJNZ R0,LP4 ;步進數減1不爲0轉LP4
MOV A,#0F0H ;停止電機驅動
ORL A,B
MOV P1,A
POP A
RET ;子程序返回
END ;子程序編譯結束
PROC YS_SD ;速度延時子程序
YS_SD MOV R7, 20H ;速度參數送R7
LP2: MOV R6,#0B0H
LP1: NOP
NOP
DJNZ R6,LP1
DJNZ R7,LP2
RET
END
MTAB: DB 0E0H,0C0H,0D0H,90H,0B0H,30H,70H,60H
;**********************************************************************
END