timer 16 bit w AVR
Masz problem? Zapytaj na forum elektroda.pl
From: "Stroczek" <t.cybulko_at_nospam_bsk.vectranet.pl>
Subject: timer 16 bit w AVR
Date: Sun, 19 Jun 2005 22:03:04 +0200
Witam
Chciałbym dowiedzieć się czy przy ustawianiu licznika 16bit w AVR
koniecznie muszą być zablokowane przerwania na czas tych ustawień, czy też
można wpisywać do rejestrów przy włączonych przerwaniach.
Czy przedsatwiona poniżej procedura jest prawidłowa? Za wszelkie info
dziękuje i pozdrawiam.
//------------ Obsługa przerwania
SIGNAL(SIG_OVERFLOW1)
{ TCNT1H=1; //odswież stałą czasową
TCNT1L=0;
PORTB^=1<<PB6;
}
//------------Program główny
sei();
.......... //treść programu
cli(); //czy blokowanie przerwań jest konieczne
TCNT1H=1;
TCNT1L=0;
TCCR1B=0x5; //preskaler
sbi(TIMSK,TOIE1); //zgoda na przerwanie
sei();
From: max <max441_at_nospam_wp.pl>
Subject: Re: timer 16 bit w AVR
Date: Mon, 20 Jun 2005 10:05:44 +0200
Witam.
Przerwania nie muszą być blokowane.
Podczas wykonywania procedury obsługi przerwania, wszystkie przerwania
są automatycznie blokowane przez wyzerowanie globalnej flagi przerwań I.
Zamiast wpisywać kolejno wartości do rejestrów TCNT1H i TCNT1L, można to
zrobić tak: TCNT1=0x0100;, efekt będzie taki sam.
Stroczek napisał(a):
Witam
Chciałbym dowiedzieć się czy przy ustawianiu licznika 16bit w AVR
koniecznie muszą być zablokowane przerwania na czas tych ustawień, czy też
można wpisywać do rejestrów przy włączonych przerwaniach.
Czy przedsatwiona poniżej procedura jest prawidłowa? Za wszelkie info
dziękuje i pozdrawiam.
//------------ Obsługa przerwania
SIGNAL(SIG_OVERFLOW1)
{ TCNT1H=1; //odswież stałą czasową
TCNT1L=0;
PORTB^=1<<PB6;
}
//------------Program główny
sei();
.......... //treść programu
cli(); //czy blokowanie przerwań jest konieczne
TCNT1H=1;
TCNT1L=0;
TCCR1B=0x5; //preskaler
sbi(TIMSK,TOIE1); //zgoda na przerwanie
sei();