打印

如何算出来这个时间

[复制链接]
407|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lium|  楼主 | 2017-6-29 23:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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++;
沙发
guoyt| | 2017-6-29 23:57 | 只看该作者
我也觉的,按这样的程序,根本无法检测出9MS低电平。

使用特权

评论回复
板凳
lium|  楼主 | 2017-6-29 23:58 | 只看该作者
但此程序经过验证是可以正常工作的。

使用特权

评论回复
地板
guoyt| | 2017-6-30 17:39 | 只看该作者

没仔细看代码。没有晶振频率,能算出来时间?

使用特权

评论回复
5
lium|  楼主 | 2017-6-30 17:41 | 只看该作者
晶振频率:11.0592MHZ.  定时器0中断一次的时间:0.256ms.

使用特权

评论回复
6
yufe| | 2017-6-30 17:42 | 只看该作者

0.2256*32

使用特权

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

使用特权

评论回复
8
lium|  楼主 | 2017-6-30 17:45 | 只看该作者
多谢高手的指导。这两天又在网上找了一些资料看了看。现在终于搞明白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;
      }
   }   

使用特权

评论回复
9
wangpe| | 2017-6-30 17:46 | 只看该作者
恭喜恭喜

使用特权

评论回复
10
lium|  楼主 | 2017-6-30 17:48 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

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

本版积分规则

915

主题

9578

帖子

3

粉丝