Wie legt man beim AVR möglichst einfach das Carrybit auf einen Portpin?

OP #2134392
Lesenswert?

Hallo,

um beim AVR das Carrybit auf einen Portpin zu legen, habe ich bis jetzt 
immer das Carrybit getestet und dann entsprechend den Auspangspin 
gesetzt oder gelöscht. Das implizierte ein paar Sprungbefehle.

Siehe hier:

Beispiel_A: LSL r16
            BRCS Bit1
Bit0:       CBI Portpin
            RJMP weiter
Bit1:       SBI Portpin
weiter:     hier gehts weiter...

Ich frage mich jetzt schon länger, ob es eine Möglichkeit gibt, das 
Carrybit ohne obige Abfragekombination auf einen Pin zu legen.

Gibt es eine bessere Lösung?

Gruß,
Thomas
OP #2134502
Lesenswert?

Habe gerade nochmal nachgesehen:

Es gab beim 8051 von Intel einen Befehl "MOV Px.y,C", der das Carry 
direkt auf ein Portbit schreiben konnte. So konnte man sich wunderbar 
die Verzweigungen sparen. Von daher hatte ich das noch im Kopf drin. 
Leider hat der AVR nichts vergleichbares. (Oder gibt es illegale 
Op-Codes? :-) )

Die Idee mit dem ganzen Port lesen und schreiben werde ich mir mal näher 
anschauen. Da ich sowieso den ganzen Port zur freien Verwendung habe, 
sollte ich diese Variante verwenden können.

Vielen Dank!

Gruß,
Thomas
#2134575
Lesenswert?

der 8051 hat keine Risc Architektur. Wie der Name ja schon nahelegt, 
haben Risc CPUs einen reduzierten Befehlssatz. Dafür schafft der AVR 
einen (Standard) Befehl pro Clock, der 8051 hat da ich weiss nichtmehr 
6-8 CPU Clocks gebraucht. Die Risc Architektur hat, was die Performance 
angeht klar Vorteile, aber gerade bei Assembler programmierung eben auch 
Nachteile wie den hier erwähnten. Thats life.
Du hast also drei Möglichkeiten:
1) Nachteil in Kauf nehmen und sich über die vielen Vorteile freuen
2) Auf eine höhere Programmiersprache (C) umsteigen, dann merkt man die 
Nachteile nicht mehr und hat immernoch den Vorteil einer besseren 
Performance
3) den 8051 einsetzen

so long
Remo
Gast #2134656
Lesenswert?

Peter Dannegger schrieb:
> Schiebste eben nachher:Beispiel_A:
>         CBI     Portpin
>         SBRC    R16, 0
>         SBI     Portpin
>         LSL     r16
>      hier gehts weiter...

Wenn ein möglicher kurzer Spike von 3-4 Takten auf dem Port nicht 
stört...
Ist die vorherige Position des Carry aufgrund einer Schiebeoperation 
bekannt, so ist das so einfacher, mein Code folgte dagegen mehr dem 
Wunsch des TE das Carry zu testen.
Gast #2134995
Lesenswert?

Hallo,

ich frage mich gerade wofür das T-Bit im Status Register eigentlich da 
ist.
man müßte doch eigentlich über Bit Load  das Carry Bit laden und mit Bit 
Store den Port pin setzen können?
Allerdings frage ich mich warum bei meinen Bit-Schubsereien für meine 
Relaissteuerung der C-Compiler trotzdem die Bits rechts und links 
schiebt um sie auf den richtigen Portpin zu legen.

Gruß Anja
Gast #2135122
Lesenswert?

>> gibt es denn kein SHIFT bei AVR, das hat doch eigentlich jeder Prozessor
>> mit dem ich bisher zu tun hatte (ich bin kein AVR-Mensch)?

> Klar gibtes das. Aber, was hat das mit der Frage zu tun?

rotiere das Carry-Bit auf das gewünschte Portbit

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren