新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2016-8-9
- 在线时间
- 7 小时
|
1金钱
//遥控器接收状态
//[7]:收到了引导码标志
//[6]:得到了一个按键的所有信息
//[5]:保留
//[4]:标记上升沿是否已经被捕获
//[3:0]:溢出计时器
u8 RmtSta=0;
u16 Dval; //下降沿时计数器的值
u32 RmtRec=0; //红外接收到的数据
u8 RmtCnt=0; //按键按下的次数
void TIM5_IRQHandler(void)
{
u16 tsr;
tsr=TIM5->SR;
if(tsr&0x01)//溢出
{
if(RmtSta&0x80)
{
RmtSta&=~0x10;//取消上升沿已经被捕获标记
if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//标记已经完成一次按键的键值信息采集
if((RmtSta&0X0F)<14)RmtSta++;
else
{
RmtSta&=~(1<<7);//清空引导标识
RmtSta&=0XF0; //清空计数器
}
}
}
if(tsr&(1<<2))//CC2IE中断
{
if(RDATA)
{
TIM5->CCER|=1<<5;//设为下降沿捕获
TIM5->CNT=0;//清空定时器值
RmtSta|=0x10;//这句代码改成RmtSta|=1<<7;怎么不行
}else//下降沿捕获
{
Dval=TIM5->CCR2;
TIM5->CCER&=~(1<<5);
if(RmtSta&0x10)
{
if(RmtSta&0x80)
{
if(Dval>300&&Dval<800)
{
RmtRec<<=1;
RmtRec|=0;
}else if(Dval>1400&&Dval<1800)
{
RmtRec<<=1;
RmtRec|=1;
}else if(Dval>2200&&Dval<2600)
{
RmtCnt++;
RmtSta&=0xf0;
}
}else if(Dval>4200&&Dval<4700)
{
RmtSta|=1<<7;
RmtCnt=0;
}
}
RmtSta&=~(1<<4);
}
}
TIM5->SR=0;
}
在中断处理的代码:RmtSta|=0x10;
,这句代码改成RmtSta|=1<<7;怎么不行,为什么?
|
|