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