单片机型号:STC8G1K08,其他型号请自行测试;
IDE:KEIL C51;
包含头文件stdio.h:
#include <stdio.h>
添加以下函数,使用串口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!");
下面每隔1s打印计时数,计时变量为Sec,unsigned char型:
printf("Sec:%d ", Sec);
打印效果如下图
可看出输出的并不是我们想要的数值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);
即可正常打印,如下图: