Si desea una interrupción cada 1 segundo con un reloj de 8Mhz, probablemente la mejor manera es usar un Timer1 en modo CTC con un precaller apropiado y un valor TOP.
Al usar el preescalador clk / 1024, reduce la velocidad del contador a 8 KHz desde 8 MHz. Seleccionas este prescaller con estos bits ...
AlusarelmodoCTC,ledicesalcontadorquesereiniciecadavezquelleguealTOP.Acontinuación,puedeseleccionarelmodoCTCconestosbits...
Finalmente,necesitamosestablecerelvalorTOPparaquecoincidaen1Hz.EstaeslafórmulaparacalcularlafrecuenciageneradaenelmodoCTC...
...dondeNeselpreclasificador(1024ennuestrocaso)yFclk_I/OeselrelojIO(8Mhzennuestrocaso).Tengaencuentaqueestafórmulanosdalafrecuenciadeunaondacuadradaqueseemitirásielpincambiaencadacoincidencia,porloqueenrealidadqueremosduplicarelvalorparaobtenerlatasadecoincidencia.Parahaceresto,podemossimplementemultiplicarpor2(otacharlos2eneldenominador).
Despuésdeunpocodeálgebra,deberíamos(deberíamos)obtenerunvalorparaTOPde7999.Estotienesentidointuitivo,yaquesenecesitauncicloderelojparaqueelcontadorsereiniciedespuésdellegaratope,asíquesiempezamosenceroycontamoshasta7,999Reloj,necesitaremosunomásparavolveralpuntodepartida.
EnelmodoCTCqueseleccionamosanteriormente,TOPsemantieneenelregistroOCR1A,porloqueestablecemosesteregistroen7999.
Timer1ahoradispararáunpartidoa1Hz.
Finalmente,solonecesitamoshabilitarunarutinadeinterrupciónparaqueseejecuteencadacoincidencia.LainterrupciónescontroladaporelbitOCIE1A...
Una vez que configuramos este bit, se debe llamar a nuestro ISP a exactamente 1Hz (dependiendo de la precisión del reloj de 8Mhz desde el que se ejecuta el chip).