在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → STM8解码EV1527,过滤杂波处理

STM8解码EV1527,过滤杂波处理

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:1.47M
  • 下载次数:7
  • 浏览次数:131
  • 发布时间:2021-07-29
  • 实例类别:嵌入式开发
  • 发 布 人:lensertech
  • 文件格式:.rar
  • 所需积分:2

实例介绍

【实例简介】STM8解码EV1527,过滤杂波处理
【实例截图】

【核心代码】

*/
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;
            EV1527_addTemp_low=EV1527_addTemp_low|0x01;                          
          }
          else if(EV1527_DataTemp[i]==0)      //置零
          {
            EV1527_addTemp_low<<=1;
          }   
        }
      }



实例下载地址

STM8解码EV1527,过滤杂波处理

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警