OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10197|回复: 3

红外收不到啊,高手帮忙看一下吧

[复制链接]

18

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2011-11-19
在线时间
4 小时
发表于 2011-12-6 20:05:31 | 显示全部楼层 |阅读模式

红外接收程序,移植到STC89S52 ,12M晶振。
用的正点原子红外键盘
51接收引脚中断1次,除了头尾,中间应该收到32个高电平的。串口调试观察,只收到20多个高电平,丢了好多个位。怀疑是51的处理速度慢,在检测当前脉冲宽度的时候,下一个高电平给跳过了,是这样的吗?
数据0: 500us低+ 500us高        数据1: 500us低+1500us高


/*-------------------------协议--------------------------
开始拉低9ms,接着是一个4.5ms的高脉冲,通知器件开始传送数据了
接着是发送4个8位二进制码,第一二个是遥控识别码(REMOTE_ID),第一个为
正码(0),第二个为反码(255),接着两个数据是键值,第一个为正码
第二个为反码.发送完后40ms,遥控再发送一个9ms低,2ms高的脉冲,
表示按键的次数,出现一次则证明只按下了一次,如果出现多次,则可
以认为是持续按下该键.
---------------------------------------------------------*/

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-7 00:33:16 | 显示全部楼层
回复【楼主位】0529hui:
---------------------------------
51,肯定也是没问题的
这个信号已经很慢了的.
应该是你的延时函数没设计好.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

18

主题

102

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
203
金钱
203
注册时间
2011-11-19
在线时间
4 小时
 楼主| 发表于 2011-12-7 22:09:02 | 显示全部楼层

问题解决了,
1是, 自己在接收到脉冲后,加了串口调试,占用了脉冲处理的时间,漏过了脉冲
2是,脉冲宽度检测的时间间隔要设置的很准确,
准确的来说,决定延时的不只是delay(), 这一部分,而是整个while(RDATA)所用的时间。

//检测脉冲宽度
//最长脉宽为5ms
//返回值:x,代表脉宽为x*20us(x=1~250);
u8 Pulse_Width_Check(void)
{
    u8 t=0; 
    while(RDATA)
    { 
      t++;
     delay_us(20);      
     if(t==250)return t; //超时溢出
    }
    return t;
}

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2011-12-8 01:21:06 | 显示全部楼层
是的.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 16:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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