您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > EV1527无线遥控解码编码程序
EV1527无线遥控解码编码程序//*stc11f02/orstc89c205112MHZ//TXIChs1527/orev1527OSC_RES=200KVDD12V*//*同步码低电平时间9.2ms~9.35ms//无线码宽TD时间1.16ms,1=(高电平脉冲时间920us~940us,低电平脉冲时间240us~220),0=(高电平脉冲时间240us~220us,低电平脉冲时间920us~940us)|同步码|c0~c19addr码|D0|D1|D2|D3|Totals24bit|-||----||-||--||--||||____________||_||____||..........................||_____________||-|---9.25ms---|1.16ms|1.16ms|-----------------------------|用TIMER0和INT0配合实现脉宽测量,这种做法的好处是不用隔一段时间扫描I/O口,方便系统程序的整体设计硬件上要把无线信号反向后接到INT0(P3.2)脚,脉宽测量法测量反向后的高电平时间;用中断法(从高变低跳变引起中断}计量测到高电平脉冲时间.判定是,同步码,1码,0码;P1口接LED显示接收到的无线码的最后一字节数据*/#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint#defineRLC(RX)CY=RX&0x80//编译后生成带进位左移指令ucharbdatawx_data0,wx_data1,wx_data2;//存储24位无线数据uchardatawx_code0,wx_code1,wx_code2;uintdatawx_count;//低电平时间计数器uintdatawxh_count;//高电平时间计数器uintdatatb_count;//同步码时间计数器uchardatawx_bit;//无线码位数ucharbit_CY;uchardataaddr0;uchardataaddr1;uchardataaddr2;uchardatacmd_data;uintdatatimes;uintdatamode=0;uintdatak;bittb_flag;//同步码接收成功标志bitwx_ok;//无线码接收成功标志bitdecode_ok;bitkeyhold;bitkeydown;bitkeyopen;bitk_flag;bitk1;k2;k3;k4;sbitP37=P3^7;sbitP35=P3^5;sbitP32=P3^2;sbitP17=P1^7;sbitP16=P1^6;sbitP15=P1^5;voiddecode();voiddelayms(shorti);//////////////////////////////////////////////////////////////////////voidmain(void){//////////////////////////////////////////////////////////////////////设置脉宽测量法测量反向后的高电平时间//这是晶振为12M的定时中断1us//|D7D6D5D4D3D2D1D0|//TMOD=|GATE|C/T|M1|M0|GATE|C/T|M1|M0|//GATE=1;TR0=1;INT0=1时TIMER0STARTRUN,INT0=0STOPRUN//脉宽=(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开外部中断0EA=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){if((wx_ok==1)&&(cmd_data==0xf4)){//if(keyhold==1){if(keyopen==0){////P16=~P16;keyopen=1;wx_ok=0;}////}if(keyhold==0){////keyopen=0;}////}//}*/while(1){//times++;decode();switch(mode){///case1://turnonP37=0;times=0;break;case2://6Hzflashif(times=10000){P37=~P37;times=0;}break;case3://3Hzflashif(times=30000){P37=~P37;times=0;}break;case0://offP37=1;times=0;break;}///}//}//////////////////////////////////////////////////////////////////////voiddecode(){//P1=wx_code0|0Xf0;//P1口接LED显示数据cmd_data=wx_code0|0xf0;//sulotion4按下有效/反应较灵敏+if((wx_ok==1)&&(cmd_data==0xf4)){//if(keyopen==0){////k_flag=~k_flag;if(k_flag==1){//P16=~P16;mode++;if(mode3){mode=0;}}keyopen=1;wx_ok=0;}////if(keyhold==0){////keyopen=0;}////}//}/////////////////////////////////////////////////////////////////////voidint0()interrupt0{wx_count=TH0*256+TL0;TH0=0;TL0=0;/////////////////////////////////////////////////////////////////////////////////////////if(tb_flag==1)//同步码标志为1{if((800wx_count)&&(wx_count1000))//低电平脉宽范围在900us到950us之间{CY=0;}elseif((200wx_count)&&(wx_count400))//低电平脉宽范围在220us到350us之间{CY=1;}else//干扰码{wx_count=0;wxh_count=0;wx_bit=0;tb_flag=0;keyhold=0;return;}RLC(wx_data0);//移位寄存器,接收一位数据wx_data0=ACC;RLC(wx_data1);wx_data1=ACC;RLC(wx_data2);wx_data2=ACC;if(++wx_bit==24)//接收完24位码,接收成功标志wx_ok置1{tb_flag=0;wx_bit=0;wx_ok=1;wx_code0=wx_data0;wx_code1=wx_data1;wx_code2=wx_data2;}}elseif((8000wx_count)&&(wx_count9000))//低电平脉宽范围在9.2ms到9.5ms之间,把同步码标志置1{tb_flag=1;keyhold=1;}else//干扰码{wx_count=0;wxh_count=0;wx_bit=0;tb_flag=0;keyhold=0;return;}}////////////////////////////////////////////////////////////////////////////////////////////////////////voiddelayms(intk)//@12M,ms{intj;while((k--)!=0){for(j=0;j100;j++){;}}}
本文标题:EV1527无线遥控解码编码程序
链接地址:https://www.777doc.com/doc-1281074 .html