一个红外解码程序。请大神帮忙看看哪里出的错?
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
typedef unsigned char uint8;
sbit IR=P3^3;
uint8 IR_buf[4];
void uart_init()
{
TMOD=0X21;
SCON=0X50; //′?DD?ú??????′???
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
void uart_send(uint8 dat)
{
SBUF=dat; //??datμ??μ?3??SBUF′??ú
while(TI==0); //μè′y·¢?í?áê?
TI=0;
}
unsigned int IR_get()
{
TL0=0;
TH0=0;
TR0=1;
while(!IR &&(TH0&0X80)==0); //!IRoí(TH0&0X80)??DD°′??ó??????£??òaóDò???ì??t?a0?í?′DDwhile è?oó?áè?ê±??
TR0=0; //1?±??¨ê±?÷
return (TH0*256+TH0); //·μ??ê±???μ
}
unsigned int IR_geth()
{
TL0=0;
TH0=0;
TR0=1;
while(IR&&(TH0&0X80)==0);
TR0=0;
return(TH0*256+TH0);
}
void main ()
{
unsigned int temp;
char i,j;
uart_init();
while(1)
{
start:
while(IR);
temp=IR_get();
if((temp<7833)||(temp>8755)) //μíμ?????3?8500-9500US
goto start;
temp=IR_geth();
if((temp<3686) || (temp>4608)) //??μ?????3?4000-5000US
goto start;
for(i=0;i<4;i++) //4??×??ú
{
for(j=0;j<8;j++) //????×??ú8??
{
temp=IR_get();
if((temp<184)||(temp>737)) //200-800us
goto start;
temp=IR_geth();
if((temp<184)||(temp>1843)) //200-2000us
goto start;
IR_buf>>=1;
if(temp>1302)
IR_buf|=0x80;
}
}
uart_send(IR_buf[0]);
uart_send(IR_buf[1]);
uart_send(IR_buf[2]);
uart_send(IR_buf[3]);
}
}
我现在编译下载到板子上了。但是串口助手那里读到的按键值每按一次都不一样(同一个按键)。
typedef unsigned char uint8;
sbit IR=P3^3;
uint8 IR_buf[4];
void uart_init()
{
TMOD=0X21;
SCON=0X50; //′?DD?ú??????′???
TH1=0XFD;
TL1=0XFD;
TR1=1;
}
void uart_send(uint8 dat)
{
SBUF=dat; //??datμ??μ?3??SBUF′??ú
while(TI==0); //μè′y·¢?í?áê?
TI=0;
}
unsigned int IR_get()
{
TL0=0;
TH0=0;
TR0=1;
while(!IR &&(TH0&0X80)==0); //!IRoí(TH0&0X80)??DD°′??ó??????£??òaóDò???ì??t?a0?í?′DDwhile è?oó?áè?ê±??
TR0=0; //1?±??¨ê±?÷
return (TH0*256+TH0); //·μ??ê±???μ
}
unsigned int IR_geth()
{
TL0=0;
TH0=0;
TR0=1;
while(IR&&(TH0&0X80)==0);
TR0=0;
return(TH0*256+TH0);
}
void main ()
{
unsigned int temp;
char i,j;
uart_init();
while(1)
{
start:
while(IR);
temp=IR_get();
if((temp<7833)||(temp>8755)) //μíμ?????3?8500-9500US
goto start;
temp=IR_geth();
if((temp<3686) || (temp>4608)) //??μ?????3?4000-5000US
goto start;
for(i=0;i<4;i++) //4??×??ú
{
for(j=0;j<8;j++) //????×??ú8??
{
temp=IR_get();
if((temp<184)||(temp>737)) //200-800us
goto start;
temp=IR_geth();
if((temp<184)||(temp>1843)) //200-2000us
goto start;
IR_buf>>=1;
if(temp>1302)
IR_buf|=0x80;
}
}
uart_send(IR_buf[0]);
uart_send(IR_buf[1]);
uart_send(IR_buf[2]);
uart_send(IR_buf[3]);
}
}
我现在编译下载到板子上了。但是串口助手那里读到的按键值每按一次都不一样(同一个按键)。
建议你在论坛里找找定时器方式的红外解码程序对照参考一下,你的程序可能有多处错误,还有解码的思路可能也有 偏差,至少这个语句return(TH0*256+TH0);,最后应该是加TL0吧
代码没调试个4-5天,没必要晒出来。
多谢指点...
我的亲哥。改成 TL0就好了。