Hola a todos. Quiciera solicitar ayuda con un conteo de pulsos externos con el TMR1 de un pic 16f628, estoy intentando hacer un frecuencímetro. Hasta ahora he logrado poner a trabajar el TMR0 generando interrupción cada 1 segundo y mostrandolo en un LCD; ahora lo que no sé es como y donde colocar el valor contado por el TMR1 para luego ser mostrado por el LCD este es mi programa. Mil gracias a todos los que puedan colaborarme.
cmcon = 7
frec var word
frec1 var word
frec2 var word
cuenta var byte
actual var byte
;var byte
;var bit
;var byte
TRISB = %00000001
trisa = %00000000
DEFINE LCD_BITS 4 'estas lineas pertenecen al manejo del LCD
DEFINE LCD_LINES 2 'son propias de él
DEFINE LCD_DREG PORTA '
DEFINE LCD_DBIT 0 '
define LCD_RSREG PORTB '
DEFINE LCD_RSBIT 1 '
DEFINE LCD_EREG PORTB '
DEFINE LCD_EBIT 2 '
PAUSE 10
frec = 0
frec1 = 0
cuenta = 0
actual = 1
ini:
option_reg = %1010110 ; prescaler de 1:128 lo que quiere decir que desborda TMR0 128 ;VECES y genera
; 1 interrupción
intcon = %10100000 ; solo permiso global de interrupciones e interrrupción del TMR0
t1con = %00000111 ;para habilitar el conteo de tmr1
on interrupt goto interrup
;*************** para mostrar por LCD ****************
actualiza:
if actual = 1 then
lcdout $fe,1
lcdout $fe,1," LA FRECUENCIA ES"
lcdout $fe,$c2,dec2 frec, "Hz"
actual = 0 ; bandera de actualización
endif
goto ini
;*****aquí se lleva a cabo la interrupción*******
interrup:
disable
cuenta = cuenta +1 ;incrementa en 1 cada vez que el TMR0 se ha desbordado 128 ;veces
tmr0 = 4 ;no inicia el TMRO desde cero sino en 4 hasta 256
if cuenta <31 then reset ;como el preescaler fue de 128, entonces 128 * 252(256-4 ;252) =32256ms
cuenta = 0 ; multiplicado por 31 , se acerca a 1segundo
frec = frec+1
actual = 1 ;actualiza el LCD
reset:
INTCON.2 =0 ; para borrar el señalizador de desbordamiento del tmr0 para otro desborde nuevo
resume
end