硬件电路:单片机的P1.0 P1.1加在ULN2003的一侧,另一侧接两相的步进电机。22V供电。现在问题是我把程序下进去,只是振动,不转动。我的软件仿真没有问题呀。请高手指点小弟谢了. 主程序如下 org 00h stop: orl p1,#0ffh ; 步进电机停止 loop:jnb p3.0,for2 ; 如果p3.2按下正转 jnb p3.1,rev2 ; 如果p3.3按下反转 jnb p3.2,stop1 ; 如果p3.4按下停止 jmp loop ;反复监测键盘 for: mov r0,#00h ;正转到tab取码指针初值 for1:mov a,r0 ;取码 mov dptr,#tabla ; movc a,@a+dptr ;10 jz for ;是否到了结束码00h cpl a ;把acc反向 mov p1,a ;输出到p1开始正转 jnb p3.2,stop1 ; 如果p3.4按下停止 jnb p3.1,rev2 ; 如果p3.3按下反转 call delay ;转动的速度 inc r0 ;取下一个码 jmp for1 ;继续正转 rev:mov r0,#00h ;反转到tab取码指针初值 revs:mov a,r0 ;20 mov dptr,#tabla ;取码 movc a,@a+dptr jz rev ;是否到了结束码00h cpl a ;把acc反向 mov p1,a ;输出到p1开始反转 jnb p3.2,stop1 ; 如果p3.4按下停止 jnb p3.1,rev2 ; 如果p3.3按下反转 call delay ;转动的速度 inc r0 ;取下一个码 jmp revs ;继续反转 30 stop1:call delay ; 按p3.4的消除抖动 jnb p3.2,$ ; p3.4放开否? call delay ;放开消除抖动 jmp stop
for2:call delay ; 按p3.2的消除抖动 jnb p3.0,$ ; p3.2放开否? call delay ;放开消除抖动 jmp for rev2:call delay ; 按p3.3的消除抖动 jnb p3.1,$ ; p3.3放开否? call delay ;放开消除抖动 jmp rev
delay:mov r1,#255;步进电机的转速20ms d1:mov r2,#255 djnz r2,$ djnz r1,d1 ret tabla: db 01,02 ;正转表 db 00 ;正转结束 db 02,01 ;反转 db 00 ;反转结束 end
|