Autor Tema: reloj digital  (Leído 1978 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado oam

  • PIC10
  • *
  • Mensajes: 4
reloj digital
« en: 24 de Junio de 2008, 07:58:52 »
Buenos dias,

estoy intentando hacer un reloj calendario, y lo he conseguido, pero a la hora de intentar que el usuario pueda cambiar la hora y la fecha tengo muchos problemas, porque no se como hacer las maquinas de estado. estoy programando en ensamblador un pic16f84, alguien me podria ayudar??

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: reloj digital
« Respuesta #1 en: 24 de Junio de 2008, 09:15:04 »
Hola oam. Bienvenido al foro.

Para poder ayudarte, debemos saber con más detalles el problema. Por ejemplo:

. ¿utilizas un CI aparte para el reloj/calendario, o lo tienes implementado en el propio PIC?
. Me inclino más por la primera opción: ¿qué CI es?
. No logro comprender del todo el problema. No se a que te refieres con máquinas de estado.

Sería bueno que postearas la parte del programa en dónde tienes problemas, en este caso, sería configurar el reloj/calendario

Hay mas datos a saber, pero esto se hirán consultando a medida que se valla resolviendo el problema.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado oam

  • PIC10
  • *
  • Mensajes: 4
Re: reloj digital
« Respuesta #2 en: 24 de Junio de 2008, 13:39:30 »
Buenas,

lo primero gracias por intentar ayudarme ;)

Hemos tenido que hacer mediante un contador el reloj y el calendario ayudandonos por unas tablas para sacar por pantalla los meses y los dias de la semana usando las 3 primeras letras. hasta ahi todo bien. pero en realidad lo que queremos hacer es un despertador que podamos cambiar la hora y la fecha. para ello usaremos una tecla, que nos cambiara al modo cambiar hora y otra tecla para cambiar la fecha. usamos maquinas de estado y evento porque es lo que nos han aconsejado, pero nos hemos liado haciendolo, y no funciona. aqui te dejo nuestra maquina de estados, haber si te ayuda a entenderlo ;)

;********************************************************
;MAQUINA DE ESTADO
MAQESTADO:
   MOVWF   evento
   MOVF   estado,W   ;se busca el evento introducido
   CLRF   PCLATH      ;ajuste del registro
   BSF   PCLATH,1   ;PCLATH
   ADDWF   PCL,F      ;Salto a la rutina asociada al evento
   GOTO   MAQVISUALIZAR      ;visualiza reloj
   GOTO   MAQMODIFICAR            ;modificar fecha y hora
   RETURN
   RETURN   
;******************************************************************************************************
;MOSTRAR RELOJ
MAQVISUALIZAR:
   MOVF   evento,W   ;se busca el evento introducido
   CLRF   PCLATH      ;ajuste del registro
   BSF   PCLATH,1   ;PCLATH
   ADDWF   PCL,F      ;Salto a la rutina asociada al evento      
   GOTO   MOSTRAR
   RETURN
   RETURN
   RETURN

MOSTRAR:
   CALL   MOSTRARRELOJ       ;mostramos el reloj
   CALL   MOSTRARFECHA       ;mostramos la fecha
   RETURN
   RETURN

;MODIFICAR
MAQMODIFICAR:
   MOVF   evento_dato,W   ;se busca el evento introducido
   CLRF   PCLATH      ;ajuste del registro
   BSF   PCLATH,1   ;PCLATH
   ADDWF   PCL,F      ;Salto a la rutina asociada al evento   
   RETURN
   GOTO   CAMHORA        ;cambiar hora
;   GOTO   CAMFECHA       ;cambiar fecha
;   GOTO   ALARMA            ;alarmas
   RETURN   
   RETURN

CAMHORA:
   MOVF   evento_dato,W   ;se busca el evento introducido
   CLRF   PCLATH      ;ajuste del registro
   BSF   PCLATH,1   ;PCLATH
   ADDWF   PCL,F      ;Salto a la rutina asociada al evento
   GOTO   DHMO            ;modificar decimas hora
   GOTO   UHMO            ;nodificar unidades hora
   GOTO   DMMO            ;modificar decimas minuto 
   GOTO   UMMO            ;modificar unidades minuto

DHMO:   
   MOVLW   1
   XORWF   evento_dato,W
   BTFSS   STATUS,Z
   RETURN
   CALL   ACCION1
   RETURN
ACCION1:

   MOVLW    cur_hm   ;CURSOR PRIMERA LINEA
   CALL   LCDIWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   'C'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'H'
   CALL   LCDDWR
   MOVLW   'O'
   CALL   LCDDWR
   MOVLW   'R'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   ':'
   CALL   LCDDWR

   MOVLW    cur_l2   ;SALTO DE LINEA
   CALL   LCDIWR
   CALL   LEETECLADO   
   CALL   ELIMREB
   CALL   REPORTT   
   MOVWF   DHM

   MOVLW   2
   MOVWF   evento_dato

   MOVF   DHM,W
   ADDLW   A'0'
   CALL   LCDDWR

   RETURN   

UHMO:   
   MOVLW   2
   XORWF   evento_dato,W
   BTFSS   STATUS,Z
   RETURN
   CALL   ACCION2
   RETURN
ACCION2:
   MOVLW    cur_hm   ;CURSOR PRIMERA LINEA
   CALL   LCDIWR
   MOVLW   'U'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'I'
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'H'
   CALL   LCDDWR
   MOVLW   'O'
   CALL   LCDDWR
   MOVLW   'R'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   ':'
   CALL   LCDDWR

   MOVLW    cur_l2   ;SALTO DE LINEA
   CALL   LCDIWR
   CALL   LEETECLADO   
   CALL   ELIMREB
   CALL   REPORTT   
   MOVWF   UHM

   MOVLW   3
   MOVWF   evento_dato

   MOVF   UHM,W
   ADDLW   A'0'
   CALL   LCDDWR

   RETURN   

DMMO:   
   MOVLW   3
   XORWF   evento_dato,W
   BTFSS   STATUS,Z
   RETURN
   CALL   ACCION3
   RETURN
ACCION3:
   MOVLW    cur_hm   ;CURSOR PRIMERA LINEA
   CALL   LCDIWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   'C'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'M'
   CALL   LCDDWR
   MOVLW   'I'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ':'
   CALL   LCDDWR

   MOVLW    cur_l2   ;SALTO DE LINEA
   CALL   LCDIWR
   CALL   LEETECLADO   
   CALL   ELIMREB
   CALL   REPORTT   
   MOVWF   DMM

   MOVLW   4
   MOVWF   evento_dato

   MOVF   DMM,W
   ADDLW   A'0'
   CALL   LCDDWR

   RETURN   

UMMO:   
   MOVLW   4
   XORWF   evento_dato,W
   BTFSS   STATUS,Z
   RETURN
   CALL   ACCION4
   RETURN
ACCION4:
   MOVLW    cur_hm   ;CURSOR PRIMERA LINEA
   CALL   LCDIWR
   MOVLW   'U'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'I'
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'A'
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'D'
   CALL   LCDDWR
   MOVLW   'E'
   CALL   LCDDWR
   MOVLW   ' '
   CALL   LCDDWR
   MOVLW   'M'
   CALL   LCDDWR
   MOVLW   'I'
   CALL   LCDDWR
   MOVLW   'N'
   CALL   LCDDWR
   MOVLW   'S'
   CALL   LCDDWR
   MOVLW   ':'
   CALL   LCDDWR

   MOVLW    cur_l2   ;SALTO DE LINEA
   CALL   LCDIWR
   CALL   LEETECLADO   
   CALL   ELIMREB
   CALL   REPORTT   
   MOVWF   UMM

   MOVLW   1
   MOVWF   evento_dato

   MOVF   UMM,W
   ADDLW   A'0'
   CALL   LCDDWR

   RETURN   
;************************************************************


muchas gracias de todas formas