找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1890|回复: 4
收起左侧

单片机控制舵机转向超声波测距,为啥我的程序舵机只能转一下

[复制链接]
ID:501937 发表于 2019-4-20 20:37 | 显示全部楼层 |阅读模式
为啥我的程序舵机只能转一下啊
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. sbit led1=P1^0;
  6. sbit led2=P1^2;
  7. sbit led3=P1^4;
  8. sbit led4=P1^6;
  9. sbit pwm=P3^0;
  10. sbit trig=P3^2;
  11. sbit echo=P3^4;
  12. unsigned long s=0;
  13. unsigned long s1=0;
  14. unsigned long s2=0;
  15. unsigned long s3=0;

  16. uint timer=0,time=0;
  17. uchar num=0,sun;

  18.    void qianjin()
  19.    {
  20.       led1=1,led2=0,led3=1,led4=0;
  21.    }
  22.    void houtui()
  23.    {
  24.        led1=0,led2=1,led3=0,led4=1;
  25.    }
  26.    void zuozhuan()
  27.    {
  28.        led1=0,led2=1,led3=0,led4=0;
  29.    }
  30.    void youzhuan()
  31.    {
  32.        led1=0,led2=0,led3=1,led4=0;
  33.    }
  34.    void start()
  35.    {
  36.       trig=1;
  37.           _nop_();
  38.           _nop_();
  39.           _nop_();
  40.           _nop_();
  41.           _nop_();
  42.           _nop_();
  43.           _nop_();
  44.           trig=0;
  45.    }
  46.    void delay(uint max)
  47.    {
  48.       int x,y;
  49.      for(x=0;x<max;x++)
  50.             for(y=0;y<2000;y++);

  51.    }
  52.                void conut()                  
  53.               {
  54.       
  55.                while(!echo);                     
  56.              TR0=1;                             
  57.              while(echo);                        
  58.              TR0=0;                                 
  59.              time=TH0*256+TL0;                  
  60.               TH0=0;
  61.              TL0=0;
  62.               s=(time*1.7)/100;   
  63.                
  64.                   }
  65.                
  66.         void main()
  67.         {
  68.       
  69.                      TMOD=0X01;
  70.           TH0=(65536-100)/256;
  71.           TR0=(65536-100)%256;
  72.           EA=1;
  73.           ET0=1;
  74.           TR0=1;
  75.          
  76.          
  77.           sun=16;
  78.           timer=0;
  79.           while(timer<20000);
  80.           start();
  81.           conut();
  82.           s1=s;
  83.          
  84.           sun=8;         
  85.          timer=0;
  86.          while(timer<=20000);
  87.           start();
  88.           conut();
  89.           s2=s;
  90.          
  91.           sun=1;
  92.           delay(100);
  93.           start();
  94.           conut();
  95.           s3=s;
  96.                   
  97.         }
  98.          void T0_time()interrupt 1
  99.                   {
  100.                                      TH0=(65536-100)/256;
  101.                                          TL0=(65536-100)%256;
  102.                                            num++;
  103.                                               if(num==50)  num=0;
  104.                                                             if(num>sun) pwm=0;
  105.                                                                  else  pwm=1;
  106.                                                                  timer++;
  107.                                   }
复制代码


回复

使用道具 举报

ID:432823 发表于 2019-4-21 13:13 | 显示全部楼层
程序未加while(1){主程序}
回复

使用道具 举报

ID:101620 发表于 2019-4-21 14:33 | 显示全部楼层
控制舵机没有使用中断,要让舵机循环转动
回复

使用道具 举报

ID:501937 发表于 2019-4-21 21:32 | 显示全部楼层
yaoji123 发表于 2019-4-21 13:13
程序未加while(1){主程序}

我写了while(1)也不行,不知道咋搞的
回复

使用道具 举报

ID:501937 发表于 2019-4-21 21:37 | 显示全部楼层
孤剑酷 发表于 2019-4-21 14:33
控制舵机没有使用中断,要让舵机循环转动

求大佬告知应该怎么改
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表