OpenEdv-开源电子网

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

红外遥控实验程序疑问

[复制链接]

16

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-11-13
在线时间
0 小时
发表于 2013-11-27 12:42:33 | 显示全部楼层 |阅读模式
//外部中断服务程序   
void EXTI1_IRQHandler(void)
{       
    u8 res=0;
    u8 OK=0; 
    u8 RODATA=0;    
while(1)
    {        
        if(RDATA)//有高脉冲出现
        {
            res=Pulse_Width_Check();//获得此次高脉冲宽度       
            if(res==250)
break;//非有用信号
            if(res>=200&&res<250)
OK=1; //获得前导位(4.5ms)
            else if(res>=85&&res<200)  //按键次数加一(2ms)
            {        
                Remote_Rdy=1;//接受到一个数据
                Remote_Cnt++;//按键次数增加
                break;
            }
            else if(res>=50&&res<85)RODATA=1;//1.5ms
            else if(res>=10&&res<50)RODATA=0;//500us
            if(OK)
            {
                Remote_Odr<<=1;
                Remote_Odr+=RODATA; 
                Remote_Cnt=0; //按键次数清零
            }   
        }  
    }    
EXTI_ClearITPendingBit(EXTI_Line1);  //清除EXTI1线路挂起位         
}  

上面的函数为MINI版红外遥控实验中的中断处理函数,有一个小疑问。我说说我对这段程序的理解哈,大家看一下第二个break,这里不就是相当于接收到一个数据之后就跳出while循环吗?这里的Remote_Cnt值永远只能为1啊。怎么达到显示按键次数的目的啊?由于我的红外接收头已经报废了,所以还请各位大虾帮忙看看。

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-27 23:44:35 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2013-11-13
在线时间
0 小时
 楼主| 发表于 2013-11-28 12:34:48 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我大意了,原来计数的变量是全局变量。哎、、、
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 17:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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