Forum: Mikrocontroller und Digitale Elektronik 8051 / Schalterwert einlesen


von Azurox (Gast)


Lesenswert?

Hallo zusammen,

ich muss folgende Aufgabe für die Schule, als Abi-Vorbereitung, lösen:

"Schalterwert einlesen
Am Port P1 ist eine Platine mit 8 Schaltern angeschlossen. Über die 
ersten vier Schalter (P1.0 bis P1.3) sollen vier verschiedene 
Lauflichter eingestellt werden können.

Schalter an Port Pin              Funktion
P1.0                              Linkslauflicht mit einer Diode
P1.1                              Rechtslauflicht mit einer Diode
P1.2                              zwei Dioden "laufen" von außen 
aufeiander zu
P1.3                              zwei Dioden "laufen" von innen nach 
außen


In der Funktion "schalter()" wird nur der Wert am Port P1 eingelesen und 
in der globalen Variable "lauf" abgespeichert.
Schreiben Sie den Quellcode für diese Aufgabenstellung !



So, das ist die Aufgabe. Allerdings habe ich absolut keine Ahnung, was 
dort von mir verlangt ist, geschweige denn, wie ich dies umsetzen soll?!

Ich hoffe Ihr könnt mir weiterhelfen!


MfG

von Peter D. (peda)


Lesenswert?

Azurox schrieb:
> Allerdings habe ich absolut keine Ahnung, was
> dort von mir verlangt ist, geschweige denn, wie ich dies umsetzen soll?!

Dann beschwer Dich beim Direktor, daß Dein Lehrer seine Aufgaben nicht 
erfüllt hat.
Stoff, der abgefragt wird, muß vorher im Unterricht vom Prinzip her 
behandelt worden sein.


Peter

von Azurox (Gast)


Lesenswert?

Nun ja, da gibt es in letzter Zeit öfters Schwierigkeiten, da wir in dem 
Fach einen Lehrerwechsel hatten und der jetztige zu viel voraussetzt.
Bisher habe ich mir fast alles selbst erarbeitet, jedoch bin ich jetzt 
zu einem Punkt gekommen, an der ich die Aufgabenstellung nicht ganz 
verstehe.

Also, wenn jemand eine Idee haben sollte, bzw. weiß, was mit der 
Aufgabenstellung gemeint ist, bitte antworten! Ansonsten lasst es bitte 
- danke ! ;)

von John (Gast)


Angehängte Dateien:

Lesenswert?

Vielleicht so?

von Azurox (Gast)


Lesenswert?

Hallo John,

danke für deine Antwort. Ja, die 4 verschiedenen Lauflichter sollen so 
funktionieren. Das habe ich soweit auch verstanden. Aber das Problem ist 
dies hier:

"In der Funktion "schalter()" wird nur der Wert am Port P1 eingelesen 
und
in der globalen Variable "lauf" abgespeichert.
Schreiben Sie den Quellcode für diese Aufgabenstellung !

"

von Peter R. (pnu)


Lesenswert?

Das zielt zuerst einmal auf den Umgang mit einer "Maske":

das port des 8051 wird gelesen, aber nur 4 bit davon sind interessant, 
die anderen müssen ausgeblendet werden.

1. Zuerst das port lesen. in die Variable "lauf" damit

2. Dann eine AND- Verknüpfung mit der "Maske" 00001111 , zwischen Akku 
und "lauf". Durch die Nullen der Maske sind dann die oberen vier Bit 
immer Null. die unteren Vier behalten die eingelesenen Werte. das bringt 
die Einschränkung auf die vier Schalter, die oben beschrieben sind. Im 
Akku steht dann das Muster für die vier Tasten, die anderen tasten sind 
ausgeblendet.

3. Dann kann man mit Einzelbitmaske z.B. 00000010 einen einzelnen Taster 
abfragen und zur dazugehörigen Routine bedingt springen. Also:
Wenn Ergebnis = 1 dann in Routine "rechtslaufen"

Die Technik, mit Masken einzelne Bits aus einem 8-Bit-Wort herauszulesen
oder einzelne Bits zu löschen oder zu setzen ist fundamental, besonders 
wenn in der Syntax einer Programmiersprache Einzelbitbefehle fehlen.

Danach kann man sich dann an die Arbeit machen die vier Einzelroutinen 
zu schreiben

Und dazu auch noch Kontrolle für die Fälle, wenn die eins aus 
vier-Bedingung nicht erfüllt ist, wenn z.B. zwei Tasten anstatt einer 
gedrückt sind.

von Azurox (Gast)


Lesenswert?

Hallo Peter.
Vielen Dank - also habe ich die Aufgabe wohl doch richtig verstanden. 
Jedoch habe ich nie wirklich mit Masken gearbeitet. Das Thema wurde nur 
kurz vor 2 Jahren von meinem Lehrer angeschnitten, aber nie wirklich 
erklärt, da dieser es selbst nicht konnte. Da habe ich einfach den 
Quellcode auswendig gelernt und gut war's.
Nur schade, dass sowas zum Schluss immer auf die Kappe der Schüler geht 
;)

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.