我这个有个程序是为了实现单片机启动过去的加减速,求...

2019-07-16 05:18发布

具体就是通过改变定时器的时间来实现加减速过程,但不明白是哪里错了,老是实现不了,具体程序如下:
#include<reg52.h>

sbit A1=P1^0;  //定义脉冲输出
sbit B1=P1^1;  //定义方向输出
unsigned int i=0;
unsigned int j=1000;
/*------------------------------------------------
                    定时器初始化子程序
------------------------------------------------*/
void Init_timer0(void)
{
  TMOD |= 0x01;          //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响                     
  TH0=(65536-j)/256;//TH0=0x00;              //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
  TL0=(65536-j)%256; //TL0=0x00;
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}

/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
           Init_Timer0();
           while(1);

}

/*------------------------------------------------
                 定时器中断子程序
------------------------------------------------*/
void Timer0_isr() interrupt 1
{

TH0=(65536-j)/256;                 
TL0=(65536-j)%256;        

         if(i<=80)  //           匀速
                {
                          B1=0;        // 正方向
                        A1=~A1;        //用示波器可看到方波输出
                     i++;

                        j=j-10;
                }

        if(i>80&&i<=6000)  // 匀速
                {
                        B1=0;   // 正方向
                        A1=~A1;        //用示波器可看到方波输出
                     i++;
                }

                if(i>6000&&i<=6080)  // 减速
                {
                        B1=0;   // 正方向
                        A1=~A1;        //用示波器可看到方波输出
                     i++;

                }

                if(i>6080)                // 停
                {
                        TR0=0;
                }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
yy2008ygh
2019-07-16 14:13
程序构架都错了。楼主多看看步进电机的资料里面有控制方式。步进电机驱动是阶梯控制靠左右两个线圈中的电流不同来产生磁场,使电机转子运动。需要用PWM输出端口调节电流,直接用中断模拟PWM输出难度比较大。将电机运动分为48微步(分的越细运行越平稳), 在每运行一个分步时计算该次运行需要的时间长度,难后用中断驱动。

一周热门 更多>