Keil C51重定向printf到串口

2018-06-10 11:20:34来源: eefocus 关键字:Keil C51  重定向  printf  串口

概述

进行C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们习惯使用printf函数,但是在Keil C51环境下,由于我们的程序是下载到单片机里,使用printf函数时不能直接打印到串口上,这个时候就需要我们对printf函数输出重定向

重定向

重定向printf很简单,我们知道,printf函数是调用putchar实现字符数据传送的。我们只要重写putchar函数,就可以对printf进输出重定向。

代码清单

下面是自己在Keil 5环境下,使用单片机STC12测试printf重定向功能的代码清单

#include

#include


//UART1 初始化

void Uart1Init(void)    //115200bps@11.0592MHz

{

    PCON &= 0x7F;       //波特率不倍速

    SCON    = 0x50;     //8位数据,可变波特率

    AUXR |= 0x04;       //1T模式

    BRT     = 0xFD;     //设置独立波特率发生器重装值

    AUXR |=0X01;        //串口1选择独立发生器为波特率发生器

    AUXR |=0X10;        //启动独立波特率发生器

    ES = 1;                 //使能串口1中断

}


//UART1 发送串口数据

void UART1_SendData(char dat)

{

    ES=0;           //关串口中断

    SBUF=dat;           

    while(TI!=1);   //等待发送成功

    TI=0;           //清除发送中断标志

    ES=1;           //开串口中断

}


//UART1 发送字符串

void UART1_SendString(char *s)

{

    while(*s)//检测字符串结束符

    {

        UART1_SendData(*s++);//发送当前字符

    }

}


//重写putchar函数

char putchar(char c)

{

    UART1_SendData(c);

    return c;

}


void main(void)

{

    Uart1Init();

    UART1_SendString("Hello World!\r\n");

    printf("printf Test!\r\n");

    printf("Complie Time:%s\r\n", __TIME__);


    while(1)

    {

    }

}

打开串口把波特率调成115200bps,可以看到串口打印如下信息:

Hello World! 

printf Test! 

Complie Time:11:12:36

关键字:Keil C51  重定向  printf  串口

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/article_2018061039730.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:51单片机串口通信 采用中断方式
下一篇:最后一页

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

网友正在学习IC视频

推荐阅读
全部
Keil C51
重定向
printf
串口

小广播

独家专题更多

东芝在线展会——芯科技智社会创未来
东芝在线展会——芯科技智社会创未来
2017东芝PCIM在线展会
2017东芝PCIM在线展会
TI车载信息娱乐系统的音视频解决方案
TI车载信息娱乐系统的音视频解决方案
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved