问答

汇集网友智慧,解决技术难题

21ic问答首页 - N76E003串口多字节接收

串口 N76E003 单片机 新唐 单片机串口

N76E003串口多字节接收

ynl020102020-09-09
各位大神新唐N76E003单片机串口0只能单字节接收,多字节接收失败!有哪位大神给指点一下,不胜感激
回答 +关注 15
1833人浏览 10人回答问题 分享 举报
10 个回答
  • 建议看下波型,看是否10个都有送出来
  • 谢谢各位大神鼎力相助,我随后一一验证排查,感谢感谢!!!!
  • 如果波特率是115200,发送/接收一个字节时间大约是86微秒。进出中断的时间可能不太够。导致接收程序来不及接收接连发送过来的数据。最好先尝试每隔一个时间T发送一个字节,发10个。
    然后,缩短T的大小。比如先每隔1毫秒发送一个字节,再尝试隔500微秒,按此办法。你可能会找到一个最短间隔。低于此间隔接收端就会丢数据。
    可以减小波特率,或者按照刚才说的在发送数据时,间隔一定的时间。
  • 已验证过的代码,欢迎参照

    https://www.cnblogs.com/technology-jingxinwen/p/13149893.html
  • void SerialPort1_ISR(void) interrupt 15
    {
        if (RI_1==1)
        {                                       /* if reception occur */
            clr_RI_1;                             /* clear reception flag for next reception */
            UART_BUFFER[u16CNT] = SBUF_1;
            u16CNT ++;
                                    riflag =1;
        }
        if(TI_1==1)
        {
            clr_TI_1;                             /* if emission occur */
        }
    }

    void main (void)
    {
            P12_PushPull_Mode;                // For I/O toggle display
           
    #if 0       
    //for Simple use UART1 transmit out
                    InitialUART1_Timer3(115200);               
        while(1)
        Send_Data_To_UART1(0x55);
                   
    #else                       
    // For interrupt setting check receive
                    InitialUART1_Timer3(115200);
                    set_ES_1;                                        //For interrupt enable
                    set_EA;
                   
                    while(1)
                    {
                            if (riflag)
                            {
                                            P12 = ~ P12;                        //Receive each byte P12 toggle, never work under debug mode
                                            riflag = 0;
                            }
                    }

    #endif
                           
           
                   
    }
  • 例程就可以的啊
  • 无法理解的操作。
  • ynl02010 发表于 2020-9-9 14:19
    恢复了,也是不行啊,最开始是没有注释掉的

    另外这个程序如果单字节发送10次,最终也能将这十次的数据打印出来,但是一次性发送10个字节是失败的,不知道咋回事
  • kation122 发表于 2020-9-9 12:34
    串口中断里面,没有clr_Ti ,把注销的那几行恢复回来。

    恢复了,也是不行啊,最开始是没有注释掉的
12下一页

您需要登录后才可以回复 登录 | 注册