新闻中心

EEPW首页>嵌入式系统>设计应用> 单片机解码315M的pt2262编码的c51程序

单片机解码315M的pt2262编码的c51程序

作者: 时间:2012-10-17 来源:网络 收藏
这是一个用软件来解码信号的,经过测试是可以使用的,要注意接受模块要远离单片机的晶振 不然干扰太严重无法解码的 或者距离很近.

/*-----------------------------------------------------------------; Copyright (C) 2006 WangChanghong INTEGRATED PRODUCTS, INC.; All rights reserved.; MCU:AT89s52 ,晶体频率:12MHz: 作者:汪长洪: 时间:2006年08月01日; 地点:威海;----------------------------315M无线遥控解码程序-----------------*/ #include AT89X52.H>#define uchar unsigned char#define uint unsigned int/*---------------------------------变量列表-------------------------*/uchar ReadCode[3],GetCode;/*---------------------------------函数列表-----------------------*/void delay_200(void); //200us精确延时void delay_250(void); //250us精确延时void delay_131(void); //131ms精确延时void init(void); //初始化子程序void INT0_intrupt(); //中断处理子程序(解码程序)/*-----------------------------主程序入口---------------------*/main(){ init(); while(1){ P2=~GetCode|0xf0;}}/*---------------------------------初始化子程序----------------*/void init(void){EA=1; //打开CPU总中断请求EX0=1; //打开INT0中断请求 IT0=1; //设定INT0的触发方式为脉冲负边沿触发 }/*-------------------------------200us精确延时-------------------*/void delay_200(void) {uchar i,j;for(i=0x05;i>0;i--)for(j=0x12;j>0;j--);}/*-------------------------------250us精确延时----------------*/void delay_250(void) {uchar i,j;for(i=0x05;i>0;i--)for(j=0x17;j>0;j--);}/*-------------------------------131ms精确延时---------------*/void delay_131(void) {uchar i,j;for(i=0xfe;i>0;i--)for(j=0xfe;j>0;j--);}/*-------------------------外部中断0子程序(解码程序)-------------*/void INT0_intrupt(void) interrupt 0 using 1{uchar i,j;bit BitState_2; EX0=0; ////////////////////找起始位////////////////////////for(i=0;i50;i++);if(P3_2==1) goto kk;while(P3_2==0);for(i=0;i50;i++);if(P3_2==0) goto kk; delay_200();if(P3_2==1) goto kk;for(i=15;i>0;i--) //重复20次,检测在3750微秒内出现高电平就退出解码程序{ delay_200(); if(P3_2==1) goto kk;} while(P3_2==0);//////////////////////接收数据/////////////////////////for(j=0;j3;j++) {for(i=0;i8;i++){ delay_250();BitState_2=P3_2; ReadCode[j]=ReadCode[j]1;ReadCode[j]=ReadCode[j]|BitState_2; if(P3_2==1) while(P3_2==1);while(P3_2==0);}}////////////////////校验及运算数据///////////////////////////for(i=0;i3;i++){if((~(ReadCode[i]|0x55))((ReadCode[i]0x55)1)!=0x00)goto kk; //校验} GetCode=0x00;for(i=0;i8;i++){GetCode |=((ReadCode[2]>>i)(ReadCode[2]>>(i+1))0x01i); //运算}//////////////////////////////////////////////delay_131();delay_131();delay_131();delay_131(); kk: EX0=1;}


评论


相关推荐

技术专区

关闭