¿Cómo inicializar TMR0 del microcontrolador pic16f877? ¿Cómo cronometrar 1 segundo usando TMRO?
Foro:
Autor:hnrain?
Fecha:2010-12-28?
Correo electrónico:hnrain1004@gmail.com?
********************* *** *******?
Cuando TMR0 se utiliza como temporizador, el reloj del temporizador = reloj del sistema/4;?
Escribir en TMR0 producirá un retraso de 2 ciclos. Si no se utiliza el preescalador, ¿se puede configurar?
¿El valor inicial se puede configurar mediante
p> Por ejemplo,?Cuando se requieren 200 ciclos de reloj, TMR0=?256?-200?+?2=?58OPTION_REG:
bit5?T0CS:TMR0?Clock ?Source? Select?bit
1?=?T0CKI?PIN
0=Reloj de ciclo de instrucción interno (CLKO)
Bit 4T0SE:TMR0: Borde de fuente bit de selección
1=El incremento cuando el pin T0CKI pasa de nivel alto a nivel bajo
0=El incremento cuando el pin T0CKI pasa de nivel bajo a nivel alto
1=Incremento en la transición de bajo a alto en el pin T0CKI
Bit 3PSA: ¿bit de asignación del preescalador
1? =? ¿Prescaler asignado a WDT
0? =? ¿Prescaler asignado al módulo del temporizador 0
bit2-0? Seleccione "Bit"
Recomendación: si desea utilizar TMR0 para una sincronización precisa, no escriba ninguna escritura en TMR0 después de usar el preescalador.
Nota: Al consultar la interrupción TMR0 en la rutina del servicio de interrupción, consulte el bit T0IE y el bit T0IF al mismo tiempo.
************************/?
#include? #include?/head/config.h" __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);? //Oscilación HS, desactivar el mecanismo de vigilancia, desactivar la programación de bajo voltaje, retardo de inicio temporizador uint16?count?=?0;? void.main(void)? {? PSA?= ?1;//prescaler asignado a WDT T0CS?=?0;//?Reloj de período interno GIE=?1;//Habilitación de interrupción global T0IE=?1;//Activación de interrupción TMR0 PORTD=? TRISD?=?0x00; while(1 )? {}? } ¿nulo? {? si(T0IE?&& ?T0IF)? {? T0IF? cuenta++;? si(cuenta?==?1000)? {? count?=?0;? PORTD?=?~PORTD;? }? TMR0? =?TMR0?+?58;? }? }.