




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机模拟PT2262编码,软件模拟PT2262发射发布者:aoyux 发布时间:2010-8-27 8:08:12 阅读:3次 在无线遥控领域, PT2262/2272 是目前最常用的芯片之一,但由于芯片要求配对使用,在很大程度上影响了该芯片的使用,我们从 PT2262 波形特征入手,结合应用实际,提出软件解码/编码的方法和具体措施。 关键词 PT2262 软件解码/编码 一、概述 PT2262/2272 是一种 CMOS 工艺制造的低功耗低价位通用编解码电路,是目前在无线通讯电路中作地址
2、编码识别最常用的芯片之一。 PT2262/2272 最多可有 12 位 (A0-A11) 三态地址端管脚 ( 悬空 , 接高电平 , 接低电平 ), 任意组合可提供 531441 地址码 ,PT2262 最多可有 6 位 (D0-D5) 数据端管脚 , 设定的地址码和数据码从 17 脚串行输出。 PT2262/2272 必须用相同地址码配对使用,当需要增加一个通讯机时,用户不得不求助于技术人员或厂家来设置相同地址码,客户自己设置相对比较麻烦,尤其对不懂电子的人来说。随着人们对操作的要求越来越高, PT2262/2272 的这种配对使用严重制约着使用的方便性,人们不断地要求使用一种无须请教专业人
3、士,无须使用特殊工具,任何人都可以操作的方便的手段来弥补 PT2262/2272 的缺陷,这就是 PT2262 软件解码/编码。 二、解码/编码 原理 振荡频率 f=2*1000*16/Rosc(k ) kHz 其中 Rosc 为振荡电阻 这里我们选用的是一种比较常用的频率 f 10 kHz, Rosc=3.3M (以下同)。 下图是振荡频率与码位波形的对应关系: PT2262 有三种
4、编码: 0 , 1 ,和悬空 ( 表示为 f) 。 有了以上具体的波形,我们就可以进行软件编码了。PT2262每次至少发送4次编码,首先我们把地址码+数据码+11ms宽度的同步码头发射出去,作个循环4次后结束。 三、软件模拟PT2262发射! C语言程序:/*奥宇星电子单片机工作室 Copyright 2009 aoyux McuStudioAll rights Reserved作者:周洵名 QQ:491069539 电话:135289136
5、15STC12C5406AD 晶振频率为12MHz 本程序已调试完成:功能说明:软件模拟PT2262发射*/AT89S51 软件模拟PT2262发射/PT2262PT2272配对使用,/被广泛用用于遥控开关、摩托报警器.门禁系统的寻址.遥控玩具.等领域/其最大缺点:容易破解,控制不灵活,可控性差等缺点/发射端采用单片机模拟PT2262编码,/接收端采用单片机模拟PT2272解码,/灵活性,可控性大幅度提高,我们可以在程序里加入:加密算法、滚动编码算法、非常规编码等方法提高保密性。/该方案目前在我司的、门禁对讲系统上寻址、摩托报警器、遥控开关等产品上,取得了非常好的效果!/#include &q
6、uot;stc12c5410ad.h"/头文件/#include "reg52.h"/头文件#include "intrins.h"/头文件#define uchar unsigned char/宏定义#define uint unsigned int/宏定义sbit REM=P17;/遥控器信号输出,(数据输出)sbit key_a=P10;sbit key_b=P11;sbit key_c=P12;sbit key_d=P13;uchar TH1_12a=0xff;/12auchar TL1_12a=0x58;/12auchar TH1_4
7、a=0xff;/4auchar TL1_4a=0xc8;/4auchar Temporary3;/暂存单元void init()/初始化P1M0=0x0f;/P1M1=0x10;REM=0;TMOD=0x10;/定时器T1工作于方式1,16位计数器TH1=0x00;TL1=0x00;EA=1;/开总中断允许ET1=1;/开定时器T1允许控制/PT1=1;/开定时器T1中断为最高优先级TR1=0;/T1开始运行void delay(uint z) uchar x,x1;for(;z>0;z-)for(x=0;x<114;x+)for(x1=0;x1<1;x1+); void T
8、imer1() interrupt 3/TR1TR1=0;void bit_1()/1REM=1;TH1=TH1_12a;/12aTL1=TL1_12a;/12aTR1=1; while(TR1);/高电平 $REM=0;TH1=TH1_4a;/4aTL1=TL1_4a;/4aTR1=1; while(TR1);/低电平 $REM=1;TH1=TH1_12a;/12aTL1=TL1_12a;/12aTR1=1; while(TR1);/高电平 $REM=0;TH1=TH1_4a;/4aTL1=TL1_4a;/4aTR1=1; while(TR1);/低电平 $void bit_0()/0REM
9、=1;TH1=TH1_4a;/4aTL1=TL1_4a;/4aTR1=1; while(TR1);/高电平 $REM=0;TH1=TH1_12a;/12aTL1=TL1_12a;/12aTR1=1; while(TR1);/低电平 $REM=1;TH1=TH1_4a;/4aTL1=TL1_4a;/4aTR1=1; while(TR1);/高电平 $REM=0;TH1=TH1_12a;/12aTL1=TL1_12a;/12aTR1=1; while(TR1);/低电平 $void bit_f()/f /10REM=1;TH1=TH1_4a;/12aTL1=TL1_4a;/12aTR1=1; wh
10、ile(TR1);/高电平 $REM=0;TH1=TH1_12a;/12aTL1=TL1_12a;/12aTR1=1; while(TR1);/低电平 $REM=1;TH1=TH1_12a;/4aTL1=TL1_12a;/4aTR1=1; while(TR1);/高电平 $REM=0;TH1=TH1_4a;/4aTL1=TL1_4a;/4aTR1=1; while(TR1);/低电平 $void chu_li() uchar temp,tab,i;uchar b; for(b=0;b<4;b+)temp=Temporary0;tab=Temporary0;for(i=0;i<4;i
11、+) temp=tab;temp&=0xc0;if(temp=0xc0)/11bit_1();else if(temp=0x00)/00bit_0();else /if(temp=0x40)/01bit_f();tab=tab<<2;temp=Temporary1;tab=Temporary1;for(i=4;i<8;i+) temp=tab;temp&=0xc0;if(temp=0xc0)/11bit_1();else if(temp=0x00)/00bit_0();else /if(temp=0x40)/01bit_f();tab=tab<<2
12、;temp=Temporary2;tab=Temporary2;for(i=8;i<12;i+) temp=tab;temp&=0xc0;if(temp=0xc0)/11bit_1();else if(temp=0x00)/00bit_0();else /if(temp=0x40)/01bit_f();tab=tab<<2;void main()/uchar b;/uchar temp,tab; init();Temporary0=0x55;/地址 01010101Temporary1=0x55;/地址 01010101/Temporary2=0xff;/待发送的数据
13、while(1)if(key_a)delay(20);while(key_a)Temporary2=0xc0;/待发送的数据chu_li();delay(20);else if(key_b)delay(20);while(key_b)Temporary2=0x30;/待发送的数据chu_li(); delay(20);else if(key_c)delay(20);while(key_c)Temporary2=0x0c;/待发送的数据chu_li(); delay(20);else if(key_d)delay(20);while(key_d)Temporary2=0x03;/待发送的数据ch
14、u_li(); delay(20); 在仿真软件 proteus 里 仿真的波形图:四、结束语 用单片机模拟PT2262的软件编码在实际应用中有较好的用武之地。采用软件编码的系统,厂家再也无须对收发设备进行配套,以利于生产于保管;对客户来说,使用软件编码无须求助,厂家只须在软件中加入自动编码功能,用户可自行使用该功能;在程序里自动编写地址,把数据保存在AT24C02里,厂家生产遥控器时就再也无须一一配对编好地址了,而是在出厂前,让其自动编号地址即可。用单片机代替PT2272解码PT2262的程序 转载用单片机代替PT2272解码PT2262的程序 * 用单片机代替PT2272解码PT2262的
15、程序 *晶振: 12MHz开始时间: 2004-10-12 21:20最后修改: 2004-10-12 21:23* 说 明 *接收到的信号为发送信号的反码因为每检测到按键有效一次PT2262 都发送四次编码我们可以利用这一特点来解码先检测有没有接收到信息当有的时候我们就去掉第一次编码的信号检测5ms 的高电平来检测编码的开始信号接收到5ms 的高电平后才开始解码我们可以发现每个码的长度都是1.2ms左右每一个编码都是由低电平开始然后到高电平又到低电平又回到高电平我们从第一个高电平的宽度可以把1 码区分出来剩下的悬空码和0 码可以从第二个高电平的宽度区分出来具体的单片机译码方法如下由高电平开始
16、检测到下降沿时就延时300us 读取接收的状态记为A0 然后再检测下一个下降沿降沿后又延时300us 读取接收的状态记为A1 这样就把一个编码给译出来了 帖子来自:电子技术家园论坛() 详细出处请参考:目前,该软件编码已经在我司生产的无线报警器,无线遥控开关,摩托车报警器,等设备中采用,效果非常好。 A0 A1 和悬空1 码0 码的关系如下:A0 A1 代码0 0 1 码0 1 错误1 0 悬空1 1 0 码*/i nclude <STC516AD.H>#define uchar unsigned char#define uint unsigned int/定义共用体un
17、ionuint word;struct /结构bytesuchar byte_addr;uchar byte_data;bytes;a_0,a_1;/位定义sbit W_REM =P33; /遥控接收输入脚sbit LED0 =P10;sbit LED2 =P12;bit bdata recv_flg, /接收正确位标志(1:正确 0:错误)/因为当按住PT2262的按键不放的时候PT2262会把编码不断的送出/设置lianji_flg位用来检测按键有没有放开过如果没有放开则不再响应lianji_flg; /按键没有放开过标志(1:连接 0:点击)uchar/ addr_a0, /接收的8位地
18、址编码A0/ addr_a1, /接收的8位地址编码A1/ data_a0, /接收的4位数据编码A0/ data_a1, /接收的4位数据编码A1addr_user_a0, /设定的8位地址密码A0addr_user_a1; /设定的8位地址密码A1/ led_out; /输出控制/- sub functon -/- sub functon -/- sub functon -/- sub functon -/- sub functon -/>>>>>>>>>>>>>>>>>>>&
19、gt;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>/void d1ms (uint ljh_
20、in) /*1mS延时函数*/ uint data ljh_i;/ uchar data ljh_j;/ for(ljh_i=0;ljh_i<ljh_in;ljh_i+)/ for(ljh_j=0;ljh_j<108;ljh_j+)/ _nop_(); _nop_();/ _nop_(); _nop_();/ _nop_(); _nop_();/ / /<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-&
21、lt;-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-</>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
22、;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>void d50us(uchar n) /50uS延时uchar data i,j;for(j=n;j;j-) /1T+2T+(2i+2)T+1T+2T*n+1T+2T+2T=(2i+8)*n+5Tfor(i=21;i;i-) ;/延时2T+2T*i=(2i+2)T/&
23、lt;-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-</>>>>>>>>>>>>>>>>>>>
24、>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>PT2272_deco() /解码uch
25、ar i,cnt;if(recv_flg) ;else /清除上次解码内容cnt =12; /接收12位编码/解码 -/先找出接收码的开头即5ms左右的高电平 -/设置高电平时间为46ms/检测和等待4ms的高电平for(i=80;i;i-) /延时4mSif(!W_REM) i=80;else d50us(1);/等待在2ms内接收到的低电平 -for(i=40;i;i-) /延时4mSif(!W_REM) break;else d50us(1);/4ms到6ms内接收到下降沿则跳去解码否则返回/超出6ms接收错误返回if(i) recv_flg =0; /清按键没有放开过标志goto PT
26、2272_deco_exit; /返回 -/等待300us后采集接收信号d50us(6);/采集接收信号并记录a_0.word=a_1.word=0;for(i=0;i<6;i+) if(W_REM) a_0.word |=0x01;a_0.word <<=1;/ MOV C,W_REM /读A0数据/ MOV A,DATA_A0/ RLC A/ MOV DATA_A0,A /保存相应位的A0/ MOV A,ADD_A0/ RLC A/ MOV ADD_A0,A /高位转移/等待第二个下降沿while(!W_REM) ;while(W_REM) ;/ JNB W_REM,$/
27、 JB W_REM,$/等待300us后采集接收信号d50us(6);/ MOV 40H,#150 /2T/ DJNZ 40H,$ /2T 延时:2T+2T*150=302Tif(W_REM) a_1.word |=0x01;a_1.word <<=1;/ MOV C,W_REM /读A1数据/ MOV A,DATA_A1/ RLC A/ MOV DATA_A1,A /保存相应位的A1/ MOV A,ADD_A1/ RLC A/ MOV ADD_A1,A /高位转移/等待第二个码值的下降沿while(!W_REM) ; /_wd_while(W_REM) LED2=LED2;/ J
28、NB W_REM,$/ JB W_REM,$/ DJNZ 34H,REMOTE6 /接收12 位编码 -/把接收的编码左移4位将8位密码放在同一字节上-a_0.word <<=4;a_1.word <<=4;/ MOV 40H,#4/REMOTE7:/ CLR C/ MOV A,DATA_A0/ RLC A /送出低8位的bit7/ MOV DATA_A0,A /低8位的A0左移1位/ MOV A,ADD_A0/ RLC A /接收低8位的bit7/ MOV ADD_A0,A /高8位的A0左移1位/ CLR C/ MOV A,DATA_A1/ RLC A /送出低8位
29、的bit7/ MOV DATA_A1,A /低8位的A1左移1位/ MOV A,ADD_A1/ RLC A /接收低8位的bit7/ MOV ADD_A1,A /高8位的A1左移1位/ DJNZ 40H,REMOTE7 /左移4位/ /把4位数据编码由高4位移到低4位上 -/ MOV A,DATA_A0/ SWAP A/ MOV DATA_A0,A /把4位数据编码A0由高4位移到低4位?/ MOV A,DATA_A1/ SWAP A/ MOV DATA_A1,A /把4位数据编码A1由高4位移到低4位?/比较密码 -if(a_0.bytes.byte_addr=addr_user_a0)&a
30、mp;&(a_1.bytes.byte_addr=addr_user_a1) recv_flg =1;lianji_flg =1; else recv_flg =0;lianji_flg =0;/ MOV A,ADD_A0/ XRL A,ADD_USER_A0/ JNZ REMOTE8 /密码不正确则跳转/ MOV A,ADD_A1/ XRL A,ADD_USER_A1/ JNZ REMOTE8 /密码不正确则跳转/ /置接收正确位 -/ SETB RECEIVE/ /置ENABLE 用于检测按键有没有放开 -/ SETB ENABLE/ RET /接收正确返回 -/REMOTE8:/
31、 CLR ENABLE/ CLR RECEIVE/ RET /接收不正确返回 -PT2272_deco_exit:return;/<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-</>>&g
32、t;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&g
33、t;>>>>>>>>>>>void remote_2272_deco() /接收遥控码(解码程序)uint i;/检测50ms内有没有编码接收for(i=1000;i;i-) if(!W_REM) PT2272_deco(); /解码break;else d50us(1); /50uS延时recv_flg =0; /清按键没有放开过标志/<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-<-</>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院职业病防控培训体系
- 《优化整体市场战略》课件
- 《家庭教育指导》课件
- 转让露营设备合同协议
- 有奖举报协议书
- 消杀委托协议书
- 浙江小学三年级上册数学应用题100道及答案
- 中药煎药知识培训课件
- 滑板合作协议书
- 辣白菜购销合同协议
- 简易安全管理检维修作业风险分析和安全措施课件
- 24年追觅在线测评28题及答案
- 2024年雅安市人力资源和社会保障局公开招聘编外工作人员1人高频难、易错点500题模拟试题附带答案详解
- 江苏省徐州市2025届2023-2024学年高二下学期期末抽测考试+物理试卷(含答案)
- 情侣协议书电子版简单模板
- 广东省惠州市2025届高三数学第一次调研考试试题
- 英语话中国智慧树知到答案2024年吉林大学
- 沪教版数学三年级下册三位数乘两位数竖式计算题100道及答案
- 中国近代人物研究尔雅网课通识答案
- 胸腔闭式引流护理
- 山东省2025届高三第二次模拟考试历史试卷含解析
评论
0/150
提交评论