标题: 单片机驱动步进电机一秒钟一个脉冲走一步,程序应该怎么写? [打印本页]

作者: 57185490    时间: 2018-5-23 20:54
标题: 单片机驱动步进电机一秒钟一个脉冲走一步,程序应该怎么写?
1.    void zrun()// 正转运行
2.    {
3.       uchar z;
4.       for(z=0;z<8;z++)
5.           {
6.             P1=runz[z];
7.             delay(y);//延时3.75ms(这个随便定的时间)
8.             P1 &= 0X00;// P1 “与”计算 全部清零
9.              delay1(2000);//延时1s              
15.         }
16.  }
还是直接就延时1s
1.  void zrun()// 正转运行
2.           {
3.               uchar z;
4.              for(z=0;z<8;z++)
5.                {
6.                    P1=runz[z];
7.                    delay1(2000);//延时1s
8.       }
9.  }
步进电机有最高启动频率,有没有最低启动频率呀?


作者: zhanghyg    时间: 2018-5-24 11:08
仅供参考:#include <reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
typedef unsigned int uInt16;
typedef unsigned char  uChar8;

sbit OUT=P2^2;    //定义OUT输出端口
unsigned char i=0;
void Init_Timer0(void)
{
        TMOD |= 0x01;                      //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
        TH0=(65535-12000)/256;                  //重新赋值 12M晶振计算,指令周期1uS,
                                      //1S方波半个周期500mS,由于定时器
                                      //最大值65536 即65.536ms 所以
        TL0=(65535-12000)*256;
        EA=1;                         //总中断打开
        ET0=1;                        //定时器中断打开
        TR0=1;                        //定时器开关打开
}
main()
{
        Init_Timer0();
        OUT=0;
        while(1)
        {
                ;
        }
}

void Timer0_isr(void) interrupt 1
{

        TH0=(65535-12000)/256;                  //重新赋值 12M晶振计算,指令周期1uS,
                                      //1S方波半个周期500mS,由于定时器
                                      //最大值65536 即65.536ms 所以
        TL0=(65535-12000)*256;        //直接定时器不够用,需要用循环处理,
                                      //定时10ms,然后循环50次后输出 50x10=500ms       
        i++;
        if(i==50)
        {
        i=0;
        OUT=~OUT;                     //用示波器可看到方波输出
        }
}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1