|
楼主 |
发表于 2016-9-14 19:21:32
|
显示全部楼层
我写的驱动代码
仅仅供坛友做参考
;试验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 |
|