erweiterte Frage zu Led lauflicht

OP #1178283
hallo, bin auch so langsam in das thema mikrocontroller eingestien. bin 
auch schon fleißig am programmieren üben und hab da mal folgende frage. 
habe bereits ein led lauflichtprogramm in c geschrieben für einen 
atmega32
jedoch leuchten bei diesem alle leds nur 1 geht dann jeweils aus was das 
lauflicht dann auch ausmacht ;-) aber jetzt möchte ich das immer nur 1 
led anist und hin und herläuft kann mir da jm helfen????
hier der jetzige code


#include <avr/io.h>
#include <util/delay.h>

void wait(void)
{
   unsigned int i;
   _delay_ms(50);
}

void main(void)
{
   DDRB=0xFF;

   PORTB = 1;

   while(1)
   {
     PORTB = (PORTB<<1)|(PORTB>>7);
     wait();
   }
}

schon mal im voruas danke
mal Hand aufs Herz.
Hast du wirklich verstanden, wie das hier

>     PORTB = (PORTB<<1)|(PORTB>>7);

tatsächlich funktioniert?
(Wenn ja, dann Hut ab. Ich hab 3 mal hinschauen müssen um zu sehen was 
da abgeht. Und ich programmiere seit 20 Jahren)

Ansonsten: Schmeiss das raus und mach dein Lauflicht konventionell:
Du hast im Programm eine Variable, die du nach Herzenslust manipulieren 
kannst. Und erst dann, wenn der neue Inhalt deiner uint8_t Variablen 
feststeht, gibst du das auf den Port raus. Dabei kannst du dann mittels 
~ ganz einfach alle Bits bei der Ausgabe umdrehen, da bei dir eine LED 
anscheinend dann leuchtet, wenn das entsprechende Bit eine 0 aufweist.
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
void wait(void)
5
{
6
   unsigned int i;
7
   _delay_ms(50);
8
}
9

10
void main(void)
11
{
12
   uint8_t Licht;
13

14
   DDRB=0xFF;
15

16
   Licht = 1;
17

18
   while(1)
19
   {
20
     PORTB = ~Licht;      // Bei der Ausgabe alle Bits umdrehen
21

22
     Licht = Licht << 1;  // um 1 Stelle nach links verschieben
23
     if( Licht == 0 )     // wenn alle Bits durch, wieder von vorne anfangen
24
       Licht = 1;
25

26
     wait();
27
   }
28
}
OP
;-) also das mit dem    PORTB = (PORTB<<1)|(PORTB>>7);
hab ich aus meinem Buch, wo einführung in c beschrieben wird ;-) also 
deswegen ich hab das mal einfach so übernommen und es funzt auch also 
was will man mehr trotzdem danke ich werd sofort ausprobieren danke

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.