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