標(biāo)題:
串口UART實(shí)現(xiàn)電腦發(fā)送數(shù)據(jù)當(dāng)430接收到數(shù)據(jù)后再發(fā)回電腦
[打印本頁(yè)]
作者:
shanz
時(shí)間:
2018-4-22 21:41
標(biāo)題:
串口UART實(shí)現(xiàn)電腦發(fā)送數(shù)據(jù)當(dāng)430接收到數(shù)據(jù)后再發(fā)回電腦
串口UART實(shí)現(xiàn)電腦發(fā)送數(shù)據(jù)當(dāng)430接收到數(shù)據(jù)后再發(fā)回電腦
0.jpg
(35.41 KB, 下載次數(shù): 85)
下載附件
2018-4-22 23:15 上傳
單片機(jī)源程序如下:
#include<msp430g2553.h>
#include "UART_Global.h"
unsigned char Rx_FIFO[RX_FIFO_SIZE]={0}; //UART接收FIFO數(shù)組
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發(fā)送FIFO數(shù)組
unsigned int Tx_FIFO_DataNum=0; //UART發(fā)送FIFO的“空滿”指示變量
unsigned int Tx_FIFO_IndexR=0; //UART發(fā)送FIFO的模擬“讀指針”變量
unsigned int Tx_FIFO_IndexW=0; //UART 發(fā)送 FIFO 的模擬“寫指針”變量
char Rx_FIFO_WriteChar(unsigned char Data)
{
if(Rx_FIFO_DataNum==RX_FIFO_SIZE) return(0);
//判斷FIFO是否已裝滿未讀數(shù)據(jù),如果裝滿返回0
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
Rx_FIFO_DataNum++; //未讀取數(shù)據(jù)個(gè)數(shù)加一
Rx_FIFO[Rx_FIFO_IndexW]=Data; //將數(shù)據(jù)寫入寫讀指針位置的FIFO數(shù)組
Rx_FIFO_IndexW++; //寫指針移位
if (Rx_FIFO_IndexW>=RX_FIFO_SIZE) //判斷指針是否越界
Rx_FIFO_IndexW=0; //寫指針循環(huán)歸零
__disable_interrupt(); //恢復(fù)總中斷使能
return(1); //返回成功
}
char Rx_FIFO_ReadChar(unsigned char *Chr)
{
if(Rx_FIFO_DataNum==0) return(0); //判斷FIFO是是否有未讀數(shù)據(jù),如果沒(méi)有返回0
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
Rx_FIFO_DataNum --; //待讀取數(shù)據(jù)個(gè)數(shù)減一
*Chr=Rx_FIFO[Rx_FIFO_IndexR]; //將讀指針位置的FIFO數(shù)據(jù)賦給指針?biāo)缸兞?br />
Rx_FIFO_IndexR++; //讀指針移位
if (Rx_FIFO_IndexR>=RX_FIFO_SIZE) //判斷指針是否越界
Rx_FIFO_IndexR=0; //讀指針循環(huán)歸零
__disable_interrupt(); //恢復(fù)總中斷使能
return(1);
}
void Rx_FIFO_Clear()
{
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
Rx_FIFO_DataNum=0; //FIFO中未讀取數(shù)據(jù)數(shù)目
Rx_FIFO_IndexR=0; //FIFO中模擬讀指針清零
Rx_FIFO_IndexW=0; //FIFO中模擬寫指針清零
__disable_interrupt(); //恢復(fù)總中斷使能
}
char Tx_FIFO_WriteChar(unsigned char Data)
{
if(Tx_FIFO_DataNum==TX_FIFO_SIZE) return(0);
//判斷FIFO是否已裝滿未讀數(shù)據(jù),如果裝滿返回0
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
//-----“全新”一次發(fā)送數(shù)據(jù)必須手動(dòng)觸發(fā)Tx 中斷-----
if((Tx_FIFO_DataNum==0) &&( !(UCA0STAT & UCBUSY)))
//判斷是否為一次“全新”發(fā)送
IFG2 |=UCA0TXIFG; // 手動(dòng)觸發(fā)一次
Tx_FIFO_DataNum++; //未讀取數(shù)據(jù)個(gè)數(shù)加一
Tx_FIFO[Tx_FIFO_IndexW]=Data; //將數(shù)據(jù)寫入寫讀指針位置的FIFO數(shù)組
Tx_FIFO_IndexW++; //寫指針移位
if (Tx_FIFO_IndexW >= TX_FIFO_SIZE) //判斷指針是否越界
Tx_FIFO_IndexW=0; //寫指針循環(huán)歸零
__disable_interrupt(); //恢復(fù)總中斷使能
return(1); //返回成功
}
char Tx_FIFO_ReadChar(unsigned char *Chr)
{
if(Tx_FIFO_DataNum==0) return(0); //判斷FIFO是是否有未讀數(shù)據(jù),如果沒(méi)有返回0
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
Tx_FIFO_DataNum --; //待讀取數(shù)據(jù)個(gè)數(shù)減一
*Chr=Tx_FIFO[Tx_FIFO_IndexR]; //將讀指針位置的FIFO數(shù)據(jù)賦給指針?biāo)缸兞?br />
Tx_FIFO_IndexR++; //讀指針移位
if (Tx_FIFO_IndexR>=TX_FIFO_SIZE) //判斷指針是否越界
Tx_FIFO_IndexR=0; //讀指針循環(huán)歸零
__disable_interrupt(); //恢復(fù)總中斷使能
return(1); //返回成功
}
void Tx_FIFO_Clear()
{
__disable_interrupt(); //操作FIFO前一定要關(guān)總中斷
Tx_FIFO_DataNum=0; //FIFO中未讀取數(shù)據(jù)數(shù)目清零
Tx_FIFO_IndexR=0; //FIFO中模擬讀指針清零
Tx_FIFO_IndexW=0; //FIFO中模擬寫指針清零
__disable_interrupt(); //恢復(fù)總中斷使能
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
串口UART實(shí)現(xiàn)電腦發(fā)送數(shù)據(jù)當(dāng)430接收到數(shù)據(jù)后再發(fā)回電腦.rar
(120.48 KB, 下載次數(shù): 42)
2018-4-22 21:41 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1