请教AI8051U串口打印多了两位数据的问题
学习使用AI8051U硬件I2C总线应用时遇到串口打印数据有问题特来请教!先谢了!使用的示例代码为试验箱的第28#例程,该例程中串口相关代码摘录如下:
// 串口初始化函数
void UartInit(void)
{
P_SW1 &= ~S1_S1; // UART1切换到P3.0/P3.1
P_SW1 &= ~S1_S0;
SCON = 0x50; // 8位数据,可变波特率,允许接收
AUXR |= (1<<6); // 定时器1时钟1T模式
AUXR &= ~S1BRT; // 串口1选择定时器1为波特率发生器
TL1 = TM;
TH1 = TM >> 8;
TR1 = 1; // 定时器1开始计时
TI = 0; // 清除发送中断标志
RI = 0; // 清除接收中断标志
}
// 串口发送字符函数
void UartPutc(unsigned char dat)
{
SBUF = dat;
while(TI == 0); // 等待发送完成
TI = 0; // 清除标志
}
// printf重定向
char putchar(char c)
{
UartPutc(c);
return c;
}我在主函数中有声明:u8 tus=0x18;
我在主循环中只加了两行代码如下:
printf("状态字:0x%02X\r\n", tus);
delay_ms(1000);
程序运行后在串口助手窗口看到的文本数据如下:接收←状态字:0x185E
问题:为什么打印数据不是0x18而是185E。
改成0x%02bX试试
51编译器和251编译器不一样 DebugLab 发表于 2025-12-10 13:30
改成0x%02bX试试
51编译器和251编译器不一样
多谢你的指点,采用你给的打印格式真的可以实现0x18的打印输出,只是这个后加的“b”的含义我不明白,如果得空时希望能说一下,看到你的答案之前我发现如果打印变量定义为16位值u16 tus=0x18;可以得到正确的输出0x18,如果在打印输出中强制转换一下变量也可以输出正确答案:printf("状态字:0x%02X\r\n", (u16)tus);,最后再次感谢你的热心指点。 乐此不疲 发表于 2025-12-10 19:33
多谢你的指点,采用你给的打印格式真的可以实现0x18的打印输出,只是这个后加的“b”的含义我不明白,如 ...
可参考这个帖子介绍:
printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.com/thread-6864-1-1.html
(出处: 国芯人工智能技术交流网站)
乘风飞扬 发表于 2025-12-11 09:06
可参考这个帖子介绍:
printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.co ...
多谢,这个帖子说的透彻,明白了,再谢!
页:
[1]