STC51单片机用printf()函数输出数字到串口,

求一段STC89C52单片机将数值通过串口输出的代码~

可以利用print函数或者sprint函数
程序如下:
#include "reg52.h" //此头文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
void UsartInit()
{
SCON=0X50; //0101 000设置串行口控制寄存器sm0,sm1为01,即为工作方式1
TMOD=0X20; //设置计数器
PCON=0X80; //定义PCON寄存器中的SMOD=1,波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的,当然大家可以改
TL1=0XF3;
EA=1; //打开总中断 根据需要
ES=1; //打开中断允许中的串行口中断允许
TR1=1; //打开计数器
TI = 1;//如果使用print函数,TI一定要是1 否则 删掉该句
}
void main()
{
u16 Val;
UsartInit();
while(1)
{ Val = GetSensor();
printf("%d",Val;) //printf中一定要用u16的 不能用u8 这样就直接将数字格式化为ascii
}
}

这样做会丢失数据的。并且你将一个死循环放到中断里面也有很大问题。
void Uart() interrupt 4 using 1
{

statick unsigned char i;
if (RI)
{
RI = 0; //清除RI位
receive[i++]=SBUF; //P0显示串口数据
P22 = RB8; //P2.2显示校验位
SBUF=receive[i++];
while(TI==0);
TI=0;
}
if (TI)
{
TI = 0; //清除TI位
busy = 0; //清忙标志
} }

查C51关于printf的帮助文档:

%d 是处理int数据的,如果是char的看这句:The optional characters b or B may immediately precede the type character to
respectively specify char types for d, i, u, o, x, and X.

也就是要改为这样:printf("num = %bd",num);



貌似51单片机对printf的参数%d识别方式有点小小的问题,解决方法见链接。

网页链接



51单片机C语言中使用printf函数需要设置什么?
答:}}sentstr(str);51单片机中没有printf这个函数,你如果想用串口发送的话,要自己去写一个串口发送函数就可以了。

关于51单片机串口中printf()的使用的问题
答:printf 函数在单片机中要重定向到串口,printf 调用标准库函数 ,你需要重写fputc() 这个c标准库函数

STC51单片机用printf()函数输出数字到串口,
答:d 是处理int数据的,如果是char的看这句:The optional characters b or B may immediately precede the type character to respectively specify char types for d, i, u, o, x, and X.也就是要改为这样:printf("num = %bd",num);...

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

51单片机用不了printf()。
答:这个函数因为牵扯到使用串口,单片机不同地址和操作方式也不同,串口也可能不只一个,你到底用那个,都是未知的,所以这个函数不通用,要根据单片机来修改, printf实际调用 putc实现,你只要去 stdio中改掉这个函数即可,就是常规的 发送一个字节即可。。。当然你不喜欢,你还可以写自己的 self_...

用C编写51单片机的串口打印程序
答:userData);RI0 = 0;} if (TI0){ TI0 = 0;} } void UART0_ISR (void) interrupt 4 { _push_(SFRPAGE);SFRPAGE = UART0_PAGE;UartRun();_pop_(SFRPAGE);} 这个是串口输入什么就显示什么的例子,如果需要打印的话你可以加入打印的函数print();{UartRun();} 放在主函数体里就可以 ...

stc 单片机怎么加printf
答:printf函数要调用一个fputc()函数,把这个函数改成串口送一个字节的函数语句即可

51单片机里 我用keil的rt51thy stdio.H自带的printf 总是死机 而且没有...
答:printf是C语言最复杂的函数之一(如果不是唯一的话)如果无必要,慎用!又占资源又占时间 不就是串口吗?自己编写一个吧

51单片机程序编写
答:我的 51单片机程序编写 100 测量人体温度,MLX90614测温模块连到单片机上,lcd1602显示所测温度温度,超过38度,LED灯亮报警;超过39度,led灯亮,蜂鸣器报警... 测量人体温度,MLX90614测温模块连到单片机上,lcd1602显示所测温度温度,超过38度,LED灯亮报警;超过39度,led灯亮,蜂鸣器报警 展开  我来答 4个回答 #热...

用stc-isp实现单片机与电脑之间的互相传送字符串通信为什么要printf_百度...
答:这个函数是软件仿真时用来调试的,单片机无法在硬件上使用这个函数

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网