打印

希望高手帮我看看红外发送的程序

[复制链接]
2609|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
areshan|  楼主 | 2009-5-6 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include<reg52.h>
sbit data=P3^6;//发射端口
unsigned int delay;
send0()//发送0程序
{data=0;
delay=282;
while(--delay);//0.565ms的低电平
data=1;
delay=280;
while(--delay);//0.56ms的高电平
}//0是由0.56ms的低电平和0.56ms的高电平组成
send1()
{data=0;
delay=282;
while(--delay);//0.565ms的低电平
data=1;
delay=842;
while(--delay);//1.685ms
}//1是由0.565的低电平和1.685的高电平组成
sendbyte(num)//发送一个字节
{unsigned char k;
for(k=0;k<8;k++)
{if(num&0x01) send1();//取出该字节的末位,如果是1则发送1
 else send0();
 num>>=1;//循环该字节
}
}
T0chu()//T0的初始化
{GATE=0x02;//T0工作在方式2
 EA=1;
 ET0=1;
 TL0=0xf3;//每13US产生中断
 TR0=1;
}
duanT0()interrupt 1
{data=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();//把发射端拉低,并持续13US
}
void main()
{
T0chu();
sendbyte(0);//开始
sendbyte(num);
sendbyte(~num);
sendbyte(0xff);//结束
}
//可能格式不对,开始和结束用一个字节0和FF好像没有什么用....
 谢谢大家能给点意见,我没有仿真工具,麻烦大家了......




相关帖子

沙发
杜专| | 2009-5-6 20:51 | 只看该作者

协议是人定的,也可以自己改啊,定义自己的协议程序跟好

不信你试试~!

使用特权

评论回复
板凳
zjh006| | 2009-5-7 08:26 | 只看该作者

载波有问题

这样应该可以
duanT0()interrupt 1
{
    data=~data;
}

使用特权

评论回复
地板
areshan|  楼主 | 2009-5-7 10:40 | 只看该作者

不能直接把data取反

如果把data直接取反,那么在data为低电平时就会把电平拉高了。我想了想,这样每各13us产生中断,中断也该持续是13us,这样才能产生38k的频率,但发送1或0的周期给放大的2倍。。。。希望高手给点指点!!!
谢谢了。。。

使用特权

评论回复
5
zjh006| | 2009-5-7 11:34 | 只看该作者

你的思路有问题

只有在发送载波的时候才需要打开13us中断,中断程序里取反就可以,不发送载波的时候只需要将data=0或1(0,1由你外部的三极管决定)。

使用特权

评论回复
6
areshan|  楼主 | 2009-5-7 12:06 | 只看该作者

关于中断

我想如果每13us中断,取反data是1us,这样就不是38k的方波了,我的想法是用P3.6发射信号,再用中断来拉低电平,当发射的是高电平时,隔13us拉低,持续13us,中断返回后,又回到高电平。如果是低电平,每隔13us拉低,就没有用,还是低电平。。。。。就在发射信号上产生了38k的载波。。。。。
不知道这样的想法能不能实现....谢谢大家指导!!!

使用特权

评论回复
7
areshan|  楼主 | 2009-5-8 10:18 | 只看该作者

怎么没有人回复呢?

使用特权

评论回复
8
xinjie1023| | 2010-5-19 21:55 | 只看该作者
看看程序。

使用特权

评论回复
9
Jarrywd| | 2010-6-16 13:23 | 只看该作者
看上去红外发送比较简单,但现在才初学,还是很多问题!专程来看兄台的程序的!

使用特权

评论回复
10
skyfull045| | 2010-6-17 10:14 | 只看该作者
我做超声波,貌似很像啊

使用特权

评论回复
11
xw802| | 2010-8-20 16:41 | 只看该作者
GATE=0x02;//T0工作在方式2?????
貌似应该是TMOD=0x02吧!

使用特权

评论回复
12
zhoukok| | 2010-8-20 18:11 | 只看该作者
载波好像有问题啊,在发射数据时,你要不就确定高电平载波,要不就低电平载波
假如高电平载波,则在高电平的时候允许载波的发射,低电平则关闭载波,直接给数据端低电平
而你的载波可以用定时器做,产生38KHZ方波,此时注意占空比的调节,占空比不同,你定时器所需要的定时有出入了,总之,以最小单元为基本定时时间。

使用特权

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

本版积分规则

127

主题

728

帖子

0

粉丝