用stc89c52的单片机设计红外遥控,运行后没反应 跪求大神指点

2019-07-15 14:30发布

用stc89c52的单片机设计红外遥控,运行后没反应 跪求大神指点 本人在校学生,在赶毕业设计,程序是参考网上的,自己写的。
程序的意思是p2.0口输出PWM波,中断0接红外接收口,附上遥控器的码值图,任务是按“+”“-”键使pwm波的占空比发生变化。 程序如下
#include<reg51.h>
#define uchar unsigned char
#define uint  unsigned int
sbit pwm0=P2^0;
sbit hwx=P3^2;
uchar lsd=0xfe;
uchar n=0,pwm=1,q=50;
uchar recv[4];                                                                               
/*****************************产生PWM波*************************************/
void delay140us(uchar x)
{
        unsigned char k;
        while(x--)
        {
                for(k=0;k<13;k++){}
        }
}
void tset()
{
        TMOD=0x01;
        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        EA=1;
        ET0=1;
        TR0=1;
}
void PWMout() interrupt 1
{

        TH0=(65536-10)/256;
        TL0=(65536-10)%256;
        n++;       
        if(n<=q)
        {
                pwm=1;
        }
        else
        {
                pwm=0;
        }
        if(n==101)
        {
                n=0;
        }
}
   /*****************************产生PWM波***************************************/
/*********************************** 红外线接收*******************************************/
void Irecv() interrupt 0
{
        unsigned char i,j,c=0;
        EX0=0;
        delay140us(15);
        if(hwx==1)
        {
                EX0=1;
                return;
        }
        while(!hwx)
        {
                delay140us(1);       
        }
        for(i=0;i<4;i++)
        {
                for(j=0;j<8;j++)
                {
                        while(hwx)
                        {
                                delay140us(1);
                        }
                        while(!hwx)
                        {
                                delay140us(1);
                        }
                        while(hwx)
                        {
                                c++;
                                if(c>=30)
                                {
                                        EX0=1;
                                        return;
                                }
                        }
                        recv[i]=recv[i]>>1;
                        if(c>=8)
                        {
                                recv[i]=recv[i]|0x80;
                        }
                        c=0;
                }         
        }
        if(recv[2]!=~recv[3])
        {
                EX0=1;
                return;
        }
        switch(recv[2])
        {
                        case 0x07:q++;break;
                        case 0x15:q--;break;
        }
        EX0=1;
}
/***************************************红外线接收************************************/
void main()
{
        EA=1;
        EX0=1;
        IT1=1;
        tset();
        hwx=1;
        while(1)
        {
                pwm0=pwm;
        }
}

T2SCnrXiBaXXXXXXXX_!!361121710.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。