打印

红外遥控问题,

[复制链接]
1778|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dream110|  楼主 | 2009-3-8 22:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
简单的测试程序,排除硬件问题;
接收头始终检测不到红外信号。太迷茫了,不清楚问题出在哪
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

/////////////////////////////////////////////////////
///////红外通信相关定义
/////////////////////////////////////////////////////
void delay_26us();//-----产生1个38K的载波频率
void delay_xus(uchar i);//------
sbit send_led=P3^7;//-------
uchar ii;
/////////////////////////////////////////////////////
///////红外通信相关定义
/////////////////////////////////////////////////////

main()
{
  uchar a;
  for(;;)
  {
           for(a=0;a<250;a++)
           {
             delay_26us();
           }
           delay_xus(0);
           delay_xus(0);
  }
}

/////////////////////////////////////////////////////
///////红外通信相关函数
/////////////////////////////////////////////////////
void delay_26us()   //产生26us
{
  send_led=0;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  send_led=1;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
}

void delay_xus(uchar i)
{
  uchar j;
  send_led=1;
  for(;i<250;i++)
  {
    j=1;
    j=2;
    j=3;
    j=4;
    j=5;
    j=6;
    j=7;
    j=8;
    j=9;
  }
}

相关帖子

沙发
xzl| | 2009-3-9 10:00 | 只看该作者

建议你用示波器看看波形

使用特权

评论回复
板凳
芯行天下| | 2009-3-9 10:34 | 只看该作者

产生波形时序的问题最好用定时器来做

如果想用单片机来产生红外载波的话最好用定时器来做。如果有PWM了会更好,做起来会非常方便。

使用特权

评论回复
地板
dream110|  楼主 | 2009-3-9 15:25 | 只看该作者

用示波器观察过

确实是38K的频率,用PIC我使用的PWM,51的我就直接用延时解决,却没想到搞不定,又不知道怎么错了?呵呵

使用特权

评论回复
5
dream110|  楼主 | 2009-3-9 15:35 | 只看该作者

这是在PROTEUS 上的波形

使用特权

评论回复
6
程序匡人| | 2009-3-9 15:59 | 只看该作者

你的位操作是怎么宏定义的

你的位操作宏定义是否正确,以确定你的程序是否可以在规定的IO上输出高低电平。
用程序延时加示波器很容易得到38K波形的。
用51的片子也可以用定时器做的,增强型的51现在也都带有PWM了。

使用特权

评论回复
7
dream110|  楼主 | 2009-3-9 16:54 | 只看该作者

这是简单的测试程序,

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int

/////////////////////////////////////////////////////
///////红外通信相关定义
/////////////////////////////////////////////////////
void delay_26us();//-----产生1个38K的载波频率
void delay_xus(uchar i);//------
sbit send_led=P3^7;//-------
uchar ii;
/////////////////////////////////////////////////////
///////红外通信相关定义
/////////////////////////////////////////////////////

main()
{
  uchar a;
  for(;;)
  {
           for(a=0;a<250;a++)
           {
             delay_26us();
           }
           delay_xus(0);
           delay_xus(0);
  }
}

/////////////////////////////////////////////////////
///////红外通信相关函数
/////////////////////////////////////////////////////
void delay_26us()   //产生26us
{
  send_led=0;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  send_led=1;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
  ii++;
}

void delay_xus(uchar i)
{
  uchar j;
  send_led=1;
  for(;i<250;i++)
  {
    j=1;
    j=2;
    j=3;
    j=4;
    j=5;
    j=6;
    j=7;
    j=8;
    j=9;
  }
}

使用特权

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

本版积分规则

24

主题

83

帖子

0

粉丝