Witam Kolegów.
Mam mały problem. W zasadzie mój problem polega na tym, że działa coś co moim zdaniem nie powinno działać. Napisałem prosty kod na obsługę timera w ATmega 32. Prpgramik ma generować na 1-szym pinie PORTA sygnał o określonej częstotliwośći. Kod jest następujący:
W tej konfiguracji częstotliwość wewnętrzna zegara uC wynosi 1 MHz. Preskaler dzieli częstotliwość przez 1024. Chodzi o to, że licznik Timer0 zlicza do 255, po czym ustawia się flaga TOV0. Ustawienie flagi TOV0 ma skutkować zanegowaniem stanu na wyjściu P0 PORTA.
Paradoks polega na tym, że ten program to realizuje a według mnie nie powinien. Pewnie okaże się, że powinien ale ja juz nie mam siły
Bo wartość P0 podlega negacji po przepełnieniu się licznika, a zgodnie z kodem
dopóki wartość TOV0 jest równa zero --> neguj wyjście P0 portu PORTA.
Dodam, że napisałem to metodą prób i błędów , dlatego nie wiem czemu to działa
Proszę o wyjaśnienie
Dziękuję
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
Mam mały problem. W zasadzie mój problem polega na tym, że działa coś co moim zdaniem nie powinno działać. Napisałem prosty kod na obsługę timera w ATmega 32. Prpgramik ma generować na 1-szym pinie PORTA sygnał o określonej częstotliwośći. Kod jest następujący:
#include <avr/io.h>
main()
{
DDRA=255; //ustawienie PORTA jako wyjścia
CCR0=0b00000101; //ustawienie preskalera na 1/1024
PORTA=0;
while(1)
{
while (bit_is_clear(TIFR,TOV0));//dopóki flaga TOV0 jest wyzerowana
PORTA^=1; //zanegowanie 1-szego wyjścia PORTA
TIFR=1<<TOV0; //wyzerowanie flagi przepełnienia (TOV0)
}
}W tej konfiguracji częstotliwość wewnętrzna zegara uC wynosi 1 MHz. Preskaler dzieli częstotliwość przez 1024. Chodzi o to, że licznik Timer0 zlicza do 255, po czym ustawia się flaga TOV0. Ustawienie flagi TOV0 ma skutkować zanegowaniem stanu na wyjściu P0 PORTA.
Paradoks polega na tym, że ten program to realizuje a według mnie nie powinien. Pewnie okaże się, że powinien ale ja juz nie mam siły
Bo wartość P0 podlega negacji po przepełnieniu się licznika, a zgodnie z kodem
while (bit_is_clear(TIFR,TOV0));
PORTA^=1; dopóki wartość TOV0 jest równa zero --> neguj wyjście P0 portu PORTA.
Dodam, że napisałem to metodą prób i błędów , dlatego nie wiem czemu to działa
Proszę o wyjaśnienie
Dziękuję
Proszę umieszczać listingi programów w znacznikach "Code". [c_p]