您现在的位置:首页 > 技术支持技术支持

一个红外解码程序。请大神帮忙看看哪里出的错?

发布时间:2021-10-18 08:59:00  来源:大电流电感厂家   查看:
#include
typedef unsigned char uint8;
sbit IR=P3^3;
uint8 IR_buf[4];         
void uart_init()
{
        TMOD=0X21;
        SCON=0X50;          //´®ÐпڿØÖƼĴæλ
        TH1=0XFD;
        TL1=0XFD;
        TR1=1;
}
void uart_send(uint8 dat)
{
        SBUF=dat;          //½«datµÄÖµ¸³¸øSBUF´®¿Ú
        while(ti==0);      //µÈ´ý·¢ËͽáÊø
        TI=0;        
}

unsigned int IR_get()
{
        TL0=0;
        TH0=0;
        TR0=1;
        while(!IR &&(TH0&0X80)==0); //!IRºÍ(TH0&0X80)½øÐа´Î»ÓëÔËËã¡£Ö»ÒªÓÐÒ»¸öÌõ¼þΪ0¾ÍÖ´ÐÐwhile È»ºó¶Áȡʱ¼ä
        TR0=0;        //¹Ø±Õ¶¨Ê±Æ÷
        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))           //µÍµçƽÂö³å8500-9500US
                                 goto start;
                         temp=IR_geth();
                         if((temp<3686) || (temp>4608))         //¸ßµçƽÂö³å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天,没必要晒出来。              


人中狼 发表于 2017-9-25 10:59
建议你在论坛里找找定时器方式的红外解码程序对照参考一下,你的程序可能有多处错误,还有解码的思路可能也有 偏差,至少这个语句return(TH0*256+TH0);,最后应该是加TL0吧

人中狼 发表于 2017-9-25 10:59
建议你在论坛里找找定时器方式的红外解码程序对照参考一下,你的程序可能有多处错误,还有解码的思路可能也有 偏差,至少这个语句return(TH0*256+TH0);,最后应该是加TL0吧
平面变压器厂家 | 平面电感厂家

基于TMS320C6713和MAX1420的高速数据采集系统设1 引言 数据采集系统是通信与信息技术领域中重要的功能模块,应用广泛。而传统的数据采集系统大多以单片机或中规模数字电路为核心,其模数转换器(A/D转换器)采样速率较低。显然传统数据采集系统不能完全满足

分析M16C62在uC/OS-II嵌入式系统中的应用 随着微电子技术和网络的发展,人们对网络的认识日益深入。网络终端产品也越来越受到人们的关注,嵌入式操作系统的应用也得到了前所未有的发展,人们对嵌入式的研究也有了长足的进步。基于某个操作系统的实时、多任

一种基于三电平的单级PFC电路设计O 引言目前,带有功率因数校正功能的开关变换器通常分为两级结构和单级结构两种。两级结构电路具有良好的性能,但是元器件个数较多,与没有PFC功能的电路相比成本会增加。而单级PFC变换器中PFC级和DC/

CopyRight2014
大电流电感 | 大功率电感 | 扁平线圈电感 注塑加工厂