红外遥控接收程序的疑问
时间:10-02
整理:3721RD
点击:
for(i=0;i<4;i++) //分别读取4个字节
{for(j=1;j<=8;j++) //每个字节8个bit的判断
{ while(IRsignal==0); //等待上升沿
Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
{ Delay1ms();
CodeTemp=CodeTemp|0x80;
if(j<8) CodeTemp=CodeTemp>>1;
}
else if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
}
IRcode[i]=CodeTemp;
CodeTemp=0;
这是红外遥控的读取字节的程序代码,程序没错,其中IRsigal是接到单片机的外部中断0口,对于这个程序,我有些不理解,单片机是如何读取遥控的发射数据的啊?我知道,我们是在检测每个字节中0、1的个数,因此检测每一位,比方说我们检测第一个字节的数据为10111111,j=1时,检测到的是1,但是到 j=2时我们还能保证检测到的是0吗,也就是说,在for循环中,难道我们就能根据i、j的改变来正确读取遥控发射的信号吗?遥控的发射信号跟for循环的是同步的? 我不知道我的疑问大家能懂不,新手,求各位解释下,谢谢
{for(j=1;j<=8;j++) //每个字节8个bit的判断
{ while(IRsignal==0); //等待上升沿
Delay0_9ms(); //从上升沿那一时刻开始延时0.9ms,再判断IRsignal
if(IRsignal==1) //如果IRsignal是"1",则向右移入一位"1"
{ Delay1ms();
CodeTemp=CodeTemp|0x80;
if(j<8) CodeTemp=CodeTemp>>1;
}
else if(j<8)CodeTemp=CodeTemp>>1;//如果IRsignal是"0",则向右移一位,自动补"0"
}
IRcode[i]=CodeTemp;
CodeTemp=0;
这是红外遥控的读取字节的程序代码,程序没错,其中IRsigal是接到单片机的外部中断0口,对于这个程序,我有些不理解,单片机是如何读取遥控的发射数据的啊?我知道,我们是在检测每个字节中0、1的个数,因此检测每一位,比方说我们检测第一个字节的数据为10111111,j=1时,检测到的是1,但是到 j=2时我们还能保证检测到的是0吗,也就是说,在for循环中,难道我们就能根据i、j的改变来正确读取遥控发射的信号吗?遥控的发射信号跟for循环的是同步的? 我不知道我的疑问大家能懂不,新手,求各位解释下,谢谢
没大神解释啊!看了半天还是没弄明白,这是红外解码程序的部分,这个解码的位传送一直没懂
我也在学习红外控制,一起加油,有什么问题可以一起分享解决
恩,多交流下
自己刷自己的帖子,竟然无人回答...
能贴全部的代码吗,这都没有判断逻辑“1”和“0”的代码,也不知道IRsignal是什么
我也在学红外遥控 我也不太懂这个是什么意思。