Mit RS232 und msp430F5529 senden und empfangen

Gast #2311622
Lesenswert?
• ▲
▼
Anbei noch der von mir erstellte Code:
1
#include <msp430f5529.h>
2

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

6
char i, j;
7

8
void main(void)
9
{
10
  WDTCTL = WDTPW + WDTHOLD;             
11
  P3SEL = 0x18;                            // P3.3 und P3.4 als USART0 TXD/RXD   
12
  P3DIR = 0x08;
13
  
14
  UCA0CTL0 = UCSWRST;             // SWRST setzen um Schnittstelle zu konfigurieren
15
  UCA0CTL0 |= CHAR;                        // 8 Data Bits, 1 Stop Bit, no parity (8N1)
16
  UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT;        // ACLK als UCLK festlegen
17
  
18
  UCA0BR0 = 0x03;                          // 9600 baud aus 32.768 kHz erzeugen
19
  UCA0BR1 = 0x00;                          // siehe application note tabelle 2, seite 10
20
  UCA0MCTL = 0x4A;                         // Korrektur der Division
21
  UCA0ME |= UCA0TXDE0 + UCA0RXDE0;         // TX- und RX-Modul erstmal anschalten
22
  UCA0CTL0 &= ~UCSWRST;                    // USART freigeben
23
  UCA0IE |= UCRXIE + UCTXIE;               // TX- und RX-interrupts anschalten
24
  UCA0IFG &= ~UCTXIFG+UCRXIFG;             // initales interrupt-flag löschen
25
     
26
  _bis_SR_register(LPM0_bits + GIE);       // ab in den LPM0 mit interrupts ...
27
}
28

29
#pragma vector=USART0_A0_VECTOR
30
__interrupt void USART0_A0_TX (void)
31
{
32
  if (i < sizeof answer1-1)                // string schon zu ende?
33
    UCA0TXBUF = answer1[i++];              // string ausgeben
34
  else if (i == sizeof answer1-1)          // wenn erster string zu ende ...
35
    {
36
      UCA0TXBUF = UCA0RXBUF;               // ... dann den getippten buchstaben ausgeben
37
      i++;
38
    }
39
  else if (j < sizeof answer2-1)           // wenn auch der ausgegeben ist ...
40
    UCA0TXBUF = answer2[j++];              // ... dann den zweiten string ausgeben
41
}
42

43
#pragma vector=USART0_A0_VECTOR
44
__interrupt void USART0_A0_RX (void)
45
{
46
  i = 0;
47
  j = 0;
48
  UCA0TXBUF = answer1[i++];                // ersten buchstaben von answer1 ausgeben
49
}

Freundliche Grüße
Gast #2311722
Lesenswert?
• ▲
▼
Folgende Deklarationen lassen sich nicht definieren:
1
UCA0CTL0 |= CHAR;                        
2

3
UCA0TCTL0 = UCSSEL_1 | UCA0TXEPT; 
4

5
UCA0ME |= UCA0TXDE0 + UCA0RXDE0;  
6

7
#pragma vector=USART0_A0_VECTOR

Leider weiß ich nicht warum?
Aus diesem Grund konnte ich bis jetzt noch keinen Datenaustausch 
starten!

Gruß
Gast #2311997
Lesenswert?
• ▲
▼
In erster Linie würde mich interessieren wie das mit der 8-Bit 
Übertragung zu verstehen ist?
Diese Zeile kann ich am aller wenigstens interpretieren!

1
UCA0CTL0 |= CHAR;

Nochmals vielen Dank für jede Hilfe...

Gruß Daniel
Gast #2316221
Lesenswert?
• ▲
▼
Hallo,

der Code stammt zum Teil aus einem Beispiel für einen msp430f1612 und 
zum Teil von mir selbst.
Ich verwende das Code Composer Studio V4 Core Edition.
Ich versuche jetzt schon seit mehreren Tagen dieses Problem zu lösen.

Freundliche Grüße
Gast #2316308
Lesenswert?
• ▲
▼
Hallo,

das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie 
gesagt zusammengeschustert!
Es geht aber eigentlich genau darum wie ich CHAR definieren muss damit 
UCA0CTL0 8 Bit pro Datenbyte ergibt?

Gruß
Persönliche Seite #2316335
Lesenswert?
• ▲
▼
Für die Baudratenberechnung habe ich 
http://mspgcc.sourceforge.net/baudrate.html verwendet, damit kannst Du 
Deine Werte mal plausibilisieren.

Was ich nicht verstehe: warum hast Du zwei ISR für den gleichen Vektor 
definiert? Habe ich in der Compiler-Dokumentation irgendwas übersehen, 
oder führt Dein Code hier zu Chaos?

Für die Definition von CHAR: RTFM, anders lässt sich das echt nicht mehr 
sagen. Bit 4 muss auf 0 stehen.
"das weiß ich leider nicht wie CHAR definiert ist, hab den Code wie 
gesagt zusammengeschustert!" ist einfach nur daneben. Gleiche Deinen 
Code mal mit dem User´s Guide ab, was Du da tust. Wenn´s dann immer noch 
nicht geht, melde dich wieder.

Kopfschüttelnd,

Max

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.