单片机串口通信-字符数组
所以我又重新开始考虑用字符数组处理命令,再用上个程序之前其实最初是用字符数组来做这个程序的,但是一直都有一些问题没有解决;昨天我用c++来做了一个字符接收和判读函数,然后用keil做一个同样的程序发现还是用一些同的:
C语言和c++里面定义字符数组用两种形式:
例如(1)char t[6]="start";这个字符串的长度是5但是系统默认这种定义方法在字符串的后面加上一个\0;所以就要用一个长度位六位的字符数组来存放,如果定义5位(t[5])编译器就会报出一个错误,说数组存放不了;
(2)char a[5]={'s','t','a','r','t'} 这样定义可以省去系统默认的\0,但是可以明显发现,这种定义方法对于长的字符串的定义并不实用;
keil里定义数组:
上面的第二种方法同样可以定义,不过第一种方法就会用不同了:
定义一个start数组:char t[5]="start"; 明显发现在keil里面编译器没有给字符数组一个默认的\0,这就是这两个编译器的不同了;
在有的情况下,这个不同是致命的:
#includereg52.h>
#includestdio.h>
#includestring.h>
#define uchar unsigned char
uchar t[5]="start";
int i;uchar a[5];
void main()
{
TMOD=0x20;
TH1=0xfd;TL1=0xfd;
SM1=1;SM0=0;
REN=1;ET1=1;TR1=1;ES=1;
while(1)
{
for(i=0;i5;) //输入到数组里
{RI=0;
while(RI==0); //如果在此处定义的字符串的长度位6位的话,就会一直等待第六个输入,造成程序无法执行
a[i]=SBUF;i++;
}
for(i=0;i5;) //通过单片机输出到电脑
{
SBUF=a[i];
while(TI==0);i++;TI=0;
}
}
}
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)