新闻中心

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;}


评论


相关推荐

技术专区

关闭