模拟红外协议C程序——接收模块
目的:方便程序的调试,提供效率,减少工作累,可以不在线调试编程时显示实时数据,特别产品不带显示的或者MCU是OPT的,有很大的帮助。
过程:将要看的数据发送出来,另一个板(一个带有显示的就OK了,显示就看个人的了,我之前用12864显示,后面坏了,就用4位数码管了)接收显示出来。
资源:通讯口只要2个IO(接收一个,发送一个),定时器2个(接收一个,发送一个)。
此篇是本人的接收模块,由于手头没有什么显示板,只有一个中颖的,带有4为数码管,就用此板作模拟接收。
此接收发送模块已经使用3年,一点问题都没有的哦!!!
如要沟通,请联系QQ:448704229
以下是接收模块:
//REMOTE 为接收IO ,设置为输入
static uint8 rx_ram0=0;
static uint8 rx_ram1=0;
static uint8 rx_ram2=0;
static uint8 bits_count=0; static uint8 tx_ram0=0;
static uint8 tx_ram1=0;
static uint8 tx_ram2=0;
static uint8 temp2=0;
static uint8 us100_timer=0; bit f_endcode=0;
bit B_nextbit=0;
bit send_enable_flag=0;
uint8 temp1=0;
uint8 temp=0;
void recievr_ird(void)
{ static uint8 TN=0;
static uint8 REMOTE_NUM=0;
if(TN<=200)
{
TN++;
}
if(!F_REMOTE)
{
if(REMOTE)
{
if(!F_RISE_YK)
{
F_RISE_YK=1;
if(F_YK_FIRST)
{
if(TN>=5)
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0; }
else
{
TN=0;
}
}
else
{
if(TN>=40)
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
}
else
{
if(TN>=20)
{
F_YK_FIRST=1;
TN=0;
REMOTE_NUM=0;
tx_ram0=0; }
else
{ //EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
} }
}
} }
else
{
if(F_RISE_YK)
{
F_RISE_YK=0;
if(F_YK_FIRST)
{
if(!F_YK_SECOND)
{
if(TN>=18)
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
} else
{
if(TN>=12)
{
F_YK_SECOND=1;
TN=0;
REMOTE_NUM=0;
tx_ram0=0; }
else
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
} }
}
else
{ tx_ram2=tx_ram2>>1; if(tx_ram1&0x01)
{
tx_ram2=tx_ram2|0x80;
}
else
{
tx_ram2=tx_ram2&0x7f;
} tx_ram1=tx_ram1>>1; if(tx_ram0&0x01)
{
tx_ram1=tx_ram1|0x80;
}
else
{
tx_ram1=tx_ram1&0x7f;
}
tx_ram0=tx_ram0>>1; if(TN>=12)
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0; } else
{
if(TN>=6)
{ tx_ram0|=0x80; ///
B_nextbit=1;
}
else
{
if(TN<2)
{
//EER
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0; }
else
{
tx_ram0&=0x7f; ///
B_nextbit=1;
} }
}
}
}
else
{
//EER
TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
}
}
} }
if(B_nextbit)//移位操作//<intrins.h> temp = _cror_(temp,1);_rcl
{
B_nextbit=0;
TN=0;
REMOTE_NUM++; if(REMOTE_NUM>=24)
{
rx_ram0=tx_ram2;
F_REMOTE=1;
rx_ram1=tx_ram1;
rx_ram2=tx_ram0;
F_REMOTE=0; TN=0;
tx_ram0=0;
REMOTE_NUM=0;
F_YK_FIRST=0;
F_YK_SECOND=0;
}
}
}
模拟红外协议C程序——接收模块的更多相关文章
- 38KHz,NEC红外模拟发送和接收程序
/*************************************************************************************************/ ...
- 模拟Modbus协议问题
问题: 在嵌入式系统开发中,Modbus协议是工业控制系统中广泛应用的一种协议.本题用来简单模拟Modbus协议,只需根据条件生成符合该协议的数据帧,并解析所获取的数据.假设设备使用的协议发送数据格式 ...
- Android 模拟HTTP协议的编码问题 Android默认编码UTF-8
Android通过GET和POST方法请求服务器和浏览器请求的过程是不一样的. 浏览器请求服务器的时候会先将中文进行UTF-8编码,然后再发送到服务器端. Android编程下我们需要通过URLEnc ...
- 模拟SPI协议时序
SPI是串行外设接口总线,摩托罗拉公司开发的一种全双工,同步通信总线,有四线制和三线制. 在单片机系统应用中,单片机常常是被用来当做主机(MASTER),外围器件被当做从机(SLAVE). 所以,在以 ...
- 模拟telnet协议C语言客户端程序
首先要了解telnet协议,一下两篇blog给了我初步的思路 https://www.cnblogs.com/liang-ling/p/5833489.html 这篇有比较基础的介绍 以及IAC命令含 ...
- 模拟I2C协议学习点滴之程序相关定义
由于主机和从机都会给数据线SDA发信号,比如主机先给SDA发送数据后,从机收到数据后发送应答信号将SDA拉低,故SDA类型设定为inout.而DATA设定为inout类型,是起到校验通信的作用(后续的 ...
- 模拟IIC协议时序
IIC是飞利浦公司开发的两线式串行总线,主要应用在单片机和外围电子器件之间的数据通讯. IIC总线优点是节约总线数,稳定,快速,是目前芯片制造上非常流行的一种总线,大多数单片机已经片内集成了IIC总线 ...
- 红外协议之NEC协议
NEC协议载波:38khz 其逻辑1与逻辑0的表示如图所示: 逻辑1为2.25ms,脉冲时间560us:逻辑0为1.12ms,脉冲时间560us.所以我们根据脉冲时间长短来解码.推荐载波占空比为1/3 ...
- Delphi 使用串口模拟工具进行串口程序开发调试
版权声明:本文为博主原创文章,如需转载请注明出处及作者. 本文由小李专栏原创,转载需注明出处:[http://blog.csdn.net/softwave/article/details/8907 ...
随机推荐
- Trie三兄弟——标准Trie、压缩Trie、后缀Trie
1.Trie导引 Trie树是一种基于树的数据结构,又称单词查找树.前缀树,字典树,是一种哈希树的变种.应用于字符串的统计与排序,经常被搜索引擎系统用于文本词频统计.用于存储字符串以便支持快速模式匹配 ...
- HDU 1157 Who's in the Middle
#include <cstdio> #include <algorithm> using namespace std; int main() { int n; while(sc ...
- 没有login页面
"/"应用程序中的服务器错误. 无法找到资源. 说明:HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保 ...
- 转载 js判断浏览器
$scope.identifyBrowser= function () { var userAgent = navigator.userAgent, rMsie = /(msie\s|trident. ...
- 编写可维护的JavaScript—语句和表达式&变量、函数和运算符
语句和表达式 所有的块语句都应当使用花括号.包括: if for while do…while… try…catch…finally //不好的写法 if (condition) doSomethin ...
- 【转】How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Android x86 Emulator
[转]How to Start Intel Hardware-assisted Virtualization (hypervisor) on Linux to Speed-up Intel Andro ...
- 通过SqlHelper实现登录
1.建立解决方案:. 首先创建windows窗体应用程序,然后拖出登录界面 2. 写配置文件App.config: <configuration> <conn ...
- BZOJ 1572: [Usaco2009 Open]工作安排Job( 贪心 )
贪心... 按截止时间排序 , 然后从小到大考虑 . 假设当前考虑第 i 个任务 , 若目前已选工作数 < D_i , 那就选 i ; 否则 若已选工作中利润最小的比 P_i 小 , 那就去除它 ...
- 关于MyEclipse启动时的插件启动(Maven4MyEclipse)
在myEclipse的应用中有许多插件在开发的时候都用不到,那么,这些插件在启动myEclipse的时候一起启动的越少越好了 Maven4Myeclipse update 每当启动myEclipse的 ...
- js this [转]
this是js的一个关键字,随着函数使用场合不同,this的值会发生变化.但是总有一个原则,那就是this指的是调用函数的那个对象. 1.纯粹函数调用. function test() { this. ...