STM8单片机+EV1527无线315&433通用遥控解码

发布者:SereneJourney最新更新时间:2021-11-12 来源: eefocus关键字:STM8  单片机  EV1527 手机看文章 扫描二维码
随时随地手机看文章

STM8_无线315&433通用解码


单片机源程序如下:

/*

*********************************************************************************************************

*

*模块名称 : EV1527遥控解码

*上升沿触发 触发中断后延时一段时间后检测引脚电平从而判断0 1

采集上升沿触发后第6 10 14     个振荡周期时的引脚电平 RF98

PT2262 连续触发是每个周期的间隔在15MS左右

EV1527   宽电平时间 500US 窄 250us 同步码 5.7MS

*********************************************************************************************************

*/

#include "EV1527.h"

#include "led.h"

#include "tim1.h"

u8  EV1527_Status=0;                 //接收处理状态

u8  EV1527_Receive_Count=0;          //接收数据位计数

Receive_Data  EV1527_Receive_Data[48];      //24位的脉冲

u8  EV1527_receive_ok=0;             //接收完成标志

//u8  EV1527_gather_count=3;           //每个码位采集3次

//u8  EV1527_code[3];                  //用来暂时存储采集3次得到的值

//u8  EV1527_repeat;                   //重复触发计数

u8  EV1527_check_level_bit;          //外部中断触发(上升沿)标志。有外部中断触发后则开始检测引脚电平是否有变化。

u16 Interval_tim_high=0;             //上升沿触发后高电平时间

u16 Interval_tim_low=0;              //上升沿触发后低电平时间

u8  EV1527_pin_state_buf;            //引脚定义缓存

u16 EV1527_time_out_buf;             //定时器超时时间缓存

u16 TongBuMa_low=0;

u16 a_count=0;              

bool  LearningModel=FALSE;           //学习模式

bool  INT_bit=FALSE;

// 定时器2配置函数

void EV1527_TIM1_Config(void)

{

  TIM1_TimeBaseInit(8,TIM1_COUNTERMODE_UP,50000,0); //8分频,定时50MS,1uS的分辨率

  TIM1_ARRPreloadConfig(ENABLE);

  TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);

  TIM1_Cmd(ENABLE);//DISABLE

}

/*

    初始化

*/

void EV1527_Init()

{

          /* 输入模式 */

    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);                 //配置浮空输入。

        /* 将GPIOD端口设置为下降沿触发中断-*/

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

    GPIO_Init(LED_PORTD, (LED_2|LED_3), GPIO_MODE_OUT_PP_HIGH_FAST );   

    EV1527_TIM1_Config();

}

/*

********************************************************************************

            定时器溢出中断内处理

********************************************************************************

*/

void EV1527_TIM_IT_Updata_Handdle(void)

{

    TIM1_SetCounter(0);

    EV1527_Status=0;

    EV1527_Receive_Count=0;

    //EV1527_repeat=0;

    //EV1527_Receive_Data=0;

    Interval_tim_low=0;   

    EV1527_time_out_buf=0;   

   // TIM1_Cmd(DISABLE);   

    TIM1_ClearITPendingBit(TIM1_IT_UPDATE);   

   

}


/*

    外部中断触发函数

开始接收地址码跟数据码

*/

void EV1527_ChuLi(void)

{      

   //for(EV1527_Receive_Count=0;EV1527_Receive_Count<48;EV1527_Receive_Count++)

  EV1527_Receive_Count=0;

  while(EV1527_Receive_Count<48)

  {   

    while((EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));         //如果是高电平就等待  

    Interval_tim_high=TIM1_GetCounter();                               //记录高电平时间     

    TIM1_SetCounter(0);

    EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_high;

    EV1527_Receive_Data[EV1527_Receive_Count].Level=1;                 //保存到数组中                  

    EV1527_Receive_Count++;         

    while(!(EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));       //如果是低电平就等待   

    Interval_tim_low=TIM1_GetCounter();                               //记录高电平时间  

    TIM1_SetCounter(0);

    EV1527_Receive_Data[EV1527_Receive_Count].Width=Interval_tim_low;

    EV1527_Receive_Data[EV1527_Receive_Count].Level=0;                 //保存到数组中     

    EV1527_Receive_Count++;

    if(EV1527_Status==0)

    {

      EV1527_Receive_Count=49;//超时退出

    }

  }

  if(EV1527_Status==0)

  {

    EV1527_receive_ok=0;

    EV1527_Receive_Count=0;  

    GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);//配置上啦输入。

    EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

    TIM1_SetCounter(0);      

  }

  else

  {

    EV1527_receive_ok=1;

  }

}


void EV1527_Receive_Handle(void)

{   

  if(INT_bit==TRUE)

  {

    INT_bit=FALSE;  

    /* 开启定时器 0 记录低电平持续的时间,并检测是否为同步码 */     

    a_count=0;

    TongBuMa_low=0;

    EV1527_Status=1;

    while(!(EV1527_port->IDR &EV1527_pin)&&(EV1527_Status==1));   //如果是低电平就等待      

    if(EV1527_Status==TRUE) TongBuMa_low=TIM1_GetCounter();       //记录低电平时间

    TIM1_SetCounter(0);                                           //从新计时。

    /* 检测是否为同步码*/

    if((TongBuMa_low>=5000)&&(TongBuMa_low<=38000))               //检测前一个低电平时间,是否符合同步码标

                                                                  //是同步码 关闭外部中断,并开始接收地址码跟数据码

    {                                   

      EV1527_ChuLi();     

    }

    else                                                         //不是,则重新打开中断,继续检测同步码

    {

      EV1527_Status=0;

      EV1527_Receive_Count=0;  

      GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_IN_PU_IT);          //配置上啦输入。

      EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOC, EXTI_SENSITIVITY_FALL_ONLY);//下降沿触发。

      TIM1_SetCounter(0);                                        //定时器计数值清零

    }

  }

  

}


/*

    数据处理

*/

u8 EV1527_Process()

{

  u8 EV1527_Data=0;

  

  if(EV1527_receive_ok>=1)

  {

    u8 i=0;

    u8 beishu=0;

    u8 EV1527_DataTemp[24]={0};

    u8 EV1527_addTemp_high=0;

    u8 EV1527_addTemp_low=0;

//    High_Low  Level_0,Level_1;        //电平   

    u16       Width_0,Width_1;        //宽度


    while(i<48)

    {

     // Level_0= EV1527_Receive_Data[i].Level;

      Width_0=EV1527_Receive_Data[i].Width;

      i++;

    //  Level_1= EV1527_Receive_Data[i].Level;

      Width_1=EV1527_Receive_Data[i].Width;      

      beishu=(Width_0>Width_1)?(Width_0/Width_1):(Width_1/Width_0);

      if(beishu>=2)//如果两个宽度的倍数大于等于2说明是有效电平

      {

        EV1527_DataTemp[i/2]= (Width_0>Width_1)?1:0;

      }      

      else

      {

        i=50;

      }

      i++;

//      if(i>=46)

//      {

//        Level_0= EV1527_Receive_Data[i].Level;

//      }

    }

    if(i<49)

    {

      //解析地址

      for(i=0;i<20;i++)

      {  

        if(i<10)//解析高位  EV1527_address_high

        {

          if(EV1527_DataTemp[i]==1)        // 置一

          {

            EV1527_addTemp_high<<=1;

            EV1527_addTemp_high=EV1527_addTemp_high|0x01;                          

          }

          else if(EV1527_DataTemp[i]==0)      //置零

          {

            EV1527_addTemp_high<<=1;

          }   

        }

        else //解析低位

        {

          if(EV1527_DataTemp[i]==1)        // 置一

          {

            EV1527_addTemp_low<<=1;

[1] [2]
关键字:STM8  单片机  EV1527 引用地址:STM8单片机+EV1527无线315&433通用遥控解码

上一篇:STM8S005K6单片机点亮流水灯程序
下一篇:STM8单片机+EV1527无线315&433通用遥控解码程序

推荐阅读最新更新时间:2024-11-12 14:14

MCP2510 CAN通信程序(pic单片机)
// ========CAN通信程序======= #include PIC.h #include PIC16f87x.h #include mcp2510.h // MCP2510寄存器定义 // =========常数和变量定义========= #define READ 0x03 // 读MCP2510指令代码 #define WRITE 0x02 // 写MCP2510指令代码 #define RESET 0xC0 // 复位MCP2510指令代码 #define RTS 0x80 // MCP2510请求发送指令代码
[单片机]
GPRS模块与单片机开发的注意事项
单片机微控制器以其体积小、功耗低、使用方便等特点,广泛应用于各种工业、民用的嵌入式系统中;而随着互联网(Internet)的兴起与普及,使微控制 器通过互联网传送数据就变得非常有意义。目前使微控制器上网的解决方案一般有两种:一种是采用微控制器驱动网卡,通过以太网连接Internet;另一种 是使微控制器直接驱动调制解调器(MODEM)通过电话线向ISP拨号上网。这两种方案的缺点在于都要使用有线的网络,无法应用于在边远地区或可移动系统 中。 针对这一问题,提出一种基于GPRS的单片机上网的解决方案,即在单片机中实现PPP协议,并通过驱动GPRS模块经过GPRS无线网连接到 Internet实现上网。这种方案的优点在于:① 覆盖面广
[单片机]
STC12C2052AD单片机AD转换程序设计
#include STC12C2052AD.h //定义的 系统头文件和全局变量 #include intrins.h #define uchar unsigned char #define uint unsigned int #define DogReset() WDT_CONTR=0x35 // T1 定时 0.1ms.作为系统计时用, #define vT01ms 2 #define vT10ms 10 #define vT100ms 10 #define vT01S 100 // 1 s = 10 ms * 100 #define vT0HVal 0xfe //0xff //0xfe //0xf6 #de
[单片机]
基于单片机数控直流稳压电源的设计与实现
   1 引言   直流稳压电源是电子技术常用的设备之一,广泛的应用于教学、科研等领域。传统的多 功能直流稳压电源功能简单、难控制、可靠性低、干扰大、精度低且体积大、复杂度高。普 通直流稳压电源品种很多.但均存在以下问题:输出电压是通过粗调(波段开关)及细调(电位器)来调节。这样,当输出电压需要精确输出,或需要在一个小范围内改变时(如 1.02~1.03V),困难就较大。另外,随着使用时间的增加,波段开关及电位器难免接触不良,对输出会有影响。常常通过硬件对过载进行限流或截流型保护,电路构成复杂,稳压精度也 不高。本文设计了一种以单片机为核心的智能化高精度简易直流电源,克服了传统直流电压 源的缺点,具有很高的应用价值。
[单片机]
基于<font color='red'>单片机</font>数控直流稳压电源的设计与实现
用Microchip16位单片机设计的音频信号分析仪
  目前,大多数 音频 信号处理仪不但体积大而且价格贵,在一些特殊方面难以普及使用,而嵌入式系统分析仪具有小巧可靠的特点,所以开发基于特殊功能单片机的音频分析仪器是语音识别的基础,具有很好的现实意义。信号分析原理是将信号从时间域转换成频率域,使原始信号中不明显特性变得明显,便于分析处理。对于音频信号来说,其主要特征参数为幅度谱、功率谱。该音频信号分析仪的工作过程为:对音频信号限幅放大、模数转换、快速傅里叶变换(FFT,时域到频域的转换)、特征值提取;从到音频信号的幅度谱,进而得到音频信号的功率谱。   1 硬件设计   “智能家居”(SmartHome)也称智能住宅。家居网络智能控制系统就是利用先进的计算机技术、通讯技术和
[单片机]
用Microchip16位<font color='red'>单片机</font>设计的音频信号分析仪
[单片机][at32][填坑日记] [USB卡包] usb上电过程中快速发包导致卡包
现象:pc重启过程中,不断发送按键数据,导致pc未能应答,致使下位机数据出现卡包现象。 MCU发送’B’,PC显示’C’,MCU发送’E’,PC显示’B’ 原因造成如下: 串口外设优先级大于USB中断(USBOTG_IRQn),导致串口数据打断USB,致使PC或MCU丢包。 当PC请求usb设备描述符字符串时,USB的其他通道不能发送数据,不然会导致通道0数据异常,导致PC丢包。 系统只会请求字符串0-2,所以在此设置标志位即可。 USB整个发送逻辑 // 此处解决PC开机过程中usb数据卡包问题。因为当pc请求字符串时,其他通道的数据发送会导致异常。 if (get_usb_string_b
[单片机]
[<font color='red'>单片机</font>][at32][填坑日记] [USB卡包] usb上电过程中快速发包导致卡包
以累加器A为目的操作数类指令(4条)—mcs51单片机汇编语言
数据传送类 指令 的通用格式是:  MOV  目的操作数 , 源操作数 源操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址direct、间接地址和立即数; 目的操作数可以是:累加器A、通用寄存器Rn(n=0-7)、直接地址direct和间接地址; 数据传送指令共有29条,数据传送指令一般的操作是把源操作数传送到目的操作数,指令执行完成后,源操作数不变,目的操作数等于源操作数。如果要求在进行数据传送时,目的操作数不丢失,则不能用直接传送指令,而采用交换型的数据传送指令,数据传送指令不影响标志C,AC和OV,但可能会对奇偶标志P有影响。 . 以累加器A为目的操作数类指令(4条) 这4条指令的作用是把源操作
[单片机]
如何排查GD32 MCU复位是由哪个复位源导致的?
上期为大家讲解了GD32 MCU复位包括电源复位和系统复位,其中系统复位还包括独立看门狗复位、内核软复位、窗口看门狗复位等,在一个GD32系统中,如果莫名其妙产生了MCU复位,如何排查具体是由哪个复位源导致的呢? GD32 MCU贴心的为大家提供了一个查看复位源的寄存器,如下图所示,该寄存器的bit26-bit31显示各种复位状态,其中LPRSTF表示发生过低功耗复位、WWDGTRSTF表示发上过窗口看门狗复位、FWDGTRSTF表示发生过独立看门狗复位、SWRSTF表示发生过系统软复位、PORRSTF表示发生过POR电源复位、EPRSTF表示发生过NRST引脚复位,这几个状态标志位为只读标志位,如果希望清除复位标志,可以通过
[单片机]
如何排查GD32 <font color='red'>MCU</font>复位是由哪个复位源导致的?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved