串口UART實現電腦發送數據當430接收到數據后再發回電腦
單片機源程序如下:
- #include<msp430g2553.h>
- #include "UART_Global.h"
- unsigned char Rx_FIFO[RX_FIFO_SIZE]={0}; //UART接收FIFO數組
- unsigned int Rx_FIFO_DataNum=0; //UART接收FIFO的“空滿”指示變量
- unsigned int Rx_FIFO_IndexR=0; //UART接收FIFO的模擬“讀指針”變量
- unsigned int Rx_FIFO_IndexW=0; //UART接收FIFO的模擬“寫指針”變量
- unsigned char Tx_FIFO[TX_FIFO_SIZE]={0}; //UART發送FIFO數組
- unsigned int Tx_FIFO_DataNum=0; //UART發送FIFO的“空滿”指示變量
- unsigned int Tx_FIFO_IndexR=0; //UART發送FIFO的模擬“讀指針”變量
- unsigned int Tx_FIFO_IndexW=0; //UART 發送 FIFO 的模擬“寫指針”變量
- char Rx_FIFO_WriteChar(unsigned char Data)
- {
- if(Rx_FIFO_DataNum==RX_FIFO_SIZE) return(0);
- //判斷FIFO是否已裝滿未讀數據,如果裝滿返回0
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- Rx_FIFO_DataNum++; //未讀取數據個數加一
- Rx_FIFO[Rx_FIFO_IndexW]=Data; //將數據寫入寫讀指針位置的FIFO數組
- Rx_FIFO_IndexW++; //寫指針移位
- if (Rx_FIFO_IndexW>=RX_FIFO_SIZE) //判斷指針是否越界
- Rx_FIFO_IndexW=0; //寫指針循環歸零
- __disable_interrupt(); //恢復總中斷使能
- return(1); //返回成功
- }
- char Rx_FIFO_ReadChar(unsigned char *Chr)
- {
- if(Rx_FIFO_DataNum==0) return(0); //判斷FIFO是是否有未讀數據,如果沒有返回0
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- Rx_FIFO_DataNum --; //待讀取數據個數減一
- *Chr=Rx_FIFO[Rx_FIFO_IndexR]; //將讀指針位置的FIFO數據賦給指針所指變量
- Rx_FIFO_IndexR++; //讀指針移位
- if (Rx_FIFO_IndexR>=RX_FIFO_SIZE) //判斷指針是否越界
- Rx_FIFO_IndexR=0; //讀指針循環歸零
- __disable_interrupt(); //恢復總中斷使能
- return(1);
- }
- void Rx_FIFO_Clear()
- {
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- Rx_FIFO_DataNum=0; //FIFO中未讀取數據數目
- Rx_FIFO_IndexR=0; //FIFO中模擬讀指針清零
- Rx_FIFO_IndexW=0; //FIFO中模擬寫指針清零
- __disable_interrupt(); //恢復總中斷使能
- }
- char Tx_FIFO_WriteChar(unsigned char Data)
- {
- if(Tx_FIFO_DataNum==TX_FIFO_SIZE) return(0);
- //判斷FIFO是否已裝滿未讀數據,如果裝滿返回0
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- //-----“全新”一次發送數據必須手動觸發Tx 中斷-----
- if((Tx_FIFO_DataNum==0) &&( !(UCA0STAT & UCBUSY)))
- //判斷是否為一次“全新”發送
- IFG2 |=UCA0TXIFG; // 手動觸發一次
- Tx_FIFO_DataNum++; //未讀取數據個數加一
- Tx_FIFO[Tx_FIFO_IndexW]=Data; //將數據寫入寫讀指針位置的FIFO數組
- Tx_FIFO_IndexW++; //寫指針移位
- if (Tx_FIFO_IndexW >= TX_FIFO_SIZE) //判斷指針是否越界
- Tx_FIFO_IndexW=0; //寫指針循環歸零
- __disable_interrupt(); //恢復總中斷使能
- return(1); //返回成功
- }
- char Tx_FIFO_ReadChar(unsigned char *Chr)
- {
- if(Tx_FIFO_DataNum==0) return(0); //判斷FIFO是是否有未讀數據,如果沒有返回0
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- Tx_FIFO_DataNum --; //待讀取數據個數減一
- *Chr=Tx_FIFO[Tx_FIFO_IndexR]; //將讀指針位置的FIFO數據賦給指針所指變量
- Tx_FIFO_IndexR++; //讀指針移位
- if (Tx_FIFO_IndexR>=TX_FIFO_SIZE) //判斷指針是否越界
- Tx_FIFO_IndexR=0; //讀指針循環歸零
- __disable_interrupt(); //恢復總中斷使能
- return(1); //返回成功
- }
- void Tx_FIFO_Clear()
- {
- __disable_interrupt(); //操作FIFO前一定要關總中斷
- Tx_FIFO_DataNum=0; //FIFO中未讀取數據數目清零
- Tx_FIFO_IndexR=0; //FIFO中模擬讀指針清零
- Tx_FIFO_IndexW=0; //FIFO中模擬寫指針清零
- __disable_interrupt(); //恢復總中斷使能
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
串口UART實現電腦發送數據當430接收到數據后再發回電腦.rar
(120.48 KB, 下載次數: 42)
2018-4-22 21:41 上傳
點擊文件名下載附件
|