普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2855|回复: 1

计算高电平长度那里,既然有判断如果time自加到30就退出,前面err给500还有什么用呢

 关闭 [复制链接]

8

主题

19

帖子

71

积分

注册会员

Rank: 2

积分
71
发表于 2019-9-1 23:31:10 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 欢乐马_Hf9DI 于 2019-9-1 23:33 编辑
  1. void ReadIr() interrupt 0
  2. {
  3.         u8 j,k;
  4.         u16 err;
  5.         Time=0;                                         
  6.         delay(700);        //7ms
  7.         if(IRIN==0)                //确认是否真的接收到正确的信号
  8.         {         
  9.                
  10.                 err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
  11.                 /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
  12.                 侯,程序死在这里*/       
  13.                 while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 
  14.                 {                       
  15.                         delay(1);
  16.                         err--;
  17.                 }
  18.                 if(IRIN==1)                        //如果正确等到9ms低电平
  19.                 {
  20.                         err=500;
  21.                         while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去
  22.                         {
  23.                                 delay(1);
  24.                                 err--;
  25.                         }
  26.                         for(k=0;k<4;k++)                //共有4组数据
  27.                         {                               
  28.                                 for(j=0;j<8;j++)        //接收一组数据
  29.                                 {

  30.                                         err=60;               
  31.                                         while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
  32.                                         {
  33.                                                 delay(1);
  34.                                                 err--;
  35.                                         }
  36.                                         err=500;
  37.                                         while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
  38.                                         {
  39.                                                 delay(10);         //0.1ms
  40.                                                 Time++;
  41.                                                 err--;
  42.                                                 if(Time>30)
  43.                                                 {
  44.                                                         return;
  45.                                                 }
  46.                                         }
  47.                                         IrValue[k]>>=1;         //k表示第几组数据
  48.                                         if(Time>=8)                        //如果高电平出现大于565us,那么是1
  49.                                         {
  50.                                                 IrValue[k]|=0x80;
  51.                                         }
  52.                                         Time=0;                //用完时间要重新赋值                                                       
  53.                                 }
  54.                         }
  55.                 }
复制代码

我知道答案 本帖寻求最佳答案回答被采纳后将获得系统奖励10 金钱 , 目前已有1人回答

回复

使用道具 举报

8

主题

19

帖子

71

积分

注册会员

Rank: 2

积分
71
 楼主| 发表于 2019-9-1 23:46:18 | 显示全部楼层
红外那一个程序
回复

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-29 14:29 , Processed in 0.092732 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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