//只要重寫putchar函數,就可以重定向printf的輸入輸出。
//以下是在Keil?5環境,
//用單片機STC12測試printf重定向功能的代碼。
#包含?& ltSTC12C5A60S2。H & gt
#包含?& ltstdio.h & gt
//UART1?初始化
作廢?UART 1 init(void)//115200 bps @ 11.0592 MHz
{
PCON?& amp=?0x7F?//波特率不壹樣。
SCON=?0x50?//具有可變波特率的8位數據
AUXR?|=?0x04?//1T模式
BRT?=?0xFD?//設置獨立波特率發生器的重載值。
AUXR?| = 0x 01;//串口1選擇獨立發生器作為波特率發生器。
AUXR?| = 0x 10;//啟動獨立波特率發生器
ES?=?1;?//使能串口1中斷。
}
//UART1?發送串行數據
作廢?UART1_SendData(char?dat)
{
ES = 0;?//關閉串口中斷
SBUF = dat?
而(TI!=1);?//等待傳輸成功
TI = 0;?//清除發送中斷標誌
ES = 1;?//打開串行端口中斷
}
//UART1?發送字符串
作廢?UART1_SendString(char?*s)
{
While(*s)//檢測字符串終止符
{
UART 1 _ send data(* s++);//發送當前字符
}
}
//重寫putchar函數
夏爾?putchar(char?c)
{
UART 1 _ send data(c);
回歸?c;
}
作廢?主要(無效)
{
UART 1 init();
UART1_SendString("餵?世界!\ r \ n ");
while(1)
{?;}
}
//打開串口,調整波特率為115200bps。您可以看到串行端口打印了以下信息:
//餵?世界!