[求助] msp430g2553串口通信问题,一直重复发生A,怎样才能停止?

howelia   2014-10-10 17:53 楼主
悬赏 5 分 芯积分已解决

最佳答案

qiushenghua 查看完整内容

2014-10-10 17:53
我咋觉得是因为你忘记关看门狗了,然后隔一段时间复位发送一个A,隔一段时间又复位发送一个A了呢?
#include

int main(void)
{
  DCOCTL = 0;
  BCSCTL1 = CALBC1_16MHZ;
  DCOCTL = CALDCO_16MHZ;
  BCSCTL1 |= DIVA_1;    //ACLK =MCLK/2=8M
  BCSCTL2 |= DIVS_1;    //SMCLK=MCLK/2=8M

  P1DIR  |= BIT2;           //P1.2  UART_TX
  P1DIR  &= ~BIT1;           //P1.2  UART_RX
  P1SEL  |= BIT1+BIT2;      //select P1.1 and P1.2 as UART port
  P1SEL2 |= BIT1+BIT2;
  
  UCA0CTL1 |= UCSWRST;      // reset UART module,as well as enable UART module
  UCA0CTL1 |= UCSSEL_2;     // UART clock is SMCLK
  UCA0BR0  |= 65;           // Baud N=BCLK/rate,rate=9600,BCLK=SMCLK=8M
  UCA0BR1  |= 3;
  UCA0MCTL  = UCBRS1;      // UCBRSx=2
  UCA0CTL1 &= ~UCSWRST;     // UART reset end
  
  IE2 |= UCA0TXIE;          // Enable USCI_A0 TX interrupt

  _EINT();
  while (1);
}

// USCI A0/B0 Transmit ISR
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
  UCA0TXBUF = 'A';                 // TX next character
  
  IE2 &= ~UCA0TXIE;                // Disable USCI_A0 TX interrupt
}

回复评论 (7)

你没有清除发送中断标志吗
点赞  2014-10-10 18:26
引用: bobde163 发表于 2014-10-10 18:26
你没有清除发送中断标志吗

清除了也没用,我觉得问题好像出在UCA0TXBUF这里,只有UCA0TXBUF为空时UCA0TXIFG被置位。测试 的时候感觉不管在主函数还是中断程序里只要给UCA0TXBUF赋值了,数据就会主动发送,要停止发送,感觉要清空UCA0TXBUF,但是我不知道怎么操作
点赞  2014-10-10 19:02
发送完一次之后,不用清空TXBUF,只要不重新赋值就可以了,至于你这个无法停止的问题,我觉得很奇怪
点赞  2014-10-10 20:45
我咋觉得是因为你忘记关看门狗了,然后隔一段时间复位发送一个A,隔一段时间又复位发送一个A了呢?
点赞  2014-10-10 17:53
引用: qiushenghua 发表于 2014-10-10 21:27
我咋觉得是因为你忘记关看门狗了,然后隔一段时间复位发送一个A,隔一段时间又复位发送一个A了呢?

好像是啊,没有关于看门狗的操作,还是你看得仔细
点赞  2014-10-10 23:45
引用: qiushenghua 发表于 2014-10-10 21:27
我咋觉得是因为你忘记关看门狗了,然后隔一段时间复位发送一个A,隔一段时间又复位发送一个A了呢?

果然是啊!!!晕死我了,折腾了好久,就这点小问题,感谢大神的热心帮助
点赞  2014-10-11 11:15
引用: bobde163 发表于 2014-10-10 23:45
好像是啊,没有关于看门狗的操作,还是你看得仔细

呵呵,是这个问题,也谢谢你的耐心回答
点赞  2014-10-11 11:19
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复