打印

这个时间是如何算出来

[复制链接]
347|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ousj|  楼主 | 2015-9-12 10:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
9ms
部分代码如下:
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++;
沙发
morrisk| | 2015-9-12 10:53 | 只看该作者
我也觉的,按这样的程序,根本无法检测出9MS低电平。

使用特权

评论回复
板凳
ousj|  楼主 | 2015-9-12 10:53 | 只看该作者
但此程序经过验证是可以正常工作的。

使用特权

评论回复
地板
ousj|  楼主 | 2015-9-12 10:53 | 只看该作者

使用特权

评论回复
5
zyf部长| | 2015-9-12 10:53 | 只看该作者
没仔细看代码。没有晶振频率,能算出来时间?

使用特权

评论回复
6
ousj|  楼主 | 2015-9-12 10:54 | 只看该作者
晶振频率:11.0592MHZ.  定时器0中断一次的时间:0.256ms.

使用特权

评论回复
7
小小猫咪| | 2015-9-12 10:54 | 只看该作者
0.2256*32

使用特权

评论回复
8
kangzj| | 2015-9-12 10:54 | 只看该作者

“if(irtime>32&&irtime<63)//检测引导码时间”都有注释了还要问一下,自己理解一下就好了,这个范围放得有点宽,呵呵

使用特权

评论回复
9
ousj|  楼主 | 2015-9-12 10:55 | 只看该作者
多谢高手的指导。这两天又在网上找了一些资料看了看。现在终于搞明白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;
      }
   }   

使用特权

评论回复
10
kangzj| | 2015-9-12 10:55 | 只看该作者
恭喜恭喜

使用特权

评论回复
11
ousj|  楼主 | 2015-9-12 10:55 | 只看该作者
多谢,结贴了,周末愉快哈

使用特权

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

本版积分规则

712

主题

7557

帖子

1

粉丝