在Keil C51 中使用printf ,首先需要重新实现 putchar(char c)函数。此函数在

char putchar (char c)    {             ES=0;             SBUF = c;             while(TI==0);             TI=0;             ES=1;             return 0; }

我们先分析一下上面这个程序哈,
关闭串口中断
发送单字节数据
等待发送完毕
清除TI标志
开启串口中断

在main函数里可以直接使用printf函数进行输出了。
但是,我一直存在这样一个疑惑:

void main() {     unsigned char test1 = 55;     printf("the test is %d\r\n",test1); }

使用串口输出的数值一直不对,我后来自己理解,%d是整型,而在Keil C51整型占用2个byte,所以我一般的解决办法是做一次强制类型转换:

void main() {     unsigned char test1 = 55;     printf("the test is %d\r\n",(int)test1); }

后来阅读Keil C51的帮助手册:
得到这样一条信息:

格式 含义 针对类型
%d 两个字节变量 int
%bd 单字节变量 char
%ld 四字节变量 long int

所以上面的问题的另一个解决方案是:

void main() {     unsigned char test1 = 55;     printf("the test is %bd\r\n",test1); }

下面附上Ke