遥控技术一体化红外线接收器是一种集接收和放大于一体不需要任何外_第1页
遥控技术一体化红外线接收器是一种集接收和放大于一体不需要任何外_第2页
遥控技术一体化红外线接收器是一种集接收和放大于一体不需要任何外_第3页
遥控技术一体化红外线接收器是一种集接收和放大于一体不需要任何外_第4页
遥控技术一体化红外线接收器是一种集接收和放大于一体不需要任何外_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

元件,就能完成从红外线接收到输出与TTL电平信号兼容的所有工作,而体积和ORG0000HSTART:MOVP0,#0FFHMOVP1,#0FFHMOVP2,#0FFHMOVJNBP3.2,$;等待信号出MOVSB:ACALLYS1;882JBP3.2,START;882P3.2DJNZR6,SB;108820;以上完成对信号的9000微秒的初始低电平信号的识别JNBP3.2,$9ACALLYS24.744.5MOVR1,#1AH1AHRAMMOVPP:MOVJJJJ:JNBP3.2,$;LCALLYS1;882MOVC,P3.2;P3.201CJNCUUU;0JBP3.2,$;1UUU:MOVA,@R1;R1RRCA;C01AMOV@R1,A;A中的数暂时存放在R1DJNZR3,JJJJ;8INCR1;R11,DJNZR2,PP16881AH/1BH/1CH/1DHRAMMOVA,1AH;8XRLA,#00000000B1AH00000000,A0JNZEXIT;如果不相等说明失败退出程序MOVA,1BH;8XRLA,#11111111B8JNZEXIT;如果不相等说明失败退出程序MOVA,1CH;比较数据码和数据反码是否正确?CPLXRLA,1DH1CH1DHJNZEXIT;如果不相等说明失败退出程CLRP2.7;成功发光二极管点亮指示!AJMPBIJIAO118AA:MOVR1,#25XX:ACALLYS2JNBP3.2,HH;跳转到判断连发代码是否正确的程序段DJNZR1,XXEXIT:MOVP0,#0FFH;对所有端口清零MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHAJMPSTARTHH:MOVR6,#4S:ACALLYS1;882DJNZR6,S;4JNBP3.2,$AJMPAABIJIAO:MOVA,1CH;按键数值判断执行CJNEA,#00000101B,TT1CPLTT1:CJNEA,#00000100B,TT2CPLP0.1TT2:CJNEA,#00010000B,T3CPLP0.2T3:CJNEA,#01001101B,T5CPLP0.3T5:CJNEA,#01001110B,T6CPLP0.4T6:CJNEA,#01001100B,T7CPLP0.5T7:CJNEA,#00001001B,T8CPLP0.6T8:CJNEA,#00011101B,T9CPLP0.7T9:CJNEA,#00011111B,T10CPLP2.6T10:CJNEA,#00001101B,T11CPLP2.5T11:CJNEA,#00011001B,T12CPLP2.4T12:CJNEA,#00011011B,T13CPLP2.3T13:CJNEA,#00010001B,T14CPLP2.2T14:CJNEA,#00010101B,T15CPLP2.1T15:CJNEA,#00010111B,T16CPLP2.0T16:CJNEA,#00010010B,T17CPLP1.0T17:CJNEA,#00010110B,T18CPLP1.1T18:CJNEA,#01011110B,T19CPLP1.2T19:CJNEA,#01011101B,T20CPLP1.3T20:CJNEA,#01011100B,T21CPLP1.4T21:CJNEA,#01001111B,T22CPLP1.5T22:CJNEA,#00000001B,T23CPLP1.6T23:CJNEA,#00000011B,T24CPLP1.7T24:CJNEA,#00000000B,T25CPLP3.0T25:CJNEA,#00010100B,T26CPLP3.1T26:CJNEA,#00011110B,T27CPLP3.3T27:CJNEA,#00011010B,T28CPLP3.4T28:CJNEA,#00001111B,T29CPLP3.5T29:CJNEA,#00001010B,T30CPLP3.6T30:CJNEA,#00001110B,OKCPLP3.7OK:AJMPYS1:MOVR4,#201,882D1:MOVR5,#20DJNZR5,$DJNZR4,D1YS2:MOVR4,#102,4740D2:MOVR5,#235DJNZR5,$DJNZR4,D2SC6122红外线程序(kinggate于2007-4-292此程序非延时红外码,所以占用资源少0?1?,0接收完32位码后,遇到重复码则不在进入0或1的判断,避免第二次按键按键出SC6122PDF形,所以,处理时为:9MS,4.5MS0\1#include<reg51.h>#defineucharunsignedchar#defineuintunsignedint#defineulongunsignedlongexternshow(ucharvolatileulong //32volatileuint //16volatileuinttime_us=0x0000; volatileuchartimeH,timeL; //保存TH1TL的值uchar 8ucharHcustomcode=0x00; //高8uchard ucharRd //8位键数据反sbit bit //指示当处理完了32位码后,就有了新的bit //为1时数据正void{TMOD=0x11;//定时器0,工作方式1; TCON=0x01;//外中断0下降沿触发,(包括TR1=0,TR0=0) //初始化定时器0,定时50ms //开放T0中断 //开放T1中断 //开放INT0} voidIR_ISR()interrupt0using1//中断处理函{staticuchartime_us=(unsignedint)timeH;if(time_us>13300&&time_us<13700) cn0,IRcode{if(time_us>1000&&time_us<1300)elseif(time_us>2000&&time_us<2450)}elseif(time_us>11000&&time_us<11500){IRcode=IRcode;};码if(cn==34) 32} voidTimer0_ISR()interrupt1using 0{}voidTimer1_ISR()interrupt3using 1{} void{{ //如果有新的码就{ //取低8位用户码 8 Rd //取数据码的反Rcode=0;}//校验用户码,反码elseNewIRcode=0;} }}ORG0000HMOVP1,#0FFHMOVP2,#0FFHMOVJNBP3.2,$;等待信号出MOVSB:ACALLYS1;调用882微秒延时子程JBP3.2,START;延时882微秒后判断P3.2脚是否出现高电平如果有就退出程序DJNZR6,SB;重复10的是检测在8820微秒内如果出现高电平就退出程序;以上完成对信号的9000微秒的初始低电平信号的识别JNBP3.2,$等待高电平避开9毫秒低电平引导脉冲ACALLYS2;延时4.74毫秒避开4.5毫秒的结果码MOVR1,#1AH;设定1AH为起始RAM区MOVPP:MOVJJJJ:JNBP3.2,$;等待地址码第一位的高电平信LCALLYS1;高电平开始后用882微秒的时间尺去判断信号此时的高MOVC,P3.2;P3.2引脚此时的01存入CJNCUUU;如果为0就跳转到JBP3.2,$;如果为1就等待高电平信号结UUU:MOVA,@R1;R1中地址的给RRCA;C中的值01移入A中的最低位MOV@R1,A;A中的数暂时存放在R1中DJNZR3,JJJJ;接收地址码的高8位INCR1;R1中的值加1,换成下一个DJNZR2,PP;接收完16位地址码和8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DHRAM中MOVA,1AH;比较高8位地址码XRLA,#00000000B;判断1AH的值是否等于00000000,相等的话JNZEXIT;如果不相等说明失败退出程MOVA,1BH;比较低8位地XRLA,#11111111B;再判断高8位地址是否正确JNZEXIT;如果不相等说明失败退出程序MOVA,1CH;比较数据码和数据反码是否正确?CPLXRLA,1DH1CH的值取反后和1DH比较同则无JNZEXIT;如果不相等说明失败退出程CLRP2.7;成功发光二极管点亮指示!AJMPBIJIAO;判断在118毫秒内是否有连AA:MOVR1,#25XX:ACALLYS2JNBP3.2,HH;跳转到判断连发代码是否正确的程序DJNZEXITMOVP0,#0FFH;对所有端口清零MOVP1,#0FFHMOVP2,#0FFHMOVP3,#0FFHAJMPSTARTHH:MOVR6,#4S:ACALLYS1;调用882微秒延时子程JBP3.2,EXIT;延时882微秒后P3.2脚是否出现高电平如果有就退出程序DJNZR6,S;重复4次,目的是确认连发码的低电平信号波JNBP3.2,$等待高电AJMPCJNEA,#00000101B,TT1CPLTT1:CJNEA,#00000100B,TT2CPLP0.1TT2:CJNEA,#00010000B,T3CPLP0.2T3:CJNEA,#01001101B,T5CPLP0.3CPLP0.4T6:CJNEA,#01001100B,T7CPLP0.5T7:CJNEA,#00001001B,T8CPLP0.6CPLP0.7CPLP2.6T10:CJNECPLCPLCPLP2.4CPLP2.3T13:CJNEA,#00010001B,T14CPLP2.2T14:CJNEA,#00010101B,T15CPLP2.1CPLP2.0T16:CJNEA,#00010010B,T17CPLP1.0T17:CJNEA,#00010110B,T18CPLP1.1CPLP1.2CPLP1.3CPLP1.4T21:CJNECPLCPLT22:CJNEA,#00000001B,T23CPLP1.6T23:CJNEA,#00000011B,T24CPLP1.7T24:CJNEA,#00000000B,T25CPLP3.0T25:CJNEA,#00010100B,T26CPLP3.1CPLP3.3T27:CJNEA,#00011010B,T28CPLP3.4CPLP3.5T29:CJNEA,#00001010B,T30CPLP3.6CPLP3.7OK:AJMPYS1:MOVR4,#20延时子程序1,精确延时882微D1:MOVDJNZR5,$DJNZR4,D1YS2:MOVR4,#10延时子程序2,精确延时4740微D2:MOVR5,#235DJNZR5,$DJNZR4,D2红外线一开始发送一段13.5ms的引导码,引导码由9ms的高电平4.5ms的低电平组成,跟着引导码是系统码,系统反码,按键码,按键反码,如果按着键不放,则则发送一段重复码,重复码由9ms2.25ms给大家不得用于商业目的如需用到本程序到商业上请大部分的编码! 0x03//应答信号,在接收数据后发送ACK信号表也位请求信号的应答 P1_7 unsignedcharxdata*buf1;//接受数据缓冲unsignedintbuf1_length;//接收到的数据实际长度unsignedcharxdata*buf2;//发送数据缓冲unsignedintbuf2_length;//要发送的数据实际长度bitbuf1_flag; //接收标志,1表示接受到一个数据帧,0表示没有接帧为bitbuf2_flag; //发送标志,1表示需要发送或没发送完毕,0表示没发送完unsignedcharstate1,state2; //用来标志接收字符的状态,state1用收状态,state2用来表示发送unsignedchardata*ir;unsignedchara[2];unsignedintb;unsignedchardata*p1[2];unsignedintdata*p2[2];unsignedcharxdata //红外缓冲的指unsignedintxdata //unsignedchar //unsignedint//unsignedchardata//unsignedintdata//unsignedcharxdata//unsignedintxdata //地址指 unsignedchara[2];unsignedintb;unsignedchara[2];unsignedintb;unsignedchara[4];unsignedintb[2];unsignedlongc;unsignedchara[4];unsignedintb[2];unsignedlongc;unsignedchardata*p1[4];unsignedintdata*p2[4];unsignedcharxdata*p3[2];unsignedintxdata*p4[2];unsignedcharbitir_flag; //红外接收标志,0为缓冲区空,1为接收成功,2为缓voidsub(void);voiddelay(void);voidie_0(void);voidtf_0(void);voidie_1(void);voidtf_1(void);voidtf_2(void);voidread_ir(void);voidir_jiema(void);voidir_init(void);voidir_exit(void);voidstore_ir(void);voidread_key(void);voidreset_iic(void);unsignedcharread_byte_ack_iic(void);unsignedcharread_byte_nack_iic(void);bitwrite_byte_iic(unsignedchara);voidsend_ack_iic(void);voidsend_nack_iic(void);bitreceive_ack_iic(void);voidstart_iic(void);voidvoidwrite_key_data(unsignedchara);unsignedintread_key_data(unsignedchara);voidie0(void) interrupt0{ie_0();}voidtf0(void) interrupt1{tf_0();}void interrupt2{ie_1();}void interruptvoidtf2(void) interrupt5{ 办法 //中iT2 //判断是否是溢出还是电平变化产生的中断T2=0; //如果是溢出产生的中断则清除溢出位,重新开放中断退出goto} //清除电平变化产生的中 TL0=0;//将计数器0重新置为 //查询等待EXF2变为1if(TF0)gotoexit; //EXF2清 //判断是否是长低电平脉冲过来 goto //返回继续} //是低电平脉冲,则进行处 if(ir>=0xda){ //判断是否溢出缓冲,如果溢出则失败退}goto //返回继续} //ir_fla

温馨提示

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

评论

0/150

提交评论