普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 5676|回复: 2

[已解决] 关于A2开发板中红外遥控的代码问题

[复制链接]

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2020-2-26 18:48:56 | 显示全部楼层 |阅读模式
1金钱
关于红外遥控,开发板自带的示例代码,该代码没有问题,可以正常运行。
当在接收数据时,有一个判断,先是一个560us的低电平,然后跟着一个1680us或560us的高电平,以高电平的时候来识别数据是1还是0。
其中有一段代码中是这样的:
err=60;               
while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
{
        delay(1);
        err--;
}
err=500;
while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
{
        delay(10);         //0.1ms
        Time++;
        err--;
        if(Time>30)
        {
                return;
        }
}
IrValue[k]>>=1;         //k表示第几组数据
if(Time>=8)                        //如果高电平出现大于565us,那么是1
{
        IrValue[k]|=0x80;
}
Time=0;                //用完时间要重新赋值
----------------------------------------------
在判断高电平时长的代码里,以100us为单位进行延时,如果时间超过了3ms,则退出中断处理。我写这部分代码时,把这个”延时单位“由100us改成了10us,然后发现程序运行结果怎么也不对,表现为取不到数据,全是0。修改后的代码如下,修改部分是红色粗体的内容:
err=60;               
while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
{
        delay(1);
        err--;
}
err=5000;
while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
{
        delay(1);         //10 us
        Time++;
        err--;
        if(Time>300)
        {
                return;
        }
}
IrValue[k]>>=1;         //k表示第几组数据
if(Time>=80)                        //如果高电平出现大于565us,那么是1
{
        IrValue[k]|=0x80;
}
Time=0;                //用完时间要重新赋值
---------------------------------------------------------
我自己的感觉这个改动从逻辑上应该是是可以讲通的,就是无法理解实际为什么跑不通,希望各位大神指点。


最佳答案

delay延时是一个不精确的延时,你循环次数越多,延时误差也就越大,你可以试试用定时器来延时,应该是可以的。

回复

使用道具 举报

27

主题

337

帖子

3294

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3294
发表于 2020-2-27 08:52:02 | 显示全部楼层
delay延时是一个不精确的延时,你循环次数越多,延时误差也就越大,你可以试试用定时器来延时,应该是可以的。
回复

使用道具 举报

1

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2020-2-27 09:40:43 | 显示全部楼层
admin 发表于 2020-2-27 08:52
delay延时是一个不精确的延时,你循环次数越多,延时误差也就越大,你可以试试用定时器来延时,应该是可以 ...

好的。谢谢。后面我用keilc的模拟验证了一下这个误差,的确差很多。
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-5-7 05:54 , Processed in 0.438644 second(s), 32 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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