pt2262解码学习总结.doc_第1页
pt2262解码学习总结.doc_第2页
pt2262解码学习总结.doc_第3页
pt2262解码学习总结.doc_第4页
pt2262解码学习总结.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

芯片资料:/view/dbedded43186bceb19e8bb2e.html?from=rec&pos=0网上有几个用51的做pt2262的软件解码。但我做了实验并不成功。怀疑原因在于:1、 跟遥控器的发射频率有关,他们写的程序都没有注明遥控器的发射频率。很有可能就是因为他们只是解码了他使用的那个遥控器。而无法解码用了其他频率的遥控器。Pt2262芯片的发射频率跟p15和p16脚之间的电阻有关。关系式为: 振荡频率f=2*1000*16/Rosc(单位k欧) kHz 其中Rosc为振荡电阻参考资料:1、 /view/8c7b8ec78bd63186bcebbcc4.html?from=related&hasrec=12、 /view/0d81a38ca0116c175f0e4859.html这里的一般电阻值不用去理它。可以根据实际来选择合适的电阻。3、 厂里有一款遥控的振荡电阻是4.7M欧。用公式振荡频率f=2*1000*16/Rosc(单位k欧) kHz 其中Rosc为振荡电阻求得:f=6.8085kHz 约等于 6.8kHZ。周期为:1.468752294e-4 s 0.000146875s 即a=147us4、 用51解码程序参考资料例程一:/jh_zzz/article/details/5904888/* 文件名:Decode.c* 描 述:对PT226的编码信号进行解码* PT2262的输出信号经三极管*反向后送入单片机的中断引脚* 代 码:A0 - A11 中的每bit用2bit表示:0码:00 ;1码:11* 硬 件:AT89S52 、S9013* 晶 振:11.0592* 日 期:2008-08-02* 备 注:PT2262输出数据的顺序:A0 A1 - A10 A11+同步码+A0 A1 - A10 A11+同步码,连续发四次*/#include /51系列头文件#include /方便调用_nop_();做延时用;unsigned char Receive3 ; /解码缓冲区:Receive0:A0 A1 A2 A3 ; Recdive1:A4 A5 A6 A7 ; Receive2: D3 D2 D1 D0/Recdivex:xx xx xx xx 代表 4bitbit flag = 0 ; /解码完成标志位sbit RemPin = P32 ; /编码信号输入脚/* 函数名:IntInitial( )* 描 述:中断系统初始化* 参 数:输入参数:无输出参数:无*/void IntInitial( void )IT0 = 1 ; /外部中断0下降沿有效EX0 = 1 ; /开外部中断0EA = 1 ; /开全局中断/* 函数名:INT0_ISR( )* 描 述: 外部中断0服务函数,实现对PT2262的解码* 参 数:输入参数:无输出参数:无*/void INT0_ISR(void) interrupt 0 using 1unsigned char i = 0 ;unsigned char j = 0 ;unsigned int temp = 0x0000;EA = 0 ;TH0 = 0 ;TL0 = 0 ; /11.0592 最大值 71111uswhile( !RemPin); /等待高电平的到来,检测同步头TR0 = 1 ; /启动定时器0,开始测量高电平的宽度while( RemPin) if( TF0 = 1 ) goto RemExit; /定时器超时溢出则退出TR0 = 0 ;temp = TH0 ;temp = temp 8 ;temp = temp + TL0 ; /取得高电平的宽度if( ( 0x0D8F /*3471*/ temp ) & ( temp 0x0F8F /*3983*/) ) /检测到同步头for( j = 0 ; j 3 ; j +) /循环3次for( i = 0 ; i 8; i + )TH0 = 0 ;TL0 = 0 ;while( !RemPin); /等待高电平到来TR0 = 1 ; /开启定时器0 ,测量高电平的宽度while( RemPin) if( TF0 = 1 ) goto RemExit; /定时溢出则退出 TR0 = 0 ;temp = TH0 ;temp = temp 8 ;temp = temp + TL0 ; /取得高电平的宽度if( ( 0x60 /*96*/ temp ) & (temp 0x90 /*144*/ ) ) /判断得窄脉冲:1表示Receivej = Receivej 1 ;Receivej = Receivej + 0x01 ;else if( ( 0x0100 /*256*/ temp) & (temp 0x0200 /*512*/) ) /判断得宽脉冲:0表示Receivej = Receivej 1 ;else return; flag = 1 ; /表示已解码完毕return;else goto RemExit;RemExit:TR0 = 0 ;EA = 1 ;TF0 = 0 ;RemPin = 1 ;return; void main( void )unsigned char i = 0 ;unsigned int j = 0 ;unsigned char Dat = 0x00;unsigned char RemDat = 0x00 ; /解码后数据寄存器IntInitial( ); /中断系统初始化/Init_uart(); /串口初始化while(1)if( flag ) /解码完毕flag = 0 ;RemDat = 0x00;for( i = 0 ; i 4 ; i +)Dat = Receive2;Receive2 = Receive2 2 ;Dat = Dat & 0xC0; /判断高2bitif( Dat = 0xC0 ) /高2bit:11 ;则为1码 ;否则为0码RemDat = RemDat 1 ;RemDat = RemDat + 0x01; elseRemDat = RemDat 1 ;P0 = RemDat ; /将解码后的数据送入P0口,通过开发板上的LED显示出来for( i = 0 ; i 2 ; i +) /普通延时for( j = 0 ; j 0xFFFF ; j + )_nop_();TF0 = 0 ;EA = 1 ; /重开中断例程二:/view/b1b8e31e59eef8c75fbfb3db.html?from=rec&pos=0例程三:/*-; Copyright (C) 2006 WangChanghong INTEGRATED PRODUCTS, INC.; All rights reserved.; MCU:AT89s52 ,晶体频率:12MHz: 作者:汪长洪: 时间:2006年08月01日; 地点:威海;-315M无线遥控解码程序-*/ #include #define uchar unsigned char#define uint unsigned int/*-变量列表-*/uchar ReadCode3,GetCode;/*-函数列表-*/void delay_200(void); /200us精确延时void delay_250(void); /250us精确延时void delay_131(void); /131ms精确延时void init(void); /初始化子程序void INT0_intrupt(); /中断处理子程序(解码程序)/*-主程序入口-*/main()init(); while(1) P2=GetCode|0xf0; /*-初始化子程序-*/void init(void) EA=1; /打开CPU总中断请求EX0=1; /打开INT0中断请求 IT0=1; /设定INT0的触发方式为脉冲负边沿触发 /*-200us精确延时-*/void delay_200(void) uchar i,j;for(i=0x05;i0;i-)for(j=0x12;j0;j-);/*-250us精确延时-*/void delay_250(void) uchar i,j;for(i=0x05;i0;i-)for(j=0x17;j0;j-);/*-131ms精确延时-*/void delay_131(void) uchar i,j;for(i=0xfe;i0;i-)for(j=0xfe;j0;j-);/*-外部中断0子程序(解码程序)-*/void INT0_intrupt(void) interrupt 0 using 1uchar i,j;bit BitState_2; EX0=0; /找起始位/for(i=0;i50;i+);if(P3_2=1) goto kk;while(P3_2=0);for(i=0;i0;i-) /重复20次,检测在3750微秒内出现高电平就退出解码程序 delay_200(); if(P3_2=1) goto kk; while(P3_2=0);/接收数据/ for(j=0;j3;j+) for(i=0;i8;i+) delay_250();BitState_2=P3_2;ReadCodej=ReadCodej1;ReadCodej=ReadCodej|BitState_2; if(P3_2=1) while(P3_2=1);while(P3_2=0); /校验及运算数据/ for(i=0;i3;i+) if(ReadCodei|0x55)&(ReadCodei&0x55)1)!=0x00) goto kk; /校验 GetCode=0x00; for(i=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论