请教这个步进电机程序错误之处!现在步进电机可以正转但是不能反转怀疑在进入反转查表部分是的数据入口不对,没查出来请高手指教哪里出错,按理反转的入口是99H啊,就是转不起来。谢谢各位赐教,本程序大家稍微修改便可移植到其他步进电机去! ;****************************************************************************************************** ;用ST51单片机控制298芯片驱动双步进电机转动,实现正反转功能。 ; bg5sbj 2011.11.25 ;******************************************************************************************************* ORG 0000h ajmp main org 0030h main: cpl p2.3 ;p0口指示灯总线使能,利于观察p0口状态 stop: orl p0,#0ffh ;两个步进电机停止工作 loop: jnb p3.4,for2 ;如果s2按下正转 jnb p3.5,rev2 ;如果s1按下反转 jnb p3.6,stop1 ;如果s3按下停止 jmp loop ;反复监测键盘 ;==================================================== for: mov r0,#00h ;正转到tab取码指针初值 for1: mov a,r0 ;取码 mov dptr,#table ; movc a,@a+dptr jz for ;是否到了结束码00h cpl a ;把a反向 mov p0,a ;输出到p0开始正转 jnb p3.6,stop1 ;如果s3按下停止 jnb p3.5,rev2 ;如果s1按下反转 call delay ;转速调整 inc r0 ;取下一个码 jmp for1 ;继续正转 rev: mov r0,#99h ;反转到tab取码指针初值 rev1: mov a,r0 mov dptr,#table ;取码 movc a,@a+dptr jz rev ;是否到了结束码00h cpl a ;把acc反向 mov p0,a ;输出到p1开始反转 jnb p3.6,stop1 ;如果s3按下停止 jnb p3.4,for ;如果s2按下正转 call delay ;转动的速度 inc r0 ;取下一个码 jmp rev1 ;继续反转 ;``````````````````````````````````````````````````````````````````` stop1: mov r1,#140 call d1 ;按s3的消除抖动 jnb p3.6,$ ;s3放开否? call d1 ;放开消除抖动调用延时 jmp stop for2: mov r1,#140 call d1 ;按s2的消除抖动 jnb p3.4,$ ;s2放开否? call d1 ;放开消除抖动 jmp for rev2: mov r1,#140 call d1 ;按s1的消除抖动 jnb p3.5,$ ;s1放开否? call d1 ;放开消除抖动 jmp rev ;````````````````````````````````````````````````````````````````` delay: mov r1,#70 ;步进电机的转速20 ms 12M 晶体 d1: mov r2,#40 ;;0.500ms X 40 = 20 ms djnz r2,$ djnz r1,d1 ret ;*************************************************************** table: db 88h,0cch,44h,66h,22h,33h,11h,99h ;正转表 db 00h ;正转结束 db 88h,99h,11h,33h,22h,66h,44h,0cch ;反转 db 00h ;反转结束 end 作者: 青苹果 时间: 2012-1-16 09:16 为什么入口是99H?觉得应该是09H哦
|