pt2262解码程序

pt2262解码程序,第1张

  概述

  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解码程序,第2张

  我看过很多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))) //按键d起

  {

  delay_nms(20); //防误处理

  }

  }

  if (i》2) break; /

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

  }

  }

  }

  }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/dianzi/2716996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存