Kostenloser Elektrotechnik VIDEO-Kurs


mit VIDEO-Reihen zu den Themen:
Grundlagen der Elektrotechnik
Gleichstromnetze und Berechnungsverfahren
Wechselstrom und Drehstromnetze
Elektrische Maschinen
Regelungstechnik
Digitaltechnik
Mikrocontrollertechnik und C-Programmierung


Bitweises Auslesen eines PORTs


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 5 abgegebenen Stimmen.
Stimme jetzt ab ! (auf die Sternchen klicken)
Loading ... Loading ...




Ähnliche Artikel

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

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

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

Äquivalenz und Antivalez (XOR) Heute soll es um die letzten Gatter gehen, die ich in diesem Kurs vorstellen möchte. Es gibt zwar no...

{ 5 Kommentare… sie unten lesen oder einen hinzufügen }

jan

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;
}
}
}
}

jan

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

Wolfgang Bengfort

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.

samer

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

Wolfgang Bengfort

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

Einen Kommentar hinterlassen