单片机发射红外c语言程序,c单片机红外解码程序汇编版和c语言版

《c单片机红外解码程序汇编版和c语言版》由会员分享,可在线阅读,更多相关《c单片机红外解码程序汇编版和c语言版(21页珍藏版)》请在人人文库网上搜索。

1、纯软件解码 - 汇编版利用程序判电平和时间进行解码,缺点是浪费系统软件资源;优点是对系统硬件要求稍低ORG0000HT0ZDBIT20H.2XHBITP3.3; 红外接收头数据接口RSBITP2.3RWBITP2.4EBITP2.5BBBITP3.6ORG0000H;AJMPMAINORG000BH;T0 中断入口LJMPT0ZDCXORG0100H; 主程序首地址MAIN:LCALLCSHMOVDPTR,#TAB; 总查表SETBEA;T0 中断设定SETBET0MOVTMOD,#01HDDXH:; 信号接收前准备SETBP2.0;关信号指示灯MOVP0,#0FFHCLRTRO;关T0中断C。

2、LRT0ZD; 接收信号时间判断MOVR5,#4; 延时计数MOVTH0,#00HMOVTL0,#00H;= 解码主要过程 = 关键JBXH,$;等待电平变低,解码从这开始CLRP2.0;开信号指示灯,表示正在接收信号MOVP0,#8EHSETBTRO;开 TO 中断LCALLYS3MSJBXH,DDXH;干扰检测LCALLYS3MSJBXH,DDXH;干扰检测DD1:JBTOZD,DDXH; 是否超出接收允许时间JNBXH,DD1; 等待电平变高LCALLYS3MSJNBXHQDXH;干扰检测DD2:JBTOZD,DDXH; 是否超出接收允许时间JBXH,DD2; 等待电平变低JSSJ:;信。

3、号确认,开始接收数据MOVRO,#3OHZJ:; 接收一个字节数据MOVR2,#8WEI:;位数据,分辩0和1JBTOZD,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,。

4、#100;TSY: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:MOVR。

5、6,#255DJNZR6,$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,#10HDIVAB。

6、MOVCA,A+DPTRLCALLYJP_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。

7、,#1CH,BA5; 是否 5 号键按下CPLP1.4;点亮1号灯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:5-7 字型;= 液晶初始化 =MOVA,#00111000B;8 位数据,双行显示,LCALLYJP_XZL调用写液晶指令MOVA,#00001100B; 显示屏开启,光标出现在地址计数器位置,光标不闪烁LCALLYJP_XZL调用写液晶指令MOVA,#00。

8、000110B; 光标右移一格, AC 值加一,字符全部不动LCALLYJP_XZL调用写液晶指令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。

9、;h 的 ASCII 码LCALLYJP_XSJMOVA,#8AH;LCALLYJP_XZLMOVA,#69H;i 的 ASCII 码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_XSJ。

10、MOVA,#0C6H;LCALLYJP_XZLMOVA,#48H;H 的 ASCII 码LCALLYJP_XSJMOVA,#0CAH;LCALLYJP_XZLMOVA,#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_XZ。

11、L:LCALLCHECK_BUSY查询忙碌状态CLRECLRRSCLRRWSETBEMOVP0,A; 写指令CLRERET;= 写数据到液晶 =YJP_XSJ:LCALLCHECK_BUSY;查询忙碌状态CLRESETBRSCLRRWSETBEMOVP0,A; 写数据CLRERET;= 查询忙碌标志 =CHECK_BUSY:PUSHACCBUSY_LOOP:CLRESETBRWCLRRSSETBEMOVA,PO;读取状态JBp0.7,BUSY_LOOPPOPACCLCALLDELRETDEL:MOVR6,#5L1:MOVR7,#248DJNZR7,$DJNZR6,L1RETTAB:DB30H,。

12、31H,32H,33H,34H,35H,36H,37H,38H,39HDB41H,42H,43H,44H,45H,46HEND中断加定时器 -C 语言版优点:完全是状态解码,极少的占用系统软件资源(CPU),随时都可以解码,而不管系统此时运行到何处。缺点:占用系统两个硬件资源,一个外部中断和一个定时器。/*六哥红外解码程序*#includeSTC15Fxxxx.H*/ 用户配置区:#definexi_tong_pl/ 晶振频率设定如你的系统晶振频率是 12MHz ,则写#definejan_zhiP1/ 解码输出二进制端口,解码成功则从该端口输出键值的二进制sbitzhi_s=P5A5;/解码。

13、成功标志,解码成功一次该端口取反一次/ 外部中断#definezd_rkdzinterrupt0/ 中断入口设置#definezd_cffsIT0/ 中断触发方式设置#definezd_dkEX0/ 中断打开设置/#definestc_dsqszAUXR&=0x7F;/ 定时器时钟 12T 模式,不需要可在 AUXR前加/* 本程序使用外部中断加定时器来实现红外解码,占用系统软件资* 源极少,硬件方面占用了一个外部中断,定时器中断还可以进行* 一些简单的运用,软件部分可以做很多的动作,就看你发挥了!*/#defineshi_jian_ 定时器设置,请勿更改unsignedcharhwyhmh,。

14、hwyhml,hwjz,hwsj,hwjmws;/ 全局变量bithwjmok,yxjm;/全局变量,红外解码 0K,允许解码voidmain(void)EA=1;/ 总中断打开zd_cffs=1;/ 外部中断 _边沿触发方式zd_dk=1;/ 外部中断 _打开stc_dsqsz/ 设置定时器模式TMOD&=0xF0;TMOD|=0x01; / 设置定时器模式 while(1)if(hwjmok)hwjmok=0; jan_zhi=hwjz; zhi_s=zhi_s;/*定时器 0 中断子程序 */ voidT0ZDCX(void)interrupt1using3 yxjm=0;/ 未收到重复。

15、码清除解码允许标志hwjz=0;TR0=0;/ 关闭定时器/* 中断方式红外接收程序* voidZDhwjsCX(void)zd_rkdzusing3unsignedinta=TH0*256+TL0;TL0=0;TH0=0;分支 2. 判引导码 13-14msif(ashi_jian_*13000&ashi_jian_*11000&ashi_jian_*2000&a=1;hwsj|=0x80;elseif(ashi_jian_*1000&a=1;elsehwjmws=32;TR0=0;/ 关闭 T0/ switch(hwjmws) case24: hwyhmh=hwsj;hwsj=0;brea。

16、k;case16:hwyhml=hwsj; hwsj=0; break;case8:hwjz=hwsj; hwsj=0; break;case0:if(hwjz=hwsj) hwjmok=1;TL0=shi_jian_*12000%256;TH0=shi_jian_*12000/256;break;default:;else;中断加定时器 - 汇编版 * *六哥红外解码程序* *;* 本程序使用外部中断加定时器来实现红外解码,占用系统软件资 ;* 源极少,硬件方面占用了一个外部中断,定时器中断还可以进行 ;* 一些简单的运用,软件部分可以做很多的动作,就看你发挥了! ;*/ hwyhmhdat。

17、a7fhhwyhmldata7ehhwjzdata7dhhwsjdata7chDSQ_ZDCSdata7bhZDCSDATA7AHhwjmokbit20h.0yxjmbit20h.1hwjmweibit20h.2hwjmkgBIT20H.3HWJSTBITP3.3ORG0000HAJMPMAINORG0013HLJMPWBZD1ORG000BHLJMPDSQ_0ORG0050HMAIN:SETBEASETBIT1SETBEX1SETBET0MOVTMOD,#01HCLRhwjmkgCLRyxjmCLRhwjmokHHHH:JBhwjmok,jm_cg;JBC :为 1 跳转并把该位清零,为 0。

18、则顺序执行;此部分可写其他程序,不会影响接收LJMPHHHHjm_cg:; 这里写解码成功后的动作CLRhwjmokMOVP1,hwjzLJMPHHHHWBZD1:INCZDCSMOVA,ZDCSJNByxjm,ZD0_5;CLRTR0MOVTH0,#0FAH; 设置定时 1400usMOVTL0,#70H;SETBTRO;开定时器XCHA,hwsjMOVC,hwjmweiCLRhwjmweiRRCAXCHA,hwsjCJNEA,#10,ZD0_0; 取出用户码高位MOVhwyhmh,hwsjAJMPZD0_4ZD0_0:CJNEA,#18,ZD0_1; 取出用户码低位MOVhwyhml,hw。

19、sjAJMPZD0_4ZD0_1:CJNEA,#26,ZD0_2; 取出键值MOVhwjz,hwsjAJMPZD0_4ZD0_2:CJNEA,#34,ZD0_4; 取出键值反码MOVA,hwsjCPLACJNEA,hwjz,ZD0_3; 键值判断SETBhwjmok; 解码正确,置位标志位ZD0_3:; 解码不成功CLRTRO;关闭定时器CLRhwjmkg; 关闭解码开关CLRyxjm; 清除允许解码标志MOVZDCS,#0; 中断次数清零MOVDSQ_ZDCS,#0; 定时器中断次数清零ZD0_4:RETI; 中断返回ZD0_5:; 开始接收引导码CJNEA,#1,ZD0_3;MOVTH0,。

20、#0F2H; 设置定时 3.5msMOVTL0,#54H;SETBhwjmkg; 开红外解码开关AJMPZD0_4DSQ_0:JNBhwjmkg,T0FH;JNByxjm,DSQ_0_0;SETBhwjmweiCLRTR0T0FH:RETI;= 引导码判断程序 =DSQ_0_0:MOVTH0,#0F2H; 设置定时 3.5msMOVTL0,#54H;INCDSQ_ZDCS;对TO中断计数MOVA,DSQ_ZDCSCJNEA,#1,DSQ_O_1JBHWJST,JMCW; 判低电平, 9ms 引导码AJMPTOFHDSQ_O_1:CJNEA,#2,DSQ_O_2JBHWJST,JMCW; 判低电平, 9ms 引导码AJMPTOFHDSQ_O_2:JNBHWJST,JMCW; 判高电平, 4.5ms 引导码SETByxjm; 引导码接收成功,允许解码CLRhwjmwei;CLRTROAJMPTOFHJMCW:; 引导码接收错误,CLRTRO;关闭定时器CLRhwjmkg; 关闭解码开关CLRyxjm; 清除允许解码标志MOVZDCS,#0; 中断次数清零MOVDSQ_ZDCS,#0; 定时器中断次数清零AJMPT0FHEND定时器捕获中断法 -c 语言版。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值