Forum: Mikrocontroller und Digitale Elektronik Probleme beim Binär hoch bzw runter zählen


von Newbie (Gast)


Lesenswert?

1
#include <avr/io.h>
2
#include <util/delay.h>
3
4
void ioinit(void);
5
6
// Hauptprogramm
7
int main(void) {
8
    unsigned char i;   
9
 int zaehler=1;
10
    ioinit();   
11
 
12
    // Endlosschleife
13
    while (1) {
14
      
15
      if(zaehler==0)
16
    {
17
      do {
18
        PORTC = i;
19
        i++;
20
        if(i ==254){zaehler=1;}
21
      }while(zaehler==1);
22
    }
23
    
24
      if(zaehler==1)
25
    {
26
      do 
27
      {i--;
28
        PORTC = i;
29
        
30
        if(i ==1){zaehler=0;}
31
      } 
32
      while(zaehler==0);
33
    }
34
    
35
    }   
36
 
37
    return 0;
38
}
39
 
40
// Initialisierung
41
void ioinit(void)
42
{
43
    DDRC = 0xff;    // PortD als Ausgang deklarieren
44
    PORTC = 0x00;   // Ports auf LOW schalten
45
    
46
}


Juten Abend, ich weis es ist bestimmt ganz simple, nur ich hänge schon 
seid 2 stunden dran :( ich möchte port c binär hoch und runter zählen, 
nur das automatische runter bzw hoch zählen klappt nicht, entweder er 
zählt standig nur hoch oder nur runter, jenachdem was ich ihm als 
startwert für den zaehler vorgebe

von Newbie (Gast)


Lesenswert?

ja die formatierung ist schrecklich ;)

von chris (Gast)


Lesenswert?

1
if(zaehler==0)
2
    {
3
      do {
4
        PORTC = i;
5
        i++;
6
        if(i ==254){zaehler=1;}
7
      }while(zaehler==1);
8
    }


wenn i == 254 setzt du zaehler auf 1, anschließend wird die Bedingung 
der do-while Schleife geprüft (zaehler==1), die dadurch 'true' ist.
--> Endlosschleife in der do-while
Schmeiß die do-while Schleifen mal raus, die brauchst du eigtl nicht.
Genauso kannst du dir i sparen und direkt PORTC hochzählen.


Probier mal ob dieser Code funktioniert:
1
while(1)
2
{
3
   if(zaehler==0)
4
    {
5
        if (PORTC < 255)
6
            PORTC++;
7
        else
8
            zaehler = 1;
9
    }
10
    
11
      if(zaehler==1)
12
    {
13
        if (PORTC > 0)
14
            PORTC--;
15
        else
16
            zaehler = 0;
17
    }
18
}



lg
Chris

von Frank (Gast)


Lesenswert?

[c]

while (1) {


      do {
         PORTC = i;
         i++;
         }while(i<254);



      do
      {
        i--;
        PORTC = i;

      }while(i>0);
    }

   }



[\c]

von Newbie (Gast)


Lesenswert?

das klappt wunderbar, sorry, ich habe bisher nur mit dem verfluchten 
arduino programmiert und versuche jetzt auf "normales" c umzuschwenken 
;) das der fehler so simple ist hätte ich echt nicht gedacht. vielen 
vielen dank :)

von Frank (Gast)


Lesenswert?

das darf aber mit dem arduino auch nicht geklappt haben...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.