Skocz do zawartości
Gość

C Problem

Rekomendowane odpowiedzi

taki maply problem poczatkujacego:P

mam taka petle

 

for(led=10;led>0;led--) {	if(led>5)	{	led_on;	delayms(500);	led_off;	delayms(500);	}						else	{	led2_on;	delayms(500);	led2_off;	delayms(500);	}}

proste nie? petla odlicza od 10 i zapala ledy :P i teraz potrzebuje sie dowiedziec jak zapisac warunek petli if zeby wykonywal instrukcje gdy zmienna jest parzysta lub nieparzysta.

Edytowane przez Gość

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wykorzystujesz dzielenie modulo, które zwraca ci resztę z dzielenia.

if(liczba%2) to liczba jest nieparzysta bo zwrocona wartosc to 1

else parzysta

Proste nie? :D

a nie na odwrot ? :

if(liczba%2) i zwroci 0 to parzysta a jesli 1 nieparzysta :blink:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A ty programujesz jakiś obwód?

ano :P ucze sie programowac procesorek:>

 

a nie latwiej przerzutnik asynchroniczny tez beda migaly na zmiane, chociaz zalezy co tam grzebiesz

moze i latwiej :> ale musze sie pobawic troche IO atmegi8 :>

 

w kazdym razie pochwale sie troche i powiem ze do zbudowania programowalnego pjazdu gosienicowego brakuje mi tylko podwozia, dwoch przekladni i jednego silniczka z cdroma:> program i sterownik juz mam:P a do zbudowania autonomicznego pojazdu jeszcze troche wiedzy z zakresu programowania.

 

jak juz wszystko bedzie gotowe pokaze na form :>

Edytowane przez Gość

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ino w tej sytuacji zużywasz całą moc obliczeniową.. całe 16MHz czy ile on tam wyciska do bezproduktywnego stania w miejscu :) Zresztą jemu to i tak wszystko jedno co robi :)

 

for(led=0;led<10;++led){	led_on;	led2_off;	delayms(500);	led_off;	led2_on;	delayms(500);   }

 

to samo robi... (mruga na zmianę) bez modulo i bez warunków, bez rozgałęzień = wydajniej :) . Kompilator raczej nie zoptymalizuje kodu do takiej samej postaci z ifami i bez ifów... Zatem jak zależy Ci na bajtach które w mikrosterownikach kończą się dosyć szybko :D to trzeba by się nauczyć rozsądnie pisać kod. Z resztą sprawdź czy te 2 kody będą miały tyle samo bajtów po kompilacji

 

albo można jeszcze szybciej i krócej .. nie wiem tylko jaki jest operator negacji bitowej (założyłem iż "!")

led1=ON;led2=!led1;for(led=0;led<10;++led){	!led1;	!led2;	delayms(500);}
dzięki temu na zmianę będą Ci się zmieniać wartości pinów sterujacych diodami...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no tak jak w pierwszym przykladzie mialem na poczatku. :>

na czyms musze w koncu pocwiczyc petle:>

 

moj procek wyciska cale 8MHz ale puki co uzywam 1MHz :D

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

potem będzie OC AVRa :D z chłodzeniem wodnym :D Ciekawe na ile by poszedł :).. napisz mu superPi wersja pod AVR i będziesz mógł testować :D

 

z resztą co tu dużo ćwiczyć w pętlach? :) if(warunki początkowe;warunki stopu; akcja po skończeniu pętli) akcja else akcja2 :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...