Keil C51 的printf

在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);
}

下面附上Keil C51手册内容。
int printf (
const char fmtstr / format string */
&l

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值