打印
[51单片机]

9ms的时间是如何算出来的。

[复制链接]
1776|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jzfbbs|  楼主 | 2014-10-24 17:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
部分代码如下:
void int0_init()//外部中断初始化
{
   IT0=1;//下降沿触发
   EX0=1;
   EA=1;
}
void t0() interrupt 1//定时器0定时时间:0.256ms
{
  irtime++;
}
void int0() interrupt 0//外部中断服务函数
{
   if(flag==1)
   {
      if(irtime>32&&irtime<63)//检测引导码时间
      bitnum=0;
      irdate[bitnum]=irtime;
      irtime=0;
      bitnum++;
      if(bitnum==33)
      {
        bitnum=0;
        irok=1;
      }
   }
   else
   {
     irtime=0;
     flag=1;
   }
}
短按一下红外遥控器按键时,遥控头收到一个键值码。假设是9MS的低电平触发中断,此时进入中断执行: else
   {
     irtime=0;
     flag=1;
   }
然后退出中断函数。下一个0码或者1码到来时,再次进入中断函数。执行:irdate[bitnum]=irtime;
      irtime=0;
      bitnum++;
按这样的程序,根本无法检测出9MS低电平。但此程序经过验证是可以正常工作的。请高手们指教。

aaaaaaaaa.png (2.99 KB )

aaaaaaaaa.png

相关帖子

沙发
dirtwillfly| | 2014-10-24 20:16 | 只看该作者
没仔细看代码。没有晶振频率,能算出来时间?

使用特权

评论回复
板凳
jzfbbs|  楼主 | 2014-10-24 21:55 | 只看该作者
晶振频率:11.0592MHZ.  定时器0中断一次的时间:0.256ms.

使用特权

评论回复
地板
nonoxy| | 2014-10-27 14:14 | 只看该作者
0.2256*32

使用特权

评论回复
5
joyme| | 2014-10-27 17:19 | 只看该作者
“if(irtime>32&&irtime<63)//检测引导码时间”都有注释了还要问一下,自己理解一下就好了,这个范围放得有点宽,呵呵

使用特权

评论回复
6
jzfbbs|  楼主 | 2014-10-28 21:14 | 只看该作者
多谢高手的指导。这两天又在网上找了一些资料看了看。现在终于搞明白13.5ms的引导码是如何检测出来的的。9MS的下降沿触发中断后,执行:
else
{
    irtime=0;
    flag=1;
   }   
跳出中断后,定时器0开如计时,下一个下降沿触发进中断时,此时的定时时间就是13.5ms,那么就执行以下程序:
  if(flag==1)
   {
      if(irtime>32&&irtime<63)//检测引导码时间是否在13。5MS左右
      bitnum=0;
      irdate[bitnum]=irtime;
      irtime=0;
      bitnum++;
      if(bitnum==33)
      {
        bitnum=0;
        irok=1;
      }
   }   

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

112

主题

387

帖子

3

粉丝