发送字符串:5F0600000200005B510600000C0000060100011603290728004E5F060000030000FEA4
为什么只能进中断一次 ,第二次再发就进不了中断了?而关闭串口助手,再次打开就又可以进中断一次。
#include <msp430x16x.h>
unsigned char RecBuf[35]; //接收数据缓存
unsigned char Rindex; //接收数据计数
unsigned char Rinflag; //接收血糖数据包完毕标志
/*******************************************************/
void Uart_init(void);
/*******************************************************/
void Uart_init(void)
{
P3SEL |= 0x30; // 选择P3.4TX和P3.5RX做UART通信端口
ME1 |= UTXE0 + URXE0; // 使能USART0的发送和接受
UCTL0 |= CHAR; // 选择8位字符
UTCTL0 |= SSEL1; // UCLK = SMCLK时钟源选择8M
UBR00 = 0x8A; // 波特率57600设定
UBR10 = 0x00; //
UMCTL0 = 0xDE; // Modulation
UCTL0 &= ~SWRST; // 初始化UART状态机
IE1 |= URXIE0; // 使能USART0的接收发送中断
}
/*******************************************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
volatile unsigned int i;
BCSCTL1 &= ~XT2OFF; // XT2on
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set
BCSCTL2 |= SELM_2 + SELS; // MCLK = SMCLK = XT2 (safe)
Uart_init();
while(1)
{
_BIS_SR(LPM0_bits+GIE);
//IE1 |= URXIE0; // 使能USART0的接收发送中断
}
}
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
RecBuf[Rindex++] = RXBUF0;
if(RecBuf[Rindex-2]==0xFE) //接收完毕
{
Rindex=0;
if(RecBuf[0]==0x5F) //帧头正确
{
Rinflag=1;
}
}
}
|