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

[复制链接]
 楼主| 孙大为1 发表于 2013-7-25 18:34 | 显示全部楼层 |阅读模式
发送机代码:
#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
参考资料:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
smilingangel 发表于 2013-7-25 22:35 | 显示全部楼层
TxByte++;
    __delay_cycles(500000);
在这中断接收程序里面作何呢?
smilingangel 发表于 2013-7-25 22:37 | 显示全部楼层
问题肯定在这的,把这个延时程序搞掉的,,不然就是这个延时的占用太多资源的

评分

参与人数 1威望 +1 收起 理由
孙大为1 + 1 赞一个!

查看全部评分

 楼主| 孙大为1 发表于 2013-7-26 09:21 | 显示全部楼层
dirtwillfly 发表于 2013-7-25 21:28
建议用示波器或者逻辑分析仪看一下信号。
我手里只有一个launchpad,也没法帮楼主做下试验 ...

多谢指点
 楼主| 孙大为1 发表于 2013-7-26 09:22 | 显示全部楼层
dirtwillfly 发表于 2013-7-25 22:20
建议取UCBRSx = 6
参考资料:

谢版主,果然是的
 楼主| 孙大为1 发表于 2013-7-26 09:23 | 显示全部楼层
smilingangel 发表于 2013-7-25 22:35
TxByte++;
    __delay_cycles(500000);
在这中断接收程序里面作何呢?

这个是在发送中断里面的,想要延时一下,再发第二个数据,
chenci2013 发表于 2013-7-26 12:52 | 显示全部楼层
根据例程修改吧。
dirtwillfly 发表于 2013-7-26 19:14 | 显示全部楼层
问题解决了,要及时结帖哦~~
 楼主| 孙大为1 发表于 2013-7-29 08:33 | 显示全部楼层
dirtwillfly 发表于 2013-7-25 21:28
建议用示波器或者逻辑分析仪看一下信号。
我手里只有一个launchpad,也没法帮楼主做下试验 ...

:)
 楼主| 孙大为1 发表于 2013-7-29 08:37 | 显示全部楼层
dirtwillfly 发表于 2013-7-26 19:14
问题解决了,要及时结帖哦~~

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
dirtwillfly 发表于 2013-7-29 09:54 来自手机 | 显示全部楼层
分数分配错误。你得吧十分正好分配完,而且不能给自己分配分数。
smilingangel 发表于 2013-7-30 12:47 | 显示全部楼层
孙大为1 发表于 2013-7-29 08:37
点击结贴总是出现这个,楼主指导一下,

这个就刷新下网页的重新执行结贴操作的就可以的了,我也遇到过的
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

粉丝
快速回复 在线客服 返回列表 返回顶部