单片机串口实现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不能同时使用,同时使用会发生相互影响。
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小时内删除。