TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: oam 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??
-
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.
-
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