Forum: Mikrocontroller und Digitale Elektronik Register verwenden


von Andre-Atmega168 (Gast)


Lesenswert?

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"

von Besserwisser (Gast)


Lesenswert?

>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.

von Johannes M. (johnny-m)


Lesenswert?

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.

von Andre-Atmega168 (Gast) (Gast)


Lesenswert?

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.

von Daniel F. (df311)


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.