pues bien para los niños que se han portado bien los reyes magos nos han dejado un regalito.
la practica de un contador por interrupcion
bueno un regalo es un regalo
la cuenta es ascendiente aprox cada segundo (.98304 seg)
////////////////////////////////////////////////////////////////////////////////
/////////// practica 10 : contador por interrupcion //////////////////
////////// By Marco_recargado para foro.elhacker.net //////////////////
////////////////////////////////////////////////////////////////////////////////
#include <16F877.h> /// libreria para el manejo del pic16f877a
#use delay(clock=8000000) /// declara la frecuencia del cristal
#fuses HS,NOWDT,NOPUT,NOLVP,NOBROWNOUT,NOWRT,NOPROTECT,NODEBUG ///configura los fusibles
int contador=0; /// Variable que llevara la cuenta total
int delay=30;
#byte portb = 6
#int_TIMER0
void timer0()
{
delay--;
if(delay==0){contador++; delay=30;}
set_timer0(0);
}
////////////////////////////////////////////////////////////////////////////////
//////////////////////inicio del programa principal/////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main(void)
{
set_tris_b(0x00);
///la formula para saber cada cuando se ejecutara nuestra interrupcion con el timer0
/// es T=N*M*(4/FOSC) donde
/// T= tiempo
/// N= preescalador del timer o divisor
/// M= numero de iteracciones
/// asi por ejemplo con un preescalador de 256 un numero de iteraciones de 256 y un cristal de 8mhz
/// nos da un resultado de 32.7 milisegundos por interrupcion
setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_256 ); /// configura a timer0 con reloj
/// interno y un divisor de 256
enable_interrupts(GLOBAL); /// permitir interrupciones
enable_interrupts(INT_timer0); ///activar interrupcion en timer0
set_timer0(0);
while(true)
{
portb=contador;
}
} // fin de programa principal
y nuestra imagen
Saludos y feliz año nuevo