找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6615|回复: 1
打印 上一主题 下一主题
收起左侧

单片机红外线发射和接收问题

[复制链接]
跳转到指定楼层
楼主
ID:17963 发表于 2009-11-14 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好小弟现在做一个红外线探测是否有物体通过的东东,现在对红外线发射这块产生问题,请大家帮忙给看看。


以上是原理图,通过p3.3使用PWM控制红外线发射,CON4的1、2脚接红外线LED,3脚接一体化接收管的输出脚并于INT0连接,4脚接接收管的地,接收管的电源单独提供一5V。
程序是这样的:用T0定时为80us中断一次用于产生一个PWM波,通过P3.7脚输出一个可调的0-5V的电压,并且定时取反T1的ET1中断标志位,用于调制38K的载波;T1定时为13us中断一次,中断后使P3.3取反一次,产生38K的载波;INT0中断用于接收计数中断方式为边沿触法。
我的问题是:根据资料显示调制波可在几百微秒内实现,但我测试结果是T0中断计时到24ms时取反一次ET1才能在INT0就得到连续的计数,如果小于24ms了先是计几十个或几百个数然后就停止了,我用摇控试过,一直点一个键,完全可以连续计数。我想可以能是发射电路或程序的问题了,请大家帮忙看看那里有问题,怎么处理。小弟在此谢过了。急盼回复。
下面是小弟的程序:
void PWM_38K_T1() interrupt 3 using 1 //T1中断函数产生38K载波
{
      RF=~RF; //sbit RF="P3"^3
}

void PWM_Vol_T0() interrupt 1 using 0 //T0中断用于产生PWM电压和38K载波调制
{
   //PWM电压产生-----------------------------------------------------------
   if(++zkb_count>500) zkb_count=0 ;

   if(zkb_count<vol_value) RD=1; //RD为P3.7口,直接使用原单片机管脚复用定义名称
   else RD=0;

   //-----------------------------------------------------------------------

   //外红调制波生产--------------------------------------------------------
   //24ms停止T1一次,产生用于红外接收器接收的调制波
   if(++test_t1>300)
  {
       ET1=~ET1;
       test_t1=0;
   }
}

void ext_init () interrupt 0 using 3 //INT0中断函数
{
     ++HW_INT0_count;

}
然后在主函数里初始化以后就显示HW_INT0_count
main()
{
     初始化;
    while(1)
   {
        display(HW_INT0_count);
    }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:17963 发表于 2009-11-22 09:33 | 只看该作者
小弟先谢过了,我的邮箱是:anbgn@126.com,能否通过QQ与您联系呀
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表