Rotierende Led mit C-Code funktioniert nicht

Gast #2936925
Lesenswert?

Hallo,

wir haben in Informatik gemeinsam einen C-Code erstellt der eine Led an 
einem At89S52 rotieren lassen soll. Aber irgendwie leuchtet die ganze 
Zeit nur eine Led auf. Daher wollte ich fragen was denn am folgenden 
C-Code falsch ist.
1
at 0x80 sfr leds;
2

3
void warten(void)
4
{
5
    unsigned int x;
6
    
7
    for(x=0;x<65000;x++)
8
    {
9
    }
10

11
}
12

13
void main(void)
14
{
15
    char x;
16
    leds=0b00000001;
17
    
18
    while(1)
19
    {
20
        for(x=0;x<7;x++)
21
        {
22
            leds<<1;
23
            
24
            warten();
25
         
26
        }
27
        
28
        while(x>0)
29
        {
30
            leds>>1;
31
        
32
            warten();
33
        
34
            x=x-1;
35
        }
36
    }
37
    
38
}

Es wäre sehr nett wenn ihr mir helfen könntet.
Gast #2936961
Lesenswert?

also die Hausaufgabe steht jetzt nirgendswo, wir haben das im unterricht 
besprochen und einen porgrammablaufplan mit papdesigner erstellt. ich 
verstehe jetzt aber nicht ganz, abgesehen davon : was ist eine analogie 
?
Gast #2937008
Lesenswert?

Yassin Falko schrieb:
> also soll ich das einfach weglassen ?
>
>
>
>     Beitrag melden Bearbeiten Löschen

Weiter oben benutzt Du ja x++, also hier wäre x-- sinnvoll.
Nur solange die Aufgabe nicht wirklich ersichtlich ist kann ich nihct 
weiterhelfen.
Sind mehrere LEDs an einem Port und die sollen reihum an und wieder 
ausgeschaltet werden ?
Oder soll eine LED einfach blinken ?
Gast #2937203
Lesenswert?

Was die arroganten Vorposter sagen wollen, du musst entweder
1
leds>>=1;

(und das Entsprechende mit <<=)

verwenden ODER du schreibst
1
leds=leds>>1;

>> verschiebt nur die Bits, aber speichert das Ergebnis nirgendwo! x-1 rechnet nur 
die Subtraktion, aber speichert das Ergebnis nirgendwo, wenn nicht x= davor steht. 
>>= ist eine Kurzform (siehe oben). Genau wie -=
Ein Zeichen, große Wirkung. Nun klar? ;)
#2937339
Lesenswert?

@arrogant

Der werfe den ersten Stein, sage ich da nur...

Lies deinen eigenen Beitrag mal durch, dann wirst du vielleicht merken 
dass man davon nichts lernen kann. Du verwendest kein einziges 
brauchbares Wort, das einem Anfänger als Gedächtnisstütze dienen könnte. 
Deine Erklärung ist eher Kategorie "gestammelte Werke" und kaum lesbar, 
weil du anscheinend die Kommentarfunktion nicht kapierst. Also kehr erst 
mal vor deiner eigenen Tür bevor du hier Verweise verteilst.
#2937506
Lesenswert?

In C ist ein Ausdruck zulässig auch ohne das Ergebnis zuzuweisen.
Z.B.:
1
  SBUF;
Liest das Register SBUF ein, bewirkt damit das Leeren des UART-Puffers, 
ist also ein sinnvoller Ausdruck.

Aber eine Berechnung, wo man das Ergebnis wegschmeißt, ist in der Regel 
ohne Effekt. Und genau das hast Du gemacht. Und daher auch gesehen, daß 
es keinen Effekt hat.

Desweitern kann das Ändern eines Ports Nebenwirkungen haben, da man die 
tatsächlichen Spannungspegel von außen einliest. Z.B. das Abschalten des 
Pullups bei einem Pin mit gedrückter Taste.
Besser ist daher eine Variable zu nehmen, die man ändert und ausgibt.


Peter
#2937527
Lesenswert?

Yassin muss immer noch erklären wie er EINE Led nur mit Software in 
verschiedene Richtungen (rundherum) blinken lassen will

Yassin Falko schrieb:
> der eine Led an einem At89S52 rotieren lassen soll.

Yassin Falko schrieb:
> einmal rund herum blinken

Wie soll man jemandem helfen, der noch nicht mal sein Aufbau auch nur 
rudimentär beschreibt. Auch wenn es sich die meisten inzwischen in etwa 
denken können.

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