?? uart.c
字號:
/********************************************************/
/* uart.c */
/********************************************************/
#include "msp430x22x4.h"
#include "string.h"
#include "uart.h"
/*聲明外部變量*/
extern unsigned char Connected;
extern unsigned char ReActive;
#define USART_DIR P3DIR
#define USART_SEL P3SEL
#define USART_IN P3IN
#define USART_OUT P3OUT
#define UTXD0 BIT4
#define URXD0 BIT5
char READY[] = "READY";
char REACT[] = "REACT";
unsigned char YES[] = "YES";
unsigned char ACK[] = "ACK";
char RecBuffer[6];
void InitUart()
{
USART_SEL |= UTXD0 + URXD0;
P3DIR |= UTXD0;
/*UCAOCTL0采用默認設置,8個數據位、1個停止位、無校驗位*/
UCA0CTL1 |=UCSSEL0; //時鐘源選擇32768晶振
UCA0BR1=0; //設置波特率32768/9600=3.4
UCA0BR0=3;
UCA0MCTL |= UCBRS2; //UCBRSx=INT(0.4*8)=3
UCA0CTL1 &=~ UCSWRST; //退出USCI設置
IE2 |=UCA0RXIE; //使能接收中斷
}
/*查詢的方式發送數據*/
void SendUart(unsigned char *pBuffer,unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
{
while((IFG2 & UCA0TXIFG)==0);//判斷是否發送完成
UCA0TXBUF = *pBuffer++;
}
}
/*中斷的方式接收數據*/
#pragma vector =USCIAB0RX_VECTOR
__interrupt void rx_isr(void)
{
static unsigned char i=0;
RecBuffer[i++]=UCA0RXBUF;
if(i==5)
{
i=0;
RecBuffer[5]='\0';
if(strcmp(RecBuffer,READY)==0)
{
SendUart(YES,3);
Connected = 1;
}
else if(strcmp(RecBuffer,REACT)==0)
{
SendUart(ACK,3);
ReActive = 1;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -