在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