单片机红外接收的中断程序怎样理解

单片机红外接收的中断程序怎样理解,第1张

你的思路是正确的。

不过你贴的程序看不到引导码的处理过程,或者说没法知道startflag怎么置1的。最好也贴出来。

如果你这个接收程序的中断处理部分完整的话,可以确定所用的单片机不具有修改触发边沿的功能。只能根据第一个下降沿(引导码)和第一个用户码之间的时间来处理(减去0电平的时间)。

从程序上看,

if(startflag)

只是判断可能是起始标记。

if(irtime>32&&irtime<63)

//引导码

8-16ms间

bitnum=0

这个判断是否为引导码。如果是,则将数组键置0,准备开始存储数据。即:

irdata[bitnum]=irtime

irtime=0//这个就不说了

bitnum++//这个本来也不该说的,不过结合前面的引导码判断,就有问题了:

1、如果遥控器发射过程中红外线被挡住,irtime会很长···还需要继续存储么?

2、如果接收被干扰,会插入高电平,irtime

不确定···

3·······

简单说,判断过于简单,没法实用的。

话说,你自己有能力写个好的,为嘛还参考别人的?

startflag为接收状态标志(0未接收,1接收),

初始状态为0,未接收数据;

当有接收到红外信号,外部中断产生中断,这时候从startflag=0进入else

{irtime=0

startflag=1

}

清零计数,同时接收状态改成1

,进入if(startflag)开始接收数据

,只要接收标志为1,就会一直处于接收数据中,irok=1应为接收完毕标志,在主函数处理接收数据后,

应该有清零startflag,irtime标志的动作才对;

如果主函数没有清零startflag,那么startflag仅在首次上电的时候为0

,才会进入else

{irtime=0

startflag=1

}

,以后会一直保持1,只要有外部中断,只会进入if(startflag){...}

;判断这个startflag只为首次上电,第一次进入外部中断

在开始接收数据前清零irtime而已(irtime应该在中断一直计数着,不是0)

;即首次上电irtime不为0,此时产生外部中断

说明有接收到红外信号,马上清零irtime重新开始计数,判断引导码

总的来说

判断startflag

只为清零irtime


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11993411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存