打印
[技术问答]

N76E003串口多字节接收

[复制链接]
1817|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
各位大神新唐N76E003单片机串口0只能单字节接收,多字节接收失败!有哪位大神给指点一下,不胜感激

使用特权

评论回复
沙发
kation122| | 2020-9-9 12:34 | 只看该作者
串口中断里面,没有clr_Ti ,把注销的那几行恢复回来。

使用特权

评论回复
板凳
ynl02010|  楼主 | 2020-9-9 14:19 | 只看该作者
kation122 发表于 2020-9-9 12:34
串口中断里面,没有clr_Ti ,把注销的那几行恢复回来。

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

使用特权

评论回复
地板
ynl02010|  楼主 | 2020-9-9 14:23 | 只看该作者
ynl02010 发表于 2020-9-9 14:19
恢复了,也是不行啊,最开始是没有注释掉的

另外这个程序如果单字节发送10次,最终也能将这十次的数据打印出来,但是一次性发送10个字节是失败的,不知道咋回事

使用特权

评论回复
5
antusheng| | 2020-9-9 21:35 | 只看该作者
无法理解的操作。

使用特权

评论回复
6
qwe12377yu| | 2020-9-9 22:40 | 只看该作者
例程就可以的啊

使用特权

评论回复
7
qwe12377yu| | 2020-9-9 22:47 | 只看该作者
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
                       
       
               
}

使用特权

评论回复
8
qwe12377yu| | 2020-9-9 22:48 | 只看该作者
已验证过的代码,欢迎参照

https://www.cnblogs.com/technology-jingxinwen/p/13149893.html

使用特权

评论回复
9
lnulibin| | 2020-9-9 23:01 | 只看该作者
如果波特率是115200,发送/接收一个字节时间大约是86微秒。进出中断的时间可能不太够。导致接收程序来不及接收接连发送过来的数据。最好先尝试每隔一个时间T发送一个字节,发10个。
然后,缩短T的大小。比如先每隔1毫秒发送一个字节,再尝试隔500微秒,按此办法。你可能会找到一个最短间隔。低于此间隔接收端就会丢数据。
可以减小波特率,或者按照刚才说的在发送数据时,间隔一定的时间。

使用特权

评论回复
10
ynl02010|  楼主 | 2020-9-10 08:28 | 只看该作者
谢谢各位大神鼎力相助,我随后一一验证排查,感谢感谢!!!!

使用特权

评论回复
11
jasontu| | 2020-9-10 09:37 | 只看该作者
建议看下波型,看是否10个都有送出来

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

15

帖子

0

粉丝