Czesc
Zaczynam zabawe z programowaniem mikrokontrolerow. Na poczatek postanowilem pocwiczyc na uC Atmega8. Programuje go w AVR Studio 4.14 w jezyku C.
Oczywiscie na pierwszy ogien poszlo zapalanie diod. No i wszystko dziala do momentu kiedy umieszczam pętle w petli:
Ten prosty kod powoduje, ze zapala sie kolejna dioda. Funkcja "zmiana()" dziala ladnie, lecz tylko raz. a przeciez wywolywana jest 5 razy w petli for. Dlaczego tak sie dzieje?
To samo jest gdy umieszcam jaka kolwiek petle w petli. program wykonuje wszystko tylko w petli najbardziej zagniezdzonej, i przez wszystko przechodzi tylko raz.
Na poczatku mialem wszystko umieszczone pomiedzy while(1){} lecz prblem taki sam.
Zaczynam zabawe z programowaniem mikrokontrolerow. Na poczatek postanowilem pocwiczyc na uC Atmega8. Programuje go w AVR Studio 4.14 w jezyku C.
Oczywiscie na pierwszy ogien poszlo zapalanie diod. No i wszystko dziala do momentu kiedy umieszczam pętle w petli:
#include <util/delay.h>
#include <avr/io.h>
void zmiana(){
unsigned char i;
i=1;
do
{
PORTB = ~i;
_delay_ms(200);
i *=2; //mnozenie przez 2 zapala kolejne diody
}while(i<=128);
}
int main(void)
{
unsigned char j;
DDRB = 0xFF; // port B jako wyjścia
for(j=0;j<5;j++) //petla ktora nie dziala
zmiana(); // wykonuje sie tylko raz a wedlug mnie powinna 5 razy
return 0;
}
Ten prosty kod powoduje, ze zapala sie kolejna dioda. Funkcja "zmiana()" dziala ladnie, lecz tylko raz. a przeciez wywolywana jest 5 razy w petli for. Dlaczego tak sie dzieje?
To samo jest gdy umieszcam jaka kolwiek petle w petli. program wykonuje wszystko tylko w petli najbardziej zagniezdzonej, i przez wszystko przechodzi tylko raz.
Na poczatku mialem wszystko umieszczone pomiedzy while(1){} lecz prblem taki sam.