×
单片机 > 单片机程序设计 > 详情

Keil C51重定向printf到串口

发布时间:2020-08-21 发布时间:
|

概述

进行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  串口

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机中断源的扩展方法