久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5008|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MCS-51系列單片機(jī)C語言編程UART串口程序模板

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:76190 發(fā)表于 2015-4-5 17:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

/*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動(dòng)UART串口接收中斷,允許串口接收,啟動(dòng)T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為12MHz,PC串口端設(shè)置 [ 4800,8,無,1,無 ]
/**********************************************************************************************/
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串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動(dòng)UART串口接收中斷,允許串口接收,啟動(dòng)T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為11.0592MHz,PC串口端設(shè)置 [ 19200,8,無,1,無 ]
/**********************************************************************************************/
void UART_init (void){
EA = 1; //允許總中斷(如不使用中斷,可用//屏蔽)
ES = 1; //允許UART串口的中斷
TMOD = 0x20; //定時(shí)器T/C1工作方式2
SCON = 0x50; //串口工作方式1,允許串口接收(SCON = 0x40 時(shí)禁止串口接收)
TH1 = 0xFD; //定時(shí)器初值高8位設(shè)置
TL1 = 0xFD; //定時(shí)器初值低8位設(shè)置
PCON = 0x80; //波特率倍頻(屏蔽本句波特率為9600)
TR1 = 1; //定時(shí)器啟動(dòng)   
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口接收中斷處理函數(shù)
調(diào)  用:[SBUF收到數(shù)據(jù)后中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:UART串口接收到數(shù)據(jù)時(shí)產(chǎn)生中斷,用戶對(duì)數(shù)據(jù)進(jìn)行處理(并發(fā)送回去)
備  注:過長的處理程序會(huì)影響后面數(shù)據(jù)的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切換寄存器組到1
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
RI = 0;   //令接收中斷標(biāo)志位為0(軟件清零)
UART_data = SBUF; //將接收到的數(shù)據(jù)送入變量 UART_data

//用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(shù)據(jù)處理)

//SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
//while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
//TI = 0;  //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:UART串口接收CPU查尋語句(非函數(shù)體)
調(diào)  用:將下面內(nèi)容放入主程序
參  數(shù):無
返回值:無
結(jié)  果:循環(huán)查尋接收標(biāo)志位RI,如有收到數(shù)據(jù)則進(jìn)入if (RI == 1){}
備  注:
/**********************************************************************************************/
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
if (RI == 1){  //接收中斷標(biāo)志位為1時(shí)
UART_data = SBUF; //接收數(shù)據(jù) SBUF 為單片機(jī)的接收發(fā)送緩沖寄存器
RI = 0;   //令接收中斷標(biāo)志位為0(軟件清零)
//用戶函數(shù)內(nèi)容(用戶可使用UART_data做數(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_T (?);
參  數(shù):需要UART串口發(fā)送的數(shù)據(jù)(8位/1字節(jié))
返回值:無
結(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é))
返回值:無
結(jié)  果:向串口發(fā)送一個(gè)字符串,長度不限。
備  注:例:UART_TC("d9887321$"); 此函數(shù)需要#include <string.h>頭文件支持。
/**********************************************************************************************/
void UART_TC (unsigned char *str){
while(*str != '\0'){
  UART_T(*str);
  *str++;
}
*str = 0;
}
/**********************************************************************************************

/*********************************************************************************************
程序名:    UART串口查尋方式程序?qū)嵗?br /> 硬件支持:  STC12C2052AD 外部12MHZ晶振
接口說明:  連接串口ISP下載線  
/*********************************************************************************************
說明:
用Windows系統(tǒng)中的“超級(jí)終端”軟件,將串口端設(shè)置 [ 4800,8,無,1,無 ]
或采用STC-ISP軟件中的串口助手功能,將串口端設(shè)置 [ 4800,8,無,1,無 ]
向串口發(fā)送數(shù)據(jù),單片機(jī)將數(shù)據(jù)發(fā)還給PC端并顯示。
/*********************************************************************************************/
#include <STC12C5A60S2.h> //STC12C5AxxS2系列單片機(jī)頭文件
//#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列單片機(jī)頭文件
/*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動(dòng)UART串口接收中斷,允許串口接收,啟動(dòng)T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為12MHz,PC串口端設(shè)置 [ 4800,8,無,1,無 ]
/**********************************************************************************************/
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ù)名:主函數(shù)
調(diào)  用:無
參  數(shù):無
返回值:無
結(jié)  果:程序開始處,無限循環(huán)
備  注:
/**********************************************************************************************/
void main (void){
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
UART_init();
while(1){
  if (RI == 1){  //接收中斷標(biāo)志位為1時(shí)
   UART_data = SBUF; //接收數(shù)據(jù) SBUF 為單片機(jī)的接收發(fā)送緩沖寄存器
   RI = 0;   //令接收中斷標(biāo)志位為0(軟件清零)
   SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
   while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
   TI = 0;  //令發(fā)送中斷標(biāo)志位為0(軟件清零)
  }
}
}
/**********************************************************************************************/

/*********************************************************************************************
程序名:    UART串口中斷方式程序?qū)嵗?br /> 硬件支持:  STC12C2052AD 外部12MHZ晶振
接口說明:  連接串口ISP下載線  
/*********************************************************************************************
說明:
用Windows系統(tǒng)中的“超級(jí)終端”軟件,將串口端設(shè)置 [ 4800,8,無,1,無 ]
或采用STC-ISP軟件中的串口助手功能,將串口端設(shè)置 [ 4800,8,無,1,無 ]
向串口發(fā)送數(shù)據(jù),單片機(jī)將數(shù)據(jù)發(fā)還給PC端并顯示。
/*********************************************************************************************/
#include <STC12C5A60S2.h> //STC12C5AxxS2系列單片機(jī)頭文件
//#include <STC12C2052AD.H> //STC12Cx052或STC12Cx052AD系列單片機(jī)頭文件
/*********************************************************************************************
函數(shù)名:UART串口初始化函數(shù)
調(diào)  用:UART_init();
參  數(shù):無
返回值:無
結(jié)  果:啟動(dòng)UART串口接收中斷,允許串口接收,啟動(dòng)T/C1產(chǎn)生波特率(占用)
備  注:振蕩晶體為12MHz,PC串口端設(shè)置 [ 4800,8,無,1,無 ]
/**********************************************************************************************/
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串口接收中斷處理函數(shù)
調(diào)  用:[SBUF收到數(shù)據(jù)后中斷處理]
參  數(shù):無
返回值:無
結(jié)  果:UART串口接收到數(shù)據(jù)時(shí)產(chǎn)生中斷,用戶對(duì)數(shù)據(jù)進(jìn)行處理(并發(fā)送回去)
備  注:過長的處理程序會(huì)影響后面數(shù)據(jù)的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切換寄存器組到1
unsigned char UART_data; //定義串口接收數(shù)據(jù)變量
RI = 0;   //令接收中斷標(biāo)志位為0(軟件清零)
UART_data = SBUF; //將接收到的數(shù)據(jù)送入變量 UART_data
  
SBUF = UART_data; //將接收的數(shù)據(jù)發(fā)送回去(刪除//即生效)
while(TI == 0); //檢查發(fā)送中斷標(biāo)志位
TI = 0;  //令發(fā)送中斷標(biāo)志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數(shù)名:主函數(shù)
調(diào)  用:無
參  數(shù):無
返回值:無
結(jié)  果:程序開始處,無限循環(huán)
備  注:
/**********************************************************************************************/
void main (void){
UART_init();
while(1){
}
}
/**********************************************************************************************/
1. MCS-51通用的UART串口是使用T1定時(shí)器產(chǎn)生波特率,即使用UART串口時(shí)T1不能作為他用。
2. 硬件上UART串口占用單片機(jī)的P3.0和P3.1接口(8051系列),除有特別設(shè)計(jì),否則此接口不得復(fù)用。
可將其模板下載到本地硬盤,在編寫新程序的時(shí)候復(fù)制、粘貼到工程當(dāng)中,然后根據(jù)情況寫入具體內(nèi)容。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 夜夜av| 在线一级片 | 免费看91 | 久久精品99久久 | 亚洲视频免费在线观看 | 亚洲成人精品免费 | 午夜看看 | 理伦毛片 | www.97zyz.com| 日本免费一区二区三区 | 午夜欧美一区二区三区在线播放 | 免费黄网站在线观看 | 国产一区二区三区四区三区四 | 欧美精品一区二区三区在线播放 | 国产精品影视在线观看 | 国精产品一区一区三区免费完 | 色性av | 欧美日韩高清一区二区三区 | 日韩在线一区二区三区 | 国产www. | 久久精品色欧美aⅴ一区二区 | 一区二区福利视频 | 激情欧美一区二区三区 | 亚洲精品乱码久久久久久蜜桃91 | www.亚洲一区二区三区 | 天堂在线免费视频 | 亚洲 欧美 另类 综合 偷拍 | 黄色一级片在线播放 | 久久青| www.久久久 | 日本三级网站在线观看 | 久草视频网站 | 久久久久九九九女人毛片 | 色视频www在线播放国产人成 | 91国产精品 | 国产在线1| 91精品国模一区二区三区 | 粉嫩国产精品一区二区在线观看 | 国产亚洲一区精品 | 99精品久久 | 国产精品视频久久 |