mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART-Terminal


Autor: Max (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe folgendes Problem, ich möchte über das UART befehle an den MC
(ATMega8) schicken. Die kommunikation über das UART fungtioniert
soweit, also kein Hardwarefehler. Wenn ich im Studio4 mein Programm
simuliere leuft am anfang wie gewolt. Wenn aber die bestätigung
gesendet wurde springt er nicht zurück ins Programm sondern startet
wieder am anfang. Habs dann trotzdem mal versucht das ganze auf dem
STK500 laufen zu lassen, bekomm aber nur seltsme Zeichen zurück.
Könnte sich vieleicht mal jehmand das Programm anschaun, oder mal im
Studio simuliern?
Das programm ist im Anhang.

mfg Max

Autor: Florian Pfanner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

dein Problem ist in der int_uart_recive: routine. Der Befehl BREQ führt
einen absoluten Sprung aus. Danach kann nicht mit RET zurückgesprungen
werden. In der recive_... willst du aber genau das machen. Der
Controller list dann aus dem Stack den nächsten wert (hier ist das
gespeicherte Register temp) und gibt diesen in den Programm Counter. Da
dieser wert 0 ist, fängt der Controller von vorne an. Hab das Programm
jetzt ein bischen umgeschrieben. Müsste nun gehen.

PS: Wenn du mit den Megas Arbeitest: Hast du den internen Takt
ausgeschaltet??? FUSES!
denn die Megas Arbeiten Herstellermäßig mit dem Internen RC-Oszillator.
Wenn du aber einen anderen Takt benötigst, so musst du eine FUSE
umprogrammieren und erst dann kannst du den Externen Takt verwenden.

73, DB1PF, Florian Pfanner

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Florian,

Danke für deine Hilfe. werde es gleich probieren.
am besten wird sin, wen ich das register einfach nicht sichere und ein
explizit für jede aufgabe benutze.
Den internen Takt hab ich ausgeschaltet, hab die Fuses so wie im
Tutorial beschrieben gesetzt. Hat bis jetzt immer fungtioniert.

mfg
Max

Autor: Florian Pfanner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das allein mit dem Register sichern ist nicht entscheident. Entscheident
ist, dass der Stack beim verlassen der Funktion (welche durch ret oder
reti verlassen wird) so ist, wie beim eintritt. Also wenn du ein wert
auf den Stack legst und den dann nicht mehr holst, so stürzt dein
Programm beim verlassen der Routine ab.

Gruß, Florian

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.