搜索
bottom↓
回复: 5

51对PT2262接收程序,哪出错了,大神帮看下

[复制链接]

出0入0汤圆

发表于 2014-11-25 20:52:16 | 显示全部楼层 |阅读模式
#include"AT89x52.h"
//#include"global.h"
#include"intrins.h"
//#include"51hei.H"

#define  uchar  unsigned char
#define  uint   unsigned int
sfr AUXR =0x8E;
uchar Rem_Code[3];
uint TimeCount;
sbit Get_Rem=P3^2;

void delay8(uint t)
{
     while(--t);
}

void Delay100us(void)
{
      delay8(13);//    8-18
}                           //因为他的格式是00表示"0"11表示"1"01表示"F"所以我们要把12位乘以2等于24位刚好是3个字节
                            //第一二个字节是地址码,第三个字节是数据码//发射芯片采用的是
                             //PT2262芯片用4.7M的震荡电阻315M发射遥控我们全部默认地址码是 FFFFFFFF 灯解码出来就是0x55 0x55
                                                                          //遥控处理函数*/
void Remote_Process(void)
{
uchar i,j,
Count=0;
Delay100us();
if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0
{                //等于0后表示按键释放
     TimeCount--;
}
   if(Get_Rem==0)//如果有低电平就进入解码
{  
     for(Count=0;Count<100;Count++)//判断12毫秒左右的引导码  
          {   
        Delay100us();//100us*100=10ms
       if(Get_Rem==1)//如果在延时10毫秒期间有高电平出现就是干扰信号退出解码   
   {   
     return;
     }  
          }  
          while(Get_Rem==0);      //等待低电平结束
          for(j=0;j<3;j++ )      //8位地址码加4位数据码   
          {   
            for(i=0;i<8;i++)   
           {  
             Count=0;   
                do  
            {   
                   Delay100us();   
                Count++;   
                    if(Count>20)    //如果在大于2毫秒高电平还没有结束认为是干扰退出解码
   {                          //理论上是1.2毫秒,我们2毫秒留有余量,防止遥控批量中的误差   
              return;   
   }   
   }
                   while(Get_Rem==1);//计算高平时间并等待结束  
                Count=0;  
             do
   {     
          Delay100us();  
   Count++;   
   if(Count>20)//如果在大于2毫秒低平还没有结束认为是干扰退出解码   
   {      
        return;   
}    }
while(Get_Rem==0);     //计算低电平时间并等待结束  
Rem_Code[j]<<=1;      //数据从高位开始接收所以每次向左移一位      
if(Count<8)            //如果低电平时间小于800毫秒认为该位为1      
{  
      Rem_Code[j]++;      

}   
}  
}      
ACC=Rem_Code[2];     
if(ACC==0xc0)  P0=0xef;
if(ACC==0x30)  P0=0xdf;
if(ACC==0x0c)  P0=0xbf;
if(ACC==0x03)  P0=0x7f;  

   if(TimeCount==0)//为0表示是新的一次按下对其进行处理
   {  
   }
   
        TimeCount=1000;//按键按下标志
   }
        }

void main()
{
AUXR=0x01;
P1_4=0;
//guandz();
//guanled();

while(1)
{  Remote_Process();//遥控处理
}

}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-10-18 13:59:09 | 显示全部楼层
楼主的程序调通了吗?关注中.......

出0入0汤圆

发表于 2015-10-18 14:04:01 | 显示全部楼层
我见过用IN0口接一个反向器再接接收模块的,还用了定时器,你这个好像是完全用软件来解码吧

出0入0汤圆

 楼主| 发表于 2015-11-9 17:01:09 | 显示全部楼层
风雨无阻88 发表于 2015-10-18 13:59
楼主的程序调通了吗?关注中.......

我现在不用51做了,用PIC的做了!

出0入0汤圆

发表于 2016-3-30 14:45:34 | 显示全部楼层
写波形解码的程序,我看过了,好的51程序是用了定时器中断和外中断的下降沿触发来编程的

出0入0汤圆

发表于 2016-4-8 10:49:51 来自手机 | 显示全部楼层
315M信号对AT89单片机干扰很大,我用汇编调通过,但距离只能在10米内。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-14 04:09

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表