Register verwenden

Gast #934618
Ich möchte 2 Register r18 und r19 zu einem 16 Bit Wert speichern.

Und dann über UDRO an den PC übergeben
1
 
2
st Z,r18
3
st Z+,r19
4

5
put Temp:
6
lds r16, UCSR0A
7
sbrs r16, 5
8
ret
9
STS UDR0,Z
10

11
ret

Die Zeile mit sts "UDRO,Z" hat laut assember:"Invalid register"
Gast #934627
>Die Zeile mit sts "UDRO,Z" hat laut assember:"Invalid register"
Was vielleicht mal zum lesen in der Beschreibung der Assembler-Befehle 
führen sollte.

Im übrigen können immer nur 8 Bit in das Datenregister übertragen 
werden. Das macht aber nichts, denn Du kannst ja zweimal 8 Bit 
übertragen.
Du musst aber noch beachten, das du erst bis zur Übertragung des ersten 
Bytes warten musst, bis Du das zweite in UDR0 schreiben kannst.
#934628
Z ist kein Register. Es ist eine Bezeichnung für ein Doppel -Register 
in Zusammenhang mit Zeigeroperationen, und der Inhalt von Z passt auch 
nicht ins UDR0 hinein. sts kann nur ein Byte auf einmal verwursten. Wenn 
überhaupt, dann ZL und/oder ZH.
Gast #935202
hi,

bekomme jetzt 2 Byte vom Temp-Sensor, die ich über USART in Labview 
übergebe. Allerdings weiss ich noch nicht wie ich diese in Labview 
wieder zusammenkriege. Das UDRO wird ja immer wieder neu beschrieben. 
einmal mit dem ersten byte dann mit dem zweiten, usw.
 gibt es keine möglichkeit. die 16 bit dirket zu übertragen.
#935518
Andre-Atmega168 (Gast) wrote:
> hi,
>
> bekomme jetzt 2 Byte vom Temp-Sensor, die ich über USART in Labview
> übergebe. Allerdings weiss ich noch nicht wie ich diese in Labview
> wieder zusammenkriege. Das UDRO wird ja immer wieder neu beschrieben.
> einmal mit dem ersten byte dann mit dem zweiten, usw.
>  gibt es keine möglichkeit. die 16 bit dirket zu übertragen.

doch, die möglichkeit gibt es, wenn du ein sw-uart für 16 bit bastelst, 
das ganze nicht über die rx/tx leitungen, sondern über ein 
handshake-paar der rs232 überträgst und dafür am pc einen eigenen 
treiber schreibst.

datenübertragung über rs232 ist nun mal auf 5-9 datenbits ausgelegt und 
alle hw-uarts halten sich daran.

zum zusammenfügen musst du nur die zwei bytes einzeln übertragen und die 
empfangenen bytes wieder zusammenfügen. wie das in labview funktioniert 
weiß ich nicht, aber das müsste recht einfach möglich sein - sonst muss 
noch ein kleines c-programm dazwischen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.