×
单片机 > 单片机程序设计 > 详情

STC12C5A60S2单片机串口1无法连续发送字符的问题

发布时间:2020-06-02 发布时间:
|

开发环境

1,开发板:STC12C5A60S2,串口1。


在使用STC12C5A60S2串口1发送数据的时候,接收端无法收到完整的字符串,我的发送方式如下:


                        UART_Send_Str("00");

UART_Send_Byte(':');

UART_Put_Num(dat[0]);

UART_Send_Byte('.');

            UART_Put_Num(dat[1]);

UART_Send_Byte(':');

          UART_Put_Num(dat[2]);

UART_Send_Byte('.');

          UART_Put_Num(dat[3]);

UART_Send_Byte(':');

          UART_Put_Num(status_move);

UART_Send_Byte(':');

        UART_Put_Num(status_fire);

void UART_Send_Str(uchar *s)

{

uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else

{

UART_Send_Byte(s[i]);

}

}

}

发现接收端只能收到'00',串口无法完整接收字符,甚是诡异,把串口助手的十六进制显示勾上之后,终于发现了猫腻


“00”字符串之后竟然是空字符,而遇到空字符,一般就当作字符串结束,自然,后面的字符就无法显示了。


于是把UART_Send_Str函数改为如下即可正常运行


uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else if(s[i]!='')//空字符ASCII为0x00,不发,不然接收端会认为字符串已经结束

{

UART_Send_Byte(s[i]);

}

//if(i==len-1)UART_Send_Byte('');//字符串最后再发结束符号

}

或者改为如下:


uint len = sizeof(s) / sizeof(s[0]);

uint i;

for(i = 0; i < len; i++)

//UART_Send_Byte(s[i]);

{

if(s[i] == 'n')

{

UART_Send_Enter();

}

else if(s[i])//空字符ASCII为0x00,不发,不然接收端会认为字符串已经结束

{

UART_Send_Byte(s[i]);

}

//if(i==len-1)UART_Send_Byte('');//字符串最后再发结束符号

}


关键字:STC12C5A60S2  单片机  串口1  连续发送

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机的抗干扰措施有哪些