OpenEdv-开源电子网

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

红外学习案例中:标记已经完成一次键值信息采集,如何理解???

[复制链接]

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
发表于 2012-12-29 11:26:34 | 显示全部楼层 |阅读模式

红外学习案例中的:remote.c中:
            if((RmtSta&0X0F)==0X00)    RmtSta|=1<<6;//标记已经完成

愚人我理解为:一个NEC格式的红外按键的脉冲个数为:
同步码头=1个(
1个)
地址码  =8个(逻辑0/1对应一个)
地址反码=8个(逻辑0/1对应一个)

控制码  =8个(逻辑0/1对应一个)
控制反码=8个(逻辑0/1对应一个)

一共是33个脉冲,应该是计数收到了33个脉冲后完成一次键值信息采集。

为什么却用  if((RmtSta&0X0F)==0X00) 为真来判断呢? 


这句如何理解不了,哪位大仙帮帮指点一下?



附:整个函数的内容:

//
定时器 2 程序

void TIM4_IRQHandler(void)

{

if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)

{

if(RmtSta&0x80)//上次有数据被

{

RmtSta&=~0X10;                                     //取消上沿获标

if((RmtSta&0X0F)==0X00)    RmtSta|=1<<6;//标记已经完成

if((RmtSta&0X0F)<14)    RmtSta++;

else

{

RmtSta&=~(1<<7);//清空导标识

RmtSta&=0XF0;    //清空计

}

}

}

if(TIM_GetITStatus(TIM4,TIM_IT_CC4)!=RESET)

{

if(RDATA)//上升沿捕获

{


TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling); //下降沿

TIM_SetCounter(TIM4,0);           //清空定器值

RmtSta|=0X10;                                  //标记上沿捕获

}else //下降沿

{

Dval=TIM_GetCapture4(TIM4);//读取 CCR1 CC1IF 标志位

TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //上升沿

 

 

if(RmtSta&0X10)                              //完成一

{

if(RmtSta&0X80)//收到了引

{

 

 

if(Dval>300&&Dval<800)                  //560 ,560us

{

RmtRec<<=1; //左移一位. RmtRec|=0;       //接收到 0

}elseif(Dval>1400&&Dval<1800)      //1680,1680us

{

RmtRec<<=1; //左移一位. RmtRec|=1;       //接收到 1

}elseif(Dval>2200&&Dval<2600)      //得到按

//2500 标准 2.5ms

{

RmtCnt++;            //按键次增加 1

RmtSta&=0XF0;    //清空计

}

}elseif(Dval>4200&&Dval<4700)             //4500标准 4.5ms

{

RmtSta|=1<<7;      //标记成

RmtCnt=0;            //清除按

}

}

RmtSta&=~(1<<4);

}

}

TIM_ClearFlag(TIM4,TIM_IT_Update|TIM_IT_CC4);

}

我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 13:32:02 | 显示全部楼层
f((RmtSta&0X0F)==0X00)    RmtSta|=1<<6;//标记已经完成一次键值信息采集
这里只是用来标记机是不是已经捕获键值完成,是否第一次进入溢出中断,用来实现按键连按处理的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-29 13:46:41 | 显示全部楼层
这样的啊。那我理解错了。

if((RmtSta&0X0F)==0X00)    RmtSta|=1<<6;//标记已经完成一次键值信息采集 

上面的RmtSta&0X0F中的0X0F是怎么得来的啊?依据是什么? 谢谢!
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 14:26:31 | 显示全部楼层
回复【3楼】liwanfei:
---------------------------------
自己事先设定的,就是最大不能超过15次。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-29 17:34:35 | 显示全部楼层
老大,推荐一个控制空调的红外发射电路吧,谢谢了!
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 21:18:18 | 显示全部楼层
回复【5楼】liwanfei:
---------------------------------
PWM-->三极管-->红外发射管。
就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-29 21:37:03 | 显示全部楼层
谢谢啊!
按照你这个说法,图示如下:



再次请教下:
1  上面这个三极管电路怎么实现载波发射啊?

2  同时请问:上面这个电路与下面这个与电路载波各有什么优缺点呢?










我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-12-29 22:10:23 | 显示全部楼层
1,对stm32来说,载波直接就是由IO口的PWM提供。然后用软件控制PWM的开关,实现调制。
2,对这个方案来说,载波由外部晶振提供,51只需要控制这个载波的开关,即实现调制。
2个方案,STM32显然省外围电路一些。效果都是一样。
另外,方案1,可以用1个三极管驱动就行了,没必要2个。又省点钱,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

24

主题

89

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-8-29
在线时间
3 小时
 楼主| 发表于 2012-12-29 22:19:36 | 显示全部楼层
好,点评得好!省钱才是硬道理!据说2级三极管驱动,电流强,可以更远距离发射。
我白天是个程序员,晚上就是个有抱负的演员。住在天朝的魔都,有条同名的狗......
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-20 04:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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