quindi in sostanza:
ho un piedino definito come ingresso il modulo Compare1 , il quale mi fa scattare un'interrupt appena cambia di stato , contemporaneamente al cambio di stato il contenuto di un timer viene copiato in un registro a 16bit per cui leggendo questo registro si può sapere quanto tempo è passato dalla lettura precedente.
Se è necessario avere più precisione occorre lasciare correre liberamente il timer e poi sottrarre dalla memorizzazione precedente, quindi a via di sottrazioni non abbiamo bisogno di azzerare il timer1
correggimi se sbaglio.. ..aggiungo mi fa piacere comunicare con te, per la pazienza e per la competenza quando per il piacere di confrontarsi... ..e soprattutto per giudizi inutili sulla incompetenza altrui!
Citazione:
Originalmente inviato da faustog_2 ho avuto 5 minuti son andato a spulciare sul datasheet, ecco il risultato :
il Counter sarebbe il registro TCNT1H and TCNT1L Timer/Counter1, registro a 16 bit , infatti arriva oltre i 65.000 ovvero 2 elevato a 15.
a pagina 139 presenta il registro TIFR1:
TIFR1 Timer/Counter1 Interrupt Flag Register http://www.atmel.com/Images/doc8161.pdf
Quindi è il registro degli interrupt del timer.. se leggiamo il bit 5 dice:
the ICF1 Flag is set when the counter reaches the TOP value.
quindi ICF1 è il bit 5 del registro TIFR1 ... e quando cambia di stato? quando il timer raggiunge fondo scala.. in pratica volendo fare un paragone con i Pic
BTFSS INTCON,T0IF
GOTO $-1 ;attende overflow timer
BCF INTCON,T0IF ;resetta bit overflow.
in questo caso INTCON è il registro degli interrupt del TMR0, quindi il bit T0IF di posto non ricordo! sarà 1 se arriva a fondo.. ovviamente tutto dipende da quale punto parte TMR0 e il prescaler impostato.
Mikia ma dico, non c'è un modo più semplice per intervistare un bit? che occorre fare una operazione così complessa?
if (TIFR1 & (1<<ICF1))
RIMPIANGO L'ASSEMBLER DEI PIC ! SEMPLICE E POTENTE!
a dopo
fausto |