Estaba con la idea de simular en proteus un reloj digital con un display lcd y programado desde pic basic pro. Buscando en la web encontre el que les adjunto, el tema es que el codigo ejecuta un monton de IF/ENDIF y luego de todo esto hace una pausa de 1000 milisegundos (1 segundo) antes de volver a ejecutar el bucle principal nuevamente.
Mi duda es: es esta la forma correcta de hacerlo? No se produce retraso por la demora que se tiene en ejecutar todo el bucle principal? Porque me imagino que ademas del segundo de espera se debe ir sumando el tiempo que tarda en recorrer todo el bucle y se debe juntar mucho error.
En caso de que no sea la forma correcta necesitaria que me orienten sobre como manejar el tiempo minimizando el error.
Mi duda es: es esta la forma correcta de hacerlo? No se produce retraso por la demora que se tiene en ejecutar todo el bucle principal? Porque me imagino que ademas del segundo de espera se debe ir sumando el tiempo que tarda en recorrer todo el bucle y se debe juntar mucho error.
En caso de que no sea la forma correcta necesitaria que me orienten sobre como manejar el tiempo minimizando el error.
PHP:
'%%%%%%%%%%%%%%%%%%%%%%%%%%%% MICROCONTROLADORES PIC %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
'AUTOR : BRYAM HUAMANCHUMO BACA
'LABORATORIO # 08d : RELOJ DIGITAL PROGRAMABLE
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT 1
ADCON1 = %0000010
TRISD = 0
X VAR BYTE
Y VAR BYTE
Z VAR BYTE
D VAR BYTE
F VAR BYTE
M VAR BYTE
A VAR WORD
Minutos VAR PORTB.0
Hora VAR PORTB.1
Dia VAR PORTB.2
Fecha VAR PORTB.3
Mes VAR PORTB.4
Anio VAR PORTB.5
TRISB.0 = 1
TRISB.1 = 1
TRISB.2 = 1
X = 0
Y = 0
Z = 0
D = 0
Inicio:
For A = 2000 TO 2050 'Año
For M = 0 TO 11 'Mes
For F = 1 TO 31 'Numero de dias de Mes
For X = 0 TO 23 'Hora
D = D + 1 'Día
IF D = 7 Then
D = 0
EndIF
For Y = 0 TO 59 'Minutos
For Z = 0 TO 59 'Segundos
IF Minutos = 1 Then
Y = Y + 1
IF Y = 60 Then
Y = 0
EndIF
EndIF
IF Hora = 1 Then
X = X + 1
IF X = 24 Then
X = 0
EndIF
EndIF
IF Dia = 1 Then
D = D + 1
IF D = 7 Then
D = 0
EndIF
EndIF
IF D = 0 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/LUN "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/LUN "
EndIF
EndIF
IF D = 1 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/MAR "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/MAR "
EndIF
EndIF
IF D = 2 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/MIE "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/MIE "
EndIF
EndIF
IF D = 3 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/JUE "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/JUE "
EndIF
EndIF
IF D = 4 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/VIE "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/VIE "
EndIF
EndIF
IF D = 5 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/SAB "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/SAB "
EndIF
EndIF
IF D = 6 Then
IF X >= 0 AND X <= 11 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," AM/DOM "
EndIF
IF X > 11 AND X <= 23 Then
LCDOut $FE,1," ",DEC2 X,":",DEC2 Y,":",DEC2 Z," PM/DOM "
EndIF
EndIF
IF Fecha = 1 Then
F = F + 1
IF F = 32 Then
F = 1
EndIF
EndIF
IF Mes = 1 Then
M = M + 1
IF M = 12 Then
M = 0
EndIF
EndIF
IF M = 0 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," ENE DEL ",DEC4 A
EndIF
IF M = 1 AND F > 0 AND F <= 29 Then
LCDOut $FE,$C0," ",DEC2 F," FEB DEL ",DEC4 A
IF F = 29 Then
F = 1
M = 2
EndIF
EndIF
IF M = 2 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," MAR DEL ",DEC4 A
EndIF
IF M = 3 AND F > 0 AND F <= 31 Then
IF F = 31 Then
F = 1
M = 4
EndIF
LCDOut $FE,$C0," ",DEC2 F," ABR DEL ",DEC4 A
EndIF
IF M = 4 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," MAY DEL ",DEC4 A
EndIF
IF M = 5 AND F > 0 AND F <= 31 Then
IF F = 31 Then
F = 1
M = 6
EndIF
LCDOut $FE,$C0," ",DEC2 F," JUN DEL ",DEC4 A
EndIF
IF M = 6 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," JUL DEL ",DEC4 A
EndIF
IF M = 7 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," AGO DEL ",DEC4 A
EndIF
IF M = 8 AND F > 0 AND F <= 31 Then
IF F = 31 Then
F = 1
M = 9
EndIF
LCDOut $FE,$C0," ",DEC2 F," SET DEL ",DEC4 A
EndIF
IF M = 9 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," OCT DEL ",DEC4 A
EndIF
IF M = 10 AND F > 0 AND F <= 31 Then
IF F = 31 Then
F = 1
M = 11
EndIF
LCDOut $FE,$C0," ",DEC2 F," NOV DEL ",DEC4 A
EndIF
IF M = 11 AND F > 0 AND F <= 32 Then
IF F = 32 Then
F = 1
EndIF
LCDOut $FE,$C0," ",DEC2 F," DIC DEL ",DEC4 A
EndIF
IF Anio = 1 Then
A = A + 1
IF A = 2051 Then
A = 2000
EndIF
EndIF
Pause 1000
Next Z
Next Y
Next X
Next F
Next M
Next A
GoTo Inicio
Adjuntos
Última edición: