Buenas tardes
Estoy haciendo un controlador y quiero establecer el tiempo de muestreo con el TMR1. Sin embargo, el período de muestreo no es uniforme.
El código de prueba es el siguiente:
#include<16f887.h>
#use delay (clock = 8MHz)
#fuses INTRC_IO, NOWDT, NOBROWNOUT, NOLVP, NODEBUG
#use fast_io(c)
#bit TMR1ON=0x10.0 //Identificador para el bit TMR1ON del T1CON
#bit TMR1E = 0x8c.0
int1 b_10ms = 1;
void main()
{
set_tris_c(0x77); // 11110111
setup_adc_ports( NO_ANALOGS );
setup_oscillator(OSC_8MHZ);
delay_ms(1000);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
output_low(PIN_B1);
setup_timer_0(T0_INTERNAL | T0_DIV_32);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
set_timer1(45534);//
for(;

{
output_bit(PIN_C7, b_10ms); // Visualizo b_10ms en PIN_C7
while(!b_10ms){};
output_bit(PIN_C7, b_10ms);
b_10ms = 0;
}
}
#int_timer1 // rutina de interrupción por desborde de TMR1
void clock_isr()
{
TMR1E = 0;
TMR1ON = 0;
b_10ms = 1;
set_timer1(45534);
TMR1ON = 1;
TMR1E = 1;
}
Supuestamente debo obtener pulsos cada 10 ms pero esto no sucede, el período es aleatorio.
Espero sus comentarios