Forum: Mikrocontroller und Digitale Elektronik Usart RS232 MSP430


von Rico (Gast)


Lesenswert?

Hallo.

Ich möchte mit dem MSP430f149 eine USART Kommunikation aufbauen. Durch
die
Hilfe von mathar.com will ich ein einfaches Echo erzeugen. Problem:
nichts passiert. Einstellungen sind bei COM Terminal und beim
Hardwaremanager sind identisch. Wo kann mein Fehler noch liegen.

Ich benutze den ACLK der (7,3728 MHz /2).

mfg

Rico


#include  "msp430x14x.h"

unsigned char answer1[] = "Buchstabe ";
unsigned char answer2[] = " gedrueckt\r\n";

char i, j;

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // watchdog aus
  //takt einstellen
  BCSCTL1|=XTS+XT2OFF+DIVA_1;           //initialisierung von ACLK, XTS
aktiviert den externen quarz
  __bic_SR_register(OSCOFF);            //löscht das bit(0) OSCOFF im
statusregister> LFXT1 is on
  do                                    //do-schleife überprueft ob
OFIFG-flag gesetzt ist
  {
    IFG1 &=~OFIFG;                      //löscht OFIFG
    for (i=0xFF;i>0;i--);
  }
  while (IFG1&OFIFG);                   //abbruchbedinung

  BCSCTL2=SELM_3+SELS;                  //SELM_3 soll den LFXTCLK soll
den MCLK generieren

    P2SEL=0x01;                         //schaltet  pin2.0 die
sonderfunktion(ACLK) ein (funktioniert aber nicht)
  P5SEL=0x70;                           //schaltet pin5.4-5-6 (01110000)
die sonderfunktion ein MCLK, SMCLK, ACLK

  P1DIR=0x01;
  P2DIR=0x01;
  P1OUT=0x01;


  P3SEL = 0x30;                         // P3.4 und P3.5 als USART0
TXD/RXD

  ME1 |= UTXE0 + URXE0;                 // TX- und RX-modul erst mal
anschalten
  UCTL0 |= CHAR;                        // 8 data bits, 1 stop bit, no
parity (8N1)
  UTCTL0 |= SSEL0;                      // ACLK als UCLK festlegen
SSEL0 entspricht logisch 01
  UBR00 = 0x60;                         // 19200 baud aus
3,6864MHz(ACLK/2) erzeugen, N=192 ohne rest
  UBR10 = 0x00;
  UMCTL0 = 0x00;                        // korrektur der division
  UCTL0 &= ~SWRST;                      // USART freigeben
  IE1 |= URXIE0 + UTXIE0;               // TX- und RX-interrupts
anschalten
  IFG1 &= ~UTXIFG0;                     // initales interrupt-flag
loeschen

  _BIS_SR(LPM3_bits + GIE);             // ab in den LPM3 mit interrupts
...
}

#pragma vector=UART0TX_VECTOR
__interrupt void usart0_tx (void)
{
  if (i < sizeof answer1-1)             // string schon zu ende?
    TXBUF0 = answer1[i++];              // string ausgeben
  else if (i == sizeof answer1-1)       // wenn erster string zu ende
...
    {
      TXBUF0 = RXBUF0;                  // ... dann den getippten
buchstaben ausgeben
      i++;
    }
  else if (j < sizeof answer2-1)        // wenn auch der ausgegeben ist
...
    TXBUF0 = answer2[j++];              // ... dann den zweiten string
ausgeben
}

#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
  i = 0;
  j = 0;
  TXBUF0 = answer1[i++];                // ersten buchstaben von answer1
ausgeben
}

von ehde76 (Gast)


Lesenswert?

1
UBR00 = 0x60;                         // 19200 baud aus
2
3,6864MHz(ACLK/2) erzeugen, N=192 ohne rest

192 = 0x60???

ab dafür...

von Rico (Gast)


Lesenswert?

mit UBR00 = 0xC0; erreicht man wohl dne korrekten Wert 192

danke

R

von Markus (Gast)


Lesenswert?

Hallo,Ich häge auch an dem Baudraten einstellungen.
Ich hab ein 4,9125MHZ Quarz und will 115200 Baud erzeugen.
laut http://www.msp430.info/modules.php?name=Gadgets&op=uart
müßte Ich
UBR01=0x2A; UBR11=0x00; UMCTL1=0x5B; /* uart1 4915200Hz 115200bps 
(115110bps) */
verwenden.Das klappt aber nicht! Kann mir jemand die richtigen 
Einstellungen geben?
Vielen Dank
Markus

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.