EV 无线遥控解码编码程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)