www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AND Verknüpfung auch einfacher möglich? 8051 Assembler


Autor: brichun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi ich wollte mit Taster1(T1) und Taster2(T2) eine LED ansteueren.
Das Ganze sollte wie eine AND Verknüpfung funktionieren.

E1 E2 Out
0  0  0
0  1  0
1  0  0
1  1  1

Jetzt hab ich das folgendermaßen gelöst im Leerlauf frage ich ständig 
die Taster ab. Je nach dem welcher Taster gedrückt ist springe ich in 
ein Unterprogramm um dann im Unterprogramm den zweiten Taster 
abzufragen.
In der Befehlsliste hat es bereits vorgefertigte AND befehle
BSP. "ANL A,R0" bestimmt kann man damit einfacher hantieren weiss aber 
noch nicht wie.


Ich werde das Gefühl nicht los das viel einfacher geht.
Hat jemand einen Verbesserungsvorschlag?



Danke
P.S. unten hab ich den dokumentierten Code eingefügt



LEERLAUF:

  jnb T1,L1     ;Wenn  T1 gedrückt springe L1
  call T1_LOW   ;sonst UP T1_LOW aufrufen
  jmp GO1       ;Springe GO1 um T2 abzufragen
L1:
  call T1_HIGH  ;T1 gedrückt -> UP T1_HIGH aufrufen


GO1:
  jnb T2,L2     ;Wenn  T2 gedrückt springe L2
  call T2_LOW   ;sonst UP T2_LOW aufrufen
  jmp GO2       ;Springe GO2 um wieder von Anfang zu starten
L2:
  call T2_HIGH  ;T2 gedrückt -> UP T2_HIGH aufrufen

GO2:
jmp LEERLAUF    ;Abfrage wieder von Anfang starten



;---------------UP_AND_VERKNÜPFUNG---------------------
;--------------------T1_LOW----------------------------

T1_LOW:
  jnb T2,T1L1      ;T2 gedrückt ->Sprung zu T1L1
                   ;wenn nicht gehe weiter

  setb LED3        ;E1=0  E2=0   Out=0

ret
T1L1:
  setb LED3        ;E1 =0 E2=1   Out=0
ret

;--------------------T2_LOW------------------------
T2_LOW:
  jnb T1,T2L1      ;T1 gedrückt ->Sprung zu T2L1
                   ;wenn nicht gehe weiter

  setb LED3        ;E1=0  E2=0   Out=0

ret
T2L1:
  setb LED3        ;E1 =1 E2=0  Out=0
ret
;--------------------T1_HIGH----------------------
T1_HIGH:
  jnb T2,T1H1      ;T2 gedrückt ->Sprung zu T1H1
                   ;wenn nicht gehe weiter

  setb LED3        ;E1=1  E2=0   Out=0

ret
T1H1:
  clr LED3         ;E1 =1 E2=1   Out=1
ret
;--------------------T2_HIGH----------------------
T2_HIGH:
  jnb T1,T2H1      ;T2 gedrückt ->Sprung zu T2H1
                   ;wenn nicht gehe weiter

  setb LED3        ;E1=0  E2=1   Out=0

ret
T2H1:
  clr LED3         ;E1=1  E2=1   Out=1
ret
;-------------------------------------------------

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum so kompliziert?
Der 8051 hat doch wunderschöne Bitbefehle:

E1      equ     P1.0
E2      equ     P1.1
OUT     equ     P1.2

;E1 E2 Out
;0  0  0
;0  1  0
;1  0  0
;1  1  1

loop:
        mov     c, E1
        anl     c, E2
        mov     OUT, c        ; OUT = E1 AND E2
        jmp     loop


Peter

Autor: brichun (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke dir Peter Dannegger
es geht ja wirklich noch viel viel einfacher als ich gedacht habe :=)

schönes Weekend noch

Gruß
Brichun

Autor: Querdenker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(+)---(T1)---(T2)---(Rv)---(LED)---(-)

am einfachsten und ganz ohne µC. ;-)

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.