分享

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

 寻找幸福191 2016-03-20

这是一个用软件来解码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;i<50;i++);  if(P3_2==1)  goto kk;   while(P3_2==0);  for(i=0;i<50;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;j<3;j++)                      {   for(i=0;i<8;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;i<3;i++)     {        if((~(ReadCode[i]|0x55))&((ReadCode[i]&0x55)<<1)!=0x00)   goto kk;    //校验     }      GetCode=0x00;     for(i=0;i<8;i++)     {       GetCode |=((ReadCode[2]>>i)&(ReadCode[2]>>(i+1))&0x01<<i);             //运算     } //////////////////////////////////////////////////////////////////////////////////     delay_131();  delay_131();  delay_131();     delay_131();   kk: EX0=1; } 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多