各位大神,本人初学430,希望您们帮忙看下我程序哪出错了,谢谢

2019-03-24 08:28发布

我想利用串口调试助手发送数据然后将发送的数据发回给助手,但是不知道怎么回事,好像助手接收不到发回的数据,


这是我的程序,希望各位大神帮忙看下哪有问题:

#include"msp430g2553.h"
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;//
  P1DIR |=BIT0;
  P1OUT |=BIT0;
  
  BCSCTL1 =CALBC1_1MHZ;
  DCOCTL =CALDCO_1MHZ;
  
  P1SEL |=BIT1+BIT2;
  UCA0CTL1 |=UCSWRST;
  UCA0CTL1 |=UCSSEL_2;
  UCA0BR0 =104;
  UCA0BR1 =0;
  UCA0MCTL |=UCBRS_2+UCBRF_0;
  UCA0CTL1 &=~UCSWRST;
  
  IE2 |=UCA0RXIE;
  IFG2 |=UCA0RXIFG;
  _EINT();
  while(1);
  
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  P1OUT ^=BIT0;
  while(!(IFG2&UCA0TXIFG))
  {
    UCA0TXBUF=UCA0RXBUF;  
  }
  IFG2 &=~UCA0RXIFG;
}
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
qwerghf
1楼-- · 2019-03-24 14:56
< 代码改为
  1. void uart_Init(void)
  2. {
  3.     WDTCTL = WDTPW + WDTHOLD;                 
  4.     BCSCTL1 = CALBC1_1MHZ;                 
  5.     DCOCTL = CALDCO_1MHZ;                                                                                                                                                                                                            
  6.     P1SEL = BIT1 + BIT2 ;                    
  7.     P1SEL2 = BIT1 + BIT2 ;                    
  8.    
  9.     UCA0CTL1 |= UCSSEL_2;                    
  10.     UCA0BR0 = 104;                           
  11.     UCA0BR1 = 0;                             
  12.     UCA0MCTL = UCBRS0;                     
  13.     UCA0CTL1 &= ~UCSWRST;                    
  14.     IE2 |= UCA0RXIE;                        
  15.     _EINT();                                   
  16. }
复制代码
xiao菜鸡
2楼-- · 2019-03-24 19:47
 精彩回答 2  元偷偷看……
qwerghf
3楼-- · 2019-03-24 23:25
xiao菜鸡 发表于 2017-7-10 11:08
没主函数也可以的吗
  1. #include  "msp430g2553.h"

  2. void main(void)
  3. {
  4.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  5.   
  6.   BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  7.   DCOCTL = CALDCO_1MHZ;
  8.   
  9.   P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  10.   P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  11.   
  12.   UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  13.   UCA0BR0 = 104;                            // 1MHz 9600
  14.   UCA0BR1 = 0;                              // 1MHz 9600
  15.   
  16.   UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  17.   UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  18.   IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  19.   __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
  20. }

  21. //  Echo back RXed character, confirm TX buffer is ready first
  22. #pragma vector=USCIAB0RX_VECTOR
  23. __interrupt void USCI0RX_ISR(void)
  24. {
  25.   while (!(IFG2&UCA0TXIFG));                // 发送中断标志检测,每次发送后都要检测
  26.                                             //直到发送完成,才可发送下个字节的数据
  27.   UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
  28. }
复制代码
xiao菜鸡
4楼-- · 2019-03-25 01:02
qwerghf 发表于 2017-7-10 11:14
[code]#include  "msp430g2553.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;   ...

还是不能回显
qwerghf
5楼-- · 2019-03-25 04:45
 精彩回答 2  元偷偷看……
xiao菜鸡
6楼-- · 2019-03-25 07:31
qwerghf 发表于 2017-7-10 11:21
你的硬件接对了吗

我是直接用usb连接的板子

一周热门 更多>

相关问题

    相关文章