微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请问我这个舵机控制程序哪里有问题呢~~~~(>_<)~~~~

请问我这个舵机控制程序哪里有问题呢~~~~(>_<)~~~~

时间:10-02 整理:3721RD 点击:
舵机基本没什么反应

  1. #include<reg52.h>

  2. sbit Moto=P2^2;
  3. sbit Key1=P3^3;
  4. sbit Key2=P3^2;

  5. void Init_Timer();
  6. void KeyScan();
  7. void delay(unsigned int x);

  8. unsigned char flag=1,count=0;

  9. void main()
  10. {
  11.         EA=1;
  12.         Init_Timer();
  13.         TR0=1;         //开启定时器0
  14.         while(1)
  15.         {
  16.                 KeyScan();
  17.         }
  18.        
  19. }
  20. void Init_Timer()
  21. {
  22.         TMOD=0x01;       //定时器工作方式1
  23.         TH0=0xfe;                //装初值 500us
  24.         TL0=0x0c;       
  25.         TR0 = 0;                 //关闭定时器0
  26.     ET0 = 1;                 //打开定时器0中断
  27. }
  28. void KeyScan()
  29. {
  30.         if((Key1==0) && (flag<5))
  31.         {
  32.                         delay(1000); //按键消抖
  33.                         count=0;   //按下按键新的周期开始
  34.                         flag++;
  35.         }
  36.         if((Key2==0) && (flag>1))
  37.         {
  38.                 delay(1000); //按键消抖
  39.                 count=0;   //按下按键新的周期开始
  40.                 flag--;
  41.         }

  42.        
  43. }
  44. void Timer0() interrupt 1
  45. {       
  46.        
  47.         TH0=0xfe;                //装初值 500us
  48.         TL0=0x0c;       
  49.         count=count%40;
  50.         if(count<flag)    //中断高电平次数是否小于角度标识
  51.                 Moto=1,count++;
  52.         else Moto=0;

  53.        
  54. }
  55. void delay(unsigned int x)
  56. {
  57.    unsigned int i, j;
  58.             for(i = x; i > 0; i--)
  59.             for(j = 110; j > 0; j--)
  60.                         ;
  61. }

复制代码



发现问题,此贴终结

问题出在哪了?求解释下。

  •   if(count<flag)    //中断高电平次数是否小于角度标识
  •                 Moto=1,count++;
  •         else Moto=0

Moto=0 后面加个count++;
把  count=count%40;移到中断函数最后

将TL0改为0x33试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top