程序如下,为什么我的串口中断无法接收数据?求解??

2020-02-05 09:23发布


#include <REGX51.H>

typedef unsigned char uchar;
typedef unsigned int  uint;

bit rcv_Flag  = 0;
uchar Rcv_Buf[30];                //接收缓冲区
uchar Rcv_Sum = 0;



void Uart_Init()
{
        SCON  = 0x50;                //串口工作方式1,接受允许REN = 1,最大能产生57600 串口控制寄存器
        TMOD |= 0X20;            //定时器1工作方式2,用于自动装入8位计数器,波特率可变时,采用T1定时器
        TH1   = 0XFD;                   //9600baud         SMOD为1时19200        TI 不能开中断。
        TL1          = 0XFD;
        EA    = 1;                        //中断总允许。
        ES    = 1;                        //串口中断允许
}




/*-------------------delay1ms()-----------------------*/
void delay1ms(uint i)
{
        uchar j;
        while(i--)
        {
                for(j=0;j<115;j++)          //1ms基准延时程序
                {
                  ;
                }

        }
}

/*-------------------send_char()-----------------------*/
void send_char(uint ch)
{
        SBUF = ch;
        while(!TI)                //数据没有发送完毕
        {
                P2 = 0X00;        //点灯
        }
        P2 = 0XFF;                //灭灯
}



/*-------------------send_string()---------------------*/

void send_string(uchar *s, uint num)
{
        uint i = 0;
        for(; i < num; i ++)
        {
                send_char(*s++);
        }
}


int main(void)
{
       
    Uart_Init();
        TR1 = 1;                 //定时器工作
        while(1)
        {

                if(rcv_Flag)
                {
                        rcv_Flag = 0;                //中断标志清零
                        if(Rcv_Sum >= 30)        //超过30个字符
                                Rcv_Buf[Rcv_Sum] = '';
                        Rcv_Buf[Rcv_Sum + 1] = '';
                        Rcv_Sum = 0;                //接收的数目清零
                        send_string(Rcv_Buf, Rcv_Sum);

                }

        }
       
        return 0;
}



void INT_UartRcv(void) interrupt 4
{
           uchar ch   = 0;

        if(RI)
        {
                rcv_Flag = 1;         //setup the rcv_Flag
                ch = SBUF;
                Rcv_Buf[Rcv_Sum ++] = ch;
                RI = 0;                        //clear the interrupt
        }
}

我想在串口中断服务程序里面接收多个字符,为什么就不可以呢?求高手解释···

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