STC單片機(jī)11.0592晶振實(shí)現(xiàn)115200波特率串口通信
如果換了STC單片機(jī),例如在STC12C5A60S2實(shí)現(xiàn)115200的高速通信就相當(dāng)簡(jiǎn)單了。
因?yàn)椋琒TC12單片機(jī)有獨(dú)立的波特率發(fā)生器。
#include "STC12C5A60S2.H"
#include "stdio.h"
void init_uart()
{
PCON &= 0x7f;//波特率不倍速
SCON = 0x50;//8位數(shù)據(jù),可變波特率
BRT = 0xFD; //設(shè)定獨(dú)立波特率發(fā)生器重裝值
AUXR |= 0x04;//獨(dú)立波特率發(fā)生器時(shí)鐘為Fosc,即1T
AUXR |= 0x01;//串口1選擇獨(dú)立波特率發(fā)生器為波特率發(fā)生器
AUXR |= 0x10;//啟動(dòng)獨(dú)立波特率發(fā)生器
}
char putchar (unsigned char i)
{
ES = 0; //關(guān)串口中斷
TI = 0; //清零串口發(fā)送完成中斷請(qǐng)求標(biāo)志
SBUF = i;
while(TI ==0); //等待發(fā)送完成
TI = 0; //清零串口發(fā)送完成中斷請(qǐng)求標(biāo)志
ES = 1; //允許串口中斷
return SBUF;
}
記得頭文件加上 stdio.h,然后在代碼里實(shí)現(xiàn) putchar 函數(shù),這樣你就可以很方便的用 printf函數(shù)進(jìn)行串口輸出了。
例如
int hh=0,mm=0,ss=0;
printf("現(xiàn)在的時(shí)間:%d:%d:%drn", hh,mm,ss);
是不是串口輸出變簡(jiǎn)單多了。
評(píng)論