Probleme beim Binär hoch bzw runter zählen

Gast #3492803
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
Gast #3492823
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
Gast #3492838
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 :)

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