Hallo zusammen.
Ich habe ein kleines Problem mit einem 3er-Lauflicht über 24 Ports.
Ich hab mich mal mit Switch-Case versucht, ich weiß sieht nicht sehr
übersichtlich aus. Sollte ich vieleicht mal als AusgabeArray machen.
Aber jetzt zu meinem Problem:
1 | #include <avr/io.h>
|
2 |
|
3 |
|
4 | int main(){
|
5 |
|
6 | DDRA=0xFF;
|
7 | DDRB=0xFF;
|
8 | DDRC=0xFF;
|
9 |
|
10 | while(1){
|
11 |
|
12 | int state=0, a=7, b=0, c=0;
|
13 |
|
14 | while(state<26){
|
15 |
|
16 |
|
17 | switch (state){
|
18 |
|
19 | case 1 :
|
20 | case 2 :
|
21 | case 3 :
|
22 | case 4 :
|
23 | case 5 : //Reines Verschieben auf PORTA
|
24 | a = a << 1;
|
25 | state++;
|
26 | PORTA=a;
|
27 | break;
|
28 |
|
29 | case 6 : //Startup auf PORTB + Verschieben auf PORTA
|
30 | a = a << 1;
|
31 | b = 1;
|
32 | state++;
|
33 | PORTA=a;
|
34 | PORTB=b;
|
35 | break;
|
36 |
|
37 | case 7 :
|
38 | a = a << 1;
|
39 | b = 3;
|
40 | state++;
|
41 | PORTA=a;
|
42 | PORTB=b;
|
43 | break;
|
44 |
|
45 | case 8 :
|
46 | a = a << 1;
|
47 | b = 7;
|
48 | state++;
|
49 | PORTA=a;
|
50 | PORTB=b;
|
51 | break;
|
52 |
|
53 | case 9 :
|
54 | case 10 :
|
55 | case 11 :
|
56 | case 12 :
|
57 | case 13 : //Reines Verschieben auf PORTB
|
58 | b = b << 1;
|
59 | state++;
|
60 | PORTB=b;
|
61 | break;
|
62 |
|
63 | case 14 : //Startup auf PORTC + Verschieben auf PORTB
|
64 | b = b << 1;
|
65 | c = 1;
|
66 | state++;
|
67 | PORTB=b;
|
68 | PORTC=c;
|
69 | break;
|
70 |
|
71 | case 15 :
|
72 | b = b << 1;
|
73 | c = 3;
|
74 | state++;
|
75 | PORTB=b;
|
76 | PORTC=c;
|
77 | break;
|
78 |
|
79 | case 16 :
|
80 | b = b << 1;
|
81 | c = 7;
|
82 | state++;
|
83 | PORTB=b;
|
84 | PORTC=c;
|
85 | break;
|
86 |
|
87 | case 17 :
|
88 | case 18 :
|
89 | case 19 :
|
90 | case 20 :
|
91 | case 21 : //Reines Verschieben auf PORTB
|
92 | c = c << 1;
|
93 | state++;
|
94 | PORTC=c;
|
95 | break;
|
96 |
|
97 | case 22 : //Startup auf PORTA + Verschieben auf PORTC
|
98 | a = 1;
|
99 | c = c << 1;
|
100 | state++;
|
101 | PORTA=a;
|
102 | PORTC=c;
|
103 | break;
|
104 |
|
105 | case 23 :
|
106 | a = 3;
|
107 | c = c << 1;
|
108 | state++;
|
109 | PORTA=a;
|
110 | PORTC=c;
|
111 | break;
|
112 |
|
113 | case 24 :
|
114 | a = 7;
|
115 | c = c << 1;
|
116 | state++;
|
117 | PORTA=a;
|
118 | PORTC=c;
|
119 | break;
|
120 |
|
121 | default: break;
|
122 | }
|
123 | }
|
124 | }
|
125 | }
|
Wenn ich das File auf dem Simulator laufen lasse, hängt sich das
AVR-Studio jedes mal bei
DDRC=0xFF;
auf (CPU auslastung 100% und ich muss das Debugging neu starten).
Es liegt nicht an dem DDRC sonder an dem, was danach kommt. Aber ich
kann keinen Fehler entdecken.
Bin für jeden Tipp Dankbar !!
Gruß
Ich habe einen Atmega32 und
AVR Studio 4.13.571 Service Pack 2
GUI Version 4, 13, 0, 569
AVR Simulator 1, 0, 2, 0
ATmega32 229
Operating System
Major 5
Minor 1
PlatformID 2
Build 2600
Service Pack 2
Plugins:
AvrPluginAvrAsmObject 1, 0, 0, 46
AvrPluginavrgccplugin 1, 0, 0, 9
Stk500Dll 1, 0, 1, 10