51单片机串口发送不了数组数据

51单片机串口发送字符串void SendString(unsigned char *dat),当入口参数为定义的数组名时,没有数据发出,为什么?

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模式显示

img


2、以文本模式显示

img

如图,串口助手只收到了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作为发送结束条件了,所以需要增加一个参数用来决定发送的数据的长度。