pt2262解码程序

嵌入式设计应用

128人已加入

描述

  概述

  PT2262/2272 是一种CMOS 工艺制造的低功耗低价位通用编解码电路,是目前在无线通讯电路中作地址编马识别最常用的芯片之PT2262/2272 最多可有12 位(A0-A11) 三态地址端管脚(悬一。空,接高电平,接低电平),任意组合可提供531441地址码,PT226

  2 最多可有6 位(D0-D5) 数据端管脚,设定的地址码和数据码从17脚串行输出。PT2262/2272 必须用相同地址码配对使用,当需要增加一个通讯机时,用户不得不求助于技术人员或厂家来设置相同地址码,客户自己设置相对比较麻烦,尤其对不懂电子的人来说。随着人们对操作的要求越来越高,PT2262/22 72 的这种配对使用严重制约着使用的方便性,人们不断地要求使用一种无须请教专业人士,无须使用特殊工具,任何人都可以操作的方便的手段来弥衫卜PT2262/2272的缺陷,这就是PT2262 软件解码。

  PT2262

  我看过很多PT2262软件解码程序,都是用定时器测量脉冲宽度。占用系统太多资源。我自己编写的程序不用定时器,不用中断,代码最少。发射端为PT2262 3.3M 的电阻接收端为M8 内部1M RC振荡。解码成功后输出D口显示。编译软件为ICCAVR。

  pt2262解码程序

  #include 《iom8v.h》

  #include 《macros.h》

  void delay_ms(void) //毫秒延时

  {

  unsigned int i;

  for (i=0;i《140;i++)

  {

  }

  }

  void delay_nms(unsigned int n) //延时周期

  {

  unsigned int i;

  for (i=0;i《n;i++)

  {

  delay_ms();

  }

  }

  void spaz(void) //响蜂鸣器

  {

  PORTC|=(1《《5);

  delay_nms(50);

  PORTC&=~(1《《5);

  }

  unsigned long decode(void) //无线解码

  {

  unsigned long DATA; //记录数据

  unsigned char count,i; //暂时计数

  /*一共接收三字节*/

  DATA=0; //

  for (count=0;count《24;count++) //开始收集

  {

  /*测量高电平宽度*

  / i=0; //宽度计数

  while (PINC&(1《《4)) //高位计数

  {

  asm(“nop”); //

  i++; //计数增加

  if (i》192) goto end; //限时解码

  }

  /*分辨出电平高低*/

  DATA*=2; //数据左移

  if (i《64) //分辨高低

  {

  if (!((56》i)&(i》24))) goto end

  ; //电平合法DATA+=0; //记低电平

  }

  else

  {

  if (!((168》i)&(i》72))) goto end; //电平合法

  DATA+=1; //记高电平

  }

  /*测量低电平宽度*/

  while (!(PINC&(1《《4))) //低位计数

  {

  asm(“nop”); //

  i++; //计数增加

  if (i》224) goto end; //限时解码

  }

  /*低电平是否过窄*/

  if (i《96) goto end; //对比宽度

  }

  /*解码成功返结果*/

  return DATA; //成功返回

  /*有误码结束解码*/

  end:

  return 0; //误码结束

  }

  void main(void)

  {

  unsigned long DATA; //

  unsigned char D[3]; //

  signed char i; //

  DDRB =0B00000000; //定义输入

  PORTB=0B11111111; //上拉使能

  DDRC =0B11101111; //输入通道

  PORTC=0B11011111; //上拉选择

  DDRD =0B11111111; //定义输出

  PORTD=0B00000000; //输出显示

  while (1)

  {

  DATA =decode(); //解码程序

  if (DATA》0) //

  {

  spaz(); //解码成功

  for (i=2;i》=0;i--) //数据转换

  { D[i]=DATA; //

  DATA》》=8; //

  }

  i=0; //转换完毕

  while (1) //输出显示

  {

  if (!(PINB&(1《《0))) //按键检查

  {

  delay_nms(20); //防误处理

  if (!(PINB&(1《《0))) //

  {

  i++; //显示值加

  spaz();

  }

  while (!(PINB&(1《《0))) //按键弹起

  {

  delay_nms(20); //防误处理

  }

  }

  if (i》2) break; /

  PORTD=D[i]; //输出显示

  }

  }

  }

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分