Autor Tema: MODERADORES AYUDA CON RELOJ EN LCD  (Leído 1718 veces)

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

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
MODERADORES AYUDA CON RELOJ EN LCD
« en: 14 de Junio de 2006, 19:21:17 »
de este mismo foro me e bajado el codigo de un reloj digital ,la cuestion es que no funciona cuando llega a un segundo.
el segundo se calcula con el tmr0 , tengo una variable como se puede observar llamada seg ,cuando esta llega a 60 la variable de minuto se incrementa en 1 ,lo curioso es que cuando llega exactamente a un 60 se bloquea la simulacion, pero en cambio bajo ese valor a 40 ,35 20 ,50  y funciona perfectamente.
Algo pasa cuando pasan 60 segundos

perdonen por las molestias causadas

este programa se definio apartir del original cabe argumentar que este programa es un contador desendente apartir de 10000 y tiene exactamente el mismo problema que el original el cual eara un reloj digital con lcd para un pic 16f84

sera porque estoy compilando un programa de pic basic pro en pic basic plus

CODIGO

 ' Define registros del LCD y bits
DEFINE  LCD_DREG        PORTA
DEFINE  LCD_DBIT        0
' Primer bit de datos en PortA.0 , en modo a 4 bits
DEFINE  LCD_RSREG       PORTB
DEFINE  LCD_RSBIT       0
' Señal del LCD RS en PortB.6
DEFINE  LCD_EREG        PORTB
DEFINE  LCD_EBIT        1
' Señal del LCD Enable en PortB.7
DEFINE LCD_LINES 2
INCLUDE "modedefs.bas"
DEFINE OSC 4



' Grupo de variables tipo Byte
'Hora    var byte    ' Variable con el dato de la hora.
'DispH   var byte    ' Hora a mostrar en el display.
Minuto  var WORD    ' Variable con el dato de los minutos.
Seg     var byte  ' Variable con el dato de los segundos.
TicTac  var byte    ' Variable con las fracciones de segundo.
Actual  var bit     ' Bandera de actualizacion del display.
i       var byte    ' Variable para retardos teclado.

'definicion del teclado
DecMin  var PORTB.7     'Tecla decrementar minutos
IncMin  var PORTB.6     'Tecla incrementar minutos
'DecHora var PORTB.5     'Tecla decrementar hora
'IncHora var PORTB.4     'Tecla incrementar hora

        clear       'borrar variables
        pause 300   ' espera reactivacion display LCD
        Actual = 1  'fuerza actualizacion del display
       
'seteo del TMR0 para interrupcion cada 16.384 milisegundos
        OPTION_REG =$55     'Configura TMR0 y habilita PullUps
        INTCON = $A0        'Habilita interrupciones
        on interrupt goto Interr
        MINUTO=10000
       
Principal:
        PORTB = 0   'lineas en bajo para leer pulsadores
        TRISB = $f0 'habilita los pulsadores
       
        'chequea los pulsadores
        if DecMin = 0 then baja_min
        if IncMin = 0 then sube_min
       

'chequeo para ver si hay que actualizar display
Chequeo:
        if Actual = 1 then
            lcdout $fe, 1   'borra display
            'hora en formato hh:mm:ss
'            DispH = Hora    'cambia hora entre 0 y 12
'            if (Hora // 12) = 0 then
'                    DispH = DispH + 12
'            endif
           
            'chequea si es AM o PM
            if actual=1 then
                lcdout  dec5 Minuto,":", dec2 Seg
'            else
'                lcdout  dec5 Minuto,":", dec2 Seg,"PM"
            endif
            Actual = 0  'display ya esta actualizado
        endif
       
        goto Principal  'loop infinito
'Rutinas
baja_min:
        Minuto = Minuto - 100
        if Minuto <=0000 then
            Minuto = 10000
        endif
        goto Debounce
       
sube_min:
        Minuto = Minuto + 100
        if Minuto >= 10001 then
            Minuto = 100
        endif
        goto Debounce

       
Debounce:
        for i = 1 to 25
            pause 10    'con 10 milisegundos no se perderan interrupciones
        next i
       
        Actual = 1      'actualizar display
       
        goto Chequeo

'rutina de interrupcion
    disable
Interr:
        TicTac= TicTac + 1
        if TicTac < 61 then SalirTic
        'paso un segundo, actualizar tiempo
        TicTac = 0
        Seg = Seg + 1
        if Seg >= 10 then
        Seg = 1
        Minuto = Minuto - 1
         
'            if Minuto >= 60 then
'                Minuto = 0
'                Hora = Hora + 1
'                if Hora >= 24 then
'                    Hora = 0
'                endif
'            endif
        endif
        Actual = 1
SalirTic:
        INTCON.2 = 0    'resetea flag de interrupcion del timer
    resume
   
    end