c51单片机红外解码程序汇编版和c语言版Word格式.docx

上传人:b****1 文档编号:5761318 上传时间:2023-05-05 格式:DOCX 页数:22 大小:19.12KB
下载 相关 举报
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第1页
第1页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第2页
第2页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第3页
第3页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第4页
第4页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第5页
第5页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第6页
第6页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第7页
第7页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第8页
第8页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第9页
第9页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第10页
第10页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第11页
第11页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第12页
第12页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第13页
第13页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第14页
第14页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第15页
第15页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第16页
第16页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第17页
第17页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第18页
第18页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第19页
第19页 / 共22页
c51单片机红外解码程序汇编版和c语言版Word格式.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c51单片机红外解码程序汇编版和c语言版Word格式.docx

《c51单片机红外解码程序汇编版和c语言版Word格式.docx》由会员分享,可在线阅读,更多相关《c51单片机红外解码程序汇编版和c语言版Word格式.docx(22页珍藏版)》请在冰点文库上搜索。

c51单片机红外解码程序汇编版和c语言版Word格式.docx

LCALLYS3MS

JBXH,DDXH;

干扰检测

DD1:

JBT0ZD,DDXH;

是否超出接收允许时间

 

JNBXH,DD1;

等待电平变高

JNBXH,DDXH;

干扰检测

DD2:

JBXH,DD2;

等待电平变低

JSSJ:

信号确认,开始接收数据

MOVR0,#30H

ZJ:

接收一个字节数据

MOVR2,#8

WEI:

位数据,分辩0和1

JNBXH,WEI;

LCALLYS845

MOVC,XH;

取位数据

RRCA

DD3:

JBXH,DD3;

等待电平变低,为1的高电平提供过度

DJNZR2,WEI;

8位数据是否接收完

MOV@R0,A

INCR0

CJNER0,#34H,ZJ;

四字节数据是否接收完

MOVA,33H

CPLA

CJNEA,32H,DDXH;

键值确认,解码

MOVR4,A

==========这里已经取出键值,存在R4中==================================================

MOVR7,#100;

TSY:

MOVR6,#255

DJNZR6,$

CPLBB

DJNZR7,TSY

MOVA,#0CDH;

键值高位输出

LCALLYJP_XZL

MOVA,R4

MOVB,#10H

DIVAB

MOVCA,@A+DPTR

LCALLYJP_XSJ

MOVA,#0CEH;

键值低位输出

MOVA,B

LCALLYJP_XSJ;

LCALLDYBF;

调用灯控制子程序

LJMPDDXH;

返还等待下一次信号

YS845:

延时845微秒

MOVR7,#255

DJNZR7,$

MOVR7,#165

RET

YS3MS:

延时3ms

MOVR7,#8

DDD:

DJNZR6,$

DJNZR7,DDD

T0ZDCX:

T0中断程序

DJNZR5,T0FH

SETBT0ZD

T0FH:

RETI

===============以下是多余部分===========================================================================

DYBF:

MOVA,#0C0H;

用号码前高位输出

MOVA,30H

MOVA,#0C1H;

用户码前低位输出

LCALLYJP_XSJ

MOVA,#0C4H;

用户码后高位输出

MOVA,31H

MOVA,#0C5H;

用户码后低位输出

============此处专门针对我的开发板和遥控,不是解码的关键,只是一种应用举例

CJNEA,#0CH,BA1;

是否1号键按下

CPLP1.0;

点亮1号灯

BA1:

CJNEA,#18H,BA2;

是否2号键按下

CPLP1.1;

BA2:

CJNEA,#5EH,BA3;

是否3号键按下

CPLP1.2;

BA3:

CJNEA,#08H,BA4;

是否4号键按下

CPLP1.3;

BA4:

CJNEA,#1CH,BA5;

是否5号键按下

CPLP1.4;

BA5:

CJNEA,#5AH,BA6;

是否6号键按下

CPLP1.5;

BA6:

CJNEA,#42H,BA7;

是否7号键按下

CPLP1.6;

BA7:

CJNEA,#52H,BAB;

是否8号键按下

CPLP1.7;

BAB:

CSH:

=============液晶初始化===============

MOVA,#00111000B;

8位数据,双行显示,5-7字型

LCALLYJP_XZL;

调用写液晶指令

MOVA,#00001100B;

显示屏开启,光标出现在地址计数器位置,光标不闪烁

MOVA,#00000110B;

光标右移一格,AC值加一,字符全部不动

MOVA,#81H;

MOVA,#4CH;

L的ASCII码

MOVA,#83H;

MOVA,#47H;

G的ASCII码

MOVA,#85H;

MOVA,#58H;

X的ASCII码

MOVA,#88H;

MOVA,#5AH;

Z的ASCII码

MOVA,#89H;

MOVA,#68H;

h的ASCII码

MOVA,#8AH;

MOVA,#69H;

i的ASCII码

MOVA,#8CH;

MOVA,#8DH;

MOVA,#61H;

a的ASCII码

MOVA,#8EH;

MOVA,#6FH;

o的ASCII码

MOVA,#0C2H;

MOVA,#48H;

H的ASCII码

MOVA,#0C6H;

MOVA,#0CAH;

MOVA,#4AH;

J的ASCII码

MOVA,#0CBH;

MOVA,#0CCH;

MOVA,#3AH;

:

的ASCII码

MOVA,#0CFH;

=========写指令到液晶=============

YJP_XZL:

LCALLCHECK_BUSY;

查询忙碌状态

CLRE

CLRRS

CLRRW

SETBE

MOVP0,A;

写指令

==========写数据到液晶==============

YJP_XSJ:

SETBRS

写数据

=========查询忙碌标志============

CHECK_BUSY:

PUSHACC

BUSY_LOOP:

SETBRW

MOVA,P0;

读取状态

JBp0.7,BUSY_LOOP

POPACC

LCALLDEL

DEL:

MOVR6,#5

L1:

MOVR7,#248

DJNZR7,$

DJNZR6,L1

RET

TAB:

DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

DB41H,42H,43H,44H,45H,46H

END

中断加定时器---C语言版

优点:

完全是状态解码,极少的占用系统软件资源(CPU),随时都可以解码,而不管系统此时运行到何处。

缺点:

占用系统两个硬件资源,一个外部中断和一个定时器。

/******************************************************

********六哥红外解码程序********************************

********************************************************/

#include"

STC15Fxxxx.H"

///**************************************************

/////用户配置区:

#definexi_tong_pl12000000///晶振频率设定如你的系统晶振频率是12MHz,则写12000000

#definejan_zhiP1///解码输出二进制端口,解码成功则从该端口输出键值的二进制

sbitzhi_s=P5^5;

///解码成功标志,解码成功一次该端口取反一次

////外部中断

#definezd_rkdzinterrupt0///中断入口设置

#definezd_cffsIT0///中断触发方式设置

#definezd_dkEX0///中断打开设置

////

#definestc_dsqszAUXR&

=0x7F;

//定时器时钟12T模式,不需要可在AUXR....前加//

/******************************************************************

*****本程序使用外部中断加定时器来实现红外解码,占用系统软件资********

*****源极少,硬件方面占用了一个外部中断,定时器中断还可以进行********

*****一些简单的运用,软件部分可以做很多的动作,就看你发挥了!

********

******************************************************************/

#defineshi_jian_(xi_tong_pl/12000000)///定时器设置,请勿更改

unsignedcharhwyhmh,hwyhml,hwjz,hwsj,hwjmws;

///全局变量

bithwjmok,yxjm;

///全局变量,红外解码OK,允许解码

voidmain(void)

{

EA=1;

//总中断打开

zd_cffs=1;

//外部中断_边沿触发方式

zd_dk=1;

//外部中断_打开

ET0=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;

//未收到重复码清除解码允许标志

hwjz=0;

TR0=0;

//关闭定时器

/*********************************************************

中断方式红外接收程序

***********************************************************/

voidZDhwjsCX(void)zd_rkdzusing3

unsignedinta=TH0*256+TL0;

TL0=0;

TH0=0;

TR0=1;

///开启T0

if(a>

shi_jian_*13000&

&

a<

shi_jian_*14000)///if1分支2.判引导码13-14ms

{

hwsj=0;

hwjmws=32;

yxjm=1;

elseif(yxjm)///if1分支1.已收到引导码,允许解码

shi_jian_*11000&

shi_jian_*12000&

hwjmws==0)///if2分支1。

判重复码11-12ms

hwjmok=1;

else///if2分支3。

否则解码,取位

hwjmws--;

////////////////////////////////////////////////////////

if(a>

shi_jian_*2000&

shi_jian_*2400)///判12-2.4ms

hwsj>

>

=1;

hwsj|=0x80;

elseif(a>

shi_jian_*1000&

shi_jian_*1300)///判01-1.3ms

else

//清除允许解码标志

//关闭T0

//////////////////////////////////////////////////////////

switch(hwjmws)

{case24:

hwyhmh=hwsj;

}

break;

case16:

{hwyhml=hwsj;

}

case8:

{hwjz=hwsj;

case0:

{if(hwjz==~hwsj)

{hwjmok=1;

TL0=shi_jian_*12000%256;

TH0=shi_jian_*12000/256;

default:

else;

中断加定时器---汇编版

******************************************************

******************************************************************

hwyhmhdata7fh

hwyhmldata7eh

hwjzdata7dh

hwsjdata7ch

DSQ_ZDCSdata7bh

ZDCSDATA7AH

hwjmokbit20h.0

yxjmbit20h.1

hwjmweibit20h.2

hwjmkgBIT20H.3

HWJSTBITP3.3

ORG0013H

LJMPWBZD1

ORG000BH

LJMPDSQ_0

ORG0050H

SETBEA

SETBIT1

SETBEX1

CLRhwjmkg

CLRyxjm

CLRhwjmok

HHHH:

JBhwjmok,jm_cg;

JBC:

为1跳转并把该位清零,为0则顺序执行

此部分可写其他程序,不会影响接收

LJMPHHHH

jm_cg:

这里写解码成功后的动作

MOVP1,hwjz

==============================================

WBZD1:

INCZDCS

MOVA,ZDCS

JNByxjm,ZD0_5;

CLRTR0

MOVTH0,#0FAH;

设置定时1400us

MOVTL0,#70H;

开定时器

XCHA,hwsj

MOVC,hwjmwei

CLRhwjmwei

CJNEA,#10,ZD0_0;

取出用户码高位

MOVhwyhmh,hwsj

AJMPZD0_4

ZD0_0:

CJNEA,#18,ZD0_1;

取出用户码低位

MOVhwyhml,hwsj

ZD0_1:

CJNEA,#26,ZD0_2;

取出键值

MOVhwjz,hwsj

ZD0_2:

CJNEA,#34,ZD0_4;

取出键值反码

MOVA,hwsj

CPLA

CJNEA,hwjz,ZD0_3;

键值判断

SETBhwjmok;

解码正确,置位标志位

ZD0_3:

解码不成功

关闭定时器

CLRhwjmkg;

关闭解码开关

CLRyxjm;

清除允许解码标志

MOVZDCS,#0;

中断次数清零

MOVDSQ_ZDCS,#0;

定时器中断次数清零

ZD0_4:

RETI;

中断返回

ZD0_5:

开始接收引导码

CJNEA,#1,ZD0_3;

MOVTH0,#0F2H;

设置定时3.5ms

MOVTL0,#54H;

SETBhwjmkg;

开红外解码开关

DSQ_0:

JNBhwjmkg,T0FH;

JNByxjm,DSQ_0_0;

SETBhwjmwei

==========引导码判断程序===============

DSQ_0_0:

INCDSQ_ZDCS;

对T0中断计数

MOVA,DSQ_ZDCS

CJNEA,#1,DSQ_0_1

JBHWJST,JMCW;

判低电平,9ms引导码

AJMPT0FH

DSQ_0_1:

CJNEA,#2,DSQ_0_2

DSQ_0_2:

JNBHWJST,JMCW;

判高电平,4.5ms引导码

SETByxjm;

引导码接收成功,允许解码

CLRhwjmwei;

CLRTR0

JMCW:

引导码接收错误,

END

定时器捕获中断法---c语言版

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2