Follow me on Twitter!

Programmierung der Münzeingabe

 Kategorien:              Mikrocontroller

In der vergangenen Folge wurde exemplarisch das Setzen und Löschen der ersten drei Bits des Kaffeeautomaten gezeigt.

Deine Aufgabe zu heute war es nun, das Programm so zu erweitern, dass nun alle Münzen erkannt werden.

Die Aufgabe mag für Dich vielleicht trivial erscheinen, wenn Du das Beispiel in der letzen Folge verstanden hast.

Das bitweise Setzen und Löschen eines Bits ist später für das Konfigurieren des Mikrocontrollers, beim Setzen und Löschen der sogenannten Special Function Register (SFR), so wichtig, dass das Prinzip wirklich sitzen sollte.

Hier zunächst einmal das Video.

In der nächsten Woche geht es darum, das Programm besser zu strukturieren, und zwar mit Funktionen. Dazu werde ich in der nächsten Folge in einer Einführung zeigen, was Funktionen eigentlich sind und wozu wir sie benötigen.

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!

Kaffeeautomat-Funktion für die Münzauswertung Nach einem Ausflug in das Reich der Funktionen, geht es nun zurück zur Programmierung des Kaffeeauto...

Lösung der Übungsaufgabe zu Funktionen In den vergangenen Artikeln bin ich auf die Behandlung von Funktionen und das Thema Parameterübergab...

Array-Lösung mit Löschen des Bits Nachdem wir in der vergangenen Folge die Funktion Eingabe mit Hilfe eines Arrays realisiert haben, i...

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

Programmierung der Getränkeausgabe In der vergangenen Woche haben wir eine mögliche Lösung für eine Zähleinrichtung der Geldeingabe für...

6 Kommentare
Hier kannst Du den Artikel kommentieren: »

  1. Hallo.
    Ich habe die Portverarbeitung / Bitverarbeitung auszüglich folgendermaßen vorgenommen.
    [code]
    ...
    while(P1 != 0x00)
    {
    if (P1 & 0x01) {ui_betrag=ui_betrag+1; P1 &= 0xFE;}
    else if (P1 & 0x02) {ui_betrag=ui_betrag+2; P1 &= 0xFD;}
    else if (P1 & 0x04) {ui_betrag=ui_betrag+5; P1 &= 0xFB;}
    else if (P1 & 0x08) {ui_betrag=ui_betrag+10; P1 &= 0xF7; }
    else if (P1 & 0x10) {ui_betrag=ui_betrag+20; P1 &= 0xEF;}
    else if (P1 & 0x20) {ui_betrag=ui_betrag+50; P1 &= 0xDF;}
    else if (P1 & 0x40) {ui_betrag=ui_betrag+100;P1 &= 0xBF;}
    else if (P1 & 0x80) {ui_betrag=ui_betrag+200;P1 &= 0x7F;}
    }
    ...
    [/code]
    Meine Frage ist, ob dies auch so in Ordnung geht?
    Der Programmtest verläuft zufriedenstellend, würde nur gern sicher sein, ob dies ebenfalls “sauberer” C-code ist!?

    Danke für die Mühe ;-)

  2. Hallo, habe eine Frage zu meinem obigen Code vergessen.
    Wären 8 “if” Abfragen besser als 7 “else if” — vor allem hinsichtich schnelleren Quellcodes?
    Oder ist das in diesem Falle völlig egal?

    Danke nochmals…

  3. Hallo chaki,
    das sieht gut aus.
    If mit else if hat sogar den Vorteil, dass wenn das erste if zutrifft, die anderen Fälle erst gar nicht abgefragt werden müssen. Bei hintereinandergereihten if-Abfragen müsste jede Abfrage durchgeführt werden.

  4. Hallo,
    schönen Dank erstmal an Herren Wolfgang Bengfort.
    Ich hab hier vor kurzem angefangen und ich hab gerade 2 Fragen:
    1. Die Implementierung ist bei mir correkt auch ohne das Bit zu löschen. ( P1 &= 0xFD; )
    Brauchen wir das ?
    2. Kann man hier auch default benutzen, falls wir was anders tippen als k,e,c?
    Meine Implementierung siht so aus.

    void main (void) {

    int sum;
    char h,k,e,c;
    printf(“Schmeißen Sie das Geld rein \n”);
    P1=0;
    k=’k';
    e=’e';
    c=’c';

    while (1) {

    if (P1&0×01){ // Einlesen der letzten bit hier(& 0..010..0)hier P1 was man angibt mit 00000001 &-verknüpfen
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+1 );
    }

    if (P1&0×02){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+2 );
    }

    if (P1&0×04){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+5 );
    }

    if (P1&0×08){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+10 );
    }

    if (P1&0×10){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+20 );
    }

    if (P1&0×20){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+50 );
    }

    if (P1&0×40){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+100 );
    }

    if (P1&0×80){
    printf(“Der Guthaben beträgt %d Cent\n”, sum=sum+200);
    }
    P1=0;

    h=getchar();
    printf(“\n”);

    switch(h){
    case ‘k’:
    printf(“Sie haben Kaffee gewählt. \n”);
    printf(“Kaffee kostet 30 Cent. \n”);
    if(sum>=30){
    // printf(“Bitte sehr, genissen Sie Ihr kaffee. \n”);
    printf(“Sie haben noch %d Cent übrig.\n”, sum=sum-30);
    }
    else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 30-sum);}
    break;

    case ‘e’:
    printf(“Sie haben Espresso gewählt. \n”);
    printf(“Espresso kostet 40 Cent. \n”);
    if(sum>=40){
    // printf(“Bitte sehr, genissen Sie Ihr Espresso. \n”);
    printf(“Sie haben noch %d Cent übrig.\n”, sum=sum-40);
    }
    else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 40-sum);}
    break;

    case ‘c’:
    printf(“Sie haben Cappuccino gewählt. \n”);
    printf(“Cappuccino kostet 50 Cent. \n”);
    if(sum>=50){
    // printf(“Bitte sehr, genissen Sie Ihr Cappuccino. \n”);
    printf(“Sie haben noch %d Cent übrig.\n”, sum=sum-50);
    }
    else { printf(“Sorry, Sie haben nicht genug Geld, schmeissen Sie mindestens %d Cent rein.\n “, 50-sum);}
    break;

    } //end switch

    } //end while
    } // end main

    Danke

  5. Hallo Ali,
    kurz zu Deinen Fragen:

    1.) Das Bit sollten wir nach der Bearbeitung wieder löschen, damit die Münze wirklichnur 1 x gezählt wird.
    2.) Fehleingaben mit default abzufangen ist eine gute Idee und wird in der Paxis tatsächlich auch so gemacht.

    Einen schönen Sonntag noch :-)

  6. Hallo,
    danke für die Antwort.

Kommentiere hier den Artikel:

Abonnieren ohne einen Kommentar abzugeben