帮忙看一下这个C语言51单片机步进电机驱动程序哪里出错了

要达到的目的是:每收到一个脉冲信号,步进电机旋转一个步角,en为旋转方向信号目前测试结果是:给与脉冲信号,电机没有动静也没有震动可以排除:未收到脉冲、脉冲宽度不够、脉冲频... 要达到的目的是:每收到一个脉冲信号,步进电机旋转一个步角,en为旋转方向信号
目前测试结果是:给与脉冲信号,电机没有动静也没有震动
可以排除:未收到脉冲、脉冲宽度不够、脉冲频率过高、驱动器故障电机不正确,因为在此之前按照时序表,每个编码延时适当时间循环执行时,一切正常
以下是程序,多半是程序逻辑有问题,但是自己确看不出来,望高人指点!
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code eight_pos[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e}; 步进电机八拍方式正转表
uint j;
sbit a1=P2^0; //脉冲信号输入
sbit en=P2^1; //en为正反转信号,当en=1时电机正转,等于0时反转
void bujin()
{
while(a1==1&&en==1) //当al=1且en=1时,正方向旋转一个步角
{
if(j<7) //变量j<7时j自加1,变量j等于7时给j赋值等于0
j=j+1; //加1正转
else
j=0;
P1=eight_pos[j]; //正方向旋转一个步角后停止
while(a1==1&&en==1); //等待下一个个脉冲信号
}
while(a1==1&&en==0) //当al=1且en=0时,反方向旋转一个步角
{
if(j==0) //变量j如果等于0
j=7; //给变量j赋值等于7
else
j=j-1; //减1反转
P1=eight_pos[j]; //反方向旋转一个步角后停止
while(a1==1&&en==0); //等待下一个脉冲信号
}

}
void main()
{
P2=0x0;
j=0; //初值
while(1)
{
bujin();
}
}
展开
 我来答
天云小店
2015-07-08 · TA获得超过2.8万个赞
知道大有可为答主
回答量:3281
采纳率:91%
帮助的人:779万
展开全部
while(a1==1&&en==1); //等待下一个个脉冲信号
while(a1==1&&en==0); //等待下一个脉冲信号
以上两句可以完全不需要吧
更多追问追答
追问
假如不要,在一个高脉冲信号还没过去的时候,第一个while不断循环,会导致变量不停的加或者不停的减,这样的话,一个脉冲信号就不止旋转一个步角了,你觉得呢?
追答
恩  你说的也有道理
但是有没有这样的情况呢?
当脉冲频率很高时,程序就会一直陷在这里while(a1==1&&en==1); //等待下一个个脉冲信号

因为当执行while(a1==1&&en==1); 的时候条件成立,执行过程当中条件不成立,执行完第二次判断的时候,条件又成立
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式