shirl 发表于 2011-11-7 20:39:17

430F24X uart 通信TI例程调试出问题 请教我错在那里!!

//******************************************************************************
//   MSP430x24x Demo - USCI_A0, Ultra-Low Pwr UART 9600 RX/TX, 32kHz ACLK
//
//   Description: This program demonstrates a full-duplex 9600-baud UART using
//   USCI_A0 and a 32kHz crystal.The program will wait in LPM3, and receive
//   a string1 into RAM, and echo back the complete string.
//   ACLK = BRCLK = LFXT1 = 32768Hz, MCLK = SMCLK = DCO ~1.045Mhz
//   Baud rate divider with 32768Hz XTAL @9600 = 32768Hz/9600 = 3.41
//   //* An external watch crystal is required on XIN XOUT for ACLK *//
//
//                MSP430F249
//             -----------------
//         /|\|            XIN|-
//          | |               | 32kHz
//          --|RST          XOUT|-
//            |               |
//            |   P3.4/UCA0TXD|------------>
//            |               | 9600 - 8N1
//            |   P3.5/UCA0RXD|<------------
//
//B. Nisarga
//Texas Instruments Inc.
//September 2007
//Built with IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include "msp430x24x.h"

char string1;
char i;
char j = 0;

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;               // Stop WDT
P1DIR = 0xFF;                           // All P1.x outputs
P1OUT = 0;                              // All P1.x reset
P2DIR = 0xFF;                           // All P2.x outputs
P2OUT = 0;                              // All P2.x reset
P3SEL = 0x30;                           // P3.4,5 = USCI_A0 TXD/RXD
P3DIR = 0xFF;                           // All P3.x outputs
P3OUT = 0;                              // All P3.x reset
P4DIR = 0xFF;                           // All P4.x outputs
P4OUT = 0;                              // All P4.x reset
UCA0CTL1 |= UCSSEL_1;                     // CLK = ACLK
UCA0BR0 = 0x03;                           // 32kHz/9600 = 3.41
UCA0BR1 = 0x00;                           //
UCA0MCTL = UCBRS1 + UCBRS0;               // Modulation UCBRSx = 3
UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
IE2 |= UCA0RXIE;                        // Enable USCI_A0 RX interrupt

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

// USCI A0/B0 Transmit ISR
#pragma vector=USCIAB0TX_VECTOR
__interrupt void USCI0TX_ISR(void)
{
UCA0TXBUF = string1;               // TX next character

if (i == sizeof string1)                  // TX over?
    IE2 &= ~UCA0TXIE;                     // Disable USCI_A0 TX interrupt
}

// USCI A0/B0 Receive ISR
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
string1 = UCA0RXBUF;
if (j > sizeof string1 - 1)
{
    i = 0;
    j = 0;
    IE2 |= UCA0TXIE;                        // Enable USCI_A0 TX interrupt
    UCA0TXBUF = string1;
}
}




我分析的   格式 odd,8,1,9600

程序说的是 发什么接收窗显示什么    端口号 我绝对没有错
我的错误状况是
发送任意字符串后   接收在字节数在自加   接手区无显示    (非十六进制显示)
                      接收在字节数在自加   接收到若干00   (十六进制显示)

求教 我哪里出了问题!

kingheimer 发表于 2011-11-8 13:24:32

接收的波特率和你430程序发送的波特率不一样

shirl 发表于 2011-11-8 20:32:20

回复【1楼】kingheimer
接收的波特率和你430程序发送的波特率不一样
-----------------------------------------------------------------------

难道是430这个小数波特率的 问题??

shirl 发表于 2011-11-9 11:56:58

搞出来了
程序 是 没问题 的   当然也不是波特率的问题了
串口调试 助手没用!换一个调试可以的
那个什么疼的!!!
页: [1]
查看完整版本: 430F24X uart 通信TI例程调试出问题 请教我错在那里!!