mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051 / Schalterwert einlesen


Autor: Azurox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Azurox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ! ;)

Autor: John (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht so?

Autor: Azurox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 !

"

Autor: Peter R. (pnu)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Azurox (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 
;)

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.