Follow me on Twitter!

Array-Lösung mit Löschen des Bits

 Kategorien:              Mikrocontroller

Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, ist die Aufgabe, das jeweilige Portbit nach der Bearbeitung wieder zu löschen noch offen.

Dies möchte ich in dieser Folge nun nachholen.

In der Funktion Eingabe() steht uns lediglich die Schachtnummer, in der eine Münze eingeworfen wurde, zu Verfügung. Mit Hilfe dieser Schachtnummer muss nun das entsprechende Portbit – und zwar nur dieses Portbit ! – zurückgesetzt werden.

Bitweises Löschen des Portbits

In der Folge über die Bitweise Manipulation also das Bitweise Setzen und Löschen des Ports habe ich ja bereits den Mechanismus vorgestellt, wie man mit dem Operator & einzelne Bits zurücksetzen kann.

Die Maske hierfür müssen wir uns mit der Information über die Schachtnummer nun selbst zusammenbauen.

Der SHIFT-Operator

Wie bereits in der letzten Folge vorbereitet, kann man dies mit dem SHIFT-Operator << prima machen. In dem heutigen Video zeige ich, wie man das gewünschte Bitmuster zusammenstellen kann.

Hierzu kann man einfach eine 1 (binär gedacht als 00000001) soweit wie gewünscht nach links schieben. Man erhält 1 Byte mit 0, bei dem nur an der gewünschten Stelle eine 1 steht. Zieht man diesen Wert anschließend von einer 0xFF (binär gedacht 11111111) ab, erhält man die gewünschte Maske, z.B. 11111101.

Mit Hilfe dieser Maske kann man dann, wie in der Folge zur Bitweise Manipulation,  also das Bitweise Setzen und Löschen des Ports, gezeigt, das gewünschte Portbit zurückzusetzen. Alle anderen Portbits werden nicht verändert.

Noch einfacher durch das Bitweise Invertieren

Am Ende des Videos zeige ich noch, wie man die Maske noch eleganter zusammenstellen kann. Durch das Bitweise Invertieren der „geschifteten 1“ lässt sich die Maske sehr einfach erstellen.

Die Details im folgenden Video:

Dieser Artikel ist Teil des Mikrocontroller-Kurses auf ET-Tutorials.de.
[ >> Hier geht es zurück zur Übersichtsseite des Mikrocontroller-Kurses .]

 


Ähnliche Artikel

Folgende Artikel aus der gleichen Kategorie könnten Dich ebenfalls interessieren:

Keinen passenden
Artikel gefunden...?


... dann hilft vielleicht
die Suche!

Lösung der Aufgabe und SHIFT Operator In der letzten Folge habe ich das Element Array vorgestellt. Mit einem Array kann man eine Struktur ...

Lesen aus Portpins Heute geht es nun um die Treiberschaltung für die Portpins. Diese Treiberschaltung benötigt man für ...

Arrays In den vergangenen Folgen ging es ja schon um die Optimierung der Programmierung für unsren Kaffeeau...

Programmierung der Münzeingabe In der vergangenen Folge wurde exemplarisch das Setzen und Löschen der ersten drei Bits des Kaffeeau...

Lösung für eine Funktion zur Münzeingabe Im heutigen Artikel möchte ich eine mögliche Lösung für die Aufgabe aus dem letzten Artikel, nämlich...

5 Kommentare
Hier kannst Du den Artikel kommentieren: »

  1. ich bin der Meinung, dass Bitweiseinvertieren mit dem Operator “~” durchgeführt werden muss. In der Lösungsvorschlag ist der Operator “!” im Einsatz. Das löscht doch “allen” bits in Port1, weil !(1<<Nr) gibt immer 0 zurück. Es funktioniert nur wenn mann eine einzige Münze eingeworfen hat, bei mehr als zwei Münzen werden nur eine gezählt und dann ALLE zurückgesetzt.

  2. Das muss am Wetter liegen. :-(
    Du hast natürlich recht.
    Bitte alle das “!” gegen ein “~” austauschen.

    Ich werde dazu in den nächsten Tagen das Video korrigieren und austauschen.
    Danke, Su.

    Ich weiß schon, warum ich eine Sommerpause eingelegt habe ;-)

  3. Ich habe die fehlerhafte Stelle nun korrigiert und im Video das “!” gegen ein “~” ausgetauscht.
    Noch einmal vielen Dank, Su.

  4. Hey, ich hab zwei Fragen:
    1. Wann ist die Sommerpause ungefähr vorbei?
    2. Wie kann ich das fertige Programm auf den Controllerübertragen und den dann auch verwenden? Also auch mit Peripherie, Display (zB das von einem digitalen Wecker) usw.?
    Ich hoffe, die Sommerpause dauert nicht zu lange :)
    Ben

  5. Hallo Ben,
    Deine Ungeduld kann ich verstehen. Ich wäre selbst schon lieber früher wieder angefangen.
    Ich bin diesen Sommer umgezogen. DEr Umzug war leider ziemlich aufwändig, so dass ich nicht zu viel anderem gekommen bin. Es ist viel leigen geblieben, was ich zur Zeit aufarbeite.

    So langsam sehe ich aber Licht am Ende des Tunnels, so dass es in ca. 2 Wochen weitergehen sollte.

    Zur 2. Frage. Wenn Dein Controller(-boad) eine JTAG-Schnittstelle hat, dann ist es ganz einfach. Keil untersützt JTAG. Du kannst dann das Programm direkt auf Deinen Controller laden.
    Ansonsten gibt es z.B. auch Programmer mit denen Du Dein Programm in den Controller lädst.

Kommentiere hier den Artikel:

Abonnieren ohne einen Kommentar abzugeben