佚名通过本文主要向大家介绍了msp430f149中断,msp430f149外部中断,msp430f149单片机,msp430f149单片机介绍,usart空闲中断等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: MSP430F149单片机无法进入USART接收中断
描述:
以下是我的程序。串口发送功能是好的,串口工具可以接收到数据。
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
static uchar pstr = 'A';
void Putchar(uchar c)
{
while((IFG1 & UTXIFG0) == 0);
TXBUF0 = c;
}
void Delays(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
ME1 |= UTXE0 + URXE0; // 使能USART0收发
IE1 |= URXIE0; // 使能接收中断
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0状态机
P3SEL |= 0x30; // P3.4,5选择为UART收发端口
P3DIR |= 0x10;
_EINT();
Putchar(pstr);
Putchar('\n');
for(;;)
{
Delays();
Delays();
}
}
#pragma vector = USART0RX_VECTOR
__interrupt void usart0_rx(void)
{
uchar c = 0;
while((IFG1 & UTXIFG0) == 0);
TXBUF0 = RXBUF0;
c ++ ;
}
在用仿真器调试的时候,我用串口调试助手向开发板发送一个字节的数据以后,系统随即死机。开发板上显示调试状态的灯也不亮了。仿真器上Power灯也灭掉了。
解决方案1:
描述:
本帖最后由 xikangsoon 于 2017-03-24 13:59:33 编辑
MSP430F149单片机;USART数据接收中断
MSP430F149单片机无法进入USART接收中断,当用串口调试助手向单片机发送数据时。不能进入中断处理函数中,出现的现象就是运行的程序挂掉了。求大神解答。以下是我的程序。串口发送功能是好的,串口工具可以接收到数据。
#include <msp430x14x.h>
typedef unsigned char uchar;
typedef unsigned int uint;
static uchar pstr = 'A';
void Putchar(uchar c)
{
while((IFG1 & UTXIFG0) == 0);
TXBUF0 = c;
}
void Delays(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
ME1 |= UTXE0 + URXE0; // 使能USART0收发
IE1 |= URXIE0; // 使能接收中断
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
UCTL0 &= ~SWRST; // 初始化UART0状态机
P3SEL |= 0x30; // P3.4,5选择为UART收发端口
P3DIR |= 0x10;
_EINT();
Putchar(pstr);
Putchar('\n');
for(;;)
{
Delays();
Delays();
}
}
#pragma vector = USART0RX_VECTOR
__interrupt void usart0_rx(void)
{
uchar c = 0;
while((IFG1 & UTXIFG0) == 0);
TXBUF0 = RXBUF0;
c ++ ;
}
在用仿真器调试的时候,我用串口调试助手向开发板发送一个字节的数据以后,系统随即死机。开发板上显示调试状态的灯也不亮了。仿真器上Power灯也灭掉了。
解决方案1:
第二,你的主要问题应该是中断设置不对
你的#pragma vector = USART0RX_VECTOR,按照你设置的寄存器来看是用的UART方式
应该是 #pragma vector = UART0RX_VECTOR,
当使用SPI或者I2C的时候才是USART0RX_VECTOR
UCTL0 &= ~SWRST; // 初始化UART0状态机
P3SEL |= 0x30; // P3.4,5选择为UART收发端口
P3DIR |= 0x10;
_EINT();
注意此处,把刚开始的中断放到初始化状态机之后试一下,设置SWRST的时候会影响一些状态位和控制位,应该在SWRST=1时设置串口,再将SWRST置0,如果需要中断,再设置中断,按照这样的顺序初始化,你试一下,不保证能解决你的问题