搜索
bottom↓
回复: 11

51单片机PRINTF函数使用注意事项(变量输出不正确的同学进)

[复制链接]

出0入0汤圆

发表于 2012-9-18 22:03:45 | 显示全部楼层 |阅读模式
以前我说过KEIL里面写51程序时,如果要使用printf函数时一定要把串口配置好,把TI置1才可以正常使用,但仍然有部分同学遇到一个问题,那就是为什么有时候输出变量不正确,明明是8位的变量最多也就255,居然输出个16位的变量。
    原因很简单:printf如果输出变量的话,一定要用unsigned int型才可以,不能用char型!!!
    如果是char 或unsigned char的变量要打印出来的话一定强制转换成int 或unsigned int才可以!!!
    遇到此类问题的同学可以尝试一下……

    举例子:
    unsigned int i;
    i = 15;
    printf("%d\n",i);    可以正确打印

    若是
    unsigned char i;
    i = 15;
    printf("%d\n",i);    则会出现错误

    需要改一下
    unsigned char i;
         i = 15;
    printf("%d\n",(unsigned int)(i));  可以正确打印

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入4汤圆

发表于 2012-9-18 22:21:48 | 显示全部楼层
自己重写printf函数,用自带的print函数消耗太大,又慢,不划算

出0入0汤圆

 楼主| 发表于 2012-9-18 22:41:03 | 显示全部楼层
ibichao 发表于 2012-9-18 22:21
自己重写printf函数,用自带的print函数消耗太大,又慢,不划算

请问是用
#include <stdio.h>
#include <stdarg.h>
这两个头文件重写吗?
还是用别的方法,能否指教一二。

出0入0汤圆

发表于 2012-9-18 22:54:12 | 显示全部楼层
对于字符型(8位)变量,楼主可以直接用此官方推荐方法通过串口打印输出;
printf("%bd\n", i);  可以正确打印。其中bd,表示字符型8位;
另对于long、float、double、指针等都有特用的打印书写方法和规范,详细可以参考keil的help文档,对每个类型都有详细的说明和举例!

出0入4汤圆

发表于 2012-9-18 22:59:33 | 显示全部楼层
adispring 发表于 2012-9-18 22:41
请问是用
#include  
#include

感觉你是刚学单片机的,怎么说呢,单片机编程和PC机编程不同之一是单片机要考虑资源和效率,pc机可以忽略。
不知道你用的是不是Keil,keil中自带的printf函数是个通用的函数,所用的资源相较之多效率低,而在实际当中用不了那么多,所以可以自己写个类似printf的函数,根据所需,砍掉不需要的功能。
给你举个例子,

只需要发送一个字节就可以这样:
unsigned char SendData(unsigned char dat)        //相当于printf函数,你需要什么功能,就写成什么功能,函数名随便起,最好有意义点
{
     if(0 == TI){                                             
            SBUF = dat;
            return TRUE;
     }
     else  return FALSE;
}
中断函中在进行相关处理。

出0入0汤圆

发表于 2012-9-19 01:01:04 | 显示全部楼层
喜欢“拿来主义”,能用官方库当然省心很多!KEIL C51的串口库函数,感觉用着还是不错的!

出5入8汤圆

发表于 2012-9-19 17:59:14 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2012-9-20 16:21:39 | 显示全部楼层
同意5楼,自己重新写一个格式化输出函数比较好。
有些奇奇怪怪的问题出来的时候,你就知道为什么了。

出0入0汤圆

发表于 2013-4-2 21:44:09 | 显示全部楼层
我自己的打印函数不行啊,字符串竟然是乱码

出0入0汤圆

发表于 2013-8-22 14:00:36 | 显示全部楼层
大师啊  大师啊  真是厉害啊  问题解决了  哄哄

出0入0汤圆

发表于 2013-12-7 10:24:53 | 显示全部楼层
自己写的好,还可以调试

出0入0汤圆

发表于 2015-12-23 09:42:36 | 显示全部楼层
char型输出确实会出错,转换类型后可以,多谢楼主提醒!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-15 20:15

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表