www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATMEL-AVR-µC Eingangsbits ausmaskieren bzw. selektieren


Autor: Bernd Stein (bernd_stein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>andi IN_TASTER,EXP2(FUNKTION) & EXP2(TEST)

-> andi IN_TASTER, 1<<FUNKTION | 1<<TEST

MfG Spess

Autor: Bernd Stein (bernd_stein)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ich kenne zwar EXP2 nicht,

Gehört zum AVR-Assembler2. Mit '|' ergibt es das gleiche Ergebnis.

MfG Spess

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.