51单片机,在keil中调试,调用printf函数,有关于输出的数据格式的问题进行请教!

unsigned char a=255;
unsigned char b=0x61;
printf("%d\r\n",a);//这样输出的a是并不正确,我希望a直接在串口助手上显示255
然后调用printf输出b,就是直接显示61。我想应该是数据格式不对,可是该怎么写呢?求帮助!

unsigned char a=255;
unsigned char b=0x61;
printf("%d\r\n",a);//这样输出的a是并不正确,我希望a直接在串口助手上显示255
那么,楼主看到的是什么? 你用十进制显示方式了吗?

然后调用printf输出b,就是直接显示61。
显示正确。
你用是16进制显示。

我想应该是数据格式不对,。。。
改改你的串口助手即可,是显示方式不对。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-04-01
使用printf("%d\r\n",a)之前,先要设置串口的方式、波特率等。追问

我已经设置好了,只是输出的没人不对,我觉得是%d这里有问题,只是不知道怎么改,请阁下帮忙呀!

追答

unsigned char b=0x61;
……
然后调用printf输出b,就是直接显示61。
----
这不是完全正确吗?

你在串口助手上设置,按照ASCII码显示。

然后:
printf("%d",'2');
printf("%d",'5');
printf("%d\r\n",'5');

串口助手就应该显示:255。

本回答被提问者采纳
第2个回答  2012-05-19
%d 针对 int 类型
%c 针对 char类型

应该是这个问题
你要输出255 必须a转成int类型 同时printf %d
针对char的255 是ASCII码
第3个回答  2012-04-01
试着用0x255看看···因为你直接写255 系统识别为10进制数,转化成255的对应十六进制数应该是FF
第4个回答  2012-04-01
printf("%d\r\n",(unsigned int)a);
这样试下看看

51单片机,在keil中调试,调用printf函数,有关于输出的数据格式的问题进行...
然后调用printf输出b,就是直接显示61。显示正确。你用是16进制显示。我想应该是数据格式不对,。。。改改你的串口助手即可,是显示方式不对。 赞同

单片机C8051在Keil C51环境下使用printf函数打印,发现打印值和实际不...
也就是说,使用C51的printf()函数打印%d\/i\/u\/o\/x\/X格式时,你必须要指定该变量的存储格式l\/L\/b\/B。由于你的变量c为char类型,因此可将相应的代码改为如下:printf("%bd\\n",c);printf("%bu\\n",c);printf("%bx\\n",c);即可得到正确的结果。另:若变量c为uint16时,则需将%bd等改为...

printf()输出格式详解(Keil C51 、标准C)
printf()函数,作为C语言的核心输出工具,其核心功能是按照指定的格式将数据输出到标准输出,如终端屏幕。这个函数定义在stdio.h头文件中,其基本调用格式为:printf("格式化字符串", 输出参数)。格式化字符串由三部分构成:首先,字符串常量,直接输出其内容;其次,格式控制字符串,以%开头,用于定义输出...

keil中,putchar函数使用问题
include不同的头文件,就可以调用不同的putchar函数,你所百度的关于printf函数的是include<stdio.h>。如果同时加入stdio和自己又重新写putchar函数的时候,会出现两种情况,一起是C++的函数重载(具体可以看c++相关书籍),即不同的参数调用不同的函数。另外一种就是报错,会出现 Symbol putchar multiply...

keil c51 printf 问题
虽然是仿真,也要初始化串口,keil仿真只不过相当于给了你硬件而已。在keil中printf 默认是向串口中发送数据的,所以,如果应用该函数,必须先初始化串口,否则可能引起死机的情况,并且在printf之前应该先将TI置位,参考资料:http:\/\/blog.csdn.net\/lizhoubob\/archive\/2010\/07\/20\/5749737.aspx ...

关于Keil中的printf()函数的问题
1.printf函数是调用putchar函数输入的,而putchar应该是先判断ti是否为1,不为1则等待为1。如果为1则清0,然后送出一 个字符。因此你如果直接使用printf函数,你的程序就会在putchar函数中等待ti为1。这时你的程序就相当于直接死掉了。你可以通过改写 putchar函数实现自己的目的的。2.Keil的串口处理...

用C51在keil编译的时候,printf串口输出的时候,为什么要"IT=1"才能在...
这是因为printf函数是调用putchar函数输入;而putchar应该是先判断TI是否为1,不为1则等待为1。如果为1则清0,然后送出一个字符。而单片机上电复位后TI是为零的,因此你如果直接使用printf函数,你的程序就会在putchar函数中等待TI为1。所以在使用printf前,必须手动将TI=1。请到keil\/c51\/lib下查看...

51单片机 串口用 printf输出 ,当输出的数据类型是unsigned char的时候...
楼主你好。51单片机与标准C有区别:KEIL里扩展出了b,h,l来对输入字节宽的设置:(1)b八位 (2)h十六位 (3)l三十二位 在Keil C51中用printf输出一个单字节变量时要使用%bd,如 unsigned char counter;printf("Current count: %bd\\n", counter);而在标准C语言中都是使用%d:printf("Current ...

51单片机Keil C51下使用printf输出到串口,为何初始化了串口之后就可以使...
因为是这样的,在Keil\\C51\\LIB目录下有个putchar.c文件,printf函数会调用该文件中的 putchar函数,putchar里面的使用的寄存器都是标准51的(如TI,SBUF),它 们的地址是固定的,由此可知printf函数只针对串口0。如果想让printf函数支持串口1或串口2。。。那么修改putchar函数的寄存器即可,比如SBUF改为...

keil工程中使用printf,在哪输出
首先,这种基本的串行输入输出函数是通用的函数接口,应该是有一个通用库函数,工程中包含进去就好了;其次,printf一般都是通过串口来打印和接收数据的,所以做好单片机或这个ARM中UART接口的初始化。。最后,最好上面这些,当调用printf函数是,会通过板子上的串口(通常是UART0)打印输出数据的,利用串口...

相似回答