pt2262解码学习总结讲解.docx
- 文档编号:26991169
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:15
- 大小:246.66KB
pt2262解码学习总结讲解.docx
《pt2262解码学习总结讲解.docx》由会员分享,可在线阅读,更多相关《pt2262解码学习总结讲解.docx(15页珍藏版)》请在冰豆网上搜索。
pt2262解码学习总结讲解
芯片资料:
网上有几个用51的做pt2262的软件解码。
但我做了实验并不成功。
怀疑原因在于:
1、跟遥控器的发射频率有关,他们写的程序都没有注明遥控器的发射频率。
很有可能就是因为他们只是解码了他使用的那个遥控器。
而无法解码用了其他频率的遥控器。
Pt2262芯片的发射频率跟p15和p16脚之间的电阻有关。
关系式为:
振荡频率f=2*1000*16/Rosc(单位k欧)kHz其中Rosc为振荡电阻
参考资料:
1、
2、
这里的一般电阻值不用去理它。
可以根据实际来选择合适的电阻。
3、厂里有一款遥控的振荡电阻是4.7M欧。
用公式
振荡频率f=2*1000*16/Rosc(单位k欧)kHz其中Rosc为振荡电阻
求得:
f=6.8085kHz约等于6.8kHZ。
周期为:
1.468752294e-4s0.000146875s即a=147us
4、用51解码程序参考资料
例程一:
/******************************************
*******文件名:
Decode.c
*******描述:
对PT226的编码信号进行解码
*******PT2262的输出信号经三极管
*******反向后送入单片机的中断引脚
*******代码:
A0--A11中的每bit用2bit表示:
0码:
00;1码:
11
*******硬件:
AT89S52、S9013
*******晶振:
11.0592
*******日期:
2008-08-02
*******备注:
PT2262输出数据的顺序:
A0A1--A10A11+同步码+A0A1--A10A11+同步码,连续发四次
*******************************************/
#include
#include
unsignedcharReceive[3];//解码缓冲区:
Receive[0]:
A0A1A2A3;Recdive[1]:
A4A5A6A7;Receive[2]:
D3D2D1D0
//Recdive[x]:
xxxxxxxx代表4bit
bitflag=0;//解码完成标志位
sbitRemPin=P3^2;//编码信号输入脚
/***************************************
*******函数名:
IntInitial()
*******描述:
中断系统初始化
*******参数:
输入参数:
无
输出参数:
无
****************************************/
voidIntInitial(void)
{
IT0=1;//外部中断0下降沿有效
EX0=1;//开外部中断0
EA=1;//开全局中断
}
/******************************************************
*******函数名:
INT0_ISR()
*******描述:
外部中断0服务函数,实现对PT2262的解码
*******参数:
输入参数:
无
输出参数:
无
*******************************************************/
voidINT0_ISR(void)interrupt0using1
{
unsignedchari=0;
unsignedcharj=0;
unsignedinttemp=0x0000;
EA=0;
TH0=0;
TL0=0;//11.0592最大值71111us
while(!
RemPin);//等待高电平的到来,检测同步头
TR0=1;//启动定时器0,开始测量高电平的宽度
while(RemPin)
{
if(TF0==1)
{
gotoRemExit;//定时器超时溢出则退出
}
}
TR0=0;
temp=TH0;
temp=temp<<8;
temp=temp+TL0;//取得高电平的宽度
if((0x0D8F/*3471*/ { 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) { gotoRemExit;//定时溢出则退出 } } TR0=0; temp=TH0; temp=temp<<8; temp=temp+TL0;//取得高电平的宽度 if((0x60/*96*/ 1表示 { Receive[j]=Receive[j]<<1; Receive[j]=Receive[j]+0x01; } elseif((0x0100/*256*/ 0表示 { Receive[j]=Receive[j]<<1; } elsereturn; } } flag=1;//表示已解码完毕 return; } else { gotoRemExit; } RemExit: { TR0=0; EA=1; TF0=0; RemPin=1; return; } } voidmain(void) { unsignedchari=0; unsignedintj=0; unsignedcharDat=0x00; unsignedcharRemDat=0x00;//解码后数据寄存器 IntInitial();//中断系统初始化 //Init_uart();//串口初始化 while (1) { if(flag)//解码完毕 { flag=0; RemDat=0x00; for(i=0;i<4;i++) { Dat=Receive[2]; Receive[2]=Receive[2]<<2; Dat=Dat&0xC0;//判断高2bit if(Dat==0xC0)//高2bit: 11;则为1码;否则为0码 { RemDat=RemDat<<1; RemDat=RemDat+0x01; } else { RemDat=RemDat<<1; } } P0=RemDat;//将解码后的数据送入P0口,通过开发板上的LED显示出来 for(i=0;i<2;i++)//普通延时 { for(j=0;j<0xFFFF;j++) { _nop_(); } } TF0=0; EA=1;//重开中断 } } } 例程二: 例程三: /*------------------------------------------------------------------------------ ;Copyright(C)2006WangChanghongINTEGRATEDPRODUCTS,INC. ;Allrightsreserved. ;MCU: AT89s52,晶体频率: 12MHz : 作者: 汪长洪 : 时间: 2006年08月01日 ;地点: 威海 ;----------------------------315M无线遥控解码程序------------------------------*/ #include #defineucharunsignedchar #defineuintunsignedint /*---------------------------------变量列表------------------------------------*/ ucharReadCode[3],GetCode; /*---------------------------------函数列表------------------------------------*/ voiddelay_200(void);//200us精确延时 voiddelay_250(void);//250us精确延时 voiddelay_131(void);//131ms精确延时 voidinit(void);//初始化子程序 voidINT0_intrupt();//中断处理子程序(解码程序) /*-----------------------------主程序入口--------------------------------------*/ main() { init(); while (1) { P2=~GetCode|0xf0; } } /*---------------------------------初始化子程序--------------------------------*/ voidinit(void) { EA=1;//打开CPU总中断请求 EX0=1;//打开INT0中断请求 IT0=1;//设定INT0的触发方式为脉冲负边沿触发 } /*-------------------------------200us精确延时---------------------------------*/ voiddelay_200(void) { uchari,j; for(i=0x05;i>0;i--) for(j=0x12;j>0;j--); } /*-------------------------------250us精确延时---------------------------------*/ voiddelay_250(void) { uchari,j; for(i=0x05;i>0;i--) for(j=0x17;j>0;j--); } /*-------------------------------131ms精确延时--------------------------------*/ voiddelay_131(void) { uchari,j; for(i=0xfe;i>0;i--) for(j=0xfe;j>0;j--); } /*-------------------------外部中断0子程序(解码程序)---------------------------*/ voidINT0_intrupt(void)interrupt0using1 { uchari,j; bitBitState_2; EX0=0; //////////////////////////////找起始位////////////////////////////////////////// for(i=0;i<50;i++); if(P3_2==1)gotokk; while(P3_2==0); for(i=0;i<50;i++); if(P3_2==0)gotokk; delay_200(); if(P3_2==1)gotokk; for(i=15;i>0;i--)//重复20次,检测在3750微秒内出现高电平就退出解码程序 { delay_200(); if(P3_2==1)gotokk; } while(P3_2==0); ///////////////////////////////接收数据/////////////////////////////////////////// for(j=0;j<3;j++) { for(i=0;i<8;i++) { delay_250(); BitState_2=P3_2; ReadCode[j]=ReadCode[j]<<1; ReadCode[j]=ReadCode[j]|BitState_2; if(P3_2==1)while(P3_2==1); while(P3_2==0); } } ////////////////////////////////校验及运算数据///////////////////////////////////// for(i=0;i<3;i++) { if((~(ReadCode[i]|0x55))&((ReadCode[i]&0x55)<<1)! =0x00)gotokk;//校验 } GetCode=0x00; for(i=0;i<8;i++) { GetCode|=((ReadCode[2]>>i)&(ReadCode[2]>>(i+1))&0x01< } ////////////////////////////////////////////////////////////////////////////////// delay_131(); delay_131(); delay_131(); delay_131(); kk: EX0=1; } avr单片机解码例程 例程一:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pt2262 解码 学习 总结 讲解