Hallo zusammen,
hab mal eine Frage zu meine Programm.
Zuerst mal der Code dann zu meinem Problem (=
1
#include<avr/io.h>
2
#include<avr/pgmspace.h>
3
#include"types.h"
4
5
#include"usart.h"
6
#include<avr/common.h>
7
8
9
voidZeitabfrage(Helligkeit)
10
11
{
12
13
// s08 Helligkeit;
14
15
Zeit=PINC;//vom a-Bit-Zähler
16
PORTC=Zeit;//Kontrolle ob der Wert übernommen wurde
17
Helligkeit=PORTD;
18
// NOP();
19
20
switch(Zeit)
21
{
22
case0x00:
23
break;
24
case0x01:
25
break;
26
case0x02:
27
break;
28
29
case0b00000011:
30
Helligkeit=Helligkeit+1;
31
break;
32
33
case0x04:
34
Helligkeit=Helligkeit++;
35
break;
36
37
case0x05:
38
Helligkeit=Helligkeit+2;
39
break;
40
41
case0x06:
42
Helligkeit=Helligkeit+2;
43
break;
44
45
case0x07:
46
Helligkeit=Helligkeit+2;
47
break;
48
49
case0x08:
50
Helligkeit=Helligkeit++;
51
break;
52
53
case0x0A...0x0B:
54
break;
55
56
case0x0C:
57
Helligkeit=Helligkeit--;
58
break;
59
60
case0x0D:
61
Helligkeit=Helligkeit--;
62
Helligkeit=Helligkeit--;
63
break;
64
65
case0x0E:
66
Helligkeit=Helligkeit--;
67
Helligkeit=Helligkeit--;
68
break;
69
70
case0x0F:
71
Helligkeit=Helligkeit--;
72
Helligkeit=Helligkeit--;
73
break;
74
75
case0x10:
76
Helligkeit=Helligkeit--;
77
break;
78
79
case0x11:
80
Helligkeit=Helligkeit--;
81
break;
82
83
case0x12...0x14:
84
break;
85
}
86
87
PORTD=Helligkeit;
88
Zeit=0x00;//Test das die Variable wieder auf 0 ist.
89
}
Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das
case 0x08!
kann mir hier jemand weiterhelfen, hab es mit der 0bxxxx und der
dezimalen schreibweise versucht.
Jedoch leiter ohne Erfolg.
Vielen dank im voraus.
LG
Luni schrieb:> Zeit = PINC; //vom a-Bit-Zähler> PORTC = Zeit; //Kontrolle ob der Wert übernommen wurde
Die Konstruktion verstehe ich nicht ganz, wie ist denn DDRC gesetzt?
Luni schrieb:> Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das> case 0x08!
woran siehst du das, am Debugger?
Da für die Eingaben 3, 4 und 8 jeweils genau das gleiche passiert
(Helligkeit wird um 1 erhöht) hat sich der Compiler vielleicht gedacht,
dass er die drei Fälle zusammenlegen kann. Das spart Codespeicher, im
Debugger kann es aber etwas verwirrend aussehen.
Achim S. schrieb:> Da für die Eingaben 3, 4 und 8 jeweils genau das gleiche passiert> (Helligkeit wird um 1 erhöht
Nein, 3 erhöht die Helligkeit um 1, 4 und 8 machen gar nichts.
Dr. Sommer schrieb:> Nein, 3 erhöht die Helligkeit um 1, 4 und 8 machen gar nichts.
Hoppla, stimmt. Ich hätte genauer hinschauen sollen.
Dann ist die Beobachtung von Luni allerdings wirklich verwunderlich:
Luni schrieb:> Also wenn ich den Wert 0x03 an PINC anlege springt das Programm in das> case 0x08!
Schade, meine falsche Interpretation hätte schön zu einer
Compileroptimierung gepasst ;-)
Der Compiler scheint aber zu ahnen, was gemeint war und optimiert dann
entsprechend bis zum vorgefunden Ergebnis. Bin immer wieder überrascht,
was der GCC so kann. Ich würde allerdings mal die Warnings anschauen.
Die geben mir oft wichtige Hinweise, was ich besser änderst schreiben
sollte ;-)
Oliver R. schrieb:> Die Konstruktion verstehe ich nicht ganz, wie ist denn DDRC gesetzt?
Diese Konstruktion ist für mich im Debugger hilfreich um zu sehen ob der
uC wirklich das macht was er soll.
Rufus Τ. Firefly schrieb:> Bist Du Dir sicher, daß Du damit das erreichst, was Du damit vermutlich> erreichen möchtest?
Jap leider, hatte nicht dran gedacht dass ich das definieren muss,
jedoch hat er mir das ausgeführt was ich erreichen wollte, werde ich
aber noch ändern.
Achim S. schrieb:> Da für die Eingaben 3, 4 und 8 jeweils genau das gleiche passiert> (Helligkeit wird um 1 erhöht) hat sich der Compiler vielleicht gedacht,> dass er die drei Fälle zusammenlegen kann. Das spart Codespeicher, im> Debugger kann es aber etwas verwirrend aussehen.
sieht das in diesem Fall so aus?
Luni schrieb:> hab mal eine Frage zu meine Programm.
Ich auch. Wofür bindest du "types.h", wenn weder "Zeit" noch
"Helligkeit" einem Variablentyp zugeordnet sind.
Verheimlichst du uns da irgendetwas?