; step motor control
; ASM for MCS51
mode equ 082h
contrl equ 08003h
ctl equ 08000h ;8255接口芯片PA口的地址值
Astep equ 01h ;对A相通电,PA口的赋值
Bstep equ 02h ;对B相通电,PA口的赋值
Cstep equ 04h ;对C相通电,PA口的赋值
Dstep equ 08h ;对D相通电,PA口的赋值
dly_c equ 10h ;启动初值(加速度)寄存器
sd1 equ 80 ;0--255 加速度初值:值越小,加速越快
sd2 equ 40 ;<sd1 最快速度,值越小速度越快,但受DELAY的内循环限制延时子程序外循环初值
sd3 equ 60 ;0--255 延时子程序内循环初值,数值越大速度越小
org 0h
step: ;系统初始化
mov a,#mode ;8255工作模式:控制字
mov dptr,#contrl ;8255控制寄存器
movx @dptr,a
mov dptr,#8002h ;对8002h送00h值
mov a,#0
movx @dptr,a
mov dly_c,#sd1 ;送加速度初值:值越小,加速越快
jmp loop2 ;跳转不同的控制方式:loop--单双8拍
;loop1--双4拍,loop2--单4拍
;单/双八拍工作方式
loop:
mov dptr, #ctl ;送PA口的地址到DPTR
mov a,#astep+bstep ;D相通电
movx @dptr,a
call delay
mov a,#astep ;D相\A相通电
movx @dptr,a
call delay ;调用延时子程序
mov a,#dstep+astep ;A相通电
movx @dptr,a
call delay
mov a,#dstep
movx @dptr,a
call delay
mov a,#cstep+dstep
movx @dptr,a
call delay
mov a,#cstep
movx @dptr,a
call delay
mov a,#bstep+cstep
movx @dptr,a
call delay
mov a,#bstep
movx @dptr,a
call delay
mov a, dly_c
dec a ; 提高转速
cjne a,#sd2, nn1 ; 最快速度,值越小速度越快,但受DELAY的内循环限制inc a
nn1: mov dly_c,a
ljmp Loop1
; 双四拍工作方式
loop1:
mov dptr,#ctl
mov a, #dStep+astep
movx @dptr,a
call delay
mov a, #cstep+dstep
movx @dptr,a
call delay
mov a, #bstep+cstep
movx @dptr,a
call delay
mov a,#astep+bstep
movx @dptr,a
call delay
mov a, dly_c
dec a
cjne a,#sd2, nn2
inc a
nn2: mov dly_c,a
jmp loop1
; 单四拍工作方式
loop2:
mov dptr,#ctl
mov a,#dstep
movx @dptr,a
call delay
mov a,#cstep
movx @dptr,a
call delay
mov a,#bstep
movx @dptr,a
call delay
mov a,#astep
movx @dptr,a
call delay
mov a, dly_c
dec a
cjne a,#sd2, nn3
inc a
nn3: mov dly_c,a
jmp loop2
delay: ;延时子程序mov r6,dly_c ;外循环初值dd1:
mov r7,#sd3 ;内循环初值
djnz r7,$ ;内循环
djnz r6,dd1 ;外循环
ret ;子程序返回
end。