在做红外发射,定时器精度不够如何解决

[复制链接]
2862|7
 楼主| zhuanghaiyang 发表于 2012-9-12 14:28 | 显示全部楼层 |阅读模式
晶振用的12MHZ的,工作于方式1


time0()interrupt 1  //定时器0中断
{
static bit OP=0;
//红外发射管的亮灭
TH0=0xFF;       //25ns溢出一次
TL0=0xE7;
count++;
if(IR_flag==1)
{
  OP=~OP; //发射
}
else
{
  OP = 0; //不发射
}
IR_IN=OP; //IR_IN为发射引脚
}

精度不够可以手动调整,可我用逻辑分析仪读出波形后发现,发射相同时间的红外信号,红外持续的时间不一样,这是怎么回事,

下面是红外发射时间测试程序


time_measure()
{
uint i,endcount;
for(i=0;i<8;i++) //发射8次
{  
  TR0=0;
  endcount=1000;  //定时25毫秒
  IR_flag=1;
  count=0;
  TH0=0xFF;     
  TL0=0xE7;
  TR0=1;
  while(count<endcount); //等待时间到
  TR0=0;
  endcount=1000;   //不发射时间25毫秒
  IR_flag=0;
  count=0;
  TH0=0xFF;     
  TL0=0xE7;
  TR0=1;
  while(count<endcount);  //等待
}
TR0=0;            //关定时器
}

下面是逻辑分析仪出来的波形












}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zhuanghaiyang 发表于 2012-9-12 15:02 | 显示全部楼层
如果像上述使用定时器,它的最大误差是多少
NE5532 发表于 2012-9-12 17:13 | 显示全部楼层
红外发射实际上是OOK调制,你用PWM功能输出载波,找个三极管就调制了。
yewuyi 发表于 2012-9-12 17:55 | 显示全部楼层
25ns?

25us吧!
25us中断一次也够了,不需要太高的精度。
duhemayi 发表于 2012-9-13 14:23 | 显示全部楼层
这个还没有搞过
幻梦kfc 发表于 2012-11-15 19:12 | 显示全部楼层
学习 下,正在看这方面的资料呢
epherun 发表于 2013-12-5 17:51 | 显示全部楼层
学习 下,正在看这方面的资料呢
xhloes大龙 发表于 2013-12-5 18:02 | 显示全部楼层
学习,还没仔细做过。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:广交单片机编程的朋友,QQ:446579893

5

主题

131

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部