Hallo ich versuche mich seit neustem in C mit AVR Studio und möcht damit einen atmaga8 programieren. Ich habe ein Quelltext geschreiben aber bekomme ihn nicht zum laufen ( Build failed with 5 errors and 2 warnings... ). Die switch case anweisung soll den wert von PORT D verarbeiten und dann in den passenden case gehen und die passenden Ausgänge an PIN B auf 1 setzen. BRAUCHE HILFE BITTE!!!!!!!! #include <stdint.h> #include <avr/io.h> uint8_t sp1; int main (void) { DDRB = 0xff; DDRD = 0x00; PORTD = 0xff; while(1) { PIND = sp1; switch (sp1) { case '0x01'; 0x01 = PORTB; break; case '0x02' 0x02 = PORTB; break; default; } } return 0; }
von welcher Programmiersprache kommt du? In C versucht die Anweisung einer Konstanten einen wert zuzuweisen 0x02 = PORTB; richtig ist: PORTB = 0x02 Im Case verwendest du '0x01', warum die ''. In C bedeutet das, das es im ein einzelnen zeichen geht. Hier geht es um zahlen also ' weglassen. PIND = sp1; ist auch falsch rum.
> switch (sp1) > { > case '0x01'; > 0x01 = PORTB; > break; > > > > case '0x02' > 0x02 = PORTB; > break; vermutlich willst du wohl eher
1 | switch (sp1) { |
2 | case 0x01: |
3 | PORTB = 0x01; |
4 | break; |
5 | case 0x02: |
6 | PORTB = 0x02; |
7 | break; |
8 | }
|
je nachdem was du genau machen willst reicht da aber auch einfaches
1 | PORTB = PINB & 0x03; |
Das würde dann auch funktionieren wenn PINB.0 und PINB.1 gesetzt sind.
switch sieht etwa so aus:
1 | //schnipp
|
2 | |
3 | unsigned char i; |
4 | unsigned char j; |
5 | |
6 | i = 5; |
7 | j = 0x00; |
8 | |
9 | switch (i){ |
10 | |
11 | case 1: break; |
12 | |
13 | case 2: j= 4; |
14 | break; |
15 | case 3: |
16 | case 4: j= 6; |
17 | break; |
18 | |
19 | case 5: j=0x10; |
20 | break; |
21 | |
22 | default: break; |
23 | }
|
24 | |
25 | //schnapp
|
also hast du in deinem Code folgendes vergessen: - default etwas zuweisen (wenn es auch nur ein break ist). - nach case + Wert KEIN Semikolon! - siehe Peters Bemerkungen -------------------------------- EDIT: Nico war schneller :-)
Ich komme aus der Elektrotechnik und habe noch nicht so viel erfahrung mit C habe alles gemacht aber ich habe immer noch ein error: #include <stdint.h> #include <avr/io.h> uint8_t sp1; int main (void) { DDRB = 0xff; DDRD = 0x00; PORTD = 0xff; while(1) { sp1 = PIND; switch (sp1) { case 0x01: PORTB = 0x01; break; case 0x02: PORTB = 0x02; break; default; } } return 0; }
auf den ersten blick finde ich keinen Fehler, die Fehlermeldung mit der Passende Zeile könnte da weiter helfen.
default: break; das hatte ich vergessen danke für die Hilfe jetzt geht es
Hi, packe deinen Code bitte in die dafür vorgesehene Formatierung und generell solltest du dir das Einrücken angewöhnen, liest sich angenehmer. ;-) Kennst du http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial schon? Diesen Artikel zu lesen, würde dir viele Fragen und Zeit ersparen. Gib uns bitte die Fehlerausgabe, das wäre sehr hilfreich und dafür ist sie ja auch da. ;-) cu EDIT: Ah, zu spät. :-)
Sieh Dir mal ganz genau Deine case-Labels an. Was steht da?
1 | case '0x01'; |
Mal vom an dieser Stelle auch syntaktisch fehlerhaften Semikolon abgesehen, steht da eine sehr merkwürdige char-Konstante. Du meinst aber mit absoluter Sicherheit das hier:
1 | case 0x01: |
Dasselbe tritt auch bei "default" auf, bei "case '0x02'" fehlt das Semikolon bzw. der richtige Doppelpunkt. Was spricht eigentlich dagegen, Dir die Fehlermeldungen des Compilers anszusehen? Der wird genau diese Schlampereien bemängeln.
Deine C Grundlagen-Hilfe muss ja grotten schlecht sein, wenn beim switch case Bsp so viel Syntaxfehler drin sind .....
>default etwas zuweisen (wenn es auch nur ein break ist).
Wenn sowas dasteht
1 | default:
|
2 | break; |
dann lass ich das lieber ganz weg...
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.