📄 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 + -