单片机接控制步进电机的程序 很简单的 过来看看吧 80

我编了一个程序,让单片机发100个脉冲,之后电机就停止转动。但是把单片机、驱动器、电机连起来,运行的时候,步进电机一直转,没有出现预期的停止。我的驱动器的脉冲负接P1^2... 我编了一个程序 ,让单片机发100个脉冲,之后电机就停止转动。但是把单片机、驱动器、电机连起来,运行的时候,步进电机一直转,没有出现预期的停止。我的驱动器的脉冲负接 P1^2,驱动器的脉冲正接+5V。
#include<reg52.h>
#include <intrins.h>
#define VALUE 40
sbit sp = P1^2;
unsigned int a;

void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void main()
{
a=0;
while(1)
{ sp=0;
delay(10);
sp=1;
delay(10);
a++;
if(a==100)
{

break;

}

}

}
展开
 我来答
思念不湿
2018-04-20 · TA获得超过470个赞
知道小有建树答主
回答量:219
采纳率:79%
帮助的人:36.1万
展开全部

跳出循环了,执行了循环外的printf语句,说明不是循环问题,经分析,在最后一次跳出循环时,sp = 1,说明P1^2在循环出来后一直是高电平,肯定一直工作啊,你跳出循环应该将P1^2置0

c3344c
推荐于2018-04-25 · TA获得超过2418个赞
知道小有建树答主
回答量:966
采纳率:57%
帮助的人:682万
展开全部
有2个问题:1,ZD-6209-V2C输入端要求5mA的电流,不知你用的是哪种单片机,如果是89C52单片机的准双向IO是不能提供这个电流的;
2,你的程序没有跳出循环,我认为应该是if(a==100)break;另外break之后如果没有执行其它程序是否会返回main,请留意一下你的编译器。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友15823c6bf
2012-12-24
知道答主
回答量:38
采纳率:0%
帮助的人:25.4万
展开全部
主函数改一下就可以了

void main()
{
a=0;
while(1)
{
if(a < 100)
{

sp=0;
delay(10);
sp=1;
delay(10);
a++;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zengxun4644
2012-12-24
知道答主
回答量:43
采纳率:0%
帮助的人:16.9万
展开全部
把break改为while(1)试下,,当a=100,时,让程序停在那里。。如果你用break,当a=100时,程序退出去了,这时单片机不知道该干什么事了,所以他有可能又再次进入主函数运行,就一直转了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小粒子ex877
2012-12-23 · TA获得超过127个赞
知道小有建树答主
回答量:1607
采纳率:0%
帮助的人:508万
展开全部
这个程序肯定不会停止。你改成 if(a==100)while(1);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式