Buenas tardes amigos del foro tengo poca experiencia con el uso de los timers e interrupciones de los micros
estoy cursando la parte final de mi carrera y como proyecto se me asigno elaborar con un pic y lenguaje basic
un reloj con un display lcd de 16 x 2 en el cual deben de aparecer 6 tableros mi problema es que no se como
puedo utilizar los timers para poder crear tres relojes pues necesito desplegar en 3 de los tableros cronometros
independiantes por el momento soslo he podido hacer uno con el uso del timer 1 les agradeceria mucho si me
pudieran ayudar les adjunto imagen de mi simulacion y mi programa
DEFINE LCD_DREG PORTD ' Indica que el Bus estará conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus será de cuatro bits.
DEFINE LCD_DBIT 4 ' Selección del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estará en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estará conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estará en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estará conectado en RD3
Define Osc 20 ' Define el Oscilador para un Cristal
' de 20 Mhz.
TRISB = $FF ' Configura el puerto B como entrada.
TRISD = %00000011 ' Configura el puerto D como salida.
TRISA = $00
'variables subrutina reloj
'total
hora Var Byte ' Declaración de la Variable "Dato" tipo Byte.
minu Var Byte
'mtto
hora_2 VAR BYTE
minu_2 var byte
'setup
minu_3 var byte
seg_1 var byte
'paro mtto
pm var byte
'paro set up
ps var byte
'paro mtto hora minuto
hora_3 var byte
minu_4 var byte
'paro setup minuto seg
minu_5 var byte
seg_2 var byte
tono var byte
'variables del timer TIEMPO TOTAL
Second var byte
Ticks var byte
'inicializacion de variables
'total
hora = 0
minu = 0
'mtto
hora_2 = 0
minu_2 = 0
'setup
minu_3 = 0
seg_1 = 0
'paro mtto
pm = 0
'paro setup
ps = 0
'paro hora minuto
hora_3 = 0
minu_4 = 0
'paro minuto seg
minu_5 = 0
seg_2 = 0
tono = 1
'variables de entrada
symbol luz_roja = PORTB.1
Symbol luz_verde = PORTB.2
symbol luz_blanca = PORTB.3
'Symbol start = PORTB.4
Symbol mtto = PORTB.4
Symbol setup = PORTB.5
Symbol R_eeprom = PORTB.6
Symbol cambio_turno = PORTB.7
clear
OPTION_REG = $57 'Configuracion del TMR0
On Interrupt Goto TickInterrupt
Lcdout $fe, 1 ' Limpia la pantalla
Inicio:
Lcdout $fe,2,dec2 hora,":",dec2 minu," ",dec hora_2,":",dec2 minu_2," ",dec2 minu_3,":",dec2 seg_1
'Lcdout
Lcdout $fe,$C0,Dec2 pm," ",dec2 ps," ",dec hora_3,":",dec2 minu_4," ",dec2 minu_5,":",dec2 seg_2
'contador luz roja contador tiempo total
if luz_roja = 1 then
TMR0 = 0
INTCON = $A0 'instruccion para iniciar el contador
endif
if luz_verde = 1 then
TMR0 = 0
INTCON = $80 'instruccion para detener el contador interno
endif
'llamado mtto
if mtto = 1 and luz_roja = 1 then
'INTCON = $80
call radio
CALL cont_pm
endif
'llamado setup
if SETUP = 1 and luz_roja = 1 then
'INTCON = $80
call cont_ps
endif
'escribir eeprom
if cambio_turno = 1 then
INTCON = $80
call guardar_ee
endif
'leer eeprom
if R_eeprom = 1 then
call leer_ee
endif
GoTo Inicio ' Salta a la etiqueta "Inicio".
disable
'**************************************************
'* SUBRRUTINAS *
'* *
'**************************************************
' RELOJ TIEMPO TOTAL '
TickInterrupt:
Ticks = Ticks + 1 ' Conteo de partes de segundo
If Ticks < 61 Then ExitInterrupt ' 61 ticks por segundo
Ticks = 0
Second = Second + 1
If Second >= 60 Then
Second = 0
Minu = Minu + 1
If Minu >= 60 Then
Minu = 0
hora = hora + 1
if hora >= 99 then
hora = 0
endif
endif
Endif
ExitInterrupt:
INTCON.2 = 0 ' Reseteo del timer de interrupcion
Resume
ENABLE
return
'SUBRRUTINA ESCRIBIR EEPROM
guardar_ee:
Disable
Write 0, HORA
Write 1, MINU
Write 2, HORA_2
Write 3, MINU_2
Write 4, mINU_3
Write 5, SEG_1
Write 6, pm
Write 7, ps
' Write 8, hora_3
' Write 9, minu_4
' Write 10, minu_5
' Write 11, seg_2
Enable
Return
'SUBRRUTINA LEER EEPROM
leer_ee:
Read 0, HORA
Read 1, MINU
Read 2, HORA_2
Read 3, MINU_2
Read 4, MINU_3
Read 5, SEG_1
Read 6, PM
Read 7, PS
' Read 8, HORA_3
' Read 9, MINU_4
' Read 10, MINU_5
' Read 11, SEG_2
Return
'subrrutinas contadores pm y ps
cont_pm:
pm = pm + 1
Pause 250
Return
cont_ps:
ps = ps + 1
pause 250
return
radio: 'subrrutina llamado mtto
'INTCON = $80
PORTA.1 = %000001
pause 500
PORTA.1 = %000000
pause 2500
PORTA.1 = %000001
pause 500
PORTA.1 = %000000
pause 2500
PORTA.1 = %000001
pause 500
PORTA.1 = %000000
return
End