召唤师 发表于 2020-4-11 11:54:42

步进电机停不下来

本帖最后由 召唤师 于 2020-4-11 13:43 编辑

#include<reg52.h>
unsigned char beatcode[]={0xe,0xc,0xd,0x9,0xb,0x3,0x7,0x6};        //步进电机控制时序
void delay();
unsigned char temp;
unsigned char index=0;
unsigned long j=0;
unsigned int n=2;//转动圈数

intmain(){

while(n!=0){
        temp=P1;                          //p1口低四位控制步进电机
        temp=temp&0xF0;
        temp=temp|beatcode;
        P1=temp;
        index++;
               j++;
        delay();
                if(index==7)
                        {
                        index=0;
                        }
               
                if(j==(n*4096))       //4096是转动一圈的脉冲数
                  {
         n=0;
          }
          }
    P1=P1|0x0f;       //关闭电机所有相
   return 0;
}

void delay(){
unsigned int i=200;
while(i--);
}


用这个程序就是电机会一直转,不会按设定的两圈去停止。

召唤师 发表于 2020-4-11 19:16:56

本帖最后由 召唤师 于 2020-4-11 20:26 编辑

用keil调试时,可以,但是实物不行,不知道为什么。

召唤师 发表于 2020-4-11 21:25:18

有结果了:得在return 0前加一个死循环:while(1);但是我还是没想明白为什么这么做。有懂的人说说看。

Richard149 发表于 2020-4-27 22:24:45

单片机在加电后就会一直执行你拷进去的代码;return后 再从mian 开始执行 ,如上 ,其实是它转了两圈 然后有执行这个代码又转了两圈,一直这样就像是一直转下去!!!所以最后加的死循环很重要。
页: [1]
查看完整版本: 步进电机停不下来