Befehl einmalig ausführen (myAVR Board Atmega8 Atmel Studio 6.2)

#3666070
Lesenswert?

Hallo zusammen,

ich scheine in diesem Gebiet doch etwas mehr eingerostet zu sein als ich 
dachte...

Ich hätte gerne, dass mein Bord mir kurz nach dem einschalten einen Port 
schaltet.
Dies soll jedoch nur nach dem einschalten passieren. Mein erster Gedanke 
war:
1
#ifndef F_CPU
2
#define F_CPU 3686400UL  
3
#endif
4

5
#include <avr/io.h>
6
#include <util/delay.h>
7

8

9
int main(void)
10
{
11
 DDRC = 0b00000000;
12
 DDRB = 0b00100111;
13
 DDRD = 0b10000000;
14
 PORTC = 0b00111100;
15
 _delay_ms(2000);
16
 PORTB = 0b00100000;
17
 _delay_ms(1000);
18
  
19
    while(1)
20
    {
21
    if(bit_is_clear(PINC,2))
22
    {
23
      PORTB = 0b00000100;
24
    }
25
    PORTB = 0b00000000;
26
    if(bit_is_clear(PINC,3))
27
    {
28
      PORTB = 0b00000010;
29
    }
30
    PORTB = 0b00000000;
31
    if(bit_is_clear(PINC,4))
32
    {
33
      PORTB = 0b00000001;
34
    }
35
    PORTB = 0b00000000;
36
    if(bit_is_clear(PINC,5))
37
    {
38
      PORTD = 0b10000000;
39
    }
40
    PORTD = 0b00000000;
41
    }
42
}
Jedoch schaltet er den Port immer wieder. Sollte das Programm nicht in 
der while(1) Schleife laufen und auf die Schalter warten?
Was hab ich da falsch gemacht?
Gast #3666104
Lesenswert?

Wenn Du Deinen Port vor der Endlosschleife setzt, so wird diese Aktion 
auch nur einmal ausgeführt.
Wer sagt denn, dass Du während der Initialisierung, mit den Ports nicht 
machen darfst, was Du willst – genauso wie auch später.
Der einzige Unterschied ist doch der, dass der eine Teil nur einmal 
durchlaufen wird, der andere zyklisch.
Schau Dir doch mal die an geschätzt 1000 Stellen referierte 
Grundstruktur eines µP-Programmes an.
Gast #3666146
Lesenswert?

> Ich hatte keine 5V an dem Reset-Pin vom Atmega8.

Das sollte auch nicht nötig sein.

> Spannung angelegt und alles läuft wie es soll.

Damit hast Du vermutlich die Symptome behoben, aber nicht die Ursache, 
und das möglicherweise sogar nur vorübergehend.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren