打印

关于51单片机接收红外信号的问题

[复制链接]
1258|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21icsanta|  楼主 | 2009-4-15 23:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用AT89S52的int0口接收TC9012红外遥控器发出的红外信号,硬件是没问题,红外信号现在也能正常接收且显示。但问题是一旦遥控器按键长按的话,就感觉好像程序一直在中断程序里跑不出来,短按就没问题。
比如说我用遥控器代替键盘做个电子琴,如果遥控器短按的话,蜂鸣器发出的声音可以连续,但长按的话,蜂鸣器只响一声,就不想了
#include<reg51.h>

sbit remin=P3^2;
sbit dout=P3^5;
unsigned char a,b;
unsigned char rdata;
unsigned char code table[8][2]={0xfe,0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,0xc1,0xfe,0xe4,0xff,0x03,0xff,0x11}  ;
#define aa 0
#define ab 1
#define ac 2
#define ad 3
#define ae 4
#define af 5
#define ag 6
#define aaa 7
#define stop 30


asd( ) interrupt 3 using 1
{
    TH1=a;TL1=b;
    dout=~dout;
}


REM()interrupt 0 using 1
{
 unsigned int x;
 unsigned char a,b,c,remdata1[4];
 for(x=0;!remin&&x<0x180;x++);             //引导码
 if(x<0x100||x>0x160) goto remout;
 for(x=0;remin&&x<0x180;x++);
 if(x<0x100||x>0x160) goto remout;
 TF0=TH0=TL0=a=b=c=0,TMOD|=1,TR0=1;
 do
  {while(b<8)
   {while(!TF0&&!remin);if(TF0)goto remout;
    while(remin);if(TF0)goto remout;
    a>>=1;if(TH0>6)a|=0x80;TH0=TL0=0;b++;
   }b=0;remdata1[c]=a;a=0;
  }
 while(c++<3);                           // 地址吗效验
 if(remdata1[0]==remdata1[1]){if(remdata1[2]==~remdata1[3])rdata=remdata1[2];}//      指令校验
 
 
 remout:
 ;
}


main()
{
    TMOD=0x10;
    EA=1;
    ET1=1;
    TR1=0;
    EX0=1;

    while(1) 
    {    
        
    
        if(rdata==aa)
            {a=table[0][0];b=table[0][1];TR1=1;}
            else if (rdata==ab)
                {a=table[1][0];b=table[1][1];TR1=1;}
                else if (rdata==ac)
                    {a=table[2][0];b=table[2][1];TR1=1;}
                    else if (rdata==ad)
                        {a=table[3][0];b=table[3][1];TR1=1;}
                            else if (rdata==ae)
                                {a=table[4][0];b=table[4][1];TR1=1;}
                                    else if (rdata==af)
                                        {a=table[5][0];b=table[5][1];TR1=1;}
                                            else if (rdata==ag)
                                                {a=table[6][0];b=table[6][1];TR1=1;}
                                                 else if (rdata==aaa)
                                                     {a=table[7][0];b=table[7][1];TR1=1;}
                                                    else if (rdata==stop)
                                                        TR1=0;            
        
    }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

74

帖子

0

粉丝