mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Preamble+Messwert über UART versenden in asm


Autor: Moschder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

arbeite mit einem ATMEGA8 mit AVR Studio und programmiere in Assembler.

In einem Register habe ich einen 1 Byte großen Messwert stehen,
diesen möchte ich mit einer Premable versehen und über das UART 
versenden.

Nun möchte ich wissen wie ich das angehen muß, es soll ein String 
versendet werden bestehend aus Preamble und Messwert. Muß ich die Bytes 
für den String im RAM einzeln zusammebasteln?
Falls ja, wie sage ich dem UART wo im RAM er sich die Daten holen muß?

Kann mir da jemad helfen?
danke schonmal
Moschder

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss ja nicht, wie es beim ATMEGA8 ist (bin ein PICer), aber 
eigentlich ist es so, dass der UART immer nur ein Byte sendet und zwar 
dass, das im Senderegister (TXREG) steht. Wenn du 2 (oder mehr) Bytes 
senden willst, musst du die nacheinander ins TXREG schreiben. Dabei 
darfst du das nächste Byte immer erst ins TXREG schreiben, wenn das 
vorige komplett gesendet wurde. Das kannst du interruptgesteuert machen 
oder das "byte-ist-fertig-gesendet-und TXREG-wieder-frei" Flag abfragen.

Wenn du immer eine unterschiedliche Anzahl Bytes senden willst, solltest 
du das über einen Ringpuffer machen (einfach mal suchen).

Autor: Moschder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für Deine Antwort,

wie Du sagst sendet der ATMEGA8 auch immer nur ein Byte. Das zu sendende 
Byte wird in UDR geschrieben.
Nun brauche ich aber eine Routine die mir erstmal die Preamble sendet
(damit ein Funkempfänger einschwingt) und direkt daruf meinen Messwert.
Nun weiß ich nicht wie ich das in Assembler umsetzen soll.

Gruß
Moschder

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu solltest du vielleicht erst einmal zeigen, was du schon hast. Dann 
wird dir sicher schnell jemand weiterhelfen. Da ich - wie gesagt - aus 
der PIC -Ecke komme, kann ich selbst nur bedingt helfen.

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

Bewertung
0 lesenswert
nicht lesenswert
hier mal der Code mit dem ich versuche einen String über UART zu 
versenden.
Das  UART wurde erfolgreich initialisiert.
Auf der Empängerseite hängt mein PC mit dem Hyperterminal, die Preamble 
lässt sich fortlaufend empfangen. Der nachfolgende Messwert bleibt 
jedoch aus.
Das Programm hängt sich also nach dem senden der Preamble auf und sendet 
diese fortlaufend aus.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

So wie das geschrieben ist läuft dein Programm nach dem 
Unterprogrammaufruf wieder in das Unterprogramm. Da sollte 
beispielsweise ein:

aaaa: rjmp aaaa stehen. Da hält das Programm dann an.

Was passiert wenn dein Messwert 0 ist? Hier wäre ein Bytezähler 
angebracht.

Mit String hat das Ganze auch nicht viel zu tun. Strings bestehen aus 
ASCII-Zeichen. Also Hex $20-$7F.

MfG Spess

Autor: Moschder (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke spess, daß mein Programm nie aus dem Unterprogramm rausgekommen 
ist war ein Problem, das ist nun mit einem zusätzlichen ret behoben. 
Nach diesem neuen ret soll es nun im eigentlichen Hauptprogramm 
weitergehen.
Leider bleibt das ganze noch immer hängen komme also nie ins eigentlíche 
Hauptprogramm zurück.
Auch der Tipp mit Messwet 0 ist viel Wert, das werde ich auch noch 
berücksichtigen. Jetzt zu testen ist es nicht von Belagen da ich als 
Messwert erstmal nur Werte >0 habe.
Wäre Frame der treffendere Begriff?

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wie du das nennst ist eigentlich egal. Der AVR kennt eh keine Strings.

Übrigens:

>and     temp1,temp1                   ; Frame zu ende (0x00)?

lässt sich durch 'tst rxy' ersetzen.

Noch eine persönliche Meinung: Was soll dieses 'temp'-Geraffel?
Ich finde ein 'r16' aussagekräftiger und ich brauche weniger zu tippen.

MfG Spes

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.