单片机串口实现printf函数
背景叙述:
在初学C语言时,利用printf函数向屏幕上输出字符,非常的好用和方便。学会单片机以后,尤其在学会串口通信之后,通过单片机的串口向PC机发送数据,怎么实现printf函数的功能。对于学习单片机来说,如果没有仿真器,出错误的时候不好,只能用最笨的办法,使用printf函数,可是在KEIL里面使用printf却不像VC里面那么简单,因为其发送和硬件是有关系的。所以今天就简单来说说怎么在51单片机中使用"printf"函数:包括使用自带的printf函数和自己动手写一个printf函数
功能描述:
通过printf函数向串口发送数据,显示在终端或者串口助手上
Proteus中串口终端的介绍
1、连接方法如下所示
2、串口的配置
尤其注意配置的波特率一定要和程序代码中所写的一样(否则会造成无法显示字符)
数据位
停止位
奇偶校验位
极性(这些属性基本上是默认的配置)
3、串口终端的使用
proteus virtual terminal 使用注意事项
a. virtual terminal 默认显示字符,如果单片机发送的是非显示字符,则虚拟终端不会显示,会导致用户认为通讯未通。
运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:
选HEX DISPLAY MODE,则显示按十六进制显示,能显示所有字符。
b.virtual terminal 默认情况下不显示回显字符,
运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:
选Echo Typed Characters 显示回显字符
c.virtual terminal 和模拟物理串口COMPIM不能同时使用,同时使用会发生相互影响。
运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:
选HEX DISPLAY MODE,则显示按十六进制显示,能显示所有字符。
b.virtual terminal 默认情况下不显示回显字符,
运行程序,在虚拟终端窗口里面点击右键,在弹出菜单里面:
选Echo Typed Characters 显示回显字符
c.virtual terminal 和模拟物理串口COMPIM不能同时使用,同时使用会发生相互影响。
d. 启动仿真后可以右键单击终端,最后一栏打开和关闭串口显示终端
源程序
直接使用系统自带的printf函数:特别注意需要置位TI=1,否则是无法发送的,程序如下(此程序在proteus终端上不能显示汉字,但在串口调试助手上可以)
/******decription******************
利用printf函数向串口打印信息
51单片机晶振频率11.0592MHZ
串口通信波特率9600bps
利用printf函数TI初始值必须置1
***********************************/
/*******includes file*************/
#include<reg51.h>
#include<intrins.h>
#include<string.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void delay_1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void uart_init(void)
{
TMOD=0x20; //定时计数器1,工作方式2
TH1=0xFD; //设置波特率9600
TL1=0xFD;
TR1=1;
SCON=0x50;
PCON=0x00;
EA=1;
ES=1;
TI=1; //若利用printf函数则TI初始值必须置1
}
void main()
{
uart_init();
while(1)
{
// SBUF = 'H';
// while(TI==0);
// TI=0;
printf("i am herro!\n\r");
delay_1ms(1000);
if(ff)
{
ff=0;
printf("%c",num);
printf怎么输出字符 }
}
}
void ser_interrupt() interrupt 4
{
if(RI==1)
{
ES=0;
RI=0;
num=SBUF;
ES=1;
ff=1;
}
}
4.编写自己的printf函数(这个函数不能再proteus中仿真,但实际中可以使用)
a.预备知识
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论