OpenEdv-开源电子网

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

求助各位大侠们,红外遥控实验部分程序

[复制链接]

10

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2013-10-17
在线时间
0 小时
发表于 2013-11-28 14:51:31 | 显示全部楼层 |阅读模式
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; //清空计数器 
   }            
  }          
 }
问题1:两个if语句的作用是什么?   if((RmtSta&0X0F)<14) 是不是用来判断溢出的?没有溢出为什么进行++运算??


if(Dval>300&&Dval<800)   //560为标准值,560us
     {
      RmtRec<<=1; //左移一位.
      RmtRec|=0; //接收到0   
     }
     else if(Dval>1400&&Dval<1800) //1680为标准值,1680us
     {
      RmtRec<<=1; //左移一位.
      RmtRec|=1; //接收到1
     }
     else if(Dval>2200&&Dval<2600) //得到按键键值增加的信息 2500为标准值2.5ms
     {
      RmtCnt++;   //按键次数增加1次
      RmtSta&=0XF0; //清空计时器  
     }
问题2:以上的程序:比如数据码是11011010.。为什么经过上述8次左移及或1,或0后。。得到的数据是01011011?
问题3:11011010.。最高两位是1,那没有下降沿,是如何判断接收的位是低电平还是高电平的 ?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-28 15:58:27 | 显示全部楼层
1,是的,最大可以计数到0XF,你可以改成<15,也可以.
2,软件仿真看过程.
3,根据你自己的设置,比如你设置捕获上升沿,那么当你进入这个捕获中断的时候,必定就是发生了上升沿,可以认为是高电平了,而如果你不放心,那就再去判断IO的IDR寄存器,再make sure一下.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 14:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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