PC机与MSP430F1611通讯,430用外部8兆晶振作UART时钟,波特率9600bps,利用中断接收PC机来的数据,主函数就是while(1);等待中断。用串口调试助手用手动发送调试,430接收出现以下问题:430接收数据只能接收一次,但是第一次手动发送430可以接收多个字节,第二次手动发送430接收不了任何数据。但是如果我在接收中断程序中加入发送程序,则可以顺利发送,百思不得其解?
附上程序代码:
这是初始化的:
void UART_init()
{
U0CTL=SWRST;
U0CTL|=CHAR;
U0TCTL|=SSEL1; //use SMCLK
U0BR0=0x41;
U0BR1=0x03;
U0MCTL=0x07; //baud 9600bps
ME1|=URXE0+UTXE0;
U0CTL&=~SWRST;
IE1|=URXIE0;
P3SEL|=BIT4+BIT5;
P3DIR|=BIT4;
_EINT();
}
这是接收通讯中断程序的:
#pragma vector=USART0RX_VECTOR
__interrupt void rev()
{
test[addr]=RXBUF0; //用一个全局的数组存放接收数据
UART_transmit(test[addr]);//不调用发送函数只能接收一次数据!!!
addr++;
}
这是发送程序:
void UART_transmit(unsigned char dat)
{
while (!(IFG1&UTXIFG0));
TXBUF0=dat;
}
主函数就关看门狗等中断
Peter_Zheng:
不调用发送程序就是少了 while (!(IFG1&UTXIFG0));