📄 uart.c
字号:
#include <msp430x16x.h>
#include "XITONG.H"
//##############################################################################
void Init_UART1(void)
{
UCTL1 &=~ SWRST; // SWRST复位,USART允许
UCTL1 = 0x10; // 8位数据位,1位停止位,无校验
UBR01 = 0x0D;
UBR11 = 0x00; // 使用32KHz晶振时波特率为2400bps
UMCTL1 = 0x6B; // 位调整
UTCTL1 = 0x10; // 选定ACLK(32KHz晶振)为时钟源
ME2 |= 0x30; //UART发送及接收模块允许
//P4SEL = 0x03; // P3.6 P3.7被USART1发送模块占用
//P4DIR = 0X01; // P3.6 输出,P3.7 输入
IE2 |= URXIE1; //接收中断允许
IE2 |= UTXIE1; //使能UART1的TX中断
return;
}
//##############################################################################
void jieshou(void)
{
int i;
char UART1_RX_Temp[60];
//for(;;)
//{
if(nRev_UART1 == 1)
{
nRev_UART1 = 0;
// 将接收到的数据拷贝到临时缓冲区
for(i = 0;i < nRX1_Len;i++)
{
UART1_RX_Temp[i] = UART1_RX_BUF[i];
}
if(UART1_RX_Temp[0]!=0xEB) return;
if(UART1_RX_Temp[1]!=0x90) return;
//if(UART1_RX_Temp[2]!=0xAA) return;
//if(UART1_RX_Temp[3]!=0x33) return;
UART1_TX_BUF[0] = 'O';
UART1_TX_BUF[1] = 'K';
UART1_TX_BUF[2] = 13;
shi = UART1_RX_Temp[2];
fen = UART1_RX_Temp[3];
nTX1_Len = 3;
// 设置中断标志,进入发送中断程序
IFG2 |= UTXIFG1;
nRX1_Len = 0;
}
//}
}
//##############################################################################
///////////////////////////////////////
// 处理来自串口 1 的接收中断
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{
//接收来自的数据
UART1_RX_BUF[nRX1_Len_temp] = RXBUF1;
nRX1_Len_temp += 1;
if(UART1_RX_BUF[nRX1_Len_temp - 1] == ' ')
{
nRX1_Len = nRX1_Len_temp;
nRev_UART1 = 1;
nRX1_Len_temp = 0;
}
}
///////////////////////////////////////
// 处理来自串口 1 的发送中断
#pragma vector=UART1TX_VECTOR
__interrupt void UART1_TX_ISR(void)
{
if(nTX1_Len != 0)
{
// 表示缓冲区里的数据没有发送完
nTX1_Flag = 0;
TXBUF1 = UART1_TX_BUF[nSend_TX1];
nSend_TX1 += 1;
if(nSend_TX1 >= nTX1_Len)
{
nSend_TX1 = 0;
nTX1_Len = 0;
nTX1_Flag = 1;
}
}
}
//##############################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -