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
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
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 ! ;)
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 !
"
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.
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
;)
Eine eigene Frage?
Dieser Thread ist über 15 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.