无法控制好步进电机的转动角度,大神们教教我程序哪错了

2019-07-18 15:13发布

  1. #include <REGX52.H>

  2. #define uint unsigned int;

  3. //#define forwordDir 0;
  4. //#define backDir 1;

  5. sbit Pulse=P1^0;
  6. sbit Dir=P1^1;
  7. sbit En=P1^2;
  8. uint clock,i,x;
  9. uint counter=0;


  10. //void forword(void)
  11. //{
  12. //   TR0 = 1;
  13. //   TH0 = (65536 -clock)/256;
  14. //   TL0 = (65536 -clock)%256;
  15. //   Dir = 0;
  16. //   En = 0;
  17. //}

  18. void back(void)
  19. {
  20.    TR0 = 1;
  21.    TH0= (65536 - clock)/256;
  22.    TL0 = (65536 - clock)%256;
  23.    Dir = 1;
  24.    En = 0;

  25. }

  26. void stop(void)
  27. {
  28.    TR0 = 0;
  29. }


  30. void InitBJDJ(void)
  31. {
  32.    TMOD =0x01;
  33.    EA =1;
  34.    ET0=1;
  35. }

  36. void main(void)
  37. {   
  38.    clock =75;
  39.    x=1600;
  40.    InitBJDJ();

  41.    while(1)
  42.    {
  43.        back();
  44.      
  45.        if(counter>=x)//  我想要的效果是:8细分,1600个脉冲走完一圈。 但是电机一直在转,不会停
  46.        {
  47.            En=1;
  48.       }
  49.   }

  50. void time0(void) interrupt 1
  51. {
  52.    TH0= (65536-clock)/256;
  53.    TL0 = (65536 -clock)%256;
  54.    Pulse = ~Pulse;
  55.    counter++;
  56. }
复制代码
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
轨迹lc
1楼-- · 2019-07-19 09:14
新手学习中,楼主水平高,我要好好学习学习
lhxtzlhxtz
2楼-- · 2019-07-19 09:59
Mad-life 发表于 2014-11-11 22:58
已经改好了,能停了

看不明白:void stop(void)程序未见你在主程序中应用,也未见你在定时器0程序中应用,那么你写的void stop(void)程序是用来干什么的?


就是下面的程序

void stop(void)
{
   TR0 = 0;
}

mrlbg
3楼-- · 2019-07-19 15:30
 精彩回答 2  元偷偷看……
wyq8848
4楼-- · 2019-07-19 18:15
到处都有高人到处都有能人还有热心朋友,真好
zkyx512512
5楼-- · 2019-07-19 19:23
楼主在吗?我想知道你用什么步进电机
zkyx512512
6楼-- · 2019-07-19 23:46
A随风 发表于 2014-11-11 13:56
我这有个电机程序:

在吗?请问你这个是4相5线的吗

一周热门 更多>