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 ;-------------------------------------------------
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
Danke dir Peter Dannegger es geht ja wirklich noch viel viel einfacher als ich gedacht habe :=) schönes Weekend noch Gruß Brichun
(+)---(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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.