main.c文件如下
#include
#include
#include "delay.h"
#include "uart.h"
unsigned char Test[5] = {0,1,2,3,4};
void main()
{
UartInit();
while(1)
{
SendString("Hello World!\r\n");
SendString(Test);
DelayXms(2000);
}
}
uart.c文件如下
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据位
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1位8位自动重装方式
TL1 = 0xFD; //设置定时器初值
TH1 = 0xFD;
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
}
void SendByte(unsigned char dat)
{
SBUF = dat;
while(!TI);
TI = 0;
}
void SendString(unsigned char *dat)
{
while(*dat != '\0')
{
SendByte(*dat++);
}
}
串口助手收到的数据如下:
1、以HEX模式显示
如图,串口助手只收到了Hello World!,并没有收到SendString(Test);发送的数据
请问有没有知道是哪里出现了问题?数组名不就是数组的起始指针吗?我的用法有错误吗?望指出
void SendString(unsigned char *dat)这个函数发送数组时为什么发不了?望各位能解决我这个疑惑,感谢感谢!!
你写的发送字符串函数是以0为结束
你自定义的test第一个数就是0
发不出去就不奇怪了
这么改下
unsigned char Test[5] = {'0','1','2','3',0};
SendString函数没有长度参数,肯定是检测到0结束,
如果你要发送带0的数组,首先要把遇到0就结束的代码去掉;然后因为不能通过0作为发送结束条件了,所以需要增加一个参数用来决定发送的数据的长度。