Hallo zusammen, um nicht immer nach zu sehen bzw. mir merken zu müssen welcher Taster an welchen Portpin hängt, wollte ich den einzelnen Portpins Labels zuweisen. .equ FUNKTION = PORTB3 ;Portpin fuer Taster FUNKTION .equ TEST = PORTB1 ;Portpin fuer Taster TEST um den entsprechenden Tastern den internen Pull-Up zu zu schalten bin ich so verfahren. sbi PORTB,TEST ;PortBx Eingang mit internen Pull-Up sbi PORTB,FUNKTION ;PortBy Eingang mit internen Pull-Up Dies funktioniert ja soweit auch, da ja z.B. FUNKTION den Wert 3 enthält. Jedoch das ausmaskieren bzw. selektieren der einzelnen Taster funktioniert nicht. in IN_TASTER,PINB ;Portpins einlesen com IN_TASTER ;Eingelesene Portpins invertieren und... andi IN_TASTER,EXP2(FUNKTION) & EXP2(TEST) ;...relevanten Bits ausmakieren... tst IN_TASTER ;...testen ob ein Taster betaetigt... breq NOT_PUSH ;...falls nicht springen... Da die Taster den internen Pull-Up des µC nutzen, schalten diese nach GND. Falls kein Taster betätigt ist soll dies durch ein komplett gelöschetes Arbeitsregister (IN_TASTER = r20) erkannt werden. Ansonsten sollte durch den ANDI Befehl mit der Assembleranweisungsmaske EXP2(Ausdruck) erkannt werden, ob einer oder beide Taster (FUNKTION,TEST) betätigt wurden. Auf die EXP2-Assembleranweisung bin ich gekommen, weil ja z.B. FUNKTION den Wert 3 enthält aber ich ja Bit 3 testen muss, da der Taster an PortB3 hängt und dieser hat nun mal den Wert 8 ( 8 = 2^3 ). Die Assembleranweisung EXP2(Ausdruck) sollte ja als Ergebnis 2^ (Ausdruck) liefern. Jedoch springt im AVR-Studio der Simulator immer nach NOT_PUSH. Im Listfile (xyz.lst) sehe ich das der ANDI-Befehl mit $7040 übersetzt wird, was ja bedeutet das die Anweisung EXP2(Ausdruck) Null zurück liefert was ich jedoch nicht verstehe. $7040 andi IN_TASTER,EXP2(FUNKTION) & EXP2(TEST) IN_TASTER liefert $01 => 0000 0001 invertiert $FE => 1111 1110 Wenn ich doch $FE und $0A ( Beide Taster betätigt ) AND verknüpfe kommt doch $0A heraus und dies ist eindeutig ungleich Null. Ich benutze das AVR-Studio in der Version 4.18 Build 700 und den AVR-Simulator 2 für den ATtiny13. Hoffe jemand blickt da durch und ist auch noch in der Lage mir dies begreiflich zu machen. Bis dann Bernd_Stein
Hi
>andi IN_TASTER,EXP2(FUNKTION) & EXP2(TEST)
-> andi IN_TASTER, 1<<FUNKTION | 1<<TEST
MfG Spess
spess53 schrieb: > Hi > >>andi IN_TASTER,EXP2(FUNKTION) & EXP2(TEST) > > -> andi IN_TASTER, 1<<FUNKTION | 1<<TEST > Danke, mehr fällt mir dazu nicht ein. Bis demnächst Bernd_Stein
Dein Augenmerk sollte sich auf das | richten. Dein & war falsch. Ich kenne zwar EXP2 nicht, wenn es das gibt dann wird es wohl das machen, was du dir vorstellst, und was gelichbedeutend mit 1 << x ist. Deine Ausführungen im Eröffnungsposting waren übrigens exzellent. Man sieht das du dir Gedanken machst und dass deine Gedankengänge gut überlegt sind. Du bist einzig und alleine über unseren umgangssprachlich oft laxen bis falschen Gebrauch der Wörter UND bzw. ODER gestolpert. In EXP2(FUNKTION) & EXP2(TEST) sind nun mal nicht die Bits FUNKTION und TEST gesetzt, sondern kein einziges, solange FUNKTION und TEST nicht einen identischen Zahlenwert darstellen.
Hi >Ich kenne zwar EXP2 nicht, Gehört zum AVR-Assembler2. Mit '|' ergibt es das gleiche Ergebnis. MfG Spess
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.