找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1629|回复: 0
收起左侧

STM8单片机高级定时器或通用定时器有时候计数值发生错误!

[复制链接]
ID:522590 发表于 2021-4-28 19:28 | 显示全部楼层 |阅读模式
本帖最后由 Gestrand 于 2021-5-21 08:43 编辑

使用STM8众拳开发板代码做的NEC协议遥控器,遥控码正常,但是会出现以下问题:被物体挡住,一直按着遥控器,物体挪开,再去按遥控器,定时器计数值(It_tim)发生错误,可如图所示,需要按多几次It_tim才恢复正常计数值。这是什么现象?

单片机源程序如下:
  1. void PT2222_Recv_Handle(void)
  2. {
  3.         u16 It_tim=0;

  4.         switch(PT2222_Status)
  5.         {
  6.                 case 0:
  7.                 {
  8.                          PT2222_Status=1;
  9.                          TIM1_Cmd(ENABLE);//开定时器
  10.                         TIM1_SetCounter(0);
  11.                 }break;

  12.                 case 1:
  13.                 {
  14.                         TIM1_Cmd(DISABLE);
  15.                         It_tim=TIM1_GetCounter();
  16.                         TIM1_SetCounter(0);
  17.                         TIM1_Cmd(ENABLE);//开定时器
  18.                         if(It_tim>=12500 && It_tim<=14500)//起始码  14.40ms
  19.                         {
  20.                                 PT2222_Status=2;
  21.                                 //LED_STBY_R;//测试
  22.                         }
  23.                         else if(It_tim>=10250 && It_tim<=12250)//重复码  12.00ms
  24.                         {
  25.                                 IR_Long=1;
  26.                                 PT2222_Recv_OK=1;
  27.                                 PT2222_Status=0;
  28.                                 PT2222_Recv_Count=0;
  29.                                 //LED_STBY_R;//测试
  30.                         }
  31.                         else
  32.                         {
  33.                                 PT2222_Status=0;
  34.                                 IR_Val=0;
  35.                                 PT2222_Recv_Count=0;
  36.                                 LED_STBY_R;//测试
  37.                         }
  38.                 }break;

  39.                 case 2://用户码、数据码
  40.                 {
  41.                         TIM1_Cmd(DISABLE);
  42.                         It_tim=TIM1_GetCounter();
  43.                         TIM1_SetCounter(0);
  44.                         TIM1_Cmd(ENABLE);//开定时器
  45.                         if(It_tim>=1000 && It_tim<=1300)                //0
  46.                         {
  47.                                 IR_Val=IR_Val<<1;
  48.                                 PT2222_Recv_Count++;
  49.                         }
  50.                         else if(It_tim>=2000 && It_tim<=2600)        //1
  51.                         {
  52.                                 IR_Val=IR_Val<<1;
  53.                                 IR_Val=IR_Val+1;
  54.                                 PT2222_Recv_Count++;
  55.                         }
  56.                         else
  57.                         {
  58.                                 PT2222_Status=0;
  59.                                 IR_Val=0;
  60.                                 PT2222_Recv_Count=0;
  61.                                 //LED_STBY_R;//测试
  62.                         }

  63.                         if(PT2222_Recv_Count>=32)
  64.                         {
  65.                                 PT2222_Recv_OK=1;
  66.                                 PT2222_Status=0;
  67.                                 PT2222_Recv_Count=0;
  68.                         }
  69.                 }break;

  70.                 default:
  71.                 {
  72.                         PT2222_Status=0;
  73.                 }break;
  74.         }
  75. }
复制代码


51hei图片_20210428171011.png
51hei图片_20210428174028.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表