标题:
单片机开发红外遥控三色灯—红外接收部分程序
[打印本页]
作者:
李鑫都
时间:
2021-8-16 15:14
标题:
单片机开发红外遥控三色灯—红外接收部分程序
void interrupt Timer0_Isr()//200us
{
TMR0=0; //初值
T0IF=0; //溢出中断标志位清零
if(IR_R)
{
F_H_first = 1;
R_H_count++; //高电平计时
if(R_H_count > 100)
{
R_H_count = 0;
F_L_start = 0;
F_H_start = 0;
F_rec_ok = 0;
R_rec_DATE = 0;
R_rec_countL = 0;
F_repeat_ok = 0;
}
if(F_L_first)
{
F_L_first = 0;
if(F_H_start == 0)
{
if((R_L_count > 40)&&(R_L_count < 50)) //低电平时间为9ms左右
{
F_L_start = 1; //低电平引导码
}
}
R_L_count = 0;
}
}
else
{
F_L_first = 1;
R_L_count++; //低电平计时
if(R_L_count > 100) //计时大于50ms,干扰,清除所有标志,不读
{
R_L_count = 0;
F_L_start = 0;
F_H_start = 0;
F_rec_ok = 0;
R_rec_DATE = 0;
R_rec_countL = 0;
F_repeat_ok = 0;
}
if(F_H_first)
{
F_H_first = 0;
if(F_L_start)
{
if(F_H_start)
{
R_rec_countL++; //每变换一次电平计次一次
R_rec_DATE<<=1; //从最高位开始读取
if(R_rec_countL > 16) //从第17位开始读取数据
{
if((R_H_count > 6)&&(R_H_count < 11))
{
R_rec_DATE |= 0x01; //若高电平持续时间为1.72ms左右,读为1,否则0
}
if(R_rec_countL >= 24) //24位读完
{
R_rec_countL = 0;
R_real_date = R_rec_DATE;
F_L_start = 0;
F_H_start = 0;
F_rec_ok = 1; //数据读取完毕
R_rec_DATE = 0;
}
}
}
else
{
if((R_H_count > 10)&&(R_H_count < 14)) //2.4ms左右
{
R_repeat_count++;
if(R_repeat_count > 1)
{
F_repeat_ok = 1; //重复码标志
}
}
else if((R_H_count > 20)&&(R_H_count < 25)) //高电平时间4.5ms左右
{
F_H_start = 1; //视为高电平引导码
F_repeat_ok = 0;
R_repeat_count = 0;
}
else
{
F_L_start = 0;
F_repeat_ok = 0;
R_repeat_count = 0;
}
}
}
R_H_count = 0;
}
}
if(PBIF)
{
PBIF = 0; //清中断标志
PORTB=PORTB;
}
}
作者:
zctwss321
时间:
2021-8-20 17:43
为什么是部分??? 而不是全部? 小气了
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1