buenos dias soy novato con la programacion en Basic y en el utlimo perio de de mi carrera me asignaron un proyecto usando este lenguaje y algunos registros del los micros que no habia usando antes el proyecto conciste en elaborar un cronometro usando los timers internos del pic el cronometro se visualiza por medio de un display lcd de 16 x2 el cual ocupo en su totalidad ya que en este se necesitan marcar diferentes tiempos (tres cronometros) mi problema es que como no se manejar en su totalidad los timers no se como pausar o interrumpir un cronometro para iniciar otro les agradeceria infinitamente su ayuda
les anexo el programa que tengo hasta el momento y una imagen de la simulacion en proteus estoy programando en pic basic pro.
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