51对PT2262接收程序,哪出错了,大神帮看下
#include"AT89x52.h"//#include"global.h"
#include"intrins.h"
//#include"51hei.H"
#defineucharunsigned char
#defineuint unsigned int
sfr AUXR =0x8E;
uchar Rem_Code;
uint TimeCount;
sbit Get_Rem=P3^2;
void delay8(uint t)
{
while(--t);
}
void Delay100us(void)
{
delay8(13);// 8-18
} //因为他的格式是00表示"0"11表示"1"01表示"F"所以我们要把12位乘以2等于24位刚好是3个字节
//第一二个字节是地址码,第三个字节是数据码//发射芯片采用的是
//PT2262芯片用4.7M的震荡电阻315M发射遥控我们全部默认地址码是 FFFFFFFF 灯解码出来就是0x55 0x55
//遥控处理函数*/
void Remote_Process(void)
{
uchar i,j,
Count=0;
Delay100us();
if(TimeCount>0)//当按键按下释放后该值不在赋值就同通过递减直到该值等于0
{ //等于0后表示按键释放
TimeCount--;
}
if(Get_Rem==0)//如果有低电平就进入解码
{
for(Count=0;Count<100;Count++)//判断12毫秒左右的引导码
{
Delay100us();//100us*100=10ms
if(Get_Rem==1)//如果在延时10毫秒期间有高电平出现就是干扰信号退出解码
{
return;
}
}
while(Get_Rem==0); //等待低电平结束
for(j=0;j<3;j++ ) //8位地址码加4位数据码
{
for(i=0;i<8;i++)
{
Count=0;
do
{
Delay100us();
Count++;
if(Count>20) //如果在大于2毫秒高电平还没有结束认为是干扰退出解码
{ //理论上是1.2毫秒,我们2毫秒留有余量,防止遥控批量中的误差
return;
}
}
while(Get_Rem==1);//计算高平时间并等待结束
Count=0;
do
{
Delay100us();
Count++;
if(Count>20)//如果在大于2毫秒低平还没有结束认为是干扰退出解码
{
return;
} }
while(Get_Rem==0); //计算低电平时间并等待结束
Rem_Code<<=1; //数据从高位开始接收所以每次向左移一位
if(Count<8) //如果低电平时间小于800毫秒认为该位为1
{
Rem_Code++;
}
}
}
ACC=Rem_Code;
if(ACC==0xc0)P0=0xef;
if(ACC==0x30)P0=0xdf;
if(ACC==0x0c)P0=0xbf;
if(ACC==0x03)P0=0x7f;
if(TimeCount==0)//为0表示是新的一次按下对其进行处理
{
}
TimeCount=1000;//按键按下标志
}
}
void main()
{
AUXR=0x01;
P1_4=0;
//guandz();
//guanled();
while(1)
{Remote_Process();//遥控处理
}
}
楼主的程序调通了吗?关注中.......{:smile:} 我见过用IN0口接一个反向器再接接收模块的,还用了定时器,你这个好像是完全用软件来解码吧 风雨无阻88 发表于 2015-10-18 13:59
楼主的程序调通了吗?关注中.......
我现在不用51做了,用PIC的做了! 写波形解码的程序,我看过了,好的51程序是用了定时器中断和外中断的下降沿触发来编程的{:lol:} 315M信号对AT89单片机干扰很大,我用汇编调通过,但距离只能在10米内。
页:
[1]