Ich habe hier ein ganz doofes Problem im Grunde, und komme nicht
dahinter was dies sein könnte, mein Programm mit dem ich einen Timer
anspreche und LED's blinken lasse.:
1 | const char _THRESHOLD = 64;
|
2 | int counter = 0;
|
3 |
|
4 | int flash_ps = 8;
|
5 |
|
6 | int counter_small = 0;
|
7 | int site = 1;
|
8 |
|
9 | void Timer2Overflow_ISR() org IVT_ADDR_TIMER2_OVF {
|
10 |
|
11 | if (site == 1)
|
12 | {
|
13 |
|
14 | if (counter_small >= flash_ps)
|
15 | {
|
16 | PORTD = ~PORTD;
|
17 | counter_small = 0;
|
18 | }
|
19 | else
|
20 | {
|
21 | counter_small++;
|
22 | }
|
23 |
|
24 | if (counter >= _THRESHOLD)
|
25 | {
|
26 | PORTD = 0;
|
27 | counter = 0;
|
28 | site = 2;
|
29 | }
|
30 | else
|
31 | {
|
32 | counter++;
|
33 | }
|
34 | }
|
35 |
|
36 | if (site == 2)
|
37 | {
|
38 |
|
39 | if (counter_small >= flash_ps)
|
40 | {
|
41 | PORTA = ~PORTA;
|
42 | counter_small = 0;
|
43 | }
|
44 | else
|
45 | {
|
46 | counter_small++;
|
47 | }
|
48 |
|
49 | if (counter >= _THRESHOLD)
|
50 | {
|
51 | PORTA = 0;
|
52 | counter = 0;
|
53 | site = 1;
|
54 | }
|
55 | else
|
56 | {
|
57 | counter++;
|
58 | }
|
59 | }
|
60 |
|
61 | }
|
62 |
|
63 | void main() {
|
64 |
|
65 | delay_ms(2000);
|
66 |
|
67 | DDRD = 0xff;
|
68 | DDRA = 0xff;
|
69 |
|
70 | PORTA = 0xaa;
|
71 | PORTD = 0xaa;
|
72 |
|
73 | SREG_I_bit = 1; // Interrupt einschalten
|
74 | TOIE2_bit = 1; // Timer2 overflow interrupt einschalten
|
75 |
|
76 | delay_ms(2000);
|
77 |
|
78 | TCCR2 = 7; // Start timer mit 1024 prescaler
|
79 |
|
80 | delay_ms(100);
|
81 | while (1);
|
82 | }
|
So wie es dort steht, werden folgende Ports angesprochen:
4x PortA blinkt
...
4x PortD UND PortC blinkt
So und warum blinkt nun PortC bei PortD mit?!? Ich komme echt nicht
dahint, wenn ich nun aber explizit angebe:
1 | ...
|
2 | DDRC = 0xff;
|
3 | DDRD = 0xff;
|
4 | DDRA = 0xff;
|
5 |
|
6 | PORTA = 0xaa;
|
7 | PORTD = 0xaa;
|
8 | PORTC = 0x00;
|
9 | ...
|
dann blinkt PortC nicht mit.
Aber warum ist das so?! Ich kann echt beim besten Willen kein Fehler in
meinem Code feststellen?!