×
嵌入式开发 > 详情

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

发布时间:2020-06-29 发布时间:
|
这是一个用软件来解码pt2262信号的c51程序,经过测试是可以使用的,要注意接受模块要远离单片机的晶振 不然干扰太严重无法解码的 或者距离很近.

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


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
寻找半导体产业未来10年的驱动力