EV 无线遥控解码编码程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

EV1527无线遥控解码编码程序

//*stc11f02/or stc89c2051 12MHZ //TX IC hs1527/or ev1527 OSC_RES=200K

VDD 12V */

/*同步码低电平时间9.2ms~9.35ms //无线码宽TD时间1.16ms,

1=(高电平脉冲时间920us~940us,低电平脉冲时间240us~220),

0=(高电平脉冲时间240us~220us,低电平脉冲时间920us~940us)

|同步码| c0~c19 addr码|D0|D1|D2|D3| Totals 24 bit

|-| |----| |-| |--| |--| |

| |____________| |_| |____| |..........................|

|_____________|

|-|---9.25ms---|1.16ms|1.16ms|-----------------------------|

用TIMER0和INT0配合实现脉宽测量,这种做法的好处是不用隔一段时间扫描I/O

口,方便系统程序的整体设计

硬件上要把无线信号反向后接到INT0(P3.2)脚,脉宽测量法测量反向后的高电平时

间;

用中断法(从高变低跳变引起中断}计量测到高电平脉冲时间.判定是,同步码,1

码,0码;

P1口接LED显示接收到的无线码的最后一字节数据*/

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define RLC(RX) CY=RX&0x80 //编译后生成带进位左移指令

uchar bdata wx_data0,wx_data1,wx_data2; //存储24位无线数据

uchar data wx_code0,wx_code1,wx_code2;

uint data wx_count; //低电平时间计数器

uint data wxh_count; //高电平时间计数器

uint data tb_count; //同步码时间计数器

uchar data wx_bit; //无线码位数

uchar bit_CY;

uchar data addr0;

uchar data addr1;

uchar data addr2;

uchar data cmd_data;

uint data times;

uint data mode=0;

uint data k;

bit tb_flag; //同步码接收成功标志

bit wx_ok; //无线码接收成功标志

bit decode_ok;

bit keyhold;

bit keydown;

bit keyopen;

bit k_flag;

bit k1;k2;k3;k4;

sbit P37=P3^7;

sbit P35=P3^5;

sbit P32=P3^2;

sbit P17=P1^7;

sbit P16=P1^6;

sbit P15=P1^5;

void decode();

void delayms(short i);

////////////////////////////////////////////////////////////////////// void main(void)

{

//////////////////////////////////////////////////////////////////// //设置脉宽测量法测量反向后的高电平时间

//这是晶振为12M的定时中断1us

// | D7 D6 D5 D4 D3 D2 D1 D0 |

// TMOD=| GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |

// GATE =1; TR0=1; INT0=1 时 TIMER0 START RUN ,INT0=0 STOP RUN

// 脉宽=(TH0*256 TL0)*12/12(MHZ)=(TH0*256 TL0)*1(us)

TMOD=0x19; //GATE=1;M0=1;设置T0为16位定时器,设为门控定时; ET0=0; //ET=0禁止T0中断

IT0=1; //IT=1从高变低跳变引起中断

EX0=1; //EX0=1开外部中断0

EA=1; //启动总中断

TH0=0;

TL0=0;

TR0=1; //启动T0

//***************************************************************** //sulotion1 按下和放开都有效

while(1)

{

if((wx_ok==1)&&(cmd_data==0xf4))

{//

if(keyopen==1)

{////

P16=~P16;

keyopen=0;

wx_ok=0;

}////

if(keyhold==0)

{////

keyopen=1;

}////

}//

}

*/

//sulotion2 按下没效//放开都有效

/*

while(1)

{

if((wx_ok==1)&&(cmd_data==0xf4))

{//

if(keyhold==0)

{////

keyopen=1;

}////

if(keyopen==1)

{////

P16=~P16;

keyopen=0;

wx_ok=0;

}////

}//

}

*/

/*

//sulotion3 按下有效//放开都没效/反应不灵敏while(1)

相关文档
最新文档