最近想要给小车添加航模遥控器遥控功能,毕竟航模遥控器拿在手里还是很有质感,手感很不错的。选择使用ppm信号,ppm信号相关参考:PPM相关
Arduino中micros()函数返回一个单位为无符号长整形的变量表示开机时间,符号为us。用于测量某段时间很是方便,上文分析的飞控代码中也是使用micros()函数对ppm信号进行解码,所以萌生了在51上封装类似函数的想法。和arduino不同的是,millis()函数本例返回值为浮点型
使用STC15W4K56S4单片机,24MHz主频,定时器进行12分频。

unsigned int times_L=0;
unsigned int times_H=0;
unsigned int xdata channelnum[3][8];
extern unsigned int xdata channel[8];void Timer1Init(void)
{AUXR &= 0xBF;         //定时器时钟12T模式TMOD &= 0x0F;          //设置定时器模式TL1 = 0x00;               //设置定时初始值TH1 = 0x00;               //设置定时初始值TF1 = 0;              //清除TF1标志ET1=1;TR1 = 1;               //定时器1开始计时
}void time1() interrupt 3{if(times_L==65535){times_L=0;          //L溢出,H进位times_H++;}else times_L++;
}unsigned long int micros(){unsigned char TH,TL;TL=TL1;                //读取定时器1低8位TH=TH1;                 //定时器1高8位return (times_L<<15)+(TH<<7)+(TL>>1);  //返回us数times_L*65536/2+TH1*256/2+TL1/2
}float millis(){unsigned char TH,TL;TL=TL1;                //原理同micros()TH=TH1;return (times_H*2147483.648)+(times_L*32.768)+(TH*0.128)+(TL*0.0005);
}void int0_init(){IT0 = 1;                 //设置INT0的中断类型EX0 = 1;                  //使能INT0中断
}void int0() interrupt 0{unsigned long int now;unsigned int diff;static unsigned long int last;static unsigned char num=0,ch=0;now=micros();         //读取当前usdiff=now-last;         //计算两次进入中断时间差值last=now;                //last从新赋值用于下一次计算if(diff>3000||ch>7){    //判断此帧是否结束num++;if(num>=3){num=0;ch_filtering();}ch=0;}else if(diff>900&&diff<2100){  //记录有效值channelnum[num][ch]=diff;ch++;}
}void ch_filtering(){               //对通道值进行滤波unsigned char i;for(i=0;i<8;i++)channel[i]=(channelnum[0][i]+channelnum[1][i]+channelnum[2][i])/3;
}

不过与参考文章不同,实测FS-IA6B接收机低电平时间为400us

网上有的实例使用两个外部中断或者使用电平变化方式进入中断,即无论有上升沿还是下降沿都进行中断,这时低电平固定时间不同可能会使最终计算结果不准确。通道值为低电平时间加高电平时间,所以只使用下降沿或上升沿中断可直接测得通道值。

51单片机实现类似于Arduino中micros()、millis()函数功能并用于接收ppm信号相关推荐

  1. 单片机学习笔记————51单片机实现数码管中的倒计时程序

    一.使用proteus绘制简单的电路图,用于后续仿真 二.编写程序 /***************************************************************** ...

  2. 基于51单片机51wifi控制4路继电器开关定时功能

    项目简介: 一款基于STC89C52单片机的手机WIFI控制4路继电器的插座控制器设计.通过安装手机APP实现手机和设备的互联,只要手机发送相应的指令,继电器将会按照相关指令进行操作该设计极大的方便了 ...

  3. R语言dplyr包使用recode函数进行数据列内容编码、转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值)

    R语言dplyr包使用recode函数进行数据列内容编码.转换实战:类似于pandas中的map函数(例如,将内容从字符串映射到数值) 目录

  4. 51单片机串口通信实操(中断函数)

    51单片机串口通信实操(中断函数) 详细参考单片机手册 SM0.SM1分别为0,1时为模式一,因为模式一最为常用 REN=1,为接收,REN=0,为不接收 当 SM0,SM1,SM2,REN,TB8, ...

  5. 51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能)

    51单片机+ds1302+lcd1602简易电子时钟(带闹钟功能) AT89C52.LCD1602.DS1302.speaker. Proteus仿真 实例代码 #include<reg52.H ...

  6. 利用openCV实现中值滤波自定义滤波窗口尺寸的功能(类似halcon中的median_rect函数功能)

    利用openCV实现中值滤波自定义滤波窗口尺寸的功能(类似halcon中的median_rect函数功能) 在halcon图像库中有一个常用的中值滤波算子median_rect: median_rec ...

  7. 51单片机独立按键学习中,出现的问题以及心得

    文章目录 前言 一.出现的问题 1.问题1 2.问题2 二:心得 独立按键的短按 独立按键按住时间不同实现功能不同 总结 前言 Hello大家好,这里是万某,今天学习的是51单片机的独立按键,在此记录 ...

  8. 【51单片机】:关于51单片机仿真器(普中科技开发板STC89C51)的疑惑(做个记录)

    学习目标: 由于一些特殊原因,重学51单片机,真是无力吐槽,学把,认真学.         仿真器,最主要的作用是仿真调试,每次检查代码找不到任何问题比如说debug.先全速运行几秒后点击停止,看程序 ...

  9. 【51单片机快速入门指南】4.4.1:python串口接收磁力计数据并进行最小二乘法椭球拟合

    目录 硬知识 Python代码 使用方法 串口收集数据 椭球拟合 验证 STC15F2K60S2 16.384MHz Keil uVision V5.29.0.0 PK51 Prof.Develope ...

最新文章

  1. 【译】Bootstrap基本理念
  2. js移除某个class_用JS添加和删除class类名
  3. c语言指针改良,重新认识C语言指针(上)(示例代码)
  4. MinIO Client完全指南 ​​​​​​​
  5. webpack打包原理(待续)
  6. html 报文头 参数 详解 本文转载于 http://stephen830.javaeye.com/blog/335578
  7. DIV+CSS两种盒子模型
  8. 功能表单之智能选择字段类型的使用——JEPLUS软件快速开发平台
  9. Wordpress淘宝客专用链接跳转插件Pretty Link Lite
  10. 深度学习面试每日一题
  11. python天眼查爬虫_学习Python3 天眼查 爬虫
  12. 基于OCCT7.4的实验性CAD程序
  13. 2019年区块链安全事件总结,全球损失超60亿美元 | 盘点
  14. 如何用MATLAB求解一元高次方程
  15. vue 跳转到指定路由地址 (可附带参数)
  16. CS231n assignment1 KNN部分用到的函数
  17. 军团要塞2正版服务器,Team Fortress 2
  18. 计算机课学生电脑怎么打开任务管理器,电脑任务管理器的打开方法
  19. 智能手机怎么玩java游戏_智能手机可以在普通手机上玩Java游戏吗?
  20. 如何部署超级签名分发平台系统?

热门文章

  1. RabbitMQ:Erlang distribution failed解决方案
  2. shell编程中expr的用法
  3. 自动投票器的原理及设计思路 http://blog.csdn.net/lkfstar/archive/2008/01/12/2039070.aspx
  4. 拨号宽带服务器无响应是什么意思,宽带拨号服务器无响应
  5. 支持加密的开源笔记Joplin
  6. 专家看台:柯莱特CTO谈企业选择CRM的六大目标
  7. influxdb学习记录
  8. VS2015 安装.NET Core
  9. 做软件的也得注意休息啊
  10. 首席新媒体黎想教程:一份完整的运营方案,应包含的7个方面