标题: 单片机读取航模接收机pwm,程序有注释(原创) [打印本页]

作者: Xsxin    时间: 2020-4-5 22:49
标题: 单片机读取航模接收机pwm,程序有注释(原创)
原创)航模接收机pwm输出 高位2ms 中位1.5ms 低位1ms(大部分是)我采用的是 STC15F104E单片机 8脚封装







源代码如下:
  1. /*
  2. By:Xsxin
  3. Time:2020.4.5
  4. STC15F104E
  5. IRC频率12M.
  6. */
  7. #include<reg51.h>
  8. sfr AUXR = 0x8E;
  9. unsigned int a=0;
  10. sbit led=P3^4;
  11. sbit p=P3^2;            //pwm输入脚

  12. void Timer0Init(void)   //12.000MHz
  13. {
  14.         AUXR &= 0x7F;                //定时器时钟12T模式
  15.         TMOD &= 0xF0;                //设置定时器模式
  16.         TL0 = 0x00;                    //设置定时初值
  17.         TH0 = 0x00;                    //设置定时初值
  18.         TF0 = 0;                    //清除TF0标志
  19.         TR0 = 0;                    //定时器0停止计时
  20. }

  21. void main()
  22. {
  23.   Timer0Init();                         //初始化
  24.   while(1)                                 
  25.   {  
  26.     if(p==1)TR0 = 1;         //满足条件,开始计时
  27.         while(p==1);                 //不满足条件,跳出循环
  28.         TR0 = 0;                         //停止计时
  29.         a = TH0;                        
  30.         a = a*256+TL0;                 
  31.         TL0 = 0x00;                         //清零
  32.     TH0 = 0x00;                          //清零
  33.         if(a>900&&a<1100)led=0;  else led=1;        //判断,执行程序
  34.         a = 0;                                 //计数清零
  35.   }
  36. }
复制代码
注意:烧写程序时请选择IRC频率12M.

所有资料51hei提供下载:
读取航模pwm.zip (16.76 KB, 下载次数: 33)


作者: Xsxin    时间: 2020-4-6 16:39
修改版
  1. /*
  2. By:Xsxin
  3. Time:2020.4.5
  4. STC15F104E
  5. IRC频率12M.
  6. */
  7. #include<reg51.h>
  8. sfr AUXR = 0x8E;
  9. unsigned int a=0;
  10. sbit led=P3^4;
  11. sbit p=P3^2;            //pwm输入脚

  12. void Timer0Init(void)   //12.000MHz
  13. {
  14.         AUXR &= 0x7F;                //定时器时钟12T模式
  15.         TMOD &= 0xF0;                //设置定时器模式
  16.         TL0 = 0x00;                    //设置定时初值
  17.         TH0 = 0x00;                    //设置定时初值
  18.         TF0 = 0;                    //清除TF0标志
  19.         TR0 = 0;                    //定时器0停止计时
  20. }

  21. void Delay100ms()
  22. {                //@11.0592MHz
  23.         unsigned char i, j, k;
  24.         i = 5;
  25.         j = 52;
  26.         k = 195;
  27.         do
  28.         {
  29.                 do
  30.                 {
  31.                         while (--k);
  32.                 } while (--j);
  33.         } while (--i);
  34. }

  35. void main()
  36. {
  37.   Timer0Init();                         //初始化
  38.   while(1)                                 
  39.   {  
  40.     if(p==1)TR0 = 1;         //满足条件,开始计时
  41.         if(p==0)
  42.         {       
  43.         TR0 = 0;                         //停止计时
  44.         a = TH0;                         
  45.         a = a*256+TL0;                 
  46.         TL0 = 0x00;                         //清零
  47.     TH0 = 0x00;                          //清零
  48.         if(a>900&&a<1100)
  49.         {
  50.             led=1;
  51.             Delay100ms();
  52.         }
  53.     if(a>1400&&a<1500)
  54.         {
  55.             led=1;
  56.             Delay100ms();
  57.                 Delay100ms();
  58.                 Delay100ms();
  59.                 Delay100ms();
  60.         }
  61.         else led=0;       
  62.         }
  63.   }
  64. }
复制代码

作者: Xsxin    时间: 2020-4-6 16:43
修改:把while改if,下面的放进去
  1. if(p==0)
  2.         {       
  3.         TR0 = 0;                         //停止计时
  4.         a = TH0;                         
  5.         a = a*256+TL0;                 
  6.         TL0 = 0x00;                         //清零
  7.     TH0 = 0x00;                          //清零
  8.         if(a>900&&a<1100)
  9.         {
  10.             led=1;
  11.             Delay100ms();
  12.         }
  13.     if(a>1400&&a<1500)
  14.         {
  15.             led=1;
  16.             Delay100ms();
  17.                 Delay100ms();
  18.                 Delay100ms();
  19.         }
  20.         else led=0;       
  21.         }
复制代码

作者: icgsgf    时间: 2020-9-27 09:33
是否可以增加通道




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