1、c51单片机红外解码程序汇总版和c语言版纯软件解码-汇编版利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低ORG0000HT0ZDBIT20H.2XHBITP3.3;红外接收头数据接口RSBITP2.3RWBITP2.4EBITP2.5BBBITP3.6ORG0000H;AJMPMAINORG000BH;T0中断入口LJMPT0ZDCXORG0100H;主程序首地址MAIN:LCALLCSHMOVDPTR,#TAB;总查表SETBEA;T0中断设定SETBET0MOVTMOD,#01HDDXH:;信号接收前准备SETBP2.0;关信号指示灯MOVP0,#0FFHC
2、LRTR0;关T0中断CLRT0ZD;接收信号时间判断MOVR5,#4;延时计数MOVTH0,#00HMOVTL0,#00H;=解码主要过程=关键=JBXH,$;等待电平变低,解码从这开始CLRP2.0;开信号指示灯,表示正在接收信号MOVP0,#8EHSETBTR0;开T0中断LCALLYS3MSJBXH,DDXH;干扰检测LCALLYS3MSJBXH,DDXH;干扰检测DD1:JBT0ZD,DDXH;是否超出接收允许时间JNBXH,DD1;等待电平变高LCALLYS3MSJNBXH,DDXH;干扰检测DD2:JBT0ZD,DDXH;是否超出接收允许时间JBXH,DD2;等待电平变低JSSJ
3、:;信号确认,开始接收数据MOVR0,#30HZJ:;接收一个字节数据MOVR2,#8WEI:;位数据,分辩0和1JBT0ZD,DDXH;是否超出接收允许时间JNBXH,WEI;等待电平变高LCALLYS845MOVC,XH;取位数据RRCADD3:JBT0ZD,DDXH;是否超出接收允许时间JBXH,DD3;等待电平变低,为1的高电平提供过度DJNZR2,WEI;8位数据是否接收完MOVR0,AINCR0CJNER0,#34H,ZJ;四字节数据是否接收完MOVA,33HCPLACJNEA,32H,DDXH;键值确认,解码MOVR4,A;=这里已经取出键值,存在R4中=MOVR7,#100;T
4、SY:MOVR6,#255DJNZR6,$CPLBBDJNZR7,TSYMOVA,#0CDH;键值高位输出LCALLYJP_XZLMOVA,R4MOVB,#10HDIVABMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0CEH;键值低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJ;LCALLDYBF;调用灯控制子程序LJMPDDXH;返还等待下一次信号YS845:;延时845微秒MOVR7,#255DJNZR7,$MOVR7,#165DJNZR7,$RETYS3MS:;延时3msMOVR7,#8DDD:MOVR6,#255DJNZR6,
5、$DJNZR7,DDDRETT0ZDCX:;T0中断程序MOVTL0,#00HMOVTH0,#00HDJNZR5,T0FHSETBT0ZDT0FH:RETI;=以下是多余部分=DYBF:MOVA,#0C0H;用号码前高位输出LCALLYJP_XZLMOVA,30HMOVB,#10HDIVABMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0C1H;用户码前低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJMOVA,#0C4H;用户码后高位输出LCALLYJP_XZLMOVA,31HMOVB,#10HDIVABMOVCA,A+DPTRLCAL
6、LYJP_XSJMOVA,#0C5H;用户码后低位输出LCALLYJP_XZLMOVA,BMOVCA,A+DPTRLCALLYJP_XSJ;=此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例MOVA,R4CJNEA,#0CH,BA1;是否1号键按下CPLP1.0;点亮1号灯BA1:CJNEA,#18H,BA2;是否2号键按下CPLP1.1;点亮1号灯BA2:CJNEA,#5EH,BA3;是否3号键按下CPLP1.2;点亮1号灯BA3:CJNEA,#08H,BA4;是否4号键按下CPLP1.3;点亮1号灯BA4:CJNEA,#1CH,BA5;是否5号键按下CPLP1.4;点亮1号灯
7、BA5:CJNEA,#5AH,BA6;是否6号键按下CPLP1.5;点亮1号灯BA6:CJNEA,#42H,BA7;是否7号键按下CPLP1.6;点亮1号灯BA7:CJNEA,#52H,BAB;是否8号键按下CPLP1.7;点亮1号灯BAB:RETCSH:;=液晶初始化=MOVA,#00111000B;8位数据,双行显示,5-7字型LCALLYJP_XZL;调用写液晶指令MOVA,#00001100B;显示屏开启,光标出现在地址计数器位置,光标不闪烁LCALLYJP_XZL;调用写液晶指令MOVA,#00000110B;光标右移一格,AC值加一,字符全部不动LCALLYJP_XZL;调用写液晶
8、指令MOVA,#81H;LCALLYJP_XZLMOVA,#4CH;L的ASCII码LCALLYJP_XSJMOVA,#83H;LCALLYJP_XZLMOVA,#47H;G的ASCII码LCALLYJP_XSJMOVA,#85H;LCALLYJP_XZLMOVA,#58H;X的ASCII码LCALLYJP_XSJMOVA,#88H;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#89H;LCALLYJP_XZLMOVA,#68H;h的ASCII码LCALLYJP_XSJMOVA,#8AH;LCALLYJP_XZLMOVA,#69H;i的ASCI
9、I码LCALLYJP_XSJMOVA,#8CH;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#8DH;LCALLYJP_XZLMOVA,#61H;a的ASCII码LCALLYJP_XSJMOVA,#8EH;LCALLYJP_XZLMOVA,#6FH;o的ASCII码LCALLYJP_XSJMOVA,#0C2H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0C6H;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJMOVA,#0CAH;LCALLYJP_XZLM
10、OVA,#4AH;J的ASCII码LCALLYJP_XSJMOVA,#0CBH;LCALLYJP_XZLMOVA,#5AH;Z的ASCII码LCALLYJP_XSJMOVA,#0CCH;LCALLYJP_XZLMOVA,#3AH;:的ASCII码LCALLYJP_XSJMOVA,#0CFH;LCALLYJP_XZLMOVA,#48H;H的ASCII码LCALLYJP_XSJRET;=写指令到液晶=YJP_XZL:LCALLCHECK_BUSY;查询忙碌状态CLRECLRRSCLRRWSETBEMOVP0,A;写指令CLRERET;=写数据到液晶=YJP_XSJ:LCALLCHECK_BUSY;
11、查询忙碌状态CLRESETBRSCLRRWSETBEMOVP0,A;写数据CLRERET;=查询忙碌标志=CHECK_BUSY:PUSHACCBUSY_LOOP:CLRESETBRWCLRRSSETBEMOVA,P0;读取状态JBp0.7,BUSY_LOOPPOPACCLCALLDELRETDEL:MOVR6,#5L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTAB:DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46HEND中断加定时器-C语言版优点:完全是状态解码,极少的占用系统软件资源(CP
12、U),随时都可以解码,而不管系统此时运行到何处。缺点:占用系统两个硬件资源,一个外部中断和一个定时器。/*六哥红外解码程序*/#includeSTC15Fxxxx.H/*/用户配置区:#definexi_tong_pl晶振频率设定如你的系统晶振频率是12MHz,则写#definejan_zhiP1/解码输出二进制端口,解码成功则从该端口输出键值的二进制sbitzhi_s=P55;/解码成功标志,解码成功一次该端口取反一次/外部中断#definezd_rkdzinterrupt0/中断入口设置#definezd_cffsIT0/中断触发方式设置#definezd_dkEX0/中断打开设置/#de
13、finestc_dsqszAUXR&=0x7F;/定时器时钟12T模式,不需要可在AUXR.前加/*/*本程序使用外部中断加定时器来实现红外解码,占用系统软件资*源极少,硬件方面占用了一个外部中断,定时器中断还可以进行*一些简单的运用,软件部分可以做很多的动作,就看你发挥了!*/#defineshi_jian定时器设置,请勿更改unsignedcharhwyhmh,hwyhml,hwjz,hwsj,hwjmws;/全局变量bithwjmok,yxjm;/全局变量,红外解码OK,允许解码voidmain(void)EA=1;/总中断打开zd_cffs=1;/外部中断_边沿触发方式zd_dk=1;
14、/外部中断_打开ET0=1;/定时器中断打开stc_dsqszTMOD&=0xF0; /设置定时器模式TMOD|=0x01; /设置定时器模式while(1)if(hwjmok)hwjmok=0;jan_zhi=hwjz;zhi_s=zhi_s;/*-定时器0中断子程序-*/voidT0ZDCX(void)interrupt1using3yxjm=0;/未收到重复码清除解码允许标志hwjz=0;TR0=0;/关闭定时器/*中断方式红外接收程序*/voidZDhwjsCX(void)zd_rkdzusing3unsignedinta=TH0*256+TL0;TL0=0;TH0=0;TR0=1;/
15、开启T0if(ashi_jian_*13000&ashi_jian_*11000&ashi_jian_*2000&a=1;hwsj|=0x80;elseif(ashi_jian_*1000&a=1;elsehwjmws=32;yxjm=0;/清除允许解码标志TR0=0;/关闭T0/switch(hwjmws)case24:hwyhmh=hwsj;hwsj=0;break;case16:hwyhml=hwsj;hwsj=0;break;case8:hwjz=hwsj;hwsj=0;break;case0:if(hwjz=hwsj)hwjmok=1;TL0=shi_jian_*12000%256;
16、TH0=shi_jian_*12000/256;break;default:;else;中断加定时器-汇编版;*;*六哥红外解码程序*;*/;*;*本程序使用外部中断加定时器来实现红外解码,占用系统软件资*;*源极少,硬件方面占用了一个外部中断,定时器中断还可以进行*;*一些简单的运用,软件部分可以做很多的动作,就看你发挥了!*;*/hwyhmhdata7fhhwyhmldata7ehhwjzdata7dhhwsjdata7chDSQ_ZDCSdata7bhZDCSDATA7AHhwjmokbit20h.0yxjmbit20h.1hwjmweibit20h.2hwjmkgBIT20H.3HWJ
17、STBITP3.3ORG0000HAJMPMAINORG0013HLJMPWBZD1ORG000BHLJMPDSQ_0ORG0050HMAIN:SETBEASETBIT1SETBEX1SETBET0MOVTMOD,#01HCLRhwjmkgCLRyxjmCLRhwjmokHHHH:JBhwjmok,jm_cg;JBC:为1跳转并把该位清零,为0则顺序执行;此部分可写其他程序,不会影响接收LJMPHHHHjm_cg:;这里写解码成功后的动作CLRhwjmokMOVP1,hwjzLJMPHHHH;=WBZD1:INCZDCSMOVA,ZDCSJNByxjm,ZD0_5;CLRTR0MOVTH0,#
18、0FAH;设置定时1400usMOVTL0,#70H;SETBTR0;开定时器XCHA,hwsjMOVC,hwjmweiCLRhwjmweiRRCAXCHA,hwsjCJNEA,#10,ZD0_0;取出用户码高位MOVhwyhmh,hwsjAJMPZD0_4ZD0_0:CJNEA,#18,ZD0_1;取出用户码低位MOVhwyhml,hwsjAJMPZD0_4ZD0_1:CJNEA,#26,ZD0_2;取出键值MOVhwjz,hwsjAJMPZD0_4ZD0_2:CJNEA,#34,ZD0_4;取出键值反码MOVA,hwsjCPLACJNEA,hwjz,ZD0_3;键值判断SETBhwjmok
19、;解码正确,置位标志位ZD0_3:;解码不成功CLRTR0;关闭定时器CLRhwjmkg;关闭解码开关CLRyxjm;清除允许解码标志MOVZDCS,#0;中断次数清零MOVDSQ_ZDCS,#0;定时器中断次数清零ZD0_4:RETI;中断返回ZD0_5:;开始接收引导码CJNEA,#1,ZD0_3;MOVTH0,#0F2H;设置定时3.5msMOVTL0,#54H;SETBTR0;开定时器SETBhwjmkg;开红外解码开关AJMPZD0_4DSQ_0:JNBhwjmkg,T0FH;JNByxjm,DSQ_0_0;SETBhwjmweiCLRTR0T0FH:RETI;=引导码判断程序=DS
20、Q_0_0:MOVTH0,#0F2H;设置定时3.5msMOVTL0,#54H;INCDSQ_ZDCS;对T0中断计数MOVA,DSQ_ZDCSCJNEA,#1,DSQ_0_1JBHWJST,JMCW;判低电平,9ms引导码AJMPT0FHDSQ_0_1:CJNEA,#2,DSQ_0_2JBHWJST,JMCW;判低电平,9ms引导码AJMPT0FHDSQ_0_2:JNBHWJST,JMCW;判高电平,4.5ms引导码SETByxjm;引导码接收成功,允许解码CLRhwjmwei;CLRTR0AJMPT0FHJMCW:;引导码接收错误,CLRTR0;关闭定时器CLRhwjmkg;关闭解码开关CLRyxjm;清除允许解码标志MOVZDCS,#0;中断次数清零MOVDSQ_ZDCS,#0;定时器中断次数清零AJMPT0FHEND定时器捕获中断法-c语言版
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1