单片机串口发送数据为什么多一位

2025-04-09 11:03:19
推荐回答(2个)
回答1:

是程序的问题,你的发送程序有问题,试试这个:
//发送单个字符
void
Send_Char(uchar
ch)
{
SBUF0
=
ch;
//送入缓冲区
while(!TI0);
//等待发送完毕
TI0
=
0;
//软件清零
}
//发送字符串,调用Send_Char()
len字符串长度
void
Send_String(uchar
*
str,uint
len)
{
uint
k
=
0;
do
{
Send_Char(*(str
+
k));
k++;
}
while(k
<
len);
}
//配置UART0
9600
void
UART0_Init
(void)
//定时器2
{
T2CON=0x34;
RCAP2H=0xFF;
RCAP2L=0xB0;
SCON0=
0x50;//
SCON0:
mode
1,
8-bit
UART,
enable
RX
}
我刚写的没问题。

回答2:

{sbuf
=22;
//写发送缓冲区
while(!ti);
//等待发送完毕
ti=0;
//发送标志清零
sbuf
=34;
//发送34
while(1);
}
你的程序应该是这样的吧
等效于
{
while(1)
{sbuf
=22;
//写发送缓冲区
while(!ti);
//等待发送完毕
ti=0;
//发送标志清零
sbuf
=34;
//发送34
}
}
所以说你的串口应该一直显示22,没有34的事。sbuf
=34;马上被sbuf
=22;
替代。由于你的程序传上来的不完整。你在查查程序吧