历史上的今天
返回首页

历史上的今天

今天是:2025年02月28日(星期五)

正在发生

2020年02月28日 | 单片机C51串口printf的使用方法

2020-02-28 来源:eefocus

串口printf的使用


函数原型如下:

void USART0_Printf(char *fmt,...)//这个是我们的printf函数

{

 char* ap;  //typedef char *va_list; va_list是char型的指针

 charxdata string[128];  //访问外部RAM 两字节对齐

 va_start(ap,fmt);  //这个函数的功能是,找到第一个可变形参的地址,并把地址赋给ap

 vsprintf(string,fmt,ap);

 USART0_SendString(string);  //这个函数就是发送字符串函数,通过上一个函数,就把该提取的东西都提取了

 va_end(ap);  //结束函数

}


这个函数在51调试的时候还是非常好用的,特别是又用串口ISP下载的用户。接下来简述下函数的用法:

1、在编写函数之前,首先需要添加stdarg.h头文件,其中va_start和va_end函数就是这个里面的库。


2、其次就是需要分配一个空间,例如上面的char xdata string[128]; 因为空间有限,我这里给的是外部128字节。打印的长度超出了可能就会出问题了,根据情况,在空间充足的情况下可以分配大一点。


3、编写底层的串口打印字符串函数,在51的程序里我一般写成如下:

//串口0发送一个字节

void USART0_SendByte(u8 value)

{

       SBUF= value;  //发送一个字节                         

       while(!TI);   //等待TI置1              

              TI=0;                                 

}

//串口0发送字符串

void USART0_SendString(u8 *dat)

{

       while(*dat!='')

              USART0_SendByte(*dat++);

}


这是串口0的打印函数,如果换成串口1也是一样的。


在使用的过程中需要注意有数据的情况下,数据需要强转成int型不能直接用unsigned char,这个不是我今天所遇到的问题,在上学期间实践过,所以使用的时候我都加了强转,例如:

USART0_Printf("PWR_LEVEL=%d  MOD_LEVEL=%d  FAN_LEVEL=%d TIME_LEVEL=%d FUN_LEVEL=%dn",

(int)PWR_LEVEL,(int)MOD_LEVEL,(int)FAN_LEVEL,(int)TIM_LEVEL,(int)FUN_LEVEL);

推荐阅读

史海拾趣

Gigabit Logic Inc公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。
Cooper Tools(Eaton)公司的发展小趣事
通过控制脉冲信号的频率或占空比,可以实现更精细的调速范围。
AiT Semiconductor Inc公司的发展小趣事

在半导体行业,技术创新是企业持续发展的关键。AiT公司深知这一点,因此始终将创新作为公司的核心竞争力。他们投入大量资金和资源用于研发,不断推出具有创新性和领先性的半导体产品。同时,公司还积极与高校、科研机构等合作,共同开展技术研发和人才培养工作。这些创新举措使得AiT公司在行业中始终保持领先地位。

BeagleBoard公司的发展小趣事

随着产品线的不断丰富和品质的不断提升,BeagleBoard公司在市场上逐渐获得了更多的认可。他们不仅在国内市场取得了显著的成绩,还积极拓展国际市场,与全球范围内的开发者和企业建立了广泛的合作关系。通过与合作伙伴的共同努力,BeagleBoard的产品逐渐渗透到各个行业领域,为嵌入式系统的发展做出了重要贡献。

ECI公司的发展小趣事

ECI公司深知品质对于企业生存的重要性。因此,公司建立了严格的质量管理体系,从原材料的采购到生产流程的每一个环节都进行严格的质量控制。此外,ECI还引入了国际先进的质量检测设备和技术,确保产品的每一个细节都符合高品质的要求。正是这种对品质的坚持和追求,让ECI公司在竞争激烈的电子行业中脱颖而出。

芯茂微电子公司的发展小趣事

芯茂微电子始终坚持以创新驱动发展,不断投入研发资源,推动技术创新和产品升级。同时,公司积极寻求与国内外知名企业和研究机构的合作,共同开展技术研发和市场拓展。通过与合作伙伴的紧密合作,芯茂微电子在集成电路设计、制造工艺、封装测试等方面取得了重要进展,进一步提升了公司的核心竞争力和市场地位。

问答坊 | AI 解惑

protel 2004安装与教程

这个我还没下,不过应该不错的,要的话去下下看,是个BT种子…

查看全部问答>

如何做图像识别啊

本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 各个大哥大姐如何做图像识别啊,比如在一个物体上写个A如何把它识别出来,有什么好方案没,,不甚感激!  …

查看全部问答>

电子工程师创新设计必备宝典系列之FPGA开发全攻略免费下载

;P ;P !从本网站挪过来的资料! 为了响应小杰关于FPGA入门资料编写号召,特此发此贴,提供下载。 书还没看,感觉还不错,要求FPGA有点入门的。 关于学习FPGA,首先是自己有开发板,然后,就是自己给自己立一个项目练习。这样自己会编写代码。 ...…

查看全部问答>

人工智能发展的太慢了,很是纠结。

照这样下去,和人无差别的机器人女友诞生那天,哥都得60来岁甚至更老了。郁闷啊。…

查看全部问答>

ce6 eboot中内存读写测试!

在eboot中也不能使用物理地址直接访问内存。而使用的是虚拟地址。 我的6410版,RAM从128M升级到256M之后,系统一直没有搞定,在eboot中测试内存发现, 我映射了一段并不存在的内存到0x96000000,在eboot中写了一个循环读写,如下: for (i = 0; ...…

查看全部问答>

注册表项[HKEY_LOCAL_MACHINE\SOFTWARE\Apps]下有许多子项,如何将它们一一读出?

在WinCE上, 注册表项 [HKEY_LOCAL_MACHINE\\SOFTWARE\\Apps]下有许多子项, 如何将它们一一读出?…

查看全部问答>

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀?

LCD 驱动程序上有一个DUMMY (RGB_DUMMY) 的东西,它起什么作用呀? 三星6410(或BSP上)有这个东西吗? 如何设置它?…

查看全部问答>

MTK6225 手机开发板(含源代码)

MTK6225 手机开发板(含源代码) 有诚意者请联系 Qq:296662705 硬件特性: 1、 CPU:mtk6225 2、 TFLASH 卡接口 3、 176X220 2.6寸TFT LCD,最高支持320*240*16的TFT LCD 4、 4线触摸屏接口 5、 双声道音频输出 6、 一个Camera 130万像素 ...…

查看全部问答>

高手们看看这是怎么回事??

我在用USBASP下程序的时候出现了这样的情况,各位大哥看看是怎么回事? …

查看全部问答>