ycz_yanzone 发表于 2012-7-30 21:11:22

关于STC12C5A60S2双串口通信的问题?

串口1连接PC机,串口2连接无线模块,想实现串口1接受PC机的数据,串口2发送该数据。void Uart1InterruptReceive(void) interrupt 4
{
        if(RI)
        {        Uart1_RI=1;
                ES=0;//关串行口中断
                     RI=0;//接收中断信号清零,表示将继续接收
                   while(RI!=0);
                while(ES!=0);
                tmp=SBUF;
                              Uart1Send(tmp);   
                     
}       
void Uart1Send(char i)
{
        ES = 0; //关串口中断
        TI = 0; //清空发送完中断请求标志位
        SBUF = i;//将数据放入寄存器发送
        while(TI == 0);//等待发送完毕,发送完毕 TI == 1
        TI = 0;        //清空发送完中断请求标志位
        ES = 1;       //开串口中断       
}

void Uart2Send(char i)
{
        unsigned char temp = 0;
       
        IE2 &= (~ES2);//关闭串口2中断//ES2 = 0;
        S2CON &= (~S2TI);//S2TI = 0;
        S2BUF = i;//装入数据
        do
        {
                temp = S2CON;
                temp = temp & 0x02;//temp = S2TI;
        }while(temp == 0);//判断是否发送完毕

        S2CON &= (~S2TI);//S2TI = 0;
        IE2 |= ES2;//ES2 = 1;
               
}

void main()
{       一些发送的AT指令,连接网络,这边程序省略
         if(Uart1_RI==1)
         Uart2Send(tmp);
         }
实现出来的结果是PC机通过串口调试助手可以收到发的字符串,而服务器只能收到该字符串的第一个字符。SBUF只能缓存一个字节,就觉得肯定是这边出了问题,如何通过串口实现发送接收字符串,请各位大侠帮我看看,指点指点,对这一块不是很懂,非常感谢~

lcw_swust 发表于 2012-7-30 21:28:55

最好是把收到的数放入队列(或数组),主函数读出来处理。
楼主的串口1接收中断里在往外发数,占用了时间,所以主函数分配不到足够的时间来往串口2发数。
页: [1]
查看完整版本: 关于STC12C5A60S2双串口通信的问题?