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


von brichun (Gast)


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
;-------------------------------------------------

von Peter D. (peda)


Lesenswert?

Warum so kompliziert?
Der 8051 hat doch wunderschöne Bitbefehle:
1
E1      equ     P1.0
2
E2      equ     P1.1
3
OUT     equ     P1.2
4
5
;E1 E2 Out
6
;0  0  0
7
;0  1  0
8
;1  0  0
9
;1  1  1
10
11
loop:
12
        mov     c, E1
13
        anl     c, E2
14
        mov     OUT, c        ; OUT = E1 AND E2
15
        jmp     loop


Peter

von brichun (Gast)


Lesenswert?

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

schönes Weekend noch

Gruß
Brichun

von Querdenker (Gast)


Lesenswert?

(+)---(T1)---(T2)---(Rv)---(LED)---(-)

am einfachsten und ganz ohne µC. ;-)

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
Noch kein Account? Hier anmelden.