找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6005|回复: 34
打印 上一主题 下一主题
收起左侧

请大家看看我这个C程序有什么错误。是用来控制舵机的,但现在舵机不动。

[复制链接]
跳转到指定楼层
楼主
ID:85201 发表于 2015-7-15 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
#define uint unsigned int
sbit pwm=P2^0;//定义P2.0口为PWM输出口
uint num,end,jd;//定义高电平、总时间、角度标识
void main()//主程序
{
        TMOD=17;//设置定时器T0、T1工作在方式一
        TH0=(65535-92)/256;//T0定时为0.1MS
        TL0=(65535-92)%256;
        TH1=(65535-18349)/256;//T1定时为20MS
        TL1=(65535-18349)%256;
        EA=1;
        ET0=1;
        ET1=1;
        TR0=1;
        TR1=1;
        jd=10;
        num=0;
          if(end>3000)//如果T1定时器中断次数达到3000次,也就是1分钟,程序将停止运行
            {
                   EA=0;
                   while(1);
            }
}
void time1()interrupt 1
{
TH0=(65535-92)/256;
TL0=(65535-92)%256;
        num++;//T0每中断一次,高电平标识加1,当大于角度标识时,PWM置于低电平,同时关掉T0中断
          if(num>jd)
          {
                  pwm=0;
                  num=0;
                  TR0=0;
          }
}
void time3()interrupt 3
{
        TH1=(65535-18349)/256;
        TL1=(65535-18349)%256;
        jd++;
        end++;
        TR0=1;
        pwm=1;//T1每中断一次,将PWM重新置为高电平
          if(jd>22)//当角度标识大于22时,也就是高电平时间大于2.2MS时,将角度标识重新置为10,也就是1MS
                {
                        jd=10;
                }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:77578 发表于 2015-7-16 00:35 来自手机 | 只看该作者
你的大循环呢?没有大循环,这程序不是一直在初始化嘛?而且就是个舵机程序,怎么写的那么复杂啊,我是没看懂怎么个意思,

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:85201 发表于 2015-7-16 14:25 | 只看该作者
moyuqilin 发表于 2015-7-16 00:35
你的大循环呢?没有大循环,这程序不是一直在初始化嘛?而且就是个舵机程序,怎么写的那么复杂啊,我是没看 ...

一语惊醒梦中人啊,的确是把大循环忘了。非常感谢。我回家改正一下试试。我这个程序是想实现舵机左右摆动,持续一分钟后程序停止。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:77578 发表于 2015-7-17 00:33 来自手机 | 只看该作者
slh0721 发表于 2015-7-16 14:25
一语惊醒梦中人啊,的确是把大循环忘了。非常感谢。我回家改正一下试试。我这个程序是想实现舵机左右摆动 ...

一个定时器不行嘛。用两个有点浪费了吧

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:85201 发表于 2015-7-17 00:45 | 只看该作者
moyuqilin 发表于 2015-7-17 00:33
一个定时器不行嘛。用两个有点浪费了吧

反正资源够用,也是想用两个试试。还有一个问题,我加了大循环后,还是不行,我真搞不懂是哪的问题了。给你再贴一下程序,麻烦帮忙看一下:
#include<reg52.h>
#define uint unsigned int
sbit pwm=P2^0;
uint num,end,jd;  //定义高电平时间标识、程序运行时间和角度标识
void main()  //主函数
{
        TMOD=17;  //定时器0和1工作在方式1
        TH0=(65535-459)/256;  //定时器1定时时间为0.5ms,11.0592晶振
        TL0=(65535-459)%256;
        TH1=(65535-18349)/256;  //定时器2定时时间为20ms,11.0592晶振
        TL1=(65535-18349)%256;
        EA=1;  //打开中断总开关
        ET0=1;  //打开TO定时开关
        ET1=1;  //打开T1定时开关
        TR0=1;  //T0定时器开始
        TR1=1;  //T1定时器开始
        jd=1;  //为角度标识赋一个初值
        num=0;  //为高电平标识赋一个初值
        while(1)  //大循环等待
        {
          if(end==3000)  //如果时间到达一分钟,则程序停止
            {
                   EA=0;
                   while(1);
            }
  }
}       
void time1()interrupt 1   //T0中断程序
{
TH0=(65535-459)/256;  //重新赋值
TL0=(65535-459)%256;
        num++;  //每中断一次,NUM加1,大于角度标识后将输出设为低电平,NUM数值清零,同时关闭此中断
          if(num>jd)
          {
                  pwm=0;
                  num=(num+1);
                  TR0=0;
          }
}
void time3()interrupt 3   //T1中断程序
{
        TH1=(65535-18349)/256;  //重新赋值
        TL1=(65535-18349)%256;
        jd=(jd+1);
        end=(end+1);
        TR0=1;  //重新打开T0中断
        pwm=1;  //每次T1中断后,IO口电平重新设为高电平
          if(jd>4)  //每当角度标识大于4,也就是高电平时间大于2MS时,重新设置为0.5MS
                {
                        jd=1;
                }
}

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

6#
ID:85201 发表于 2015-7-17 00:47 | 只看该作者
moyuqilin 发表于 2015-7-17 00:33
一个定时器不行嘛。用两个有点浪费了吧

原以为是T0定时太短,造成中断冲突,所以把T0的中断时间改长了,还是不行。
回复

使用道具 举报

7#
ID:85201 发表于 2015-7-17 00:50 | 只看该作者
moyuqilin 发表于 2015-7-17 00:33
一个定时器不行嘛。用两个有点浪费了吧

还有,舵机用的是银燕的ES08A,难道这个舵机的周期不是20MS或者高电平周期不是0.5--2.5MS?真有点搞不懂了。
回复

使用道具 举报

8#
ID:80992 发表于 2015-7-17 14:24 | 只看该作者
左右摆要不了这么复杂吧

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

9#
ID:85201 发表于 2015-7-17 15:55 | 只看该作者
xtitxjg 发表于 2015-7-17 14:24
左右摆要不了这么复杂吧

请问您有什么更简单的办法?还望赐教啊。
回复

使用道具 举报

10#
ID:80992 发表于 2015-7-18 16:10 | 只看该作者
slh0721 发表于 2015-7-17 15:55
请问您有什么更简单的办法?还望赐教啊。

我想回服你的,但每次把思路方法打到一半,就会弹个筐筐出来,说“哈哈360浏览器崩溃了”,每次都这样,字实在是太难打了,所以我只有回着些了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

11#
ID:80992 发表于 2015-7-18 20:36 | 只看该作者
楼主要得可是这个效果

整个程序从头文件到尾,加上大大小小的文件各种括号47行,左右摆18行,当然没写停摆,停摆加个变量加个IF

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

12#
ID:80992 发表于 2015-7-18 21:02 | 只看该作者
本帖最后由 xtitxjg 于 2015-7-18 21:04 编辑

哎呀,有崩溃了,回帖字一多就崩溃
等着我用记事本打,完了COPY过来,看它还崩溃不
回复

使用道具 举报

13#
ID:85201 发表于 2015-7-18 21:42 | 只看该作者
xtitxjg 发表于 2015-7-18 20:36
楼主要得可是这个效果

整个程序从头文件到尾,加上大大小小的文件各种括号47行,左右摆18行,当然没写停 ...

没错,就是要这种效果。
回复

使用道具 举报

14#
ID:80992 发表于 2015-7-18 22:28 | 只看该作者
本帖最后由 xtitxjg 于 2015-7-18 23:07 编辑
slh0721 发表于 2015-7-18 21:42
没错,就是要这种效果。

程序就不给你了,给你点思路,也许这样对你帮助更大,先看波形图。
+90度波形图
-90度波形图
如图所示,PWM的周期为20MS,要改变舵机角度,就要改变此PWM的占空比
有个方法,假如我们吧这个20MS分成200份,那1份的时间就是100US
我们可以用定时器定时100US中断一次,中断200次就是一个周期,分了段就简单了,
我们知道普通模拟舵机的控制信号为50HZ,高电平宽度为500us对应-90度—2500us对应+90度
如果我们想让舵机移到-90度,我们只需要对中断计数。
在第1次进入中断的时候,我们把XI/O口拉高,在第6次进中断的时候拉低,我们就得到了500us的高电平
舵机移到-90度位置。
在下一个周期来的第一次中断的时候,我们把XI/O口拉高,在第7次进中断的时候拉低,这次我们就得到了600us的高电平
舵机移到-90度+100us/度的位置。
接下来就是700US.800us........以此类推,一直到2500us,
当到了2500us的时候,我们再来减
周期开始第一次拉高,25次的是时候拉低,舵机移到+90度-100/度,
在下一个周期来的第一次中断的时候拉高,24次的是时候拉低,舵机移到+90度-100us/度-100us度,
以此类推,一直到500us,又开加,到2500有减,如次往复一个定时器搞定,是不是很简单?
思路告述你了。
至于振膜计数和清零,舵机每次转动多少度以及多少时间动作一次,这个就要你自己去悟想办法写了。
其实也并不复杂,就是两三个变量,几个IF和分辨率THX,TLX配置的问题,等你看明白了,写出来了,普通51软件模拟PWM
也就算学会了

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

15#
ID:85201 发表于 2015-7-19 01:21 | 只看该作者
xtitxjg 发表于 2015-7-18 22:28
程序就不给你了,给你点思路,也许这样对你帮助更大,先看波形图。
+90度波形图
-90度波形图

我现在刚看完中断这段教程。后面的还没有学到。你讲的道理很明白,但现在我还不知道用什么方法能让它顺序加、顺序减,等于是闭门造车啊。如果不是时间紧的话,我就按部就班的学了,但现在我需要尽快把小装置做出来给别人,所以我想还是给我看看你的程序吧,我作为一个参考,也能更快的掌握这方面的知识。万分感谢。
回复

使用道具 举报

16#
ID:85201 发表于 2015-7-19 23:57 | 只看该作者
xtitxjg 发表于 2015-7-18 22:28
程序就不给你了,给你点思路,也许这样对你帮助更大,先看波形图。
+90度波形图
-90度波形图

我今天又抽空研究了一下,还是没有头绪,就期待您的程序发布出来了。不然我这个坎看来是短期内不好过去了。
回复

使用道具 举报

17#
ID:80992 发表于 2015-7-20 00:50 | 只看该作者
本帖最后由 xtitxjg 于 2015-7-20 01:03 编辑
slh0721 发表于 2015-7-19 01:21
我现在刚看完中断这段教程。后面的还没有学到。你讲的道理很明白,但现在我还不知道用什么方法能让它顺序 ...

加减循环

if(变量1)
{
if(变量2>5)
{
变量2--;
}
else
{
变量1=0;
}
}
else
{
if(变量2<26)
{
变量2++;
}
else
{
变量1=1;
}
}

/////////////////////////////////////////////////////////////


f(变量1)
{
变量2--;
if(变量2〈=5)
{
变量1=0;
}
}
else
{
变量2++;
if(变量2>=26)
{
变量1=1;
}
}




评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

18#
ID:86218 发表于 2015-7-20 09:52 | 只看该作者
没有大循环

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

19#
ID:85201 发表于 2015-7-20 12:48 | 只看该作者

谢谢,这个我后面加上了。
回复

使用道具 举报

20#
ID:85201 发表于 2015-7-20 23:33 | 只看该作者
xtitxjg 发表于 2015-7-20 00:50
加减循环

if(变量1)

没太看明白,if后面括号里面不应该是表达式吗?只写变量1的话,不算是表达式吧。
回复

使用道具 举报

21#
ID:80992 发表于 2015-7-21 08:27 | 只看该作者
本帖最后由 xtitxjg 于 2015-7-21 08:49 编辑
slh0721 发表于 2015-7-20 23:33
没太看明白,if后面括号里面不应该是表达式吗?只写变量1的话,不算是表达式吧。

IF只判断真假,与是否表达式无关
其实你那个程序不需要每次加减,直接给最大或最小

IF(变量>10000) ///////////////10000*100=1s
{                     
IF(变量==25)
{变量2=5;
变量=0;}
else
{
变量2=25;
变量=0;
}
}
变量++;


评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

22#
ID:85201 发表于 2015-7-21 23:49 | 只看该作者
xtitxjg 发表于 2015-7-21 08:27
IF只判断真假,与是否表达式无关
其实你那个程序不需要每次加减,直接给最大或最小

见笑,虽然我明白你讲的逻辑,但我到现在还是写不出正常的程序来。我可能还欠缺一些基本知识。您还是把您的程序给我看看吧,没有成功的案例参考,要走不少弯路呢。还有,我也没多少时间可用了,再做不出来,我就得失信于人了。拜托了。
回复

使用道具 举报

23#
ID:80992 发表于 2015-7-23 14:38 | 只看该作者
slh0721 发表于 2015-7-21 23:49
见笑,虽然我明白你讲的逻辑,但我到现在还是写不出正常的程序来。我可能还欠缺一些基本知识。您还是把您 ...

给你吧,写好了1秒一次,60次 qd.rar (340 Bytes, 下载次数: 51)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

24#
ID:85201 发表于 2015-7-23 14:49 | 只看该作者
xtitxjg 发表于 2015-7-23 14:38
给你吧,写好了1秒一次,60次

不胜感激,真的是不胜感激。若不介意,能留个QQ吗?我们也算是志趣相同,你在这方面也是高手了,所以我想今后有疑难的地方还要向你多请教。
回复

使用道具 举报

25#
ID:80992 发表于 2015-7-23 15:00 | 只看该作者
slh0721 发表于 2015-7-23 14:49
不胜感激,真的是不胜感激。若不介意,能留个QQ吗?我们也算是志趣相同,你在这方面也是高手了,所以我想 ...

我高手的很反正幼儿园一般的小盆友还是整不赢我滴QQ一般一上了,微信吧33136583
回复

使用道具 举报

26#
ID:85201 发表于 2015-7-23 17:15 | 只看该作者
xtitxjg 发表于 2015-7-23 15:00
我高手的很反正幼儿园一般的小盆友还是整不赢我滴QQ一般一上了,微信吧33136583

谦虚了,我现在在单片机和C语言这块,也就是幼儿园水平而已。
回复

使用道具 举报

27#
ID:79544 发表于 2015-7-23 19:37 | 只看该作者
slh0721 发表于 2015-7-16 14:25
一语惊醒梦中人啊,的确是把大循环忘了。非常感谢。我回家改正一下试试。我这个程序是想实现舵机左右摆动 ...

给你个通过的舵机程序
  1. //正确的舵机控制左,右,归中,程序
  2. //#include<12c5a.h>
  3. #include<reg52.h>
  4. //#define uchar unsigned char
  5. //#define uint unsigned int
  6. //#define moto_pwm  P1_4  //PWM输出脚控制舵机

  7. sbit moto_pwm=P1^0;//PWM输出脚控制舵机
  8. sbit moto_pwm1=P1^1;//PWM输出脚控制舵机
  9. sbit moto_pwm2=P1^2;//PWM输出脚控制舵机

  10. sbit xiaocheting=P1^3;
  11. sbit xiaochehouti=P1^4;
  12. sbit xiaocheqianjin=P1^5;

  13. uchar pwm_lefr=0;//定义 定时器自加1变量
  14. uchar pwm_lefr1=0;//定义 定时器自加1变量
  15. uchar pwm_lefr2=0;//定义 定时器自加1变量
  16. uchar duojiguizhong=12;//舵机归中1.5ms
  17. uchar duojiguizhong1=12;//舵机归中1.5ms
  18. uchar duojiguizhong2=12;//舵机归中1.5ms


  19. void pwmmaic()//产生PWM
  20. {
  21.         if(pwm_lefr<=duojiguizhong)
  22.        
  23.                 moto_pwm=1;
  24.                 else
  25.                 moto_pwm=0;
  26.                 if(pwm_lefr>=200)
  27.                 pwm_lefr=0;       
  28. if(pwm_lefr1<=duojiguizhong1)
  29.        
  30.                 moto_pwm1=1;
  31.                 else
  32.                 moto_pwm1=0;
  33.                 if(pwm_lefr1>=200)
  34.                 pwm_lefr1=0;       
  35. if(pwm_lefr2<=duojiguizhong2)
  36.        
  37.                 moto_pwm2=1;
  38.                 else
  39.                 moto_pwm2=0;
  40.                 if(pwm_lefr2>=200)
  41.                 pwm_lefr2=0;       
  42. }
  43. void time1() interrupt 3
  44. {
  45. //        TH1=0XFf;//100us的赋值11.0592M
  46. //        TL1=0XAE;
  47.         TH1=(65536-60)/256;//100us的赋值
  48.         TL1=(65536-60)%256;
  49.         pwm_lefr++;
  50.         pwm_lefr1++;
  51.         pwm_lefr2++;
  52.         pwmmaic();
  53. }
  54. void inttime()
  55. {
  56. //        TMOD=0X10;
  57.         TMOD=0X11;
  58.         TH1=(65536-60)/256;//100us的赋值12M
  59.         TL1=(65536-60)%256;
  60. //        TH1=0XFf;//100us的赋值11.0592M
  61. //        TL1=0XAE;
  62.         ET1=1;
  63.         TR1=1;
  64.         EA=1;
  65. }
  66. void delay(uint z)
  67. {
  68.         uint x,y;
  69.         for(x=z;x>0;x--)
  70.         for(y=240;y>0;y--);
  71. }
  72. void main()
  73. {
  74.         duojiguizhong=12;
  75.         duojiguizhong1=12;
  76.         duojiguizhong2=12;
  77.         inttime();
  78.         while(1)
  79.         {
  80.                 if(xiaocheting==0)       
  81.                 {
  82.                         delay(10);
  83.                         if(xiaocheting==0)       
  84.                         {
  85.                                 duojiguizhong=4;
  86.                                 delay(2000);

  87.                                 duojiguizhong1=6;
  88.                                 delay(1000);

  89.                                 duojiguizhong=14;
  90.                                 delay(2000);

  91.                                 duojiguizhong1=14;
  92.                                 delay(2000);

  93.                                 while(xiaocheting==0);
  94.                         //        duojiguizhong=12;//归中
  95.                         //        delay(2000);
  96.                          }
  97.                          
  98.                 }
  99.                 /*
  100.                 duojiguizhong=16;
  101.                 delay(1000);
  102.                 duojiguizhong=12;//归中
  103.                 delay(1000);
  104.                 duojiguizhong=8;//右45度
  105.                 delay(1000);

  106.                 duojiguizhong1=6;
  107.                 delay(1000);
  108.                 duojiguizhong1=12;
  109.                 delay(1000);
  110.                 duojiguizhong1=16;
  111.         //        delay(1000);*/

  112.         }
  113. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

28#
ID:79544 发表于 2015-7-23 19:43 | 只看该作者
slh0721 发表于 2015-7-23 14:49
不胜感激,真的是不胜感激。若不介意,能留个QQ吗?我们也算是志趣相同,你在这方面也是高手了,所以我想 ...

这个是我用的舵机程序 按键可以当传感器用。
  1. #include<reg52.h>
  2. //#define uchar unsigned char
  3. //#define uint unsigned int
  4. //#define moto_pwm  P1_4  //PWM输出脚控制舵机

  5. sbit moto_pwm=P1^0;//PWM输出脚控制舵机
  6. sbit moto_pwm1=P1^1;//PWM输出脚控制舵机
  7. sbit moto_pwm2=P1^2;//PWM输出脚控制舵机

  8. sbit xiaocheting=P1^3;//按键控制
  9. sbit xiaochehouti=P1^4;
  10. sbit xiaocheqianjin=P1^5;

  11. uchar pwm_lefr=0;//定义 定时器自加1变量
  12. uchar pwm_lefr1=0;//定义 定时器自加1变量
  13. uchar pwm_lefr2=0;//定义 定时器自加1变量
  14. uchar duojiguizhong=12;//舵机归中1.5ms
  15. uchar duojiguizhong1=12;//舵机归中1.5ms
  16. uchar duojiguizhong2=12;//舵机归中1.5ms


  17. void pwmmaic()//产生PWM
  18. {
  19.         if(pwm_lefr<=duojiguizhong)
  20.        
  21.                 moto_pwm=1;
  22.                 else
  23.                 moto_pwm=0;
  24.                 if(pwm_lefr>=200)
  25.                 pwm_lefr=0;       
  26. if(pwm_lefr1<=duojiguizhong1)
  27.        
  28.                 moto_pwm1=1;
  29.                 else
  30.                 moto_pwm1=0;
  31.                 if(pwm_lefr1>=200)
  32.                 pwm_lefr1=0;       
  33. if(pwm_lefr2<=duojiguizhong2)
  34.        
  35.                 moto_pwm2=1;
  36.                 else
  37.                 moto_pwm2=0;
  38.                 if(pwm_lefr2>=200)
  39.                 pwm_lefr2=0;       
  40. }
  41. void time1() interrupt 3
  42. {
  43. //        TH1=0XFf;//100us的赋值11.0592M
  44. //        TL1=0XAE;
  45.         TH1=(65536-60)/256;//100us的赋值
  46.         TL1=(65536-60)%256;
  47.         pwm_lefr++;
  48.         pwm_lefr1++;
  49.         pwm_lefr2++;
  50.         pwmmaic();
  51. }
  52. void inttime()
  53. {
  54. //        TMOD=0X10;
  55.         TMOD=0X11;
  56.         TH1=(65536-60)/256;//100us的赋值12M
  57.         TL1=(65536-60)%256;
  58. //        TH1=0XFf;//100us的赋值11.0592M
  59. //        TL1=0XAE;
  60.         ET1=1;
  61.         TR1=1;
  62.         EA=1;
  63. }
  64. void delay(uint z)
  65. {
  66.         uint x,y;
  67.         for(x=z;x>0;x--)
  68.         for(y=240;y>0;y--);
  69. }
  70. void main()
  71. {
  72.         duojiguizhong=12;
  73.         duojiguizhong1=12;
  74.         duojiguizhong2=12;
  75.         inttime();
  76.         while(1)
  77.         {
  78.                 if(xiaocheting==0)       
  79.                 {
  80.                         delay(10);
  81.                         if(xiaocheting==0)       
  82.                         {
  83.                                 duojiguizhong=4;
  84.                                 delay(2000);

  85.                                 duojiguizhong1=6;
  86.                                 delay(1000);

  87.                                 duojiguizhong=14;
  88.                                 delay(2000);

  89.                                 duojiguizhong1=14;
  90.                                 delay(2000);

  91.                                 while(xiaocheting==0);
  92.                                 duojiguizhong=12;//归中
  93.                                 delay(2000);
  94.                          }
  95.                          
  96.                 }
  97.                 /*
  98.                 duojiguizhong=16;
  99.                 delay(1000);
  100.                 duojiguizhong=12;//归中
  101.                 delay(1000);
  102.                 duojiguizhong=8;//右45度
  103.                 delay(1000);

  104.                 duojiguizhong1=6;
  105.                 delay(1000);
  106.                 duojiguizhong1=12;
  107.                 delay(1000);
  108.                 duojiguizhong1=16;
  109.         //        delay(1000);*/

  110.         }
  111. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

29#
ID:79544 发表于 2015-7-23 19:46 | 只看该作者
slh0721 发表于 2015-7-23 17:15
谦虚了,我现在在单片机和C语言这块,也就是幼儿园水平而已。

用的时候要根据你的单片机型号和晶振适当调整占空比的数值
回复

使用道具 举报

30#
ID:85201 发表于 2015-7-28 11:59 | 只看该作者
xtitxjg 发表于 2015-7-23 14:38
给你吧,写好了1秒一次,60次

你最后给我的那个程序,我稍微改动了一下(因为我用的是89C52单片机,所以头文件改成了reg52.h),下载到单片机后,还是没有反映,我买了四个舵机,都逐一试过,单片机更换过两个,也是不行。这是什么原因啊?
回复

使用道具 举报

31#
ID:85201 发表于 2015-7-28 12:01 | 只看该作者
腾飞的龙 发表于 2015-7-23 19:43
这个是我用的舵机程序 按键可以当传感器用。

谢谢援助,虽然我想要的是不用按键自己就动的,但你的程序对于我今后的学习会有帮助,所以再次感谢 。
回复

使用道具 举报

32#
ID:80992 发表于 2015-8-1 11:24 | 只看该作者
slh0721 发表于 2015-7-28 11:59
你最后给我的那个程序,我稍微改动了一下(因为我用的是89C52单片机,所以头文件改成了reg52.h),下载到 ...

亡了告诉你,我用的是24M时钟,5152不是问题,如果你是其他时钟自己改下定时器就行了
回复

使用道具 举报

33#
ID:85201 发表于 2015-8-3 13:44 | 只看该作者
xtitxjg 发表于 2015-8-1 11:24
亡了告诉你,我用的是24M时钟,5152不是问题,如果你是其他时钟自己改下定时器就行了

明白了。我回去试试
回复

使用道具 举报

34#
ID:94489 发表于 2016-7-21 20:35 | 只看该作者
定时一个就行了
回复

使用道具 举报

35#
ID:84299 发表于 2016-7-21 21:36 | 只看该作者
程序死在while(1),while后的分号有问题,改成while(1){;}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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