Keil C51 重定向 printf 到串口
概述
进行 C/C++开发的时候我们都会需要打印调试信息,打印调试信息时我们
习惯使用 printf 函数,但是在 Keil C51 环境下,由于我们的程序是下载到
单片机里,使用 printf 函数时不能直接打印到串口上,这个时候就需要我们
printf 函数输出重定向。
重定向
重定向 printf 很简单,我们知道,printf 函数是调用 putchar 实现字符数据
传送的。我们只要重写 putchar 函数,就可以对 printf 进输出重定向。
代码清单
函数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)//检测字符串结束符
{