51单片机控制步进电机正反转、加减速

我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了(经测试上下限都是可以正常速度运转的)求各位路过的大侠指点... 我本来想实现步进电机自由调速的,可现在的程序如果先加速就不能减速了,如果先减速就不能加速了并且减几下就变得很慢了 (经测试上下限都是可以正常速度运转的) 求各位路过的大侠指点

#include<reg51.h>
sbit k1=P1^1; //启动
sbit k2=P1^0; //正反转
sbit k3=P1^2; //加速
sbit k4=P1^3; //减速
unsigned int x=50000;
unsigned char i=0;
unsigned char code table[6]={0x01,0x03,0x02,0x06,0x04,0x05};//单双六拍
void motor();
void main()
{
TMOD=0x01;
TH0=-x>>8; //
TL0=-x%256; //
TCON=0x10;
IE=0x82;
while(1);
}
void time_0 () interrupt 1
{
EA=0;TR0=0;
motor();
if(x<65000&&x>36000) //上下限
{if(!k3) x=x-2000; //加速
else if(!k4) x=x+2000;} //减速
TH0=-x>>8;TL0=-x%256;
TR0=1;EA=1;
}
void motor()
{
if(!k1)
{ if(!k2) //正反转
{i+=1;
if(i>5) i=0;}
else
{i-=1;
if(i>5) i=5;}
P2=table;
}
else P2=0;
}
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
08274061
2011-07-05 · TA获得超过217个赞
知道答主
回答量:45
采纳率:0%
帮助的人:32.1万
展开全部
你是通过if语句判断管脚的电平高低的,如果是的话,你需要一个延时程序来消除管脚电平的抖动。
纠错的方法,是x影响转速吧?你观察一下那个x变量的值的变化,看看你的程序到底是如何操作的。
追问
延时后干脆加减速都没用了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花好月团媛cr
2011-07-05
知道答主
回答量:18
采纳率:0%
帮助的人:15.3万
展开全部
不太懂 觉得是不是因为把电机放在中断服务程序里的原因呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式