Hola a todos,
Estoy intentando ver cómo cuenta el temporizador TMR0 del PIC12f675. Para ello, incremento una variable y saco algunos de sus bits por la E/S.
Curiosamente, pinchando las salidas del osciloscopio sólo en GP5 encuentro una señal cuadrada y de la frecuencia esperada. Las demás, GP4, GP2, GP1 y GP0 permanecen a 0 y pegan un impulso muy rápido a 1 de forma periódica (de corta duración, algunos µs). Diría que ese impulso salta a la frecuencia correcta, pero al ser demasiado rápido no lo he conseguido medir.
Creo que algo está pisando esos bits bajándolos a 0 tan pronto termina la interrupción pero ando completamente perdido
. ¿ Alguien tiene alguna sugerencia? El PIC no está dañado porque he programado uno nuevo y hace lo mismo.
Este es el código:
	
	
	
		
¡¡ Gracias!!
				
			Estoy intentando ver cómo cuenta el temporizador TMR0 del PIC12f675. Para ello, incremento una variable y saco algunos de sus bits por la E/S.
Curiosamente, pinchando las salidas del osciloscopio sólo en GP5 encuentro una señal cuadrada y de la frecuencia esperada. Las demás, GP4, GP2, GP1 y GP0 permanecen a 0 y pegan un impulso muy rápido a 1 de forma periódica (de corta duración, algunos µs). Diría que ese impulso salta a la frecuencia correcta, pero al ser demasiado rápido no lo he conseguido medir.
Creo que algo está pisando esos bits bajándolos a 0 tan pronto termina la interrupción pero ando completamente perdido
Este es el código:
		PHP:
	
	#include <htc.h>
        volatile unsigned char cuenta = 0;
void interrupt  interr ()
{
if ( T0IF )
        {
        T0IF = 0;
        cuenta++;
        GP0 = cuenta >> 1;
        GP1 = cuenta >> 2;
        GP2 = cuenta >> 3;
        GP4 = cuenta >> 4;
        GP5 = cuenta >> 5;
        }
}
main ()
{
// salidas: 0 (GP0, GP1, GP2, GP4, GP5)
// entrada: 1 (GP3)
TRISIO = 0b001000;
// salidas inicializadas
GP0 = 0;
GP1 = 0;
GP2 = 0;
GP4 = 0;
GP5 = 0;
// configuración de TMR0 con:
// T0CS:   0 (reloj interno de cuenta)
// PSA:    0 (prescalado asignado a TMR0)
// PS:   111 (prescalado de 256)
OPTION_REG = 0b00111;
// habilitar interrupción de TMR0 y global
T0IE = 1;
GIE = 1;
while ( 1 )
        _nop ();
}
	¡¡ Gracias!!