用過stc12C5A60S2單片機的朋友都知道,該單片機有兩個串口可用,看到官網(wǎng)的程序注釋的也是比較多,所以自己寫了個串口2使用的程序,由于代碼相對簡單,所以這里只羅列出了串口2的的初始化、發(fā)送和接收函數(shù)供大家參考。
程序包含了STC12C5A60S2.H的頭文件,這個網(wǎng)上都有,大家懂的。
這個是初始化的函數(shù),可以添加到程序中調(diào)用就可以了。這里是用了獨立波特率發(fā)生器產(chǎn)生4800的波特率,晶振是24M,這個是用STC波特率計算機生成后添加了后面紅字部分,大家如果用其他晶振或者波特率可以下個重新生成然后修改即可。
/*描述:
電腦串口顯示程序
用Windows系統(tǒng)中的“超級終端”軟件,將串口端設置 [ 4800,8,無,1,無 ]
*/
#include《STC12C5A60S2.H》 //單片機頭文件
#include 《intrins.H》
/******自定義函數(shù)**************/
void UART_init (void); /**UART串口初始化函數(shù)**********/
void UART_T (unsigned char UART_data);/****************UART串口發(fā)送函數(shù)**************************/
void UART_TC (unsigned char *str);/*****UART串口發(fā)送字符串函數(shù) */
/***********************************************************
函數(shù)名:主函數(shù)
調(diào) 用:無
參 數(shù):無
返回值:無
結(jié) 果:程序開始處,無限循環(huán)
備 注:
/**********************************************************************************************/
void main (void)
{
UART_init();
UART_T(0x30);
UART_TC(“操媽逼”);
while(1);
}
/*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào) 用:UART_init();
參 數(shù):無
返回值:無
結(jié) 果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產(chǎn)生波特率(占用)
備 注:振蕩晶體為12MHz,PC串口端設置 [ 4800,8,無,1,無 ]
/**********************************************************************************************/
void UART_init (void)
{
EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
ES = 1; //允許UART串口的中斷
TMOD = 0x20; //定時器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時禁止串口接收)
TH1 = 0xF3; //定時器初值高8位設置
TL1 = 0xF3; //定時器初值低8位設置
PCON = 0x80; //波特率倍頻(屏蔽本句波特率為2400)
TR1 = 1; //定時器啟動
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口發(fā)送函數(shù)
調(diào) 用:UART_T (?);
參 數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))
返回值:無
結(jié) 果:將參數(shù)中的數(shù)據(jù)發(fā)送給UART串口,確認發(fā)送完成后退出
備 注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定義串口發(fā)送數(shù)據(jù)變量
SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去
while(TI == 0); //檢查發(fā)送中斷標志位
TI = 0; //令發(fā)送中斷標志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口發(fā)送字符串函數(shù)
調(diào) 用:UART_TC (?);
參 數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))
返回值:無
結(jié)
果:向串口發(fā)送一個字符串,長度不限。
備 注:例:UART_TC(“d9887321$”); 此函數(shù)需要#include 《string.h》頭文件支持。
/**********************************************************************************************/
void UART_TC (unsigned char *str)
{
while(*str != ‘\0’)
{
UART_T(*str);
*str=*str++; //無聊警告。。。
}
*str = 0;
}
評論
查看更多