BSMGood 发表于 2012-5-11 21:57:49

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


#include <REGX51.H>

typedef unsigned char uchar;
typedef unsigned intuint;

bit rcv_Flag= 0;
uchar Rcv_Buf;                //接收缓冲区
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 = '\0';
                        Rcv_Buf = '\0';
                        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 = ch;
                RI = 0;                        //clear the interrupt
        }
}

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

donglaile 发表于 2012-5-14 00:59:26


那个串口中断里的if加个else执行清发送中断位

BSMGood 发表于 2012-5-16 08:57:56

问题解决了,哈哈
页: [1]
查看完整版本: 程序如下,为什么我的串口中断无法接收数据?求解??