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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2771|回復: 0
打印 上一主題 下一主題
收起左側

單片機串口編程參考

[復制鏈接]
跳轉到指定樓層
樓主
ID:104835 發表于 2016-2-4 04:06 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
標準串口參考程序如下:(來源周立功單片機公司)具有一般參考意義。
#include<reg51.h>
unsigned char UART_RX; //定義串口接收數據變量
unsigned char RX_flag; //定義穿行接收標記
/*********************************************************************************************
函數名:UART串口初始化函數
調  用:UART_init();
參  數:無
返回值:無
結  果:啟動UART串口接收中斷,允許串口接收,啟動T/C1產生波特率(占用)
備  注:振蕩晶體為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; //定時器啟動   
}
/**********************************************************************************************/

/*********************************************************************************************
函數名:UART串口接收中斷處理函數
調  用:[SBUF收到數據后中斷處理]
參  數:無
返回值:無
結  果:UART串口接收到數據時產生中斷,用戶對數據進行處理(并發送回去)
備  注:過長的處理程序會影響后面數據的接收
/**********************************************************************************************/
void UART_R (void) interrupt 4  using 1{ //切換寄存器組到1
RI = 0;   //令接收中斷標志位為0(軟件清零)
UART_RX = SBUF; //將接收到的數據送入變量 UART_data
RX_flag=1;  //標記接收
//用戶函數內容(用戶可使用UART_data做數據處理)

//SBUF = UART_data; //將接收的數據發送回去(刪除//即生效)
//while(TI == 0); //檢查發送中斷標志位
//TI = 0;  //令發送中斷標志位為0(軟件清零)
}
/**********************************************************************************************/
/*********************************************************************************************
函數名:UART串口發送函數
調  用:UART_T (?);
參  數:需要UART串口發送的數據(8位/1字節)
返回值:無
結  果:將參數中的數據發送給UART串口,確認發送完成后退出,采用非中斷方式
備  注:
/**********************************************************************************************/
void UART_T (unsigned char UART_data){ //定義串口發送數據變量
ES=0;    //禁止穿行中斷
SBUF = UART_data; //將接收的數據發送回去
while(TI == 0);  //檢查發送中斷標志位
TI = 0;   //令發送中斷標志位為0(軟件清零)
ES=1;   //打開穿行中斷
}
/*********************************************************************************************
函數名:UART串口發送字符串函數
調  用:UART_S (?);
參  數:需要UART串口發送的數據(8位/1字節)
返回值:無
結  果:將參數中的數據發送給UART串口,確認發送完成后退出,采用非中斷方式
備  注:
/**********************************************************************************************/
void UART_S(unsigned char *str)
{
while(1)
{
  if(*str=='\0') break;
  UART_T(*str++);
}
}
/*********************************************************************************************
函數名:主函數
調  用:main();
參  數:
返回值:無
結  果:
備  注:
/**********************************************************************************************/
void main()
{
unsigned char Buf_data[]={"      welcome to MCU world.     \n\r"};
UART_init();
UART_S(Buf_data);
while(1){
  if(RX_flag==1)
  {
   UART_T(UART_RX);
   RX_flag=0;
  }
}
}
///////////////////////////////////////////////////////////////////
個人認為普通單片機在通信頻率上及不上AVR單片機,更可能使用USB轉串口工具進行開發,所以串口波特率不能過高,最好是2400或4800。過高只會導致亂碼或丟失。

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91精品一区二区三区久久久久 | 久久成人免费视频 | 中文字幕电影在线观看 | 日本不卡免费新一二三区 | 欧美成人猛片aaaaaaa | 国产高清免费 | 久久se精品一区精品二区 | 国产欧美在线视频 | 亚洲视频观看 | 国色天香成人网 | 久久精品网| 五月天激情电影 | 99久久中文字幕三级久久日本 | 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区在线看 | 欧美美女爱爱视频 | 国产69精品久久99不卡免费版 | 国产小视频在线 | 亚洲自拍偷拍免费视频 | 久久久久亚洲 | 久久夜视频| 中文字幕第一页在线 | 蜜桃官网 | 三级在线视频 | 免费一级淫片aaa片毛片a级 | 色婷婷av一区二区三区软件 | 国产黄色在线观看 | 国产一级视频免费播放 | 久久亚洲精品国产精品紫薇 | 日韩中文一区二区 | 亚洲黄色一区二区三区 | 草久久久 | 99国产精品99久久久久久粉嫩 | 欧美成人免费 | 久久www免费视频 | 91伊人| 久久亚洲二区 | 91精品国产乱码久久久久久久久 | 成人免费共享视频 | 免费观看www7722午夜电影 | 韩日免费视频 |