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

原创 2018年04月16日 00:35:37
开发环境(蓝色粗体字为特别注意内容)

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]!='\0')//空字符ASCII为0x00,不发,不然接收端会认为字符串已经结束
		{
			UART_Send_Byte(s[i]);
		}
		
		//if(i==len-1)UART_Send_Byte('\0');//字符串最后再发结束符号
	}

或者改为如下:

	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('\0');//字符串最后再发结束符号
	}
即干脆不发送空字符,也不知道这样会不会有什么隐患,暂时就先这样用了,欢迎各位同学批评指正,给些意见大笑~~~~


创建跨多列、多行表头的DataGrid

创建跨多列、多行表头的DataGrid孟子E章在使用DataGrid时,有时候需要表头跨列、多行,下面的代码就是实现这个功能的代码。查看例子ShowColSpanHeader.aspx...
  • net_lover
  • net_lover
  • 2003-06-12 11:31:00
  • 3720

STC12C5A60S2 串口中断接收程序

#define UART0_BUF_LEN 32int UART1_Recv_count;  //接收计数bit UART1_Overflow_Flag;   //缓冲区满标志idata uchar ...
  • ex_net
  • ex_net
  • 2012-01-28 08:47:12
  • 9371

【单片机】STC12C5A60S2双串口通信

STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同;特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器,...
  • jsxhtzwj
  • jsxhtzwj
  • 2014-03-23 20:45:50
  • 5569

STC12C5A60S2单片机-双串口通信

STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同;特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器,...
  • CB_869145753_hp
  • CB_869145753_hp
  • 2016-03-13 20:59:49
  • 1911

STC12C5A60S2之串口

STC12C5A60S2单片机的串口从传统的一个扩展到了两个,而且还增加了一个独立波特率发生器,把定时器1解放了出来,真的不是一般的方便,还而且能用1T模式,速度大大滴提高了。。。于是,就写了串口模块...
  • lengyuegg
  • lengyuegg
  • 2010-08-17 22:59:00
  • 4824

STC 12C5A60S2串口2通信主要代码示例

用过stc12C5A60S2单片机的朋友都知道,该单片机有两个串口可用,看到官网的程序注释的也是比较多,所以自己写了个串口2使用的程序,由于代码相对简单,所以这里只罗列出了串口2的的初始化、发送和接收...
  • yxtouch
  • yxtouch
  • 2012-10-12 14:15:49
  • 7695

单片机串口收发字符和数字的函数

/************************************************ 功能:将整形转换为ascii码字符串 示例:dat = 12345   buffer[10] ...
  • lidec
  • lidec
  • 2014-01-18 15:42:09
  • 1475

51单片机串口通信(字符串接收和发送)

转自:http://www.cnblogs.com/weifeng727/category/845655.html #include //------------------串口通信协议---...
  • qq_26093511
  • qq_26093511
  • 2016-10-12 19:10:22
  • 12550

STC单片机11.0592晶振实现115200波特率串口通信

在8051系列单片机如:89S51、89C51 这些单片机上,用11.0592M晶振实现115200波特率通信,几乎是不可能的。 如果换了STC单片机,例如在STC12C5A60S2实现115200的...
  • ex_net
  • ex_net
  • 2012-01-15 23:12:47
  • 8761

单片机---串口打印字符串时,只显示第一个字符

单片机使用的是iap15w4k58s4 串口的初始化 串口的中断 串口的发送 要发送的字符 烧写到单片机后,将单片机的串口连接到电脑上,使用secureC...
  • a151141
  • a151141
  • 2015-07-24 21:28:57
  • 711
收藏助手
不良信息举报
您举报文章:STC12C5A60S2单片机串口1无法连续发送字符的问题
举报原因:
原因补充:

(最多只允许输入30个字)