欢迎来到天天文库
浏览记录
ID:41174007
大小:261.37 KB
页数:13页
时间:2019-08-18
《基于51单片机控制红外通信》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、红外通信原理红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外接收头(HS0038,它接收红外信号频率为38kHz,周期约26μs)接收红外信号,它同时对信号进行放大、检波、整形得到TTL电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。具体实现过程如下:(在这里特别强调:编码与解码是一对逆过程,不仅在
2、原理上是一对逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平,反之亦然。因此为了保证解码过程简单方便,在编码时应该直接换算成其反码。)1.红外发射部分:下图为红外发射部分的电路拟图:编码过程:(1)二进制信号的调制二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成频率为38kHz的间断脉冲串(用定时器来完成),相当于用二进制信号的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。(2)PPM编码这种遥控编码具有以下特征:
3、遥控编码脉冲由前导码、16位地址码(8位地址码、8位地址码的反码)和16位操作码(8位操作码、8位操作码的反码)组成。前导码:是一个遥控码的起始部分,由一个9ms的高电平(起始码)和一个4.5ms的低电平(结果码)组成,作为接受数据的准备脉冲。16位地址码:能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。16位操作码:用来执行不同的操作。采用脉宽调制的串行码,以脉宽为0.56ms、间隔0.56ms、周期为1.12ms的组合表示二进制的“0”;以脉宽为1.68ms、间隔0.56ms、周期为2.24ms的组合
4、表示二进制的“1”。(3)发送程序#includestaticbitOP; //红外发射管的亮灭控制位staticunsignedintcount; //延时计数器staticunsignedintendcount;//终止延时计数staticunsignedcharflag; //红外发送标志sbitP3_4=P3^4;chariraddr1; //十六位地址的第一个字节chariraddr2; //十六位地址的第二个字节voidSendIRdata(cha
5、rp_irdata);//发送子函数voiddelay();voidmain(void){ count=0; flag=0;//无载波 OP=0;//不亮 P3_4=0;//在后面会发现用OP赋值的 EA=1;//允许CPU中断 TMOD=0x11;//设定时器0和1为16位模式1 ET0=1;//定时器0中断允许 TH0=0xFF; TL0=0xE6;//设定时值0为38K也就是每隔26us中断一次 TR0=1;//开始计数 iraddr1=3;//自定义的一个地址 iraddr2=252;//地址反码
6、do{ delay(); SendIRdata(12); }while(1);}//定时器0中断处理voidtimeint(void)interrupt1{ TH0=0xFF; TL0=0xE6;//设定时值为38K也就是每隔26us中断一次 count++; if(flag==1) {OP=~OP;}//如果是待发送的有效数据flag=1,就在此产生载波(亮灭交变) else {OP=0;} P3_4=OP;}voidSendIRdata(charp_irdata)//发送数据子函数{ int
7、i; charirdata=p_irdata;/***************************************************************/ //发送9ms的起始码,并是载波模式有效 endcount=223; flag=1; count=0; while(count8、ount);/***************************************************************/ //发送十六位地址的前八位 irdata=iraddr1; for(i=0;i<8;i++) {//一个周期里规定先以高电平开始,在以低电平结束。先发送0.56ms的38KHZ“1”的红外波(即编码中0.56ms的高电平) endcoun
8、ount);/***************************************************************/ //发送十六位地址的前八位 irdata=iraddr1; for(i=0;i<8;i++) {//一个周期里规定先以高电平开始,在以低电平结束。先发送0.56ms的38KHZ“1”的红外波(即编码中0.56ms的高电平) endcoun
此文档下载收益归作者所有