⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.c

📁 MSP430单片机的阅读器源码
💻 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 + -