找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1490|回复: 0
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主
本帖最后由 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 (37.86 KB, 下载次数: 47)

51hei图片_20210428171011.png

51hei图片_20210428174028.png (50.6 KB, 下载次数: 47)

51hei图片_20210428174028.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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