Dimensionamento per la gestione di Timer0
TMR0 valore iniziale del contatore
4/fosc durata del ciclo di clock
PR prescaler; divisore della frequenza di clock
PSWpostscaler sw da implementare possibilmente nel main, ma anche all'interno della funzione di interrupt se non ci sono esigenze stringenti di precisione. Infatti, poichè durante l'esecuzione della funzione di interrupt il timer è bloccato, è opportuno limitare la sua durata e quindi il numero di istruzioni.
T=(256-TMR0)*4/fosc*PR*PSW
TMR0 < 255; conviene non troppo elevato per evitare un continuo ingresso in interrupt
PR compreso tra 1 e 256; conviene elevato per evitare un continuo ingresso in interrupt
Se con TMR0=0 e PR=256 si ottiene un valore maggiore di quello desiderato,
quindi se T< 256*4/fosc*256, non è necessario il postscaler sw.
//////////////////////////////////////////////////////////////////////////////////////////////////////////
ES. Dimensionare per T=10s con fosc=12MHz
Risulta 256*4/fosc*256=21,8453ms
E' necessario il PSW
Pongo PR=256 e TMR0=0; devo ottenere un valore maggiore di 10s; aumentando TMR0 si può scendere ai 10s desiderati.
Pongo 256*4/fosc*256*PSW=10
PSW=10/( 256*4/fosc*256)=457,76 che rappresenta il valore minimo
Pongo 256*4/fosc*256*PSW=11
PSW=11/( 256*4/fosc*256)=503,54
Scelgo PSW=503 e ricavo TMR0
T=(256-TMR0)*4/fosc*PR*PSW
10=(256-TMR0)*4/12MHz*256*503
(256-TMR0)=10*12MHz/4/256/503
TMR0=256-10*12MHz/4/256/503=23,022 ok