51单片机STC8G使用printf函数的方法

单片机型号:STC8G1K08,其他型号请自行测试;
IDE:KEIL C51;
包含头文件stdio.h:

#include 

添加以下函数,使用串口1,可根据需要修改:

char putchar(char ch)
{
    SBUF = ch;//串口1数据寄存器
    while(TI == 0);//串口1中断发送请求标志
    TI = 0;
    return ch;
}

测试程序,主频为为22.1184MHz,串口1配置为9600bps,打印“Hello World!”,效果如下图,

printf("Hello World!");

51单片机STC8G使用printf函数的方法_第1张图片
下面每隔1s打印计时数,计时变量为Sec,unsigned char型:

printf("Sec:%d ", Sec);

打印效果如下图
51单片机STC8G使用printf函数的方法_第2张图片
可看出输出的并不是我们想要的数值0,1,2…,而是放大了256倍,
原来是因为Keil C51的printf函数与标准C语言的printf函数不同,可在keil的菜单“Help-μVision Help”的帮助文件中查看关于printf函数的介绍,在使用C51的printf函数打印%d/i/u/o/x/X格式时的数值时,需要指定该变量的存储格式l/L/b/B。
如输出十进制数,规则总结如下:
①8位数据,格式为%bd;
②16位数据,格式为%hd;
③32位数据,格式为%ld;
因此将前述代码改为:

printf("Sec:%bd ", Sec);

即可正常打印,如下图:
51单片机STC8G使用printf函数的方法_第3张图片

你可能感兴趣的:(单片机,tips,51单片机,单片机,嵌入式硬件)