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
habe noch andere sachen die ich anzeigen wollte, und diese stehen nicht in der funktion.
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.
Yannik Stümper schrieb: > Karl Heinz Buchegger schrieb: >> Du brauchst Grundlagen > > ja ich weiß, und ich bin dran ;-) Entschuldige, aber so was
1 | if(1==0x01&D_PC) goto PCB0_1; |
2 | else goto PCB0_0; |
3 | PCB0_1: |
4 | lcd_setcursor(4,1); |
5 | lcd_string("\x1A"); |
6 | PCB0_M = 1; |
7 | goto PCB0_fix; |
8 | PCB0_0: |
9 | lcd_setcursor(4,1); |
10 | lcd_string(" "); |
11 | PCB0_M = 0; |
12 | goto PCB0_fix; |
13 | |
14 | PCB0_fix: |
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.