我要用这个程序解 PT2262的反码 单片机用AT89C52,4M晶振,pt2262震荡电阻为4.7M. 求高手帮忙看下我这个pt2262解码程序是否有误!!
#include<AT89X52.h> #include<stdio.h> sbit RemPin = P3^2 ;
unsigned char receive[24];
void RemIn(void) interrupt 0 using 1 { unsigned char i,j; unsigned int temp; EA=0; TH0=0; TL0=0; //计时器清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) //判断同步码的宽度 goto RemExit;//同步码检测不成功就退出 //同步码检测成功 开始解码,pt2262每位0,1 由两个高脉冲组成,我规定宽脉冲为1,窄脉冲为0,1由1,1(两个宽脉冲)组成,0由0,0(两个窄脉冲)组成 解到宽脉冲就存1 解反码则解到宽脉冲就存0 pt2262每组数据有12个0,1组成 ,所以我们解码为24为数据,把它们存到receive[24];
for (i=0; i<24; i++) { while (!RemPin){}; //等待高电平
TH0=0; TL0=0; //计时器清0 TR0=1; //开始计时
while (RemPin) {}; //等待低电平
if (TF0==1) goto RemExit; TR0=0; temp=TH0; temp=((temp<<8)+TL0); if (temp>400 && temp<600) { receive=0; //解到宽脉冲
} else if (temp>100 && temp<234) { receive=1; //解到窄脉冲 } else goto RemExit; }
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; }
|