- 图为我实测的波形图,PT2262一次发射4组相同的编码,每组码之间用同步码分开,考虑到用A4纸打印,每行只有一组码,共四行,第五行是把同步码单独切出来,方便看。
- /******************************************************************************************
- 项目名称: 意大利无线门铃
- 程序功能: PT2262解码程序
- 晶 振: 4 MHz
- 版 本: V1.0
-
- PT2262震荡电阻为4.7M,如电阻不一样需改一下程序时间
- 本程序是用来做无线收发所用,如果用于红外发光管请将震荡电阻改为430K-470K
- 当然程序里的时间也要改哦
- 我的连接方法是将PT2262的数据输出端经过三极管反向后直接接到AT89C2051的P3.2,
- PT2262与AT89C2051同一个5V电源
- PT2262是两个脉冲代表一位,我解码是将每个脉冲当成一位,宽的为1,窄的为0,
- 这样就是24位,解码结果放在receive[3]里
- 本程序刚刚写完,用仿真器试解码结果没有问题,还没有接高频发射线路试,
- 先把它贴上来再说。
-
- *******************************************************************************/
- #i nclude <reg51.h>
- sbit RemPin = P3^2 ;
- unsigned char receive[3];
- void RemIn(void) interrupt 0 using 1
- {
- unsigned char i,j;
- unsigned int temp;
- EA=0;
- TH0=0;
- TL0=0;
- while (!RemPin); //等待高电平
- TR0=1;
- while (RemPin) //等待低电平
- if (TF0==1) goto RemExit; //超时就退出;
- TR0=0;
- temp=TH0;
- temp=(temp<<8)+TL0;
- if (temp>6000 || temp<4000) //判断同步码的宽度
- {
- temp=TH0;
- goto RemExit;
- }
- //同步码检测成功
- for (i=0; i<3; i++) //解 3*8=24 位码
- for (j=0; j<8; j++)
- {
- while (!RemPin); //等待高电平
- TH0=0;
- TL0=0;
- TR0=1;
- while (RemPin) //等待低电平
- if (TF0==1) goto RemExit; //超时就退出
- TR0=0;
- temp=TH0;
- temp=((temp<<8)+TL0);
- // /*
- if (temp>400 && temp<600)
- {
- receive[i]=receive[i]<<1;
- receive[i]=receive[i]+1; //保存 1
- }
- else if (temp>100 && temp<234)
- {
- receive[i]=receive[i]<<1; //保存0
- }
- else goto RemExit;
- }
- temp=0;//在这里设置一个断点,运行到这里后看看receive里的三个字节数据就是解码的结果
- RemExit:
- {
- TR0=0;
- EA=1;
- RemPin=1;
- TF0=0;
- return;
- }
- }
- ///*
- main()
- {
- RemPin=1;
- EA=1;
- IT0=1; //设定INT0的触发方式为脉冲负边沿触发
- EX0=1; //打开INT0中断请求
- TMOD=0x01;
- while (1);
- //RemPin=1;
- }
复制代码
|