mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP-430 fragen


Autor: Ewald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

programmiere zur Zeit mit dem MSP 430 und habe dazu folgende Fragen:

Mainloop  xor.b    #001h,&P1OUT
    mov.w    #010000,R15
L1    dec.w    R15
    jn(u)z    L1
    jmp    Mainloop

Was sind hierbei  mnemonischer Code und Operationscode?
Wir schreib ich dieses Programm als Codesequenz in C?

Vielen Dank im voraus

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ewald schrieb:
> Was sind hierbei  mnemonischer Code und Operationscode?

http://de.wikipedia.org/wiki/Assemblersprache

Ewald schrieb:
> Wir schreib ich dieses Programm als Codesequenz in C?

Brian Kernighan & Dennis Ritchie, "Programmieren in C", 2. Auflage, 
Hanser-Verlag

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kenn mich in Assembler nicht so aus, aber in C programmierst Du einen 
Main Loop z.B. so:

while(1)
{
  // Hier Dein Code...
}

Autor: R2D2 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lass mich raten: Das ist eine Hausaufgabe. Ich wüsste nicht, wie du 
sonst auf die Fragen kommst.

Autor: Ewald (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nein, ich schreib eine Arbeit, und der Lehrer hat das in einer alten 
klausur gefragt.

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Mainloop  xor.b    #001h,&P1OUT
Ein byteweise XOR wird ausgeführt. Das Register P1OUT ist Quelle und 
Ziel, die Konstante 0x01 ist Quelle. Das hat den Effekt, dass das Bit 0 
in P1OUT getoggelt wird. Das hat allerdings keinen Effekt, wenn nicht 
zuvor der Entsprechende Pin als Ausgang gesetzt wurde.

>mov.w    #010000,R15

Es wird die Konstante 10000 in das Registerpaar R16:R15 kopiert.

>L1    dec.w    R15

Der Wert im Registerpaar R16:R15 wird um eins verringert.

>jn(u)z    L1

Wenn das vorherige dec.w kein zero gesetzt hat, nach L1 springen.

>jmp    Mainloop

Nach Mainloop springen.

In C sieht das so aus:
int main()
{
  unsigned int x;  // Das war vorher R16:15
  P1DIR |= 0x01; // sonst macht das Pintoggeln keinen Sinn, siehe oben

  for(;;)  // die Endlosschleife "Mainloop"
  {
    P1OUT^=0x01;  // P1.1 toggeln
    x = 10000;
    while (x > 0) x--;
  }
  return 0;
}

Beim Übernehmen in irgendeine Arbeit bitte einen Link hierauf als Quelle 
angeben.

Grüße,

Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.