小R科技-WIFI机器人网·机器人创意工作室

 找回密码
 立即注册
查看: 7995|回复: 2

请教关于超声波和PWM同时使用定时器的问题

[复制链接]
发表于 2015-9-24 22:42:49 | 显示全部楼层 |阅读模式
请教版主一个问题
我根据【分享】wifi小车超声波测试代码改进http://www.wifi-robots.com/thread-1911-1-1.html(感谢cjnt007)将代码加入了51duino源代码SDK V2.0
因为我是初学,不懂得我如何在PWM和超声波上同时使用定时器1
超声波改进代码原文在time.c上定义
  1. void Timer_1(void) interrupt 3

  2. {

  3. t1_conter++;  

  4. //改进,定时器溢出一次,

  5. t1_conter

  6. 就+1



  7.         if((t1_conter*3)%9==0)        //9ms切换一次

  8.         {

  9.                  if(rec_flag)

  10.                  {

  11.                      LED5 = ~LED5;        //控制LED5在接收数据时闪烁

  12.                  }

  13.                  else

  14.                  {

  15.                      LED5 = 1;                //不接收时不亮

  16.                  }

  17.         }

  18. }
复制代码



原始的time.c上有一个同样的电机pwm定义
  1. void
  2. <font color="Red">Timer_2</font>(void) interrupt 3(<font
  3. color="Red">我将Timer_1改为了Timer_2,这样编译才不会出错,但是pwm无法使用了</font>)
  4. {         
  5.     static uint16 ms_count=0;
  6.         static uchar _100us_count=0;
  7.         //TH1     =   0xA9;   
  8.     //TL1     =   0x9A;

  9.         Uart_timeout_count++;
  10.         if((Uart_timeout_count == 1000) && (rec_flag)) //串口接收1秒超时
  11.         {
  12.                 rec_flag = 0;
  13.         }

  14.         if(ms_count++ >= 1000)
  15.         {
  16.              ms_count = 0;
  17.                  if(rec_flag)
  18.                  {
  19.                      LED5 = ~LED5;
  20.                  }
  21.                  else
  22.                  {
  23.                      LED5 = 1;
  24.                  }
  25.         }
  26.          



  27.          TH1     =   0xF7;   
  28.      TL1     =   0x5C; //10KHZ频率定时

  29.          _100us_count++;

  30.          if(_100us_count <= Left_Speed) //左侧占空比,1KHz
  31.          {
  32.              MOTOR_A_EN = 1;
  33.          }
  34.          else
  35.          {
  36.              MOTOR_A_EN = 0;
  37.          }

  38.          if(_100us_count <= Right_Speed)        //右侧占空比,1KHz
  39.          {
  40.              MOTOR_B_EN = 1;
  41.          }
  42.          else
  43.          {
  44.              MOTOR_B_EN = 0;
  45.          }

  46.          if(10 == _100us_count)
  47.          {
  48.               _100us_count = 0;
  49.                   MOTOR_A_EN = 0;
  50.                   MOTOR_B_EN = 0;
  51.          }
  52.                  
  53. }

  54. void Timer_1(void) interrupt 3
  55. {

  56.         t1_conter++;  


  57.         if((t1_conter*3)%9==0)        
  58.         {
  59.                  if(rec_flag)
  60.                  {
  61.                      LED5 = ~LED5;        
  62.                  }
  63.                  else
  64.                  {
  65.                      LED5 = 1;               
  66.                  }
  67.         }
  68. }
复制代码

我应该如何更改代码,使得超声波和pwm都使用定时器1


回复

使用道具 举报

发表于 2015-9-25 11:07:41 | 显示全部楼层
  1. uchar Get_Distance(void)
  2. {
  3.     uint32 Distance = 0;

  4.     Send_wave();
  5.     TH1 = 0;
  6.     TL1 = 0;
  7.         while(TH1<250 && Echo!= 1);          
  8.         if(TH1 <= 250)        //测距范围<0.5M
  9.         {
  10.            TH1 = 0;
  11.            TL1 = 0;
  12.            while(Echo == 1);
  13.            Distance = TH1;
  14.            Distance = Distance*256;
  15.            Distance = Distance + TL1;
  16.            Distance = Distance * 17;
  17.            Distance = Distance / 22118;
  18.            return (uchar)(Distance&0xFF);
  19.         }
  20. }
复制代码


51duino里面的超声波其实就是和Timer1定时器时分复用了,你看看参考一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-25 16:42:34 | 显示全部楼层
liuviking 发表于 2015-9-25 11:07
51duino里面的超声波其实就是和Timer1定时器时分复用了,你看看参考一下。

好的,感谢版主指点,我再琢磨一下。
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

新品特惠推荐上一条 /2 下一条

QQ|QQ技术咨询1|QQ技术咨询2|商务合作微信1:xiaorgeek001|商务合作微信2:XiaoRGEEK|诚聘英才|Archiver|手机版|小R科技-WIFI机器人网·机器人创意工作室 ( 粤ICP备15000788号-6 )

GMT+8, 2024-11-26 07:53 , Processed in 1.161440 second(s), 21 queries .

Powered by XiaoR GEEK X3.4

© 2014-2021 XiaoR GEEK

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