网站大量收购闲置独家精品文档,联系QQ:2885784924

基于51单片机控制红外通信.docxVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
红外通信原理 红外遥控有发送和接收两个组成部分。发送端采用单片机将待发送的二进制信号编码调制为一系列的脉冲串信号,通过红外发射管发射红外信号。红外接收完成对红外信号的接收、放大、检波、整形,并解调出遥控编码脉冲。为了减少干扰, 采用的是价格便宜性能可靠的一体化红外接收头(HS0038, 它接收红外信号频率为38kHz,周期约26μ s) 接收红外信号,它同时对信号进行放大、检波、整形得到 TTL 电平的编码信号,再送给单片机,经单片机解码并执行去控制相关对象。具体实现过程如下: (在这里特别强调:编码与解码是一对逆过程,不仅在原理上是一对逆过程,在码的发收过程也是互反的,即以前发射端原始信号是高电平,那接收头输出的就是低电平,反之亦然。因此为了保证解码过程简单方便,在编码时应该直接换算成其反码。) 1.红外发射部分: 下图为红外发射部分的电路拟图: 编码过程: (1) 二进制信号的调制 二进制信号的调制由单片机来完成,它把编码后的二进制信号调制成频率为38kHz的间断脉冲串(用定时器来完成),相当于用二进制信号的编码乘以频率为38kHz的脉冲信号得到的间断脉冲串,即是调制后用于红外发射二极管发送的信号。 (2)PPM编码 这种遥控编码具有以下特征: eq \o\ac(○,1)遥控编码脉冲由前导码、16 位地址码(8位地址码、8 位地址码的反码)和 16 位操作码(8 位操作码、8 位操作码的反码)组成。前导码:是一个遥控码的起始部分,由一个9ms的高电平 ( 起始码 ) 和一个4. 5ms的低电平 ( 结果码 )组成,作为接受数据的准备脉冲。 16位地址码:能区别不同的红外遥控设备,防止不同机种遥控码互相干扰。 16 位操作码:用来执行不同的操作。 eq \o\ac(○,2)采用脉宽调制的串行码,以脉宽为0.56ms、间隔0.56ms、周期为1.12ms的组合表示二进制的“0”;以脉宽为1.68ms、间隔0.56ms、周期为2.24ms的组合表示二进制的“1”。 (3)发送程序 #include AT89X51.h static bit OP;??????? //红外发射管的亮灭控制位 static unsigned int count;?????? //延时计数器 static unsigned int endcount; //终止延时计数 static unsigned char flag;????? //红外发送标志 sbit P3_4=P3^4; char iraddr1;? //十六位地址的第一个字节 char iraddr2;? //十六位地址的第二个字节 void SendIRdata(char p_irdata);//发送子函数 void delay(); void main(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;//地址反码 ? do{ ????? delay(); ????? SendIRdata(12); ? }while(1); } //定时器0中断处理 void timeint(void) interrupt 1 { ? TH0=0xFF; ? TL0=0xE6; //设定时值为38K 也就是每隔26us中断一次 ? count++; ? if (flag==1) ? {OP=~OP; }//如果是待发送的有效数据flag=1,就在此产生载波(亮灭交变) ? else ? {OP = 0; } ? P3_4 = OP; } void SendIRdata(char p_irdata) //发送数据子函数 { ? int i; ? char irdata=p_irdata; /***************************************************************/ ? //发送9ms的起始码,并是载波模式有效 ? endcount=223; ? flag=1; ? count=0; ? while(countendcount);//等待中断,控制亮灭交变的总时间为9

文档评论(0)

smashing + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档