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
Stichworte Invertierung und low aktive LEDs. Siehe auch Bitmanipulation
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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
;-) 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
Gast
#1178649
> PORTB = (PORTB<<1)|(PORTB>>7);
Das ist ziemlich clever ;-)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.