Buenas tengo una duda hace un tiempo sobre este programilla de un reloj y su bucle es, que no se como hace el incremento de unidades a decenas (es decir cuando la unidad llega a 9 incrementa de uno en uno hasta 5 la decena y hace el mismo incremento a min y h se repite el caso en seg, min, horas) .
Si me lo pudieran explicar
Muchas gracias


' {$STAMP BS2}
' {$PBASIC 2.5}

D0 CON 8
D1 CON 9
CONTA CON 43

SEGUNDOS VAR Byte
MINUTOS VAR Byte
HORAS VAR Byte

CONTADOR VAR Byte

AUX_0 VAR Byte
AUX_1 VAR Byte
AUX VAR Byte

DIRL=$FF
DIRC=%0111

INICIO:
SEGUNDOS=$0
MINUTOS=$0
HORAS=$0

BUCLE:
FOR HORAS.NIB1=0 TO 2
FOR HORAS.NIB0=0 TO 9
FOR MINUTOS.NIB1=0 TO 5
FOR MINUTOS.NIB0=0 TO 9
FOR SEGUNDOS.NIB1=0 TO 5
FOR SEGUNDOS.NIB0=0 TO 9

FOR CONTADOR= 0 TO CONTA
OUTL=AUX_0
HIGH D0
PAUSE 10
LOW D0

OUTL=AUX_1
HIGH D1
PAUSE 10
LOW D1

NEXT

IF IN12=1 THEN CARGAR_SEGUNDOS
IF IN13=1 THEN CARGAR_MINUTOS
IF IN14=1 THEN CARGAR_HORAS
PAUSE 3

CONTINUAR:
NEXT
NEXT
NEXT
NEXT

IF HORAS=%00100100 THEN INICIO
NEXT
NEXT
GOTO INICIO

CARGAR_SEGUNDOS:
AUX=SEGUNDOS.NIB0
GOSUB TABLA
AUX_0=AUX
AUX=SEGUNDOS.NIB1
GOSUB TABLA
AUX_1=AUX
GOTO CONTINUAR

CARGAR_MINUTOS:
AUX=MINUTOS.NIB0
GOSUB TABLA
AUX_0=AUX

AUX=MINUTOS.NIB1
GOSUB TABLA
AUX_1=AUX

GOTO CONTINUAR

CARGAR_HORAS:
AUX=HORAS.NIB0
GOSUB TABLA
AUX_0=AUX
AUX=HORAS.NIB1
GOSUB TABLA
AUX_1=AUX

GOTO CONTINUAR

TABLA:
BRANCH AUX,[CERO,UNO,DOS,TRES,CUATRO,CINCO,SEIS,SIETE,OCHO,NUEVE]
CERO: AUX=%11000000
RETURN
UNO: AUX=%11111001
RETURN
DOS: AUX=%10100100
RETURN
TRES: AUX=%10110000
RETURN
CUATRO: AUX=%10011001
RETURN
CINCO: AUX=%10010010
RETURN
SEIS: AUX=%10000010
RETURN
SIETE: AUX=%11111000
RETURN
OCHO: AUX=%10000000
RETURN
NUEVE: AUX=%10010000
RETURN
END

Visitas: 52

Responde a esto

Respuestas a esta discusión

Hola Salva, no me aclaro bien con los anidamientos; posiblemente haya algún problema con estos, especialmente en el bucle donde residen los FOR-NEXT, que en algunos casos salta a otro sitio con un condicional y acaba siguiendo un GOSUB para luego retornar... ¿Porqué no insertas algunos DEBUGs y, poco a poco (varia el PAUSE si es necesario) vas viendo los valores que toman las variables?

Por cierto, la aplicación del programa puede ser de lo más interesante, pero ¿estás convencido de que va a ser exacto en el cómputo del tiempo?
Hola Lorenzo, este codigo es de un ejemplo de el libro diseño practico con microcontroladores, lo monte y funciona, lo que no probe fue si el computo de tiempo era exacto, el problema es k no entiendo lo que comente anteriormente.

Un saludo y Muchas gracias

Responder a debate

RSS

Cursos online y tutoriales


(se requiere registro previo gratuito en PortalArduino.com)

Mantenimiento del sitio

© 2024   Creado por Lorenzo M. Oliver.   [Imágenes licenciadas por Depositphotos.com] Tecnología de

Emblemas  |  Reportar un problema  |  Términos de servicio