Hallo zusammen,
ich beschäftige mich gerade ein weniger mit einem Atmega8 und wunder
mich wie der µC die main-Funktion durchläuft. Laut Ergebnis über UART,
läuft er 1x durch die main-Funktion, dann 5x in der while-Schleife und
dann wieder raus aus der while-Schleife. Ich bin zwar kein
Profi-Programmer, jedoch reicht mein C-Wissen aus, um sagen zu können,
dass der µC bis in alle Ewigkeiten in der while-Schleife verbleiben
sollte. Der µC hängt auf dem mySmart USB MK2 und die Software ist mit
myAVrWordpad Plus geschrieben.
Kann mir das jemand erklären ?
1 | #define F_CPU 3686800L //Taktfrquenz
|
2 | #define BAUD 19200 //einstellte Baudrate
|
3 |
|
4 | char text[10];
|
5 | //-----------------------------
|
6 | #include <string.h>
|
7 | #include <avr\io.h>
|
8 | #include <avr\delay.h>
|
9 | //----------------------------------------------------------------------
|
10 | //----------------------------------------------------------------------
|
11 | void initPorts()
|
12 | {
|
13 | DDRB = 0xFF; // PORTB = Ausgang
|
14 | DDRD = 0x00; // PORTD = Eingang
|
15 | PORTD = 0x04; // PORTD = PULL-UP für den Taster
|
16 | }
|
17 | void initUART()
|
18 | {
|
19 | UBRRL = (F_CPU / BAUD - 16) / 16; //Baudberchnnung
|
20 | UCSRB = 0x08; //Transmitter Enable
|
21 | }
|
22 | //----------------------------------------------------------------------
|
23 | void putChar(char data)
|
24 | {
|
25 | while (!(UCSRA&32)); //warte bis UDR leer ist
|
26 | UDR = data; //senden
|
27 | }
|
28 | //----------------------------------------------------------------------
|
29 | void Senden(char buffer[])
|
30 | {
|
31 | for (int i=0 ; buffer[i] !=0 ; i++)
|
32 | putChar(buffer[i]);
|
33 | }
|
34 |
|
35 | //----------------------------------------------------------------------
|
36 | //----------------------------------------------------------------------
|
37 | main () //Main-Schleife
|
38 | {
|
39 | initPorts();
|
40 | initUART();
|
41 | int i = 48;
|
42 |
|
43 | text[0] = 'A';
|
44 | text[1] = ':';
|
45 | text[2] = i;
|
46 | text[3] = ' ';
|
47 | Senden(text);
|
48 |
|
49 | while(1)
|
50 | {
|
51 | text[0] = 'B';
|
52 | text[1] = ':';
|
53 | text[2] = i;
|
54 | text[3] = ' ';
|
55 | Senden(text);
|
56 | i++;
|
57 | }
|
58 |
|
59 | text[0] = 'C';
|
60 | text[1] = ':';
|
61 | text[2] = i;
|
62 | text[3] = ' ';
|
63 | Senden(text);
|
64 | }
|
Ergebnis über UART:
A:0 B:0 B:1 B:2 B:3 B:4 B:A:0 B:0 B:1 B:2 B:3 B:4 B:A:0 B:0 B:1 B:2 B:3
B:4 B:A:0 B:0 B:1 B:2 B:3 B:4 B:A:0 B:0 B:1 B:2 B:3 B:4 B:A:0 B:0 B:1
B:2 B:3 B:4 B:A:0 B:0 B:1 B:2 B:3 B:4 B:A:0 B:0 B:1 B:2 B:3 B:4 B:A:0
B:0 B:1 B:2 B:3 B:4 B: