?? reandtr.c
字號:
#include<msp430x15x.h>
unsigned char nRev_UART0;//串口0的接收標(biāo)志
unsigned char UART0_TX_BUF[60];//串口0的發(fā)送緩沖區(qū)
unsigned char UART0_RX_BUF[60];//串口0的接收緩沖區(qū)
unsigned char UART0_RX_Temp[60];
int nSend_TX0;
int nTX0_Len;
unsigned char nRX0_Len;
unsigned char nRX0_Len_Temp;
unsigned char nTX0_Flag;
int nRes_UART0;
int i;
//主函數(shù)
void main(void)
{
void Init_Port(void);//函數(shù)聲明
void Init_UART0(void);
/* int nRes_UART;
int nRes=0;*/
WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗
_DINT();//關(guān)中斷
Init_Port();//初始化端口
Init_UART0();//初始化串口0
_EINT();//開中斷
while(1)//進(jìn)入等待狀態(tài)
{
if(nRev_UART0==1)//若接收到數(shù)據(jù),處理了接收中斷
{
for(i=0;i<nRX0_Len;i++)
UART0_RX_Temp[i]=UART0_RX_BUF[i];//將接收緩沖器里的數(shù)據(jù)寫入臨時緩存
IFG1|=UTXIFG0;//設(shè)置發(fā)送中斷標(biāo)志
nRX0_Len=0;
}
}
}
//初始化端口程序
void Init_Port(void)
{
P3DIR=0;//3端口所有管腳為輸入方式
P3SEL=0;//3端口所有管腳為一般I/O口
return;
}
//出示換串口程序
void Init_UART0(void)
{
U0CTL=0X00;
U0CTL+=CHAR;//8位數(shù)據(jù)
U0TCTL=0X00;
U0TCTL+=SSEL0;//選擇ACLK時鐘,默認(rèn)低頻為32768HZ
U0BR0=0X0D;
U0BR1-0X00;//整數(shù)部分為13
U0MCTL=0XD5;//小數(shù)部分0.65*8=5
ME1|=UTXE0+URXE0;//使能UART0的TXD,RXD
IE1|=URXIE0;
IE1|=UTXIE0;//使能UART0的RX,TX中斷
P3SEL|=BIT4;
P3SEL|=BIT5;//設(shè)置P3.4和P3.5分別為TXD,RXD
P3DIR|=BIT4;//設(shè)置P3.4為輸出口
return;
}
//接收中斷程序
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
UART0_RX_BUF[nRX0_Len_Temp]=RXBUF0;
nRX0_Len_Temp+=1;
if(UART0_RX_BUF[nRX0_Len_Temp-1==' '])
{
nRX0_Len=nRX0_Len_Temp;
for(i=0;i<nRX0_Len;i++)
{
UART0_TX_BUF[i]=UART0_RX_BUF[i];
nTX0_Len=i;
}
nRev_UART0=1;
nRX0_Len_Temp=0;
}
}
//發(fā)送中斷程序
#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
if(nTX0_Len!=0)//若發(fā)送緩存中有數(shù)據(jù)沒有發(fā)完
{
nTX0_Flag=0;
TXBUF0=UART0_TX_BUF[nSend_TX0];
nSend_TX0+=1;
if(nSend_TX0>=nTX0_Len)
{
nSend_TX0=0;//回到發(fā)送臨時緩存的開始位置
nTX0_Len=0;//發(fā)送緩存長=0,等待寫入要發(fā)送的數(shù)據(jù)
nTX0_Flag=1;//沒有要發(fā)送的數(shù)據(jù),結(jié)束發(fā)送中斷
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -