标题: STC12C5A60S2单片机双串口调试,想实现串口1发数据串口2接收后再发给串口1 [打印本页]

作者: 以及他,    时间: 2022-5-1 20:44
标题: STC12C5A60S2单片机双串口调试,想实现串口1发数据串口2接收后再发给串口1
代码如下,使用12C5A60S2 双串口调试,想实现串口1发数据串口2接收后再发给串口1,一直想不通该如何实现1发2,2转发给1。可以提供一下思路吗?
现在的代码只实现了一个串口发Hello WorldA,另一个发A,已经神志不清了,求大神指点思路。跪谢
void sendByte(unsigned char dat)
{
        SBUF = dat;
        while(!TI);
        TI = 0;
}
void sendByte2(unsigned char dat)
{
        S2BUF = dat;
        while(!(S2CON & S2TI));
        S2CON &= ~S2TI;
}
void sendString(unsigned char *dat)
{
        while(*dat != '\0')
        {
                sendByte2(*dat++);
        }
}
void sendString2(unsigned char *dat
{
        while(*dat != '\0')
        {
                sendByte2(*dat++);
        }
}
void main()
{
        UartInit();
        sendString("Hello World\r\n");
        sendByte('A');
        sendString2("Hello World\r\n");
        sendByte2('A');
        while(1)
        {
        }
}


作者: 188610329    时间: 2022-5-1 23:55
如果, 你要 Uart1_TX => Uart2_RX => Uart2_TX => Uart1_RX 这个样子走 四分之三圈的话,首先Uart1, Uart2 都必须开中断, 其次,至少 Uart1 的接受,要有接收缓冲池。当然,最好都有缓冲池。
作者: 以及他,    时间: 2022-5-2 00:12
void main()
{
        UartInit();
        while(1)
        {
        unsigned char date;
        date = SBUF;
        RI = 0;                        //
        S2BUF = date;
        while(!(S2CON & S2TI));
        S2CON &= ~S2TI;        
        }
}
作者: 以及他,    时间: 2022-5-2 12:25
188610329 发表于 2022-5-1 23:55
如果, 你要 Uart1_TX => Uart2_RX => Uart2_TX => Uart1_RX 这个样子走 四分之三圈的话,首先Uart1, Uart2  ...

大佬,帮我判断一下这段代码靠谱吗?我开俩串口工具试验了一下,串口1发串口2收我再想一下就可以2发1收了。void main()
{
        UartInit();
        while(1)
        {
        unsigned char i;
        while(RI == 0);
        buffer = SBUF;
        RI = 0;       
        send = buffer;
        S2BUF = send;
        while(!(S2CON & S2TI));                //·¢ËííêÎa1
        S2CON &= ~S2TI;
       
        while(!(S2CON & S2RI))
        S2CON &= ~S2RI;     //Clear receive interrupt flag
  buffer = S2BUF;         //P0 show UART data
        }
}

作者: Y_G_G    时间: 2022-5-2 17:08
为什么要串口1发送到串口2,然后又一个来回?这样做有什么意义呢?
作者: 以及他,    时间: 2022-5-2 19:18
Y_G_G 发表于 2022-5-2 17:08
为什么要串口1发送到串口2,然后又一个来回?这样做有什么意义呢?

调试串口啊

作者: 人人学会单片机    时间: 2022-5-7 11:17
Y_G_G 发表于 2022-5-2 17:08
为什么要串口1发送到串口2,然后又一个来回?这样做有什么意义呢?

当然有意义的,比如,需要在串口助手上,打印出250000波特率的数据,但是,所有的串口助手都没有这个波特率。只能把波特率转换称串口助手支持的波特率,比如9600 、或者115200
作者: 188610329    时间: 2022-5-7 21:08
以及他, 发表于 2022-5-2 12:25
大佬,帮我判断一下这段代码靠谱吗?我开俩串口工具试验了一下,串口1发串口2收我再想一下就可以2发1收了 ...

看你的标题, 感觉是你要  串口1 发送给 串口2, 再串口2发送给 串口1, (说实话, 如同5楼所说, 完全不理解你的目的, 并且, 实际上几乎无法实现)

但是, 看你的代码, 感觉,你是要 串口1负责收(某处发来的数据), 串口2负责把串口1收到的数据, 发送给第三方.(如果是这个目的, 那么就完全可以理解, 并且也非常容易实现的.)
所以,想确认一下,你到底,具体是什么目的?

最后说一下, 负责接收的, 必须要有中断, 不能用你这种方式,不然, 一定会数据丢失.




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1