Abend aller seitz,
ich bin gerade dran datenbereiche aufzudröseln und diese auf ein LCD die
biemen.
hier mal ein ausschnitt:
int D_PC; //Wertebereich Port C (soll später von TWI gesendet
werden
D_PC = 0x02; //Wertvorgabe zur Simulation
//Bereiche für Anzeigemerker PORT C
int PCB0_M; //Anzeigemerker Port C Bit0
PCB0_M= 2;
int PCB1_M; //Anzeigemerker Port C Bit1
PCB1_M= 3;
PCB1_fix:
if (!SP_1 O ST_RST) return; //Verlässt die Funktion O=&&
if (!SP_3) goto AZ_2; //Springt in eine Andere Anzeige
//Abfrage des einzelnen
Bits--------------------------------------------------------------------
-----------
//Abfrage PortC Bit 0
if (PCB0_M==0x01&D_PC)goto PCB0_fix;
if(1==0x01&D_PC) goto PCB0_1;
else goto PCB0_0;
PCB0_1:
lcd_setcursor(4,1);
lcd_string("\x1A");
PCB0_M = 1;
goto PCB0_fix;
PCB0_0:
lcd_setcursor(4,1);
lcd_string(" ");
PCB0_M = 0;
goto PCB0_fix;
PCB0_fix:
//Abfrage Port C Bit 1
if (PCB1_M==0x02&D_PC)goto PCB1_fix;
if(2==0x02&D_PC) goto PCB1_1;
else goto PCB1_0;
PCB1_1:
lcd_setcursor(6,1);
lcd_string("\x1A");
PCB1_M = 1;
goto PCB1_fix;
PCB1_0:
lcd_setcursor(6,1);
lcd_string(" ");
PCB1_M = 0;
goto PCB1_fix;
mit dem Bit 0 geht das, nur mit dem bit 1 nicht mehr. kann es sein das
ich mit der ersten Maske mir mein D_PC (Daten_PortC, wird später über
TWI gesendet) versaue und das deshalb nicht mehr mit dem Bit 1 geht?
weiter wollte ich noch fragen ob es eine schönere Möglichkeit gibt die
Bits abzufragen. Meine ist ja wirklich viel schreib kram.....bei 3 Ports
macht das keinen spass.
Bitte macht mich nicht zur Sau, bringe mit gerade "C" selbst bei, macht
spass manchmal kommt man leider aber nicht allein weiter.
Gruß und danke schon mal.
Wirf als erstes erst mal ALLE goto raus.
Sieh dir statt dessen an, was du alles zb mit Schleifen und dergleichen
machen kannst. Du stehst dir mit der Verwendung (und der dazugehörigen
Denkweise) von goto nur selbst im Weg.
Wenn du in den nächsten 2 Jahren einen goto verwendest, klopfst du dir
erst mal selbst auf die Finger. Und zwar ordentlich, so dass es weh tut!
Das was du vorhast, kann man für 1 kompletten 8 Bit Port in 5 Zeilen
C-Code strukturiert so hinschreiben, dass es jeder versteht. Aber dazu
musst du erst mal deinen goto über Bord werfen und anfangen in Schleifen
zu denken, anstelle von "mach das und wenn du fertig bist gehts dort und
dort weiter".
Karl Heinz Buchegger schrieb:> Wirf als erstes erst mal ALLE goto raus.> Sieh dir statt dessen an, was du alles zb mit Schleifen und dergleichen> machen kannst. Du stehst dir mit der Verwendung (und der dazugehörigen> Denkweise) von goto nur selbst im Weg.>> Wenn du in den nächsten 2 Jahren einen goto verwendest, klopfst du dir> erst mal selbst auf die Finger. Und zwar ordentlich, so dass es weh tut!
wollte es zuerst mit einer schleife (while) machen, aber da bin ich
durch "return" bzw "break" nicht mehr rausgekommen, keine ahnung warum.
Werde mich weiter dran probieren, ich weiß das es nicht schön ist.
versuche auch das ich nicht weit "hüpfe" um nicht den überblick
zuverlieren.
Yannik Stümper schrieb:> Karl Heinz Buchegger schrieb:>> Wirf als erstes erst mal ALLE goto raus.>> Sieh dir statt dessen an, was du alles zb mit Schleifen und dergleichen>> machen kannst. Du stehst dir mit der Verwendung (und der dazugehörigen>> Denkweise) von goto nur selbst im Weg.>>>> Wenn du in den nächsten 2 Jahren einen goto verwendest, klopfst du dir>> erst mal selbst auf die Finger. Und zwar ordentlich, so dass es weh tut!>> wollte es zuerst mit einer schleife (while) machen, aber da bin ich> durch "return" bzw "break" nicht mehr rausgekommen, keine ahnung warum.
Weil du viel zu kompliziert denkst.
1
funktion Drösle_auf( uint8_t v )
2
{
3
für i = 0 bis 7 {
4
if das Bit i ist gesetzt im Wert v
5
mach ein 'x' aufs LCD
6
else
7
mach ein ' ' aufs LCD
8
}
9
}
wo brauchst du da einen return oder einen break?
Du brauchst Grundlagen
Yannik Stümper schrieb:> habe noch andere sachen die ich anzeigen wollte, und diese stehen nicht> in der funktion.
Dann malst du die eben mit einer anderen Funktion hin. Sagt ja keiner,
dass andere Funktionen nicht auch auf das LCD malen dürfen.
Aber diese Funktion hat die Aufgabe einen 8 Bit Wert in Form von x bzw.
Leerzeichen, beginnend ab einer bestimmten LCD Position hinzumalen. Und
genau das (und nur das) tut sie auch.
lcd_setcursor( 4, 0 ); Drösle_auf( PINA );
und schon stehen alle 8 Bit von A am LCD, beginnend bei 4/0
lcd_setcursor( 4, 1 ); Drösle_auf( PINB );
gleich darunter stehen dann alle 8 Bit von PINB
lcd_setcursor( 4, 2 ); Drösle_auf( PINC );
gefolgt von den 8 Bit von PINC
3 Zeilen (6 Anweisungen) plus die Funktion und du hast 3 komplette Input
Ports abgehandelt.
das schreit förmlich nach einem Einführungsbuch in die C-Programmierung!
Ich hab wirklich schon viel gesehen, aber so einen Unsinn hab ich noch
nie gesehen. Es scheint fast, dass die einzigen beiden C-Schlüsselwörter
die du kennst 'if' und 'goto' sind. Von abhängigen ANweisungen hast du
noch nie etwas gehört, genausowenig wie von Blöcken. Das ist aber:
C-Kurs, 2. Stunde (von 40 Unterrichtseinheiten).
Karl Heinz Buchegger schrieb:> lcd_setcursor( 4, 0 ); Drösle_auf( PINA );>> und schon stehen alle 8 Bit von A am LCD, beginnend bei 4/0>> lcd_setcursor( 4, 1 ); Drösle_auf( PINB );>> gleich darunter stehen dann alle 8 Bit von PINB>> lcd_setcursor( 4, 2 ); Drösle_auf( PINC );
leuchtet mir leider noch nicht ein
aber ich habe gelernt
if (PCB0_M != (0x01&D_PC))
{
if(0x01&D_PC)
{
PCB0_1:
lcd_setcursor(4,1);
lcd_string("\x1A");
PCB0_M = 1;
}
else
{
PCB0_0:
lcd_setcursor(4,1);
lcd_string(" ");
PCB0_M = 0;
}
}
Hat glaub keinen Sinn Yannik. Mach mal Pause hiervon und arbeite ein C
Buch für Anfänger von Anfang an durch. Das spart dir langfristig
haufenweise Zeit und Frust, auch wenn du glaubst du brauchst dafür
länger als ohne Buch.