PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zustand von PB0 und PB1 drehen



hegewald
25.10.2013, 09:13
Hallo Leute,
hier ein Ausschnitt von einem Code in Assembler.

in akku,PINB
lsl akku ; ein Bit nach links
swap akku ; tausche niederwertiges Byte mit höherwert.

out PORTB,akku ;Ausgabe
ldi akku,(1<<PB3) | (1<<PB4)
out PORTB,akku ; Pull uP

Nach swap suche ich verzweifelt ein Befehl, der mir den Zustand (Bit7 bis Bit0)
im Arbeitsregister r16 = Akku dreht. Hat jemand ein Vorschlag???

Grüße

Rolf

Searcher
25.10.2013, 09:28
COM r16

Einerkomplement: http://de.wikipedia.org/wiki/Einerkomplement

Gruß
Searcher

hegewald
25.10.2013, 10:26
Hallo Searcher,
danke für Deine Hilfe! Habs gleich getestet und funzt.

Die Aufgabe war zum Tiny13:

Taste sw1 (gegen GND) an PB3... LEDrt an PB0 soll leuchten, wenn Taste gedrückt.

Taste sw2 (gegen GND) an PB4... LEDgn an PB1 soll leuchten, wenn Taste gedrückt.

Bist Du Assembler - Freak??

Grüße

Rolf

Searcher
25.10.2013, 13:47
Hallo Rolf,

Hallo Searcher, ... Bist Du Assembler - Freak??
:-) Nein, normal nicht. Ich programmiere mit Bascom und wenn ich meine es wäre nötig, dort mit Inline ASM.

Deine Frage hat mich sofort daran erinnert, daß ich auch schon mal verzweifelt danach gesucht habe als Äquivalent in ASM für das Bascom NOT bzw. TOGGLE.

Viel Erfolg noch und
Gruß
Searcher

Besserwessi
26.10.2013, 23:08
For das Umklappen aller Bits gibt es beim AVR den ASM Befehl COM. Für das Tooglen von nur einigen Bits gibt es den Befehl EOR - allerdings nur als Verknüpfung von 2 Registern und nicht mit einer Konstante.

Wenn es darum geht direkt Bits am IOPort, also etwa PB0 oder PB1 zu Tooglen, gibt es bei neueren AVRs (ab etwa Mega88) noch eine Spezielle Hardware-Unterstützung: beim schreiben einer 1 nach PINx wird das entsprechende Bit in Portx umgedreht. Also etwa LDI R1, (1<<PB1) | (1<<PB0) und out PinB,R1 zum Toogeln der Bits PB0 und PB1. Das könnte ggf. auch über SBI PinB,0 und SBI PinB,1 gehen.