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
Nur so eine Idee: 1. Statusregister lesen 2. Alles bis auf Carry ausmaskieren 3. Auf Port schreiben
Gast
#2134401
Hi Muss es das Carry-Flag sein?
1 | |
2 | |
3 | |
4 | |
5 | |
MfG Spess
Also SW-SPI. Du kannst ein RJMP einsparen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Peter
Gast
#2134417
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)?
Gast
#2134459
Hi >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? MfG Spess
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
Gast
#2134573
Spart die Label:
1 | |
2 | |
3 | |
4 | |
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
#2134580
Mist, verwendbarer IO-Bereich von SBIC/SBIS nur bis $1F..
@MWS: Der Codeschnipsel ohne Labels gefällt mir :-)
QMWS: Mist, verwendbarer IO-Bereich von SBIC/SBIS nur bis $1F.. d.h. der Trick geht garnicht? Schade.
Gast
#2134599
Remo@ Te schrieb: > d.h. der Trick geht garnicht? > Schade. Wenn Du ein Register frei hast, oder pusht/popst, kannst Du das Register-Äquivalent SBRC/SBRS nehmen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
Gast
#2134601
Hi
>Spart die Label:
Funktioniert aber auch nicht (immer). SBIC/SBIS können nur bis $31
adressieren. Meist liegt SREG auf $3F.
MfG Spess
Gast
#2134605
spess53 schrieb: > Funktioniert aber auch nicht (immer). SBIC/SBIS können nur bis $31 > adressieren. Meist liegt SREG auf $3F. MWS schrieb: > Mist, verwendbarer IO-Bereich von SBIC/SBIS nur bis $1F..
MWS schrieb: > Mist, verwendbarer IO-Bereich von SBIC/SBIS nur bis $1F.. Schiebste eben nachher:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Peter
Gast
#2134656
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
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
#2135015
Anja schrieb: > man müßte doch eigentlich über Bit Load das Carry Bit laden und mit Bit > Store den Port pin setzen können? Nein. BLD/BST funktionieren anders, sie können nur auf µC-Register sowie das T-Flag wirken, das SReg dagegen liegt im IO-Bereich.
Gast
#2135122
>> 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
Gast
#2135155
Hi
>rotiere das Carry-Bit auf das gewünschte Portbit
Na dann zeig mal, wie das dann bei dir aussieht.
MfG Spess
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.