Zähler auf ARM 7 < Sonstige < Schule < Informatik < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 13:10 So 10.04.2011 | Autor: | student87 |
Aufgabe | Schreiben Sie ein C Programm, welches ein unsigned char zähler ucJ von 0-255 aufwärts zählt und diesen Zählerstand im Takt von 0,5 Sekunden in der 1. Zeile des LCD im Hexadezimalcode darstellt. Zeitgleich soll in der 2. Zeile das zum Zählerstand gehörende ASCII-Zeichen angezeigt werden. Die Ausgabe soll nach dem Zählerstand 255 nicht wieder von vorn beginnen.
Hinweis: do while Schleife |
Hallo, ich komme bei dem Programm nicht weiter.
Es soll auf einem ARM7 (32 Bit) laufen.
Ich habe bisher folgendes programmiert:
int main(){
display_init(); //Initialisierung des LCD
unsigned char ucJ;
ucJ=0;
do{
display_set_cursor(0,0); //setzt Cursor in Zeile 0 und Spalte 0
display_printf("%x",ucJ);
display_set_cursor(0,1);
display_printf("%c",ucJ);
delay5ms(100);
ucJ++;
}while(ucJ<256);
}
Das Programm läuft ja jetzt in einer Endlosschleife, weil ucJ nie den Wert 256 erreicht. Wenn ich den Wert in der while-Bedingung aber auf 255 setzte, zählt das Programm nur noch bis 254.
Wie kann ich das Problem lösen, sodass keine Endlosschleife entsteht und ich trotzdem von 0-255 zählen kann?
Gruß
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:37 So 10.04.2011 | Autor: | Infinit |
Hallo student87,
das verstehe ich nicht, die 255 sollten doch angezeigt werden.
Du hast 254 angezeigt, zählst um 1 hoch, bist also bei 255. Das ist immer noch kleiner als 256, also wird die Schleife noch einmal durchlaufen, die 255 wird angezeigt und der Wert auf 256 gesetzt. Jetzt gilt erst die Schleifenbedingung nicht mehr.
Viele Grüße,
Infinit
|
|
|
|
|
Stimmt glaub ich nicht ganz, ich bin bei 254 zähle eins hoch, bin dann bei 255, dann ist, wie du ja schon schreibst, die Bedingung noch nicht erfüllt und das Programm läuft nochmal durch die Schleife. Dann wird der Wert aber nicht auf 256 gesetzt, sonder auf 0.
Ich kann ja nur 256 Zahlen darstellen, also von 0-255.
Schreibe ich aber 255 in die while-Bedingung bleibt die Anzeige bei 254 stehen.
und das ist ja auch nicht das was ich erreichen soll.
Gruß
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 14:25 So 10.04.2011 | Autor: | Infinit |
Hallo,
in diesem Fall gehst Du ja am Anfang nicht in die While-Abfrage mit einem Wert von 0, sondern bereits mit 1. Eine Integer-Division kann Dir hier in der Berechnung der Abbruch-Bedingung weiterhelfen, das C-Programm kennt schließlich einen Integer-Wertebereich der größer als 255 ist.
Die Idee ist es, eine Division durchzuführen, deren Vorkommateil zur Überprüfung genutzt wird. Ich kenne nicht genau die Syntax, aber etwas in der Form von
while (int(Ucj/256)= 0) sollte hier weiterhelfen.
Viel Erfolg,
Infinit
|
|
|
|
|
Hallo!
Das ist aber auch unschön...
Was ist mit
1: | do{
| 2: | ...
| 3: | }while(ucJ!=0) |
Beim ersten Durchlauf wird ucJ=0 ja bereits um 1 vergrößert. Und bei unsigned chars gilt 255+1=0
besonders in der Hardwareprogrammierung macht man sich sowas andauernd zu Nutze.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:53 So 10.04.2011 | Autor: | Infinit |
Hallo student87,
ich schreibe eine Antwort. Du gibst keinen Kommentar und setzt einfach die Frage auf "Unbeantwortet" zurück. Was soll das denn?
VG,
Infinit
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:57 So 10.04.2011 | Autor: | student87 |
sorry, habe die frage erst auf unbeantwortet gesetzt und dann einen kommentar geschrieben, war eine ungünstiege Reihenfolge stimmt schon ;)
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:26 So 10.04.2011 | Autor: | Infinit |
Hallo,
kein Problem, das kann mal passieren.
Viele Grüße,
Infinit
|
|
|
|