您的位置 首页 新品

深藏不露的‘NUL‘(51单片机串口通讯是遇到的过错之一)

NUl的定义:C语言中规定以字符lsquo;\0#39;作为字符串结束标志。rsquo;\0#39;是一个ASCII码为0的字符,从ASCII码表中可以看到ASCII码为…

NUl的界说:

C语言中规则以字符‘\0作为字符串完毕标志。’\0是一个ASCII码为0的字符,从ASCII码表中能够看到ASCII码为0的字符是“空操作字符”,

它不引起任何操控动作,也不是一个可显现的字符

这是自己在用单片机串口通讯时遇到的小问题,由于那个电子设备比较特别,发送的数据也是比较的特别,所以我便遇到了这个问题。一开始依照预订的指令和电子设备通讯,总是不可,后来经过串口调试器才发现,发送的数据只能发送一半。所以我回来去看代码,这才发现了症结所在。

以下便是我的程序犯错的原因:

犯错的程序代码段:

void Send_data(char p[]){a=0;while(p[a] != \0){SBUF = p[a];	        //SUBF承受/发送缓冲器(又名串行通讯特别功用寄存器)while(!TI);				// 等特数据传送	(TI发送中止标志)TI = 0;					// 铲除数据传送标志a++;					    // 下一个字符} }

调用该程序的代码段:

const char Message[8]={0x01,0x03,0x00,0xB9,0x00,0x02,0x15,0xEE};

while(1){ if (Flag==1){	Send_data(Message);while(TI!=0);TI=0;Flag=0;}}

(刚开始的时分没发现,很抑郁,经过串口调试器才找到原因。)

关于程序过错的剖析:

程序碑文到0x00==p[2]时,即相当于‘\0’==p[2];(即遇到NUL退出)到这一步程序的判别完毕,发送函数也完毕。

在C语言中\0其实便是ASCII码表上值为0的,它是不显现的

我想经过这个小问题来阐明在写程序是特别要和硬件打交道的时分必定要注意‘\0’。

写的欠好请见谅!欢迎我们批评指正

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/263603.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部