hola, estoy teniendo algunos problemas con el temporizador, así que me he dispuesto a crear un programa sencillo que lo unico que hace es incrementar una variable cada segundo y mostrarla por pantalla, para comprobar si contaba bien, pero resulta me cuenta muuucho mas rapido, casi no da tiempo a ver cada valor..
aqui dejo el codigo:
Simplemente cargo el timer con el valor 6 y un preescaler de 16, lo que me genera una interrupción cada 4 ms, creo la variable contador y la cargo a 250, cada vez que la variable contador vale 0, muestro el valor seg por pantalla.. Tengo algún error pero no se si es porque estoy bloqueado o lo desconozco pero no lo encuentro..
aqui dejo el codigo:
Simplemente cargo el timer con el valor 6 y un preescaler de 16, lo que me genera una interrupción cada 4 ms, creo la variable contador y la cargo a 250, cada vez que la variable contador vale 0, muestro el valor seg por pantalla.. Tengo algún error pero no se si es porque estoy bloqueado o lo desconozco pero no lo encuentro..
Código:
#include "18F4450.h"
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP
#use delay (clock=4000000) //Fosc=4Mhz
#define LCD_DB4 PIN_D0
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_D2
#define LCD_DB7 PIN_D3
#define LCD_E PIN_A1
#define LCD_RS PIN_A3
#define LCD_RW PIN_A2
#include <flex_lcd.c> // libreria del LCD.
int contador=250;
int seg=0;
#int_TIMER0
void periodo(void)
{
set_timer0(6);
contador--;
}
void main (void)
{
set_tris_a(0x01);
set_tris_b(0x0);
set_tris_d(0x0);
lcd_init(); //inicializa lcd
lcd_gotoxy(1,1);
lcd_putc("inicializando");
lcd_putc("\f");
delay_ms(1000);
SETUP_TIMER_0(RTCC_INTERNAL | RTCC_DIV_16);
SETUP_TIMER_0(RTCC_8_BIT);
SET_TIMER0(6);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
while (TRUE) {
if (contador==0)
{
contador=250;
seg++;
lcd_gotoxy(1,1);
lcd_putc("seg");
lcd_gotoxy(2,2);
printf(lcd_putc," %i",seg);
}
}
}
Última edición: