打印

两块launchpad进行uart通信,不知道错误在哪里,总是接收不到数据,求指教

[复制链接]
2060|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
发送机代码:
#include  "msp430g2553.h"
unsigned char TxByte=0;

void main(void)
{  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2;
  P1OUT = 0x00;                             // P1.0/6 setup for LED output
  P1DIR = BIT0 + BIT6;
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 8;                              // 1MHz 115200
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE + UCA0TXIE;              // Enable USCI_A0 TX/RX interrupt

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3 w/ interrupts enabled
}

// USCI A0/B0 Transmit ISR
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
     
    UCA0TXBUF = TxByte;
    TxByte++;
    __delay_cycles(500000);
                        
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{

}




接收机代码:
#include  "msp430g2553.h"
unsigned char TxByte=0;

void main(void)
{  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2;
  P1OUT = 0x00;                             // P1.0/6 setup for LED output
  P1DIR = BIT0 + BIT6;
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 8;                              // 1MHz 115200
  UCA0BR1 = 0;                              // 1MHz 115200
  UCA0MCTL = UCBRS2 + UCBRS0;               // Modulation UCBRSx = 5
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0TXIE + UCA0RXIE;               // Enable USCI_A0 TX/RX interrupt

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3 w/ interrupts enabled
}

// USCI A0/B0 Receive ISR
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while(!(UC0IFG&UCA0RXIFG))
  P1OUT = UCA0RXBUF;                        // Display RX'ed charater
}
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
        ;
}

相关帖子

沙发
dirtwillfly| | 2013-7-25 21:28 | 只看该作者
建议用示波器或者逻辑分析仪看一下信号。
我手里只有一个launchpad,也没法帮楼主做下试验

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
孙大为1 + 1 很给力!
板凳
dirtwillfly| | 2013-7-25 22:20 | 只看该作者
本帖最后由 dirtwillfly 于 2013-7-25 22:33 编辑

建议取UCBRSx = 6
参考资料: MSP430_x2xx UART波特率设置方法.pdf (46.01 KB)

使用特权

评论回复
地板
smilingangel| | 2013-7-25 22:35 | 只看该作者
TxByte++;
    __delay_cycles(500000);
在这中断接收程序里面作何呢?

使用特权

评论回复
5
smilingangel| | 2013-7-25 22:37 | 只看该作者
问题肯定在这的,把这个延时程序搞掉的,,不然就是这个延时的占用太多资源的

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
孙大为1 + 1 赞一个!
6
孙大为1|  楼主 | 2013-7-26 09:21 | 只看该作者
dirtwillfly 发表于 2013-7-25 21:28
建议用示波器或者逻辑分析仪看一下信号。
我手里只有一个launchpad,也没法帮楼主做下试验 ...

多谢指点

使用特权

评论回复
7
孙大为1|  楼主 | 2013-7-26 09:22 | 只看该作者
dirtwillfly 发表于 2013-7-25 22:20
建议取UCBRSx = 6
参考资料:

谢版主,果然是的

使用特权

评论回复
8
孙大为1|  楼主 | 2013-7-26 09:23 | 只看该作者
smilingangel 发表于 2013-7-25 22:35
TxByte++;
    __delay_cycles(500000);
在这中断接收程序里面作何呢?

这个是在发送中断里面的,想要延时一下,再发第二个数据,

使用特权

评论回复
9
chenci2013| | 2013-7-26 12:52 | 只看该作者
根据例程修改吧。

使用特权

评论回复
10
dirtwillfly| | 2013-7-26 19:14 | 只看该作者
问题解决了,要及时结帖哦~~

使用特权

评论回复
11
孙大为1|  楼主 | 2013-7-29 08:33 | 只看该作者
dirtwillfly 发表于 2013-7-25 21:28
建议用示波器或者逻辑分析仪看一下信号。
我手里只有一个launchpad,也没法帮楼主做下试验 ...

:)

使用特权

评论回复
12
孙大为1|  楼主 | 2013-7-29 08:37 | 只看该作者
dirtwillfly 发表于 2013-7-26 19:14
问题解决了,要及时结帖哦~~

点击结贴总是出现这个,楼主指导一下,

360软件小助手截图20130729083403.jpg (13.8 KB )

这个怎么办

这个怎么办

使用特权

评论回复
13
dirtwillfly| | 2013-7-29 09:54 | 只看该作者
分数分配错误。你得吧十分正好分配完,而且不能给自己分配分数。

使用特权

评论回复
14
smilingangel| | 2013-7-30 12:47 | 只看该作者
孙大为1 发表于 2013-7-29 08:37
点击结贴总是出现这个,楼主指导一下,

这个就刷新下网页的重新执行结贴操作的就可以的了,我也遇到过的

使用特权

评论回复
15
co5jco5j| | 2013-8-15 16:43 | 只看该作者
dirtwillfly 发表于 2013-7-25 22:20
建议取UCBRSx = 6
参考资料:

版主我想請問 為什麼這兩塊互傳baud rate的設定完全一樣 反而沒有辦法傳輸

根據文件與原PO算法 1000000/115200 = 8.6805 (若是1M=2^20算出來的值就完全不同)
UCBRx = INT(8.6805) = 8
UCBRSx = round((8.6805 - 8) *8) = round (5.444) = 5
好像也沒設定錯誤

設定看似沒錯 卻無法傳輸 而是版主建議UCBRSx=6 才有辦法傳輸? 煩請版主幫忙解惑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

28

帖子

0

粉丝