Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

26/09/2013 #1


¿ Cómo hacer para que el desborde del timer0 sea cada 10ms ?
Buenas, encontré un programa el cual hace un desborde del timer0 cada 8ms.
Para mi propósito lo necesito que se desborde cada 10ms.
Agradecería que me ayudaran a lograr mi objetivo explicándome como lo puedo hacer.

Aquí el programa:
Código:
#include <16F877A.h>
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT
#use delay(clock=2000000)
int1 flanco=1;
int dly=0;
#int_EXT
void EXT_isr(void)
{
output_a(0b00000000);
if (flanco==1)
{
ext_int_edge(h_to_l);
set_timer0(255-dly);
while(get_timer0()==0); //espera hasta que timer0 se desborde
flanco=0;
output_a(0b00001111);
}
else
{
set_timer0(255-dly);
while(get_timer0()==0); //espera hasta que timer0 se desborde
ext_int_edge(l_to_h);
flanco=1;
output_a(0b00001111);
}
}
void main()
{
set_tris_a(0x00);
set_tris_b(0xff);
enable_interrupts(global);
enable_interrupts(int_ext | l_to_h);
setup_timer_0(rtcc_internal | rtcc_div_128 | rtcc_8_bit);
}
27/09/2013 #2
Moderador

Avatar de D@rkbytes

panchoreyes dijo: Ver Mensaje
Buenas, encontré un programa el cual hace un desborde del timer0 cada 8ms.
Para mi propósito lo necesito que se desborde cada 10ms.
Agradecería que me ayudaran a lograr mi objetivo explicándome como lo puedo hacer.
Por aquí se explica como hacerlo: Como hacer una temporización con el registro TMR0
El ejemplo está en lenguaje ensamblador pero la explicación es comprensible.

Si llevamos ese código a C, quedaría de esta forma:
Código:
#include <16f877a.h>
#fuses   xt,nobrownout
//Usar cristal de 4MHz

#int_timer0
void int_tmr0(void){
   // Código durante interrupción
   output_toggle(pin_b7);  // Cambiar de estado RB7 cada 10Ms.
   set_timer0(0xD8); // Recargar el TMR0 con 216
}

void main(void){
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);   // Configuración
   enable_interrupts(INT_TIMER0|GLOBAL);  // Habilitar interrupciones
   output_low(pin_b7); // RB7 en 0 al iniciar
   set_timer0(0xD8); // Cargar el TMR0 con 216
   
   while(true);   // Bucle infinito
}
Nota que no usé #use delay() porque se asume que la frecuencia del oscilador será de 4MHz.
Ya en tu programa puedes agregarlo si vas a usar retardos.

Suerte.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.