msp430f5529接收到‘55 FD AA’开头的语句就进入uart中断的程序代码
以下是msp430f5529接收到‘55 FD AA’开头的语句就进入uart中断的程序代码的示例:
#include <msp430.h>
#define START_BYTE1 0x55
#define START_BYTE2 0xFD
#define START_BYTE3 0xAA
volatile unsigned char rx_data; // 接收到的数据
volatile unsigned char rx_flag; // 接收标志位
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P3SEL |= BIT3 + BIT4; // P3.3和P3.4设置为UART模式
UCA0CTL1 |= UCSWRST; // 禁用UART模块
UCA0CTL1 |= UCSSEL_2; // 选择SMCLK作为时钟源
UCA0BR0 = 104; // 时钟频率为1MHz,波特率为9600
UCA0BR1 = 0;
UCA0MCTL |= UCBRS_1 + UCBRF_0; // 额外的波特率控制寄存器设置
UCA0CTL1 &= ~UCSWRST; // 启用UART模块
UCA0IE |= UCRXIE; // 允许接收中断
__bis_SR_register(LPM0_bits + GIE); // 进入低功耗模式0,允许中断
while(1)
{
// do something
}
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break; // 无中断
case USCI_UART_UCRXIFG: // 接收中断
rx_data = UCA0RXBUF; // 读取接收到的数据
if(rx_data == START_BYTE1 && rx_flag == 0) // 判断是否为起始字节1
rx_flag = 1;
else if(rx_data == START_BYTE2 && rx_flag == 1) // 判断是否为起始字节2
rx_flag = 2;
else if(rx_data == START_BYTE3 && rx_flag == 2) // 判断是否为起始字节3
{
// 接收到完整的起始语句,进行处理
rx_flag = 0;
// do something
}
else // 其他情况,重置接收标志位
rx_flag = 0;
break;
case USCI_UART_UCTXIFG: break; // 发送中断
case USCI_UART_UCSTTIFG: break; // 起始位中断
case USCI_UART_UCTXCPTIFG: break; // 停止位中断
}
}
上述代码中,首先定义了起始字节1、2、3的值,以及接收到的数据和接收标志位。在主函数中,配置了UART模块的时钟源、波特率等参数,并启用了接收中断。在接收中断服务程序中,通过判断接收到的数据是否为起始字节1、2、3,来确定是否接收到了完整的起始语句。如果接收到了完整的起始语句,可以在相应的处理代码中进行处理
原文地址: https://www.cveoy.top/t/topic/fcJL 著作权归作者所有。请勿转载和采集!