串口通信,用串口调试助手调试时为什么只能显示一个字符,字符串部分显示不了

#include<reg51.h>voidUART_Init(void);voidSend_Char(unsignedchardat);voidSend_StringCh... #include<reg51.h>
void UART_Init( void );
void Send_Char( unsigned char dat);
void Send_StringChar( unsigned char *dat);
void main ()

{
UART_Init();
Send_Char('A');
Send_StringChar("HHHH");
while(1);
}
/****串口初始化****/
void UART_Init( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz
TL1 = 0xF4 ;
TR1 = 1 ;
ES = 1;
}
/****向串口发送一个字符 ****/
void Send_Char( unsigned char dat)
{
SBUF=dat;
while (!TI);
TI= 0 ;
}
/****向串口发送一个字符串****/
void Send_StringChar( unsigned char *dat)
{
while (*dat != '\0');
{
Send_Char(*dat++);
}
}
展开
 我来答
kicming
推荐于2016-06-30 · TA获得超过165个赞
知道小有建树答主
回答量:70
采纳率:0%
帮助的人:68.5万
展开全部
1.发送字符前打印出数据printf("send data=%d,%c\n", *data,*data); //打印出ASCII码和字符
2.指针data采用的自增操作,这表明data是一个字符数组,其内存地址必须是连续的,不然data++可能成为野指针
打印出这个字符的指针地址printf("data=[%x][%d][%c]\n",data, *data, *data);
3.unsigned char是无符号字符,取值范围[0,255],32位机上占一个字节,如果传递的数据超去,会截掉高位,留下低8位
4.应该就是上面的问题,跟踪调试一下吧,打出每一个字符的值及所在内存地址
更多追问追答
追问

加了之后,串口助手都没有数据接收了  就是完全接收不了,而不是显示不出来

程序应该是没有问题的吧

一般不打印出数据串口助手应该也会显示出吧

追答
  1. 检查COM3的波特率及协议N,8,1

  2. 串口是独占的,如果串口助手打开了COM3.软件就不能使用COM3了

  3. 你可以下载一个虚拟串口工具,它会形成一对串口,比如COM1和COM2

    COM1给程序使用,COM2给串口工具使用,而COM1和COM2又是连接好的

    ,程序向COM1发数据,COM2会收到数据

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式