欢迎来到天天文库
浏览记录
ID:8992937
大小:61.00 KB
页数:14页
时间:2018-04-14
《单片机c语言实现printf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、单片机串口实现printf函数背景叙述:在初学C语言时,利用printf函数向屏幕上输出字符,非常的好用和方便。学会单片机以后,尤其在学会串口通信之后,通过单片机的串口向PC机发送数据,怎么实现printf函数的功能。对于学习单片机来说,如果没有仿真器,出错误的时候不好找,只能用最笨的办法,使用printf函数,可是在KEIL里面使用printf却不像VC里面那么简单,因为其发送和硬件是有关系的。所以今天就简单来说说怎么在51单片机中使用"printf"函数:包括使用自带的printf函数和自己动手写一个pr
2、intf函数功能描述:通过printf函数向串口发送数据,显示在终端或者串口助手上Proteus中串口终端的介绍1、连接方法如下所示2、串口的配置尤其注意配置的波特率一定要和程序代码中所写的一样(否则会造成无法显示字符)数据位停止位奇偶校验位极性(这些属性基本上是默认的配置)3、串口终端的使用proteusvirtualterminal使用注意事项a.virtualterminal默认显示字符,如果单片机发送的是非显示字符,则虚拟终端不会显示,会导致用户认为通讯未通。运行程序,在虚拟终端窗口里面点击右键,在弹
3、出菜单里面:选HEXDISPLAYMODE,则显示按十六进制显示,能显示所有字符。b.virtualterminal默认情况下不显示回显字符,运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:选EchoTypedCharacters显示回显字符c.virtualterminal和模拟物理串口COMPIM不能同时使用,同时使用会发生相互影响。d.启动仿真后可以右键单击终端,最后一栏打开和关闭串口显示终端源程序直接使用系统自带的printf函数:特别注意需要置位TI=1,否则是无法发送的,程序如下(此程序在p
4、roteus终端上不能显示汉字,但在串口调试助手上可以)/******decription******************利用printf函数向串口打印信息51单片机晶振频率11.0592MHZ串口通信波特率9600bps利用printf函数TI初始值必须置1***********************************//*******includesfile*************/#include#include#include#
5、include#defineucharunsignedchar#defineuintunsignedintvoiddelay_1ms(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}voiduart_init(void){TMOD=0x20;//定时计数器1,工作方式2TH1=0xFD;//设置波特率9600TL1=0xFD;TR1=1;SCON=0x50;PCON=0x00;EA=1;ES=1;TI=1;//若利用printf函数则TI
6、初始值必须置1}voidmain(){uart_init();while(1){//SBUF='H';//while(TI==0);//TI=0;printf("iamherro!r");delay_1ms(1000);if(ff){ff=0;printf("%c",num);}}}voidser_interrupt()interrupt4{if(RI==1){ES=0;RI=0;num=SBUF;ES=1;ff=1;}}4.编写自己的printf函数(这个函数不能再proteus中仿真,但实际中可以使
7、用)a.预备知识①C语言函数:vsprintf,其原型为intvsprintf(char*string,char*format,va_listparam);,作用为将param按格式format写入字符串string中,因此他可以用于将任何格式数据转化为字符串数据,比如把整数97转化为ASCII码的97的程序就像下面这样vsprintf(string,"%d",97),当然还有一点需要注意:在keil里面使用sprintf需要包含stdio.h这个头文件(当然这里也可以使用sprintf,作用完全差不多,只需
8、要稍加修改即可,不多介绍)。说到这里,再来说说另一个函数itoa吧,其实他比vsprintf更简单,其原型为char*itoa(intvalue,char*string,intradix),作用为将value按radix进制写入到string字符串中,使用时需要包含头文件stdlib.h,可是在keil里面却无法使用,头文件里面不包含itoa,即使把VC里面的复制进来貌似还是不行,呵呵,目前不知道原
此文档下载收益归作者所有