找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6558|回复: 1
打印 上一主题 下一主题
收起左侧

PT2262 解码程序-C语言

[复制链接]
跳转到指定楼层
楼主
ID:71407 发表于 2014-12-31 13:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 图为我实测的波形图,PT2262一次发射4组相同的编码,每组码之间用同步码分开,考虑到用A4纸打印,每行只有一组码,共四行,第五行是把同步码单独切出来,方便看。


  2. /******************************************************************************************

  3.         项目名称:       意大利无线门铃
  4.         程序功能:       PT2262解码程序
  5.         晶    振:       4 MHz
  6.         版    本:       V1.0


  7.         
  8.         PT2262震荡电阻为4.7M,如电阻不一样需改一下程序时间
  9.         本程序是用来做无线收发所用,如果用于红外发光管请将震荡电阻改为430K-470K
  10.         当然程序里的时间也要改哦
  11.         我的连接方法是将PT2262的数据输出端经过三极管反向后直接接到AT89C2051的P3.2,
  12.         PT2262与AT89C2051同一个5V电源
  13.         PT2262是两个脉冲代表一位,我解码是将每个脉冲当成一位,宽的为1,窄的为0,
  14.         这样就是24位,解码结果放在receive[3]里
  15.         本程序刚刚写完,用仿真器试解码结果没有问题,还没有接高频发射线路试,
  16.         先把它贴上来再说。
  17.         
  18. *******************************************************************************/

  19. #i nclude <reg51.h>

  20. sbit RemPin  =   P3^2  ;

  21. unsigned char receive[3];

  22. void RemIn(void) interrupt 0 using 1
  23. {
  24.     unsigned char i,j;
  25.     unsigned int temp;

  26. EA=0;
  27. TH0=0;
  28.    TL0=0;
  29.    while (!RemPin); //等待高电平
  30.     TR0=1;
  31.     while (RemPin)  //等待低电平
  32.         if (TF0==1)  goto RemExit;  //超时就退出;
  33.     TR0=0;
  34.     temp=TH0;
  35.     temp=(temp<<8)+TL0;
  36.     if (temp>6000 || temp<4000)   //判断同步码的宽度
  37.     {
  38.         temp=TH0;
  39.   goto RemExit;
  40.     }
  41. //同步码检测成功
  42.     for (i=0; i<3; i++) //解 3*8=24 位码
  43.     for (j=0; j<8; j++)
  44.     {
  45.         while (!RemPin);  //等待高电平
  46.         TH0=0;
  47.     TL0=0;
  48.   TR0=1;
  49.         while (RemPin)  //等待低电平
  50.             if (TF0==1) goto RemExit; //超时就退出
  51.   TR0=0;
  52.         temp=TH0;
  53.         temp=((temp<<8)+TL0);
  54.   //      /*
  55.         if (temp>400 && temp<600)
  56.         {
  57.             receive[i]=receive[i]<<1;
  58.             receive[i]=receive[i]+1; //保存 1
  59.         }
  60.         else if (temp>100 && temp<234)
  61.             {
  62.                 receive[i]=receive[i]<<1;   //保存0
  63.             }
  64.             else goto RemExit;
  65.     }
  66.     temp=0;//在这里设置一个断点,运行到这里后看看receive里的三个字节数据就是解码的结果
  67.     RemExit:
  68.     {
  69.         TR0=0;
  70.   EA=1;
  71.         RemPin=1;
  72.         TF0=0;
  73.         return;
  74.     }
  75. }

  76. ///*
  77. main()
  78. {
  79.     RemPin=1;
  80.     EA=1;
  81.     IT0=1;  //设定INT0的触发方式为脉冲负边沿触发
  82.     EX0=1;  //打开INT0中断请求
  83.     TMOD=0x01;
  84.     while (1);  
  85. //RemPin=1;
  86. }

复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:92707 发表于 2015-10-17 10:25 | 只看该作者
顶楼主,不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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