Follow me on Twitter!

Bitweises Auslesen eines PORTs

 Kategorien:              Mikrocontroller

Im heutigen Video zeige ich eine mögliche Lösung, wie man mit Hilfe eins bitweisen UND bzw. eines bitweisen ODER die eingeworfenen Geldstücke einzeln auswerten kann.

Durch dieses einzelne Auswertung ist es möglich, auch quasi gleichzeitig eingeworfene Geldstücke zu erkennen.

Wichtig bei der einzelnen Auswertung der Geldstücke ist es, nach dem Auslesen eines Bits nur dieses eine Bit wieder zurückzusetzen, da sonst die Informationen über die anderen eingeworfenen Geldstücke verloren gehen.

Hier zunächst das Video:


In diesem Video habe ich eine mögliche Lösung zum Auslesen der ersten Bits gezeigt.

Deine Hausaufgabe zur nächsten Folge ist es, falls Du es nicht sowieso schon geschafft hast, das Programm für die restlichen Bits so zu erweitern, dass auch die anderen möglichen Geldstücke biweise ausgelesen werden können.

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


Hat Dir der Artikel geholfen? - Dann hilf dem Artikel ;-)

Bitweises Auslesen eines PORTs: 1 Star2 Stars3 Stars4 Stars5 Stars 5,00 von 5 Punkten, basieren auf 1 abgegebenen Stimmen. Stimme jetzt ab ! (auf die Sternchen klicken)
Loading ... Loading ...


Ä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 ...

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...

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

Entwicklung eines DC DC Stepup-Wandlers In einer der letzten Folge hat Dave Jones in einem Video den (kleinen) Unterschied zwischen analogen...

Analoge Spannungsregler vs Schaltregler In vielen Schaltungen benötigt man eine Spannungsquelle, die eine konstante Spannung auch bei schwan...

5 Kommentare
Hier kannst Du den Artikel kommentieren: »

  1. Wofrü genau steht das “&=” bei der Bit freigabe?
    das habe ich nicht ganz verstanden.
    Und ich denke ich habe alles richtig, doch wenn ich das Programm starten will sagt er mir:
    “*** error 65: access violation at C:0×0000 : no ‘execute/read’ permission”

    hier mal der code:

    void main (void) {

    int Betrag;
    char c;
    /*————————————————
    Setup the serial port for 1200 baud at 16MHz.
    ————————————————*/
    #ifndef MONITOR51
    SCON = 0×50; /* SCON: mode 1, 8-bit UART, enable rcvr */
    TMOD |= 0×20; /* TMOD: timer 1, mode 2, 8-bit reload */
    TH1 = 221; /* TH1: reload value for 1200 baud @ 16MHz */
    TR1 = 1; /* TR1: timer 1 run */
    TI = 1; /* TI: set TI to send first char of UART */
    #endif

    Betrag=0;
    P1=0;
    printf(“Ihr Guthaben beträgt: 0 cent”);
    while (1) {

    if (P1&0×01)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=1);
    P1&=0xFE;
    }

    if (P1&0×02)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=2);
    P1&=0xFD;
    }

    if (P1&0×04)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=5);
    P1&=0xFC;
    }

    if (P1&0×08)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=10);
    P1&=0xFB;
    }

    if (P1&0×16)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=20);
    P1&=0xEF;
    }

    if (P1&0×32)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=50);
    P1&=0xDF;
    }

    if (P1&0×64)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=100);
    P1&=0xCF;
    }

    if (P1&128)
    {
    printf(“Guthaben: %d cent\n”,Betrag+=200);
    P1&=0xBF;
    }

    c=getchar();
    switch (c)
    {
    case ‘k’:
    if (Betrag<30)
    {
    printf("affee kostet 30 Cent\n");
    printf("Restbetrag: %d Cent\n", Betrag);
    printf("Bitte werfen Sie (mindestens) %d Cent ein\n",30-Betrag);
    c=0;
    break;
    }
    printf("\nSie haben Kaffee gewählt\n");
    printf("Restbetrag: %d Cent\n", Betrag-=30);
    c=0;
    break;

    case 'e':
    if (Betrag<40)
    {
    printf("spresso kostet 40 Cent\n");
    printf("Restbetrag: %d Cent\n", Betrag);
    printf("Bitte werfen Sie (mindestens) %d Cent ein\n",40-Betrag);
    break;
    }
    printf("\nSie haben Espresso gewählt\n");
    printf("Restbetrag: %d Cent\n", Betrag-=40);
    c=0;

    break;
    case 'c':
    if (Betrag<50)
    {
    printf("appuchino kostet 50 Cent\n");
    printf("Restbetrag: %d Cent\n", Betrag);
    printf("Bitte werfen Sie (mindestens) %d Cent ein\n",50-Betrag);

    break;
    }
    printf("\nSie haben Cappuchino gewählt\n");
    printf("Restbetrag: %d Cent\n", Betrag-=50);
    c=0;
    break;

    case 'r':
    if (Betrag==Betrag)
    {
    printf("ückgabe\nIhr Geld wird Ihnen ausgegeben\n",Betrag-=Betrag);
    printf("Guthaben: %d\n",Betrag);
    break;
    }
    }
    }
    }

  2. sry ich meinte natürlich
    FE
    FD
    FB
    F7
    EF
    DF
    BF
    7F
    trotzdem kein erfolg :/
    gleiches Problem

  3. P1 &= 0xFE;
    bedeutet
    P1 = P1 & 0xFE;
    Das ist nur eine andere, kürzere Schreibweise.
    Ich habe das in einem der früheren Videos einmal erläutert.
    Ich hoffe, das hilft beim Verständnis.

  4. Hallo Wolfgang,
    Ich kann nicht zwei Bits gleichzeitig setzen um zu sehen wie das Programm drauf reagiert.
    In jeder If-Schleife wird ja das entsprechende Bit auf Null gesestzt. Was muss ich tun damit es klappt??

  5. Hallo samer,
    sehr gut.
    Dieses Thema wird in den kommenden Folgen besprochen.

Kommentiere hier den Artikel:

Abonnieren ohne einen Kommentar abzugeben