标题: 舵机实物不成功,求大神帮忙看下代码 [打印本页]

作者: kakami    时间: 2019-8-13 10:36
标题: 舵机实物不成功,求大神帮忙看下代码
疑问1舵机它不转。
  1. #include<reg51.h>

  2. #define uchar unsigned char           //宏定义无符号字符型
  3. #define uint  unsigned  int           //宏定义无符号整型
  4. uint b;                //中断值
  5. uint N=0;                //占空比计数值
  6. uint X=8;                                                   //初始角度值  (取值范2~15)
  7.                
  8. uchar key_up;
  9. uchar key_down;

  10. sbit P3_6=P3^6;//角度加30°
  11. sbit P3_7=P3^7;//角度减30°
  12. sbit PWM=P1^0;//输出


  13. void get_key()

  14. {
  15. while(P3_6==0)           //按键加按下
  16. {key_up=1;
  17. }
  18. while(P3_7==0)           //按键减按下
  19. {key_down=1;
  20. }
  21. }





  22. void timer0( ) interrupt 1 //定时器0工作方式1
  23. {
  24. TH0=0xFF;          //重装计数初值
  25. TL0=0x62;          //重装计数初值
  26. b++;
  27. get_key();


  28. if (key_up==1)
  29.        {
  30.            if(X!=11)//判断是否计数到9999
  31.               {
  32.                X=X+1;//加一
  33.                key_up=0;
  34.                            }
  35.         }
  36. if (key_down==1)
  37.        {
  38.             if(X!=5)//判断是否计数到0
  39.               {
  40.                    X=X-1;//减一
  41.                key_down=0;
  42.                }
  43.         }

  44. }





  45. void main()
  46. {
  47. TMOD=0X01;          //定时器中断0
  48. TH0=0xFF;          //重装计数初值
  49. TL0=0x62;          //重装计数初值
  50. EA=1;                                  //开CPU中断
  51. ET0=1;                                  //开T/C0中断
  52. TR0=1;

  53. while(1)                           //无限循环
  54. {


  55. PWM=1;                   //输出PWM正
  56. while(1)
  57. {
  58. b=0;
  59. while(!b);
  60. if (N==X)
  61. PWM=0;
  62. if (N==100)
  63. break;
  64. N++;

  65.           }
  66.             N=0;
  67.           }
  68. }
复制代码



作者: yzwzfyz    时间: 2019-8-13 13:02
本帖最后由 yzwzfyz 于 2019-8-13 15:28 编辑

七窍通了六窍了。
作者: 曹志成    时间: 2019-8-13 16:26
我不知道你晶振多少,用keil调试了一下
[url=][/url]
[url=][/url]
  ,要不你把这个定时改改 调到20ms,如果能输出pwm,舵机接电和接地都没问题,你再换个舵机,还可以再把线检查一下,这个只能自己琢磨了,  实物做不成功是不是很绝望,哈哈    我在弄那个液晶1602的时候线接错了弄了半天,后来又发现显示错位,不知道为什么单片机一根连线不通换了就好了。

IMG_20190813_161603.jpg (2.58 MB, 下载次数: 63)

IMG_20190813_161603.jpg

屏幕截图(1).png (366.93 KB, 下载次数: 47)

屏幕截图(1).png

作者: 爱学习的路飞    时间: 2019-8-13 16:46
emmm......我不知道你那个定时器中断是多少时间,而且,,,你按键连最基本的10ms消抖都没有。用51的IO口直接PWM输出的话,确实简单点。你可以检查下占空比是不是不够?建议你在调试的时候直接将PWM输出的占空比比例调大一点,这样下载后观察到的现象更明显,便于调试。
作者: 林野变    时间: 2019-8-13 21:06
32写  比较简单
作者: qzwddf    时间: 2019-8-13 22:49
在中断里面加点灯程序看中断工作了吗,在while里面分别加点灯程序看循环正常吗,根据我的经验判断,你这个情况应该飞到“溢出”中断区了
作者: witheMe    时间: 2019-8-14 11:12
按键不消抖的后果是你按了一次键,结果程序已经跑了不知道多少遍了,x的值并不是你所想的+1或-1,而是经过了无数次这样子的运算




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