EV1527解码,我也贡献一个,抗干扰,自适应, 经测试比买的解码成功率高,具体多少没计算,通过示波器看到;

/*

中断处理函数 、每次中断查询一下电平;

手册16个CLK(一个数据位)的时间是

最大4.24ms(4240us)/16= 265us; 最小230us/16=14us; 分频时间是4us;

同步头高电平至少4个时钟;识别同步头分2步

第一步高电平时间大于等于40us,小于265*4*1.2 = 1060*1.2=1270us;

第二步 低电平时间是高电平时间的31倍,留20%余量26倍-36倍之间;

计算电平时间 (高电平时间 + 低电平时间) / 32 ;

数据宽时间要在这个数值的 正负20% 之间

*/

INTERRUPT_HANDLER(EXTI_PORTA_IRQHandler, 3)

{

static U16 data_h_time;  //

static U16 data_l_time;  //

static U16  bit_time_min;

static U16  bit_time_max;

static U8  decode_KEY;

static U32 decode_ID;

U16 temp;

static U8  ev1527_rx_last;

U16 ev1527_new_time;

disableInterrupts();

ev1527_new_time  = (uint16_t)TIM2->CNTRH << 8;

ev1527_new_time |= (uint16_t)(TIM2->CNTRL);

if(EV1527_RX)  //接收编码高电平

{

if(ev1527_rx_last==0)   //上次是低电平,有跳变

{

EV1527_COUNT_CLEAR;

if(ev1527_decode_state>sync_h)

{

str_ev1527_data.l_data[str_ev1527_data.l_data_write] = ev1527_new_time;

str_ev1527_data.l_data_write = (str_ev1527_data.l_data_write + 1) % EV1527_DATA_TIME_NUM;

switch(ev1527_decode_state)

{

case  sync_l:{

temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] / str_ev1527_data.h_data[str_ev1527_data.h_data_read];

if((temp >= SYNC_RATIO_MIN) && (temp <= SYNC_RATIO_MAX))

{

temp = str_ev1527_data.l_data[str_ev1527_data.l_data_read] + str_ev1527_data.h_data[str_ev1527_data.h_data_read];

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

bit_time_min = temp / 9;

bit_time_max = temp / 7;

decode_ID = 0;

decode_KEY = 0;

data_h_time = 0;

data_l_time = 0;

ev1527_decode_state = chipid_0l;

}

else

{

ev1527_decode_state = sync_h;

}

}break;

case  chipid_0l:

case  chipid_1l:

case  chipid_2l:

case  chipid_3l:

case  chipid_4l:

case  chipid_5l:

case  chipid_6l:

case  chipid_7l:

case  chipid_8l:

case  chipid_9l:

case  chipid_10l:

case  chipid_11l:

case  chipid_12l:

case  chipid_13l:

case  chipid_14l:

case  chipid_15l:

case  chipid_16l:

case  chipid_17l:

case  chipid_18l:

case  chipid_19l:

{

data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];

data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

temp = data_h_time + data_l_time;

if(temp >= bit_time_min)

{

if(temp <= bit_time_max)

{

if(data_h_time > data_l_time)

{

decode_ID |= 0x01;

}

decode_ID <<= 1;

ev1527_decode_state++;

data_h_time = 0;

data_l_time = 0;

}

else

{

ev1527_decode_state = sync_h;

}

}

}break;

case  data_0l:

case  data_1l:

case  data_2l:

case  data_3l:

{

data_h_time += str_ev1527_data.h_data[str_ev1527_data.h_data_read];

data_l_time += str_ev1527_data.l_data[str_ev1527_data.l_data_read];

str_ev1527_data.l_data_read = (str_ev1527_data.l_data_read + 1) % EV1527_DATA_TIME_NUM;

str_ev1527_data.h_data_read = (str_ev1527_data.h_data_read + 1) % EV1527_DATA_TIME_NUM;

temp = data_h_time + data_l_time;

if(temp >= bit_time_min)

{

if(temp <= bit_time_max)

{

if(data_h_time > data_l_time)

{

decode_KEY |= 0x08;

}

if(ev1527_decode_state == data_3l)

{

ev1527_chip_ID = decode_ID;

ev1527_chip_key  = decode_KEY;

ev1527_new_sms = 1;

LED_ON(LED_01);

ev1527_decode_state = sync_h;

}

else

{

decode_KEY >>= 1;

ev1527_decode_state++;

}

data_h_time = 0;

data_l_time = 0;

}

else

{

ev1527_decode_state = sync_h;

}

}

}break;

}

}

}

ev1527_rx_last = 1;

}

else        //接收编码低电平

{

if(ev1527_rx_last)   //上次是高电平,有跳变

{

EV1527_COUNT_CLEAR;

if(ev1527_decode_state == sync_h)

{

if((ev1527_new_time >= SYNC_H_TIME_MIN) && (ev1527_new_time <= SYNC_H_TIME_MAX))

{

str_ev1527_data.l_data_read = str_ev1527_data.l_data_write=0;

str_ev1527_data.h_data_read = str_ev1527_data.h_data_write=0;

str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;

str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;

ev1527_decode_state  = sync_l;

}

}

else

{

str_ev1527_data.h_data[str_ev1527_data.h_data_write] = ev1527_new_time;

str_ev1527_data.h_data_write = (str_ev1527_data.h_data_write + 1) % EV1527_DATA_TIME_NUM;

}

}

ev1527_rx_last = 0;

}

enableInterrupts();

}

1527编码协议_EV1527解码,我也贡献一个,抗干扰,自适应.....相关推荐

  1. 1527编码协议_一种用射频收发器芯片发射1527编码的方法与流程

    本发明属于无线控制.安防及智能家居技术领域. 背景技术: Sub-1GHz的射频收发器芯片,又叫无线数传芯片,如SI4432/CC1101,常用于工业控制/远程抄表及智能家居系统等,实现远距离双向无线 ...

  2. netty 对 protobuf 协议的解码与包装探究(2)

    netty 默认支持protobuf 的封装与解码,如果通信双方都使用netty则没有什么障碍,但如果客户端是其它语言(C#)则需要自己仿写与netty一致的方式(解码+封装),提前是必须很了解net ...

  3. python decode()函数 (使用登记用于编码的编解码器解码字节)

    def decode(self, *args, **kwargs): # real signature unknown"""Decode the bytes using ...

  4. Dubbo篇:基于Netty实现Dubbo协议编解码源码分析

    Dubbo协议解析 Dubbo协议设计参考了TCP/IP协议,包括协议头和协议体两部分.16字节报文头主要携带了魔法数(0xdabb,用于分割两个不同请求),以及当前请求报文是否是Request.Re ...

  5. Netty使用篇:Http协议编解码

    第一章:概述 Http协议是一个应用层协议.在Http协议之上又构建出来了WebSocket这种双向通信的协议.可以主动在服务端帮我们去推数据,实际上我们现在做一些双向通信的比较很重要的东西,比如:推 ...

  6. c语言的tlv协议编解码函数,基于C语言的TLV格式协议快速解析方法与流程

    技术特征: 1.基于C语言的TLV格式协议快速解析方法,其特征在于,在客户机上设有编译器和解析器,在服务器上也设有编译器和解析器,从而使客户机和服务器都同时具备编码能力和解码能力:客户机和服务器通过网 ...

  7. WebRTC VideoEngine超详细教程(三)——集成X264编码和ffmpeg解码

    转自:http://blog.csdn.net/nonmarking/article/details/47958395 本系列目前共三篇文章,后续还会更新 WebRTC VideoEngine超详细教 ...

  8. 关于支付接口回调地址参数字段是“notify_url”,签名过后的特殊字符url编码以后再解码后出现错误(¬ , ¢, ¤, £)

    今天对接支付接口,参数拼接完了,开始调用的时候,一直报错,签名错误. 但是我用第三方给的签名测试mode测试签名,返回的是true. 这就非常他娘的奇怪. 经过一个个参数对比,我发现,notify_u ...

  9. des加密+base64编码,base64解码+des解密

    des加密+base64编码,base64解码+des解密 des简单介绍 base64简单介绍 运行效果图 TestActivity.java DataEncryptionUtil.java des ...

最新文章

  1. Extjs grid选中一条记录Ajax访问后台
  2. 研制一个生产计划编制的软件
  3. 在LINUX 下安装 Realtek 8110SC 千兆网卡驱动
  4. sklearn自学指南(part33)--流形学习
  5. 最近目标检测新范式汇总SparseRCNN,OneNet,DeFCN等
  6. leetcode950. Reveal Cards In Increasing Order
  7. 深度学习之激活函数详解
  8. 2数据库表增加一个字段_详解PostgreSQL用户、数据库及表的管理、操作与授权
  9. 【python实战】23个爬虫项目源码:微信、淘宝、知乎、微博...
  10. C语言中向量的加法,向量的加减法运算法则
  11. windows下V-Rep下载及安装教程
  12. primeNG组件库在Angular2上的使用
  13. 屏蔽ENTER键、ESC键的使用
  14. [20171122]rman filesystemio_options.txt
  15. 初学c语言试写的答题系统
  16. springboot+电影售票小程序 毕业设计-附源码201532
  17. Linux安装CentOS7操作系统详细教程
  18. Proxy代理简单使用
  19. 2010年第五届站长大会现场视频直播
  20. 房地产小程序开发-地产小程序开发

热门文章

  1. PHP常见的设计模式之:适配器模式
  2. AT4352 [ARC101C] Ribbons on Tree
  3. UTF-8和UTF-16简介
  4. Xcode11没有iOS14的真机包,Xcode12没有iOS8的真机包,用到的时候网上都要积分收费,免费的不好找,因此只有自己保存一份使用到的时候才不慌
  5. 实验任务(三)---密码破解技术
  6. 牛客练习赛37 C 筱玛的迷阵探险(Trie+折半)
  7. 下载神器 Proxyee Down windows10 安装教程
  8. win7开启ftp被动模式_Win7上防火墙开放FTP服务以及ping解决方案
  9. 后台是怎么判断管理员用户还是普通用户_深入学习 Java Web(九) :用户管理系统...
  10. html跳转页面 url不变,实现页面的跳转后,浏览器的地址栏不变