基于51单片机控制红外通信_第1页
基于51单片机控制红外通信_第2页
基于51单片机控制红外通信_第3页
基于51单片机控制红外通信_第4页
基于51单片机控制红外通信_第5页
免费预览已结束,剩余8页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、红外通信原理红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解 调出遥控编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外接收头(HS0038 它接收红外信号频率为38kHz,周期约26 w s)接收红外信号,它同时对信号进行放大、检波、整形得到TTL电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。具体实现过程如下:逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平,反之亦然。因此为了保证解码过程简单方

2、便,在编码时应该直接换算成其反码。)he1 .红外发射部分:下图为红外发射部分的电路拟图:VCCR3GND图2 红外发射电路编码过程:(1)二进制信号的调制二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成 频率为38kHz的间断脉冲串(用定时器来完成),相当于用二进制信号 的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,即是调制后 用于红外发射二极管发送的信号。(2)PPM编码这种遥控编码具有以下特征:遥控编码脉冲由 前导码、16位地址码(8位地址码、8位地址码 的反码)和16位操作码(8位操作码、8位操作码的反码)组成。前导码:是一个遥控码的起始部分,由一个9ms的高电平(

3、起始码) 和一个4. 5ms的低电平(结果码)组成,作为接受数据的准备脉冲。16位地址码:能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。16位操作码:用来执行不同的操作。采用脉宽调制的串行码,以脉宽为 0.56ms、间隔0.56ms、周期为1.12ms的组合表示二进制的以脉宽为1.68ms、间隔0.56ms、周期为2.24ms的组合表示二进制的“17n_44>1 1 1,汕$图7二进制码T图8二进制码0地址眄地址反码律作网9发送一蛆完整的编码脉冲携佗皮利(3)发送程序#include <AT89X51.h>static bit OP;static unsigned i

4、nt static unsigned int static unsigned char/红外发射管的亮灭控制位count;/延时计数器endcount; /终止延时计数flag;/红外发送标志sbit P3_4=P3A4;char iraddrl;/十六位地址的第一个字节char iraddr2;/十六位地址的第二个字节void SendIRdata(char p_irdata);发送子函数void delay();void main( void )count = 0;flag = 0;/无载波OP = 0;/ 不亮P3_4 = 0;/在后面会发现用OP赋值的EA = 1; 允许 CPUfr

5、断TMOD = 0x11;/设定时器0和1为16位模式1ET0 = 1; 定时器0中断允许TH0 = 0xFF;TL0 = 0xE6; /设定时值0为38K也就是每隔26us中断一次TR0 = 1 ;/开始计数iraddr1=3; /自定义的一个地址iraddr2=252; / 地址反码dodelay();SendIRdata(12); while (1);/定时器0中断处理void timeint( void) interrupt 1TH0=0xFF;TL0=0xE6; 设定时值为38K也就是每隔26us中断一次 count+;if (flag=1)OP=OP; /如果是待发送的有效数据fl

6、ag=1,就在此产生载波(亮灭交变) elseOP = 0; P3_4 = OP;void SendIRdata( char p_irdata) / 发送数据子函数int i;char irdata=p_irdata;/*/发送9ms的起始码,并是载波模式有效endcount=223;flag=1;count=0;while (count<endcount); /等待中断,控制亮灭交变的总时间为9ms/发送4.5ms的结果码,并是载波模式无效endcount=117flag=0;count=0;do while (count<endcount);/*/发送十六位地址的前八位irda

7、ta=iraddr1;for (i=0;i<8;i+) / 一个周期里规定先以高电平开始,在以低电平结束 。先发送0.56ms的38KHz"1”的红外波(即编码中0.56ms的高电平)endcount=10;flag=1;count=0;do while (count<endcount);/停止发送红外信号(即编码中的低电平)if (irdata-(irdata/2)*2)/判断二进制数个位为1还是0endcount=41; /1 为宽的高电平 1.68mselseendcount=15; /0 为窄的高电平 0.56msflag=0;count=0;while (cou

8、nt<endcount);irdata=irdata>>1; / 依次取位/发送十六位地址的后八位irdata=iraddr2;/此处已经是地址的反码for (i=0;i<8;i+)endcount=10;flag=1;count=0;while (count<endcount);if (irdata-(irdata/2)*2)endcount=41; else endcount=15;flag=0;count=0;do while (count<endcount); irdata=irdata>>1;/*/发送八位数据irdata=p_irda

9、ta;for( i=0;i<8;i+)endcount=10;flag=1;count=0;while (count<endcount); if( irdata-(irdata/2)*2) endcount=41; elseendcount=15; flag=0;count=0; do while (count<endcount);irdata=irdata>>1;/发送八位数据的反码irdata=p_irdata; /要将数据位取反 for (i=0;i<8;i+)endcount=10;flag=1;count=0;while (count<end

10、count); if (irdata-(irdata/2)*2) endcount=41; else endcount=15; flag=0;count=0;while (count<endcount); irdata=irdata>>1;endcount=10;flag=1;count=0;do while (count<endcount);flag=0;void delay()int i,j;for (i=0;i<400;i+)for (j=0;j<100;j+)一串完整的编码如下图所示rrmInnonmuir innuirmn uuuinwir inr

11、unonnni in前导码 | 地址码地址反码 操作码操作反码2 .红外接收部分:红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控 编码脉冲。为了减少干扰,采用的是价格便宜性能可靠的一体化红外 接收头(HS0038它接收红外信号频率为38kHz,周期约26us)接收 红外信号,它同时对信号进行放大、检波、整形得到TTL电平的编码 信号,再送给单片机,经单片机解码并执行去控制相关对象。接收部分的电路拟图为:图3红外接收电路213HS0038的典型应用电路为:01SAL62- XOlUlf*) recommended to supnru招 pover supply disturbanc

12、es*)t-luni【gd iiLipp&toha葬 ran即:4.5父'$七5.5 V其应用程序为:#include"reg52.h"#define uchar unsigned char#define uint unsigned int#include"reg52.h"#define uchar unsigned char#define uint unsigned intuchar ram4=0,0,0,0;存放接受到的4个数据 地址码16位+按键码8位+按键码取反的8位void delaytime(uint time) / 延迟 9

13、0uS uchar a,b;for(a=time;a>0;a-) for(b=40;b>0;b-); void rem()interrupt 0/ 中断函数uchar ramc=0;定义接收了 4个字节的变量uchar count=0;/定义现在接收第几位变量uint i=0;此处变量用来在下面配合连续监测9MS内是否有高电平prem=1;for(i=0;i<1100;i+) 以下FOR语句执行时间为8MS左右if(prem)/进入遥控接收程序首先进入引导码的前半部判断,即:是否有9MS左右的低电平return;引导码错误则退出,注意与break语句的区别while(prem

14、!=1);等待引导码的后半部 4.5 MS高电平开始的到来。delaytime(50); 延时大于4.5MS时间,跨过引导码的后半部分,来到真正遥控数据32位中第一位数据的0.56MS开始脉冲for(ramc=0;ramc<4;ramc+)循环 4 次接收 4 个字节 for(count=0;count<8;count+) / 循环 8 次接收 8 位(一个字 节)while(prem!=1);开始判断现在接收到的数据是 。或者1,首先在这行本句话时,保已经进入数据的0.56MS低电平阶段/等待本次接受数据的高电平的到来。delaytime(9);/高电平到来后,数据 0高电平最多

15、延续0.56MS,而数据1,高电平可延续1.66MS大于0.8MS后我们可以再 判断遥控接收脚的电平。if(prem)/如果这时高电平仍然在继续那么接收到的数据是1的编码ramramc=(ramramc<<1)+1;将目前接收到的数据位1放到对应的字节中delaytime(ll); 如果本次接受到的数据是1,那么要继续延迟1MS,这样才能跨/下个位编码的低电平中(即是开始的0.56MS中)else/否则目前接收到的是数据 0的编码ramramc=ramramc<<1;将目前接收到的数据位 0放到对应的字节中 本次接收结束,进行下次位接收,此接收动作进行32次,正好完成4

16、个字节的接收if(ram2!=(ram3&0x7f)/ 本次接收码的判断 for(i=0;i<4;i+) /没有此对应关系则表明接收失败,清除接受到的数据rami=0;returned;main()IT0=1;设定INTO为边沿触发EX0=1;打开外部中断0EA=1;/全局中断开关打开while(1)switch(dis_num)case 0x81: num=0; break;case 0xcf: num=1; break;case 0x92: num=2; break;case 0x86: num=3; break;case 0xcc: num=4; break;case 0xa4: num=5; break;case 0xa0: num=6; b

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论