单片机红外线遥控器解码程序.doc_第1页
单片机红外线遥控器解码程序.doc_第2页
单片机红外线遥控器解码程序.doc_第3页
单片机红外线遥控器解码程序.doc_第4页
单片机红外线遥控器解码程序.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

单片机红外线遥控器解码程序(编码芯片为upd6121g,ht622,7461)红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。1 红外遥控系统通用红外遥控系统由发射和接收两大部分组成,应用编/解码专用集成电路芯片来进行控制操作,如图1所示。发射部分包括键盘矩阵、编码调制、led红外发送器;接收部分包括光、电转换放大器、解调、解码电路。2 遥控发射器及其编码遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以运用比较广泛,解码比较容易的一类来加以说明,现以日本nec的upd6121g组成发射电路为例说明编码原理。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征:采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms的组合表示二进制的“1”,其波形如图2所示。上述“0”和“1”组成的32位二进制码经38khz的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射,如图3所示。upd6121g产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。该芯片的用户识别码固定为十六进制01h;后16位为8位操作码(功能码)及其反码。upd6121g最多额128种不同组合的编码。遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在4563ms之间,图4为发射波形图。当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms18ms),高8位地址码(9ms18ms),8位数据码(9ms18ms)和这8位数据的反码(9ms18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。代码格式(以接收代码为准,接收代码与发射代码反向) 位定义 单发代码格式 连发代码格式 注:代码宽度算法:16位地址码的最短宽度:1.1216=18ms 16位地址码的最长宽度:2.24ms16=36ms 易知8位数据代码及其8位反代码的宽度和不变:(1.12ms+2.24ms)8=27ms 32位代码的宽度为(18ms+27ms)(36ms+27ms) 1 解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。2 根据码的格式,应该等待9ms的起始码和4.5ms的结果码完成后才能读码。如果邮购我们开发的51单片机试验板和扩展元件的网友,可以获得如上图所示的红外遥控手柄,这种遥控器的编码格式符合上面的描述规律,而且价格低廉,有32个按键,按键外形比较统一,如果用于批量开发,可以把遥控器上贴膜换成你需要的字符,这为开发产品提供了便利。接收器及解码一体化红外线接收器是一种集红外线接收和放大于一体,不需要任何外接元件,就能完成从红外线接收到输出与ttl电平信号兼容的所有工作,而体积和普通的塑封三极管大小一样,它适合于各种红外线遥控和红外线数据传输。 org 0000h start:mov p0,#0ffhmov p1,#0ffhmov p2,#0ffhmov p3,#0ffhjnb p3.2,$;等待遥控信号出现mov r6,#10sb: acall ys1;调用882微秒延时子程序jb p3.2,start;延时882微秒后判断p3.2脚是否出现高电平如果有就退出解码程序djnz r6, sb;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序;以上完成对遥控信号的9000微秒的初始低电平信号的识别。jnb p3.2, $ ;等待高电平避开9毫秒低电平引导脉冲acall ys2 ;延时4.74毫秒避开4.5毫秒的结果码mov r1,#1ah ;设定1ah为起始ram区mov r2,#4 pp: mov r3,#8jjjj: jnb p3.2,$;等待地址码第一位的高电平信号lcall ys1;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态mov c,p3.2;将p3.2引脚此时的电平状态0或1存入c中jnc uuu;如果为0就跳转到uuujb p3.2,$;如果为1就等待高电平信号结束uuu: mov a,r1;将r1中地址的给arrc a;将c中的值0或1移入a中的最低位mov r1,a;将a中的数暂时存放在r1中djnz r3,jjjj;接收地址码的高8位inc r1;对r1中的值加1,换成下一个ramdjnz r2,pp ;接收完16位地址码和8位数据码和8位数据反码,存放在1ah/1bh/1ch/1dh的ram中;以下对代码是否正确和定义进行识别mov a,1ah;比较高8位地址码xrl a,#00000000b ;判断1ah的值是否等于00000000,相等的话a为0jnz exit;如果不相等说明解码失败退出解码程序mov a,1bh;比较低8位地址xrl a,#11111111b ;再判断高8位地址是否正确jnz exit;如果不相等说明解码失败退出解码程序mov a,1ch;比较数据码和数据反码是否正确?cpl axrl a,1dh ;将1ch的值取反后和1dh比较 不同则无效丢弃,核对数据是否准确jnz exit;如果不相等说明解码失败退出解码程序clr p2.7;解码成功发光二极管点亮指示!ajmp bijiao;判断在118毫秒内是否有连发码aa:mov r1,#25xx:acall ys2jnb p3.2,hh;跳转到判断连发代码是否正确的程序段djnz r1,xxexit: mov p0,#0ffh;对所有端口清零mov p1,#0ffhmov p2,#0ffhmov p3,#0ffhajmp start;连发码判断程序段-hh:mov r6,#4s: acall ys1;调用882微秒延时子程序jb p3.2,exit;延时882微秒后判断p3.2脚是否出现高电平如果有就退出解码程序djnz r6, s;重复4次,目的是确认连发码的低电平信号波形jnb p3.2, $ ;等待高电平ajmp aabijiao:mov a,1ch;按键数值判断执行cjne a,#00000101b,tt1 cpl p0.0tt1: cjne a,#00000100b,tt2cpl p0.1tt2: cjne a,#00010000b,t3cpl p0.2t3: cjne a,#01001101b,t5cpl p0.3t5: cjne a,#01001110b,t6cpl p0.4t6: cjne a,#01001100b,t7cpl p0.5t7: cjne a,#00001001b,t8cpl p0.6t8: cjne a,#00011101b,t9cpl p0.7t9: cjne a,#00011111b,t10cpl p2.6t10: cjne a,#00001101b,t11cpl p2.5t11: cjne a,#00011001b,t12cpl p2.4t12: cjne a,#00011011b,t13cpl p2.3t13: cjne a,#00010001b,t14cpl p2.2t14: cjne a,#00010101b,t15cpl p2.1t15: cjne a,#00010111b,t16cpl p2.0t16: cjne a,#00010010b,t17cpl p1.0t17: cjne a,#00010110b,t18cpl p1.1t18: cjne a,#01011110b,t19cpl p1.2t19: cjne a,#01011101b,t20cpl p1.3t20: cjne a,#01011100b,t21cpl p1.4t21: cjne a,#01001111b,t22cpl p1.5t22: cjne a,#00000001b,t23cpl p1.6t23: cjne a,#00000011b,t24cpl p1.7t24: cjne a,#00000000b,t25cpl p3.0t25: cjne a,#00010100b,t26cpl p3.1t26: cjne a,#00011110b,t27cpl p3.3t27: cjne a,#00011010b,t28cpl p3.4t28: cjne a,#00001111b,t29cpl p3.5t29: cjne a,#00001010b,t30cpl p3.6t30: cjne a,#00001110b,okcpl p3.7ok:ajmp aays1: mov r4,#20 ;延时子程序1,精确延时882微秒d1: mov r5,#20djnz r5,$djnz r4,d1 retys2: mov r4,#10 ;延时子程序2,精确延时4740微秒d2: mov r5,#235djnz r5,$djnz r4,d2 retend摘 要 本文介绍了一种利用51系列单片机实现对红外遥控信号的自学习及还原方法,本方法实现电路简单、可靠性高,可学习及还原多种红外遥控规程的信号。关键词 单片机 红外遥控信号 自学习1概述随着远程教育体系的不断发展和日趋完善,多媒体教学手段在各级各类学校都得到了广泛应用。近年来,我们在进行多媒体教学系统的开发和研制过程中,经常遇到多种用于教学中的红外遥控设备,如:数字投影机、dvd、vcd、录像机、电视机等,由于各种设备都自带遥控器,而且不同的设备所遵循的红外遥控规程也不尽相同,操纵这些设备得使用多种遥控器,给使用者带来了诸多不便。我们采用集中控制各设备的方式如图(1)所示解决了该问题。集中控制各设备的方法是首先对各设备的红外遥控信号进行识别并存储(自学习),然后在需要时进行还原。图(1)中由pc或集中控制器发送设备号及控制命令号至红外遥控信号自学习及还原电路,再由自学习及还原电路恢复对应的红外遥控信号,并发射出去控制指定的红外遥控设备动作。图(1)集中控制多种红外遥控设备示意图2红外遥控信号的自学习及还原21红外遥控信号编码、发射原理通常,红外遥控器是将遥控信号(二进制脉冲码)调制在38khz的载波上,经缓冲放大后送至红外发光二极管,转化为红外信号发射出去的。二进制脉冲码的形式有多种,其中最为常用的是pwm码(脉冲宽度调制码)和ppm码(脉冲位置调制码)。前者以宽脉冲表示1,窄脉冲表示0,如图(2)所示。后者脉冲宽度一样,但是码位的宽度不一样,码位宽的代表1,码位窄的代表0。如图(3)所示。 图(2)pwm码图(3)ppm码遥控编码脉冲信号(以ppm码为例)通常由引导码、系统码、系统反码、功能码、功能反码等信号组成,如图(4)所示。引导码也叫起始码,由宽度为9ms的高电平和宽度为4.5ms的低电平组成(不同的遥控系统在高低电平的宽度上有一定区别),用来标志遥控编码脉冲信号的开始。系统码也叫识别码,它用来指示遥控系统的种类,以区别其它遥控系统,防止各遥控系统的误动作。功能码也叫指令码,它代表了相应的控制功能,接收机中的微控制器可根据功能码的数值去完成各种功能操作。系统反码与功能反码分别是系统码与功能码的反码,反码的加入是为了能在接收端校对传输过程中是否产生差错。为了提高抗干扰性能和降低电源消耗,将上述的遥控编码脉冲对频率为38khz(周期为26.3us)的载波信号进行脉幅调制(pam),再经缓冲放大后送到红外发光管,将遥控信号发射出去。图(4) 遥控编码脉冲信号的组成22红外遥控信号自学习及还原的硬件实现根据遥控信号编码和发射过程,遥控信号的识别即解码过程应是去除38khz载波信号后识别出二进制脉冲码中的0和1。遥控信号识别、存储、还原的硬件电路如图(5)所示。由mcs51系列单片机 at89c51、一体化红外接收头、存储器、还原调制与红外发光管驱动电路组成.。一体化红外接收头采用siemens sfh 506-38,它负责红外遥控信号的解调。将调制在38khz上的红外脉冲信号解调并反向后再输入到at89c51的int0(p3.2)引脚,由单片机进行高电平与低电平宽度的测量。图中使用具有i2c总线接口的e2prom 芯片24c32作为存储器,其容量为4kb, 图(5) 红外遥控信号自学习及还原原理框图用来保存识别出来的遥控信号的高电平与低电平宽度数据。通常遥控信号的二进制脉冲码长为32位,每位由一个高电平与一个低电平组成,应保存的信号宽度数据为 64个,再加上引导码2个数据,共计66个数据,每个数据用一个字节来表示,一个遥控信号命令就需要66个字节来保存。考虑到不同的遥控系统有一定的区别,有些遥控信号命令长度较长,所以存储空间应适当留有余量。在实际应用中,可根据红外遥控设备的数量及每个设备的遥控命令数量等具体情况来决定 e2prom 芯片的容量和型号。遥控信号的还原和发射是通过p0口(如图中为p0.1)输出二进制脉冲码(高电平与低电平的维持时间为识别时保存的一组宽度数据)与38khz调制脉冲相与,即p0口输出高电平允许38khz调制脉冲通过,p0口输出低电平关断38khz调制脉冲。调制后的信号经驱动后通过红外发光管,发射红外遥控信号去控制红外遥控设备。图中led发光管用来指示红外遥控信号,同时用来指示自学习中的各状态。p2口连结一组按钮,按钮的数量与需要集中控制的红外遥控设备数量相同,用来控制单片机进入或退出自学习状态,按钮号即为设备号。单片机同时通过串行口连接上位机pc或集中控制器接收控制命令,上位机或集中控制器通过rs485总线与单片机通信,从而实现了红外遥控设备的远程控制。 23 软件设计单片机上电复位后,首先对其内部定时器、串行口进行初始化,并允许串行口中断。然后监测p2口,当进入自学习状态(p2口有一引脚输入为低电平并维持1s以上)时,采用定时器定时、软件计数的方法,测量int0引脚上输入脉冲的高、低电平的宽度。int0引脚平时为高电平,当接收到红外遥控信号时,由于一体化红外接收头的反向作用,int0引脚下跳至低电平,此为引导码。将测得的高低电平的宽度保存在存储器中,并将每次测得的低电平的宽度与引导码低电平宽度比较,若相等则表示一遥控命令码识别、存储(自学习)结束。再次监测p2口该引脚,若为低电平并维持1s以上,则退出自学习状态。否则,进一步自学习下一红外遥控命令码。 串行口中断服务程序主要是根据接收到的设备号及命令号查表得到一组事先存储的高、低电平宽度数据,然后在p0口还原出红外遥控信号去控制红外遥控设备按指定的命令动作,即红外遥控信号的还原。3结束语我们用上述红外遥控信号的自学习及还原方法,成功地实现了新科vcd、dvd、金正dvd、松下系列录像机以及多种型号数字投影机、彩色电视机遥控信号的自学习和还原,从而在多媒体远程教学系统中实现了可红外遥控设备的远程控制。请帮帮我 单片机红外发射和接收的问题来源:21ic作者:zhangyun71栏目:单片机请帮帮我 单片机红外发射和接收的问题我是单片机初学者,想作红外发送、接收,并用软件进行发射调制,但是容易死机,不知是怎么回事,部分代码如下,请指教:我还有一个问题:晶振频率为12m,一个机器中期为1us,红外发射频率为26us,即13us取反一次,在这种情况下,是否意味着中断程序必须在13us内执行完毕,如果中断程序超出13us会怎样,谢谢指教。org0000hljmpmainorg0003hretiorg000bhljmpst0org0013hretiorg001bhljmphworg0030hmain:movp0,#0ffhmovp1,#0ffhmovp2,#0ffhmovp3,#0ffhsetbit0setbit1setbet0setbet1setbeaclrex0clrex1 setbtr0setbtr1start0:ajmp start0st0:;t0中断,中断时间为50000us;一些工作retihw:t1中断,红外发送接收,中断时间为13us;clr et0clr et1clr tr1mov th1,#0ffhmov tl1,#0f4hsetb et1setb tr1djnz r4,st201movr4,#40djnz r5,st20101ajmp st205 st20101:cjne r5,#1,st201jbp3.2,st204 inc 3chst204:inc 3ehmov r3,3ehcjne r3,#2, st201movr3,3chcjne r3,#1,st207setb p1.2setb p2.7ajmp st208st207:clrp1.2clrp2.7st208:mov3ch,#0mov3eh,#0ajmp st201st205:mov r4,#40mov r3,3fhcjne r3,#0,st206mov 3fh,#1mov r5,#3ajmp st201st206:mov 3fh,#0mov r5,#254ajmp st201st201:mov r3,3fhcjne r3,#0,st202clr p3.5clr p3.4ajmp st203st202:cpl p3.5cpl p3.4st203:;setb et0 reti/*-cdle-a410_main.c电脑音源切换控制器用at89c251+cd4016切换控制,可控制四路以上的立体音源输入切换,一路立体声输出,有红外遥控(saa3010t电视遥控器,只处理四个音源)copyright 2003 all rights reserved.明浩 e-mail: -*/#include static unsigned char data cs;static unsigned char data ircode4,ircon,ircon2;void main(void)unsigned int de;void initcom(unsigned char baudrate);void comoutchar(unsigned char outdata);void cstoout(void);initcom(6); /设置波特率为9600 1-7波特率30019200ea = 1;/允许cpu中断es = 1;/开串口中断it0 = 1; /int0下降沿有效ex0 = 1; /开int0中断cs = 0; /设置cs为0不选任何的音源,如为1则选第1路cstoout();doif (p1_0 = 0) /取按键值cs = 1;p1 = 255; /p1口全为高电平,4-7通过反相为低不选任何音源,0-3为高用于cstoout();if (p1_1 = 0)cs = 2;p1 = 255;cstoout();if (p1_2 = 0)cs = 3;p1 = 255;cstoout();if (p1_3 = 0)cs = 4;p1 = 255;cstoout();for (de=0; de4000; de+);while(1);/串口初始化 晶振为11.0592m方式1 波特率300-57600void initcom(unsigned char baudrate)unsigned char thtl;switch (baudrate)case 1: thtl = 64; break; /波特率300case 2: thtl = 160; break; /600case 3: thtl = 208; break; /1200case 4: thtl = 232; break; /2400case 5: thtl = 244; break; /4800case 6: thtl = 250; break; /9600case 7: thtl = 253; break; /19200case 8: thtl = 255; break; /57600default: thtl = 208;scon = 0x50; /串口方式1,允许接收tmod = 0x21; /定时器1定时方式2定时器0方式1用在别处可以不用定时器0,tmod=0x20tcon = 0x40; /设定时器1开始计数th1 = thtl;tl1 = thtl;pcon = 0x80; /波特率加倍控制,smod位ri = 0;/清收发标志ti = 0;tr1 = 1; /启动定时器/向串口输出一个字符(非中断方式)void comoutchar(unsigned char outdata)sbuf = outdata; /输出字符while(!ti); /空语句判断字符是否发完ti = 0; /清ti/串口接收中断void cominint(void) interrupt 4 using 1if (ri) /判断是不收完字符switch(sbuf) case 0x61: cs = 1; break; /根据sbuf设置cs接收abcde调试方便case 0x62: cs = 2; break;case 0x63: cs = 3; break;case 0x64: cs = 4; break;case 0x65: cs = 0; break;p1 = 255; /p1口全为高电平,4-7通过反相为低不选任何音源,0-3为高用于读取按键ri = 0; /ri清零cstoout();/定时器0中断处理void timeint(void) interrupt 1 using 2 th0=0xfd; tl0=0x1e; /设定时值为800usif (ircon3) if (ircon28) /每中断一次读一次遥控接收头的状态,每二次为遥控编码中的一个位 ircon2+; ircodeircon=ircodeircon1; /每读一次放入变量中的二进制的一个位,每次左移一位 ircodeircon=ircodeircon | p3_2; /每八次填满一个字节,一个字节存放遥控编码4个位 else ircon+; /第填满一个字节,指向下一个变量 ircon2=0; /计数清零 else tr0 = 0; /关闭定时器et0 = 0; /定时器0中断关闭 if (ircode1 = 0x55) & (ircode2 = 0xab) /取遥控值,取变量中的2,3字节 /第一字节是引导码,第二、三字节是起始位、控制位和系统码cs = 1; p

温馨提示

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

评论

0/150

提交评论