找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机读取航模接收机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, 下载次数: 32)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:722991 发表于 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. }
复制代码
回复

使用道具 举报

板凳
ID:722991 发表于 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.         }
复制代码
回复

使用道具 举报

地板
ID:308570 发表于 2020-9-27 09:33 来自手机 | 只看该作者
是否可以增加通道
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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