我寫的驅動代碼
僅僅供壇友做參考
;試驗57步進電機驅動匯編代碼
;11.0592MHz晶振+AT89C2051/4051
;Lxa0最后修改于2016-9-17--V2.0
;t0備用,t1產生9600波特率
;p10p11p12p13分別對應步進電機ABCD,低電平有效
;步進角為1.8度,一圈360度,需要200個脈沖完成
;A組線圈 P1.0
;B組線圈 P1.1
;C組線圈 P1.2
;D組線圈 P1.3
org 0000h
ajmp mm ;轉主程序
org 0023h
ajmp qz ;轉串口讀取指令
;主程序*******************************************************
org 0100h
mm:nop
mov p1,#0ffh ;關閉全部
mov r0,#00h ;讀dptr首址用
mov r1,#00h ;存放正反轉脈沖數據(1圈200個脈沖,16制為c8h)
mov r2,#00h ;存放改變轉速的數據
mov r3,#00h ;備用
mov r4,#00h ;r4和r5短延時用
mov r5,#00h
mov r6,#00h ;r6和r7長延時用
mov r7,#00h
mov 20h,#00h ;20h設置wifi標志
mov 21h,#00h ;21h設置動作標志
mov 22h,#00h ;動作代碼存放單元
mov sp,#4fh ;設堆棧入口50h
mov scon,#50h ;設置串口方式1,允許串口接收
mov pcon,#00h ;設置波特率9600
mov tmod,#21h ;T0設方式1,T1方式2(自動重裝)
mov th1,#0fdh ;T1設初始值
mov tl1,#0fdh ;TH1=TL1=#0fdh(波特率9600)
clr et1 ;禁止T1中斷
clr ri
clr ti
setb tr1 ;開T1定時器
setb es ;開串口中斷
setb ea ;開總中斷
mm1:nop
acall ssd ;雙閃溝?
acall ssd
acall ssd
acall zz ;調用正轉
acall ssd ;雙光燈
acall ssd
acall ssd
acall fz ;調用反轉
sjmp mm1
;正轉子程序***********************************************************************
ORG 0200H
zz:push acc
MOV R1,#0c8h ;正轉1圈發200個脈沖,單八拍
zz1:MOV R0,#00h
zz2:mov p1,0ffh
mov p1,#0ffh
MOV A,R0
MOV DPTR,#0380h
MOVC A,@A+DPTR
JZ zz1 ;當A=0時轉完1圈完畢
MOV P1,A
LCALL ys ;這個時間是調速的,時間越長速度越慢
INC R0
DJNZ R1,zz2
MOV P1,#0ffh
mov p1,#0ffh
pop acc
ret
;反轉子程序***********************************************************************
org 0280h
fz:push acc
MOV R1,#0c8h ;反轉1圈發200個脈沖,單八拍
fz1:MOV R0,#00H
fz2:MOV P1,#0ffh
mov p1,#0ffh
MOV A,R0
MOV DPTR,#03c0h
MOVC A,@A+DPTR
JZ fz1 ;當A=0時反轉1圈完畢
MOV P1,A
CALL ys
INC R0
DJNZ R1,fz2
MOV P1,#0ffh
mov p1,#0ffh
pop acc
ret
;轉速控制子程序***********************************************************************
org 0300h
ys:djnz r2,ys ;步進電機的轉速
RET
org 0380h
TABLE1:
DB 0feh,0fcH,0fdh,0f9H,0fbh,0f3H,0f7h,0f6H ;正轉表
DB 00h ;正傳結束
org 03c0h
TABLE2:
DB 0feh,0f6h,0f7h,0f3h,0fbh,0f9h,0fdh,0fch ;反轉表
DB 00h ;反轉結束
;接收并取出串口接收到的數據指令*******************************
org 0400h
qz:nop
clr ri ;先清零串口接收中斷位
qz00:reti
;閃光燈代碼***************************************************
org 0500h
ssd:clr p3.7 ;Gled閃爍發光
acall dys
setb p3.7
acall dys
acall cys
clr p3.7
acall dys
setb p3.7
acall cys
acall cys
acall cys
acall cys
acall cys
ret
dys:mov r4,#0ffh ;短延時
mov r5,#10h
dys1:djnz r4,dys1
dys2:djnz r5,dys1
ret
cys:mov r6,#0ffh ;長延時
mov r7,#0ffh
cys1:djnz r6,cys1
cys2:djnz r7,cys1
ret
end
;四相八拍步進電機順序
;正轉:A-AB-B-BC-C-CD-D-DA----------0feh,0fcH,0fdh,0f9H,0fbh,0f3H,0f7h,0f6h
;反轉:A-AD-D-DC-C-CB-B-BA----------0feh,0f6h,0f7h,0f3h,0fbh,0f9h,0fdh,0fch |