标题:
红外解码程序会导致红外接收错码
[打印本页]
作者:
fuxinyu
时间:
2025-8-6 09:00
标题:
红外解码程序会导致红外接收错码
void cal_rev_code(void) //解码
{
//存32位无线数据
//用户码 //用户码反码 //按键码 //按键码反码
if (wx_wait_cal) //无线码接收成功未写入buf
{
// Codecnt++;
// if(Codecnt >= 3)
// {
Signal_DataTemp_1=Signal_DataTemp;
HW_ReceiveBuffer[0] = Signal_DataTemp_1 ; /* 得到地址码 */
HW_ReceiveBuffer[1] = (Signal_DataTemp_1 >> 8) & 0xff; /* 得到地址反码 */
HW_ReceiveBuffer[2] = (Signal_DataTemp_1 >> 16) & 0xff; /* 得到按键码 */
HW_ReceiveBuffer[3] = (Signal_DataTemp_1 >> 24) & 0xff; /* 得到按键反码*/
// Signal_DataTemp_1=Signal_DataTemp;
// HW_ReceiveBuffer[0] = Signal_DataTemp_1 ; /* 得到地址码 */
// HW_ReceiveBuffer[1] = Signal_DataTemp_1 >> 8; /* 得到地址反码 */
// if(cal_rev_code_cnt==1){
// HW_ReceiveBuffer[2] = Signal_DataTemp_1 >> 16; /* 得到按键码 */
// HW_ReceiveBuffer[3] = Signal_DataTemp_1 >> 24; /* 得到按键反码*/
// }
// if(cal_rev_code_cnt==2){
// wx_wait_cal = 0;
// Signal_DataTemp_1=0;
// Signal_DataTemp=0;
// Signal_DataTempl_1=0;
// Signal_DataTempl_2=0;
// Signal_DataTempl_3=0;
// Signal_DataTempl_4=0;
// cal_rev_code_cnt=0;
// }
// // }
}
}
//定时器0的中断处理**********************
if(T0IE && T0IF) // 100us
{
TMR0 = 208; //注意:对TMR0重新赋值TMR0在两个周期内不变化
T0IF = 0;
us100_flg = 1;
decode();
if(wx_wait_cal==1)
cal_rev_code_cnt++;
}
void decode(void) //无线接收码解码
{
if(wx_wait_cal==0)
{
if(RFIN)
{
if(High_low) //处理下降沿触发
{
Signal_L = SignalCnt; //保存低电平的时间
SignalCnt=0;//把同周期低电平记录时间清零
High_low=0;//清除下降沿触发标志
Low_high=1; //上升沿触发标志
}
if( Low_high)
{
SignalCnt++ ; //记录同周期高电平时间
}
}
else //引脚为低电平时
{
if(Low_high) //处理上升沿触发
{
Signal_H = SignalCnt; //记录高电平的时间
SignalCnt=0;//把同周期高电平记录时间清零
Low_high=0;//清除上升沿触发标志
if((80<=Signal_L)&& (Signal_L <=100)) // 判断是否为引导码
{
if((40<= Signal_H) && (Signal_H <= 50))
{
tb_flag=1; // 进入红外遥控
}
else
{
goto loop2; //错码清除
}
// CleanTime = 0;
}
// 调教最优解
else if((3<=Signal_L)&& (Signal_L <= 8))//判断是否为高低电平
{
if((3<= Signal_H) && (Signal_H <= 8)) //低电平
{
//第一种
Signal_DataTemp >>= 1; /* 右移一位 */
Signal_DataTemp &= ~(0x80000000); /* 接收到0 */
//第二种
// Signal_DataTemp = Signal_DataTemp << 1;
// Signal_DataTemp = Signal_DataTemp + 0;
//第三种
// HW_ReceiveBuffer[wx_bit/8] >>=1;
// HW_ReceiveBuffer[wx_bit/8] &= ~(0x80);
//第四种
// if((wx_bit/8)==0){ Signal_DataTempl_1>> =1;Signal_DataTempl_1&= ~(0x80); }
// if((wx_bit/8)==1){ Signal_DataTempl_2>> =1;Signal_DataTempl_2&= ~(0x80); }
// if((wx_bit/8)==2) { Signal_DataTempl_3>> =1;Signal_DataTempl_3&= ~(0x80); }
// if((wx_bit/8)==3){ Signal_DataTempl_4>> =1;Signal_DataTempl_4&= ~(0x80); }
wx_bit++;
}
else if((14<= Signal_H) && (Signal_H <= 19))//高电平
{
//第一种
Signal_DataTemp >>= 1; /* 右移一位 */
Signal_DataTemp |= 0x80000000; /* 接收到1 */
//第二种
//Signal_DataTemp = Signal_DataTemp << 1;
//Signal_DataTemp = Signal_DataTemp + 1;
//第三种
// HW_ReceiveBuffer[wx_bit/8] >> =1;
// HW_ReceiveBuffer[wx_bit/8] |= 0x80;
//第四种
// if((wx_bit/8)==0){ Signal_DataTempl_1>> =1;Signal_DataTempl_1|= 0x80; }
// if((wx_bit/8)==1){ Signal_DataTempl_2>> =1;Signal_DataTempl_2|= 0x80;}
// if((wx_bit/8)==2){ Signal_DataTempl_3>> =1;Signal_DataTempl_3|= 0x80; }
// if((wx_bit/8)==3) {Signal_DataTempl_4>> =1; Signal_DataTempl_4|= 0x80;}
wx_bit++;
}
else {
goto loop2; //错码清除
}
// CleanTime = 0;
}
else
{ //错码+长按的重复码在此清零
loop2:
Low_high=0;
High_low=0;
tb_flag=0;
SignalCnt = 0;
Codecnt = 0;
Signal_DataTemp=0;
Signal_DataTempl_1=0;
Signal_DataTempl_2=0;
Signal_DataTempl_3=0;
Signal_DataTempl_4=0;
return ;
}
if (wx_bit ==32)
{
tb_flag=0;
wx_bit=0;
wx_ok=1;
Timer_100ms =0;
wx_wait_cal = 1;
Low_high=0;
High_low=0;
tb_flag=0;
SignalCnt = 0;
cal_rev_code_cnt=0;
// cal_rev_code();
}
}
High_low=1; //下降沿触发
SignalCnt++ ; //记录低电平时间
}
}
}
作者:
fuxinyu
时间:
2025-8-6 09:01
FT60F121
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1