PROYECTOS » Proyecto servomotor

'****************************************************************

'*  Name    : UNTITLED.BAS                                      *

'*  Author  : [select VIEW...EDITOR OPTIONS]                    *

'*  Notice  : Copyright (c) 2022 [select VIEW...EDITOR OPTIONS] *

'*          : All Rights Reserved                               *

'*  Date    : 3/03/2022                                         *

'*  Version : 1.0                                               *

'*  Notes   :                                                   *

'*          :                                                   *

'****************************************************************

'DEFINICION DE REGIDTROS PARA EL LCD'

DEFINE LCD_DREG PORTA   'UTILIXAR 4 BITS DEL PUERTO A PARA TX DE DATOS'

DEFINE LCD_DBIT 0       'DESDE EL BIT A.0 AL BIT A.3

DEFINE LCD_RSREG PORTB  'SELECCION DEL PUERTO DEL REGISTRO

DEFINE LCD_RSBIT 0      'EN EL BIT B.0'

DEFINE LCD_EREG PORTB   'UTILIZAR EL ENABLE EN EL PUERTO B'

DEFINE LCD_EBIT 1         'EN EL BIT B.1'

DEFINE OSC 4

'DEFINICION DE VARIABLES'

HORA VAR BYTE  'VAREIABLES DE HORA'

MINUTO VAR BYTE'VARIABLE DE MINUTOS

SEGUNDO VAR BYTE'VARIABLE DE SEGUNDO'

CUENTA VAR BYTE 'VARIABLE DE CUENTA DE TIMERO'

ACTUAL VAR BYTE 'VARIABLE DE CONTADOR DE PAUSA'

X VAR BYTE      'VARIABLE DE CONTADOR DE PAUSA '

'VALORES INICIALES '

HORA=12 : MINUTO=0 : SEGUNDO=0 'SETEA HORA 12:00:00

CUENTA=0 :ACTUAL=1             'VALOR DE BANDERA'


'PROGRAMA PRINCIPAL'

OPTION_REG=%01010110   'CICLO RELOJ INTERNO TMR0,RATE PRESESCALER 1:128

INTCON=%10100000      'HABILITA INTERRUPCION INTERNA TMR0

POKE 134,192          'TRISB=%11000000 PORTB.6 Y PORTB.7 COMO9 ENTRADAS'

ON INTERRUPT GOTO INTERRUPCION 'EXISTE INTERRU. SALTARA ETIQ INTERRUPCION'


INICIO:

      IF PORTB.7=0 THEN  INCMINUTO  'BOTON INCREMENTAR MINUTOS'

      IF PORTB.6=0 THEN INCHORA     'BOTON INCREMENTAR HORA' 


ACTUALIZA:                         'ETIQUETA ACTUALIZA LCD'

       IF ACTUAL=1 THEN 

         LCDOUT $FE,1,"      ",DEC HORA,":",DEC MINUTO,":",DEC SEGUNDO 'VALOR HORA

         LCDOUT $FE,$C0,"    EPIE-UNPRG   "    'MENSAJE DE SEGUNDA LINEA LCD

       ACTUAL=0 'PANTALLA LCD ACTUALIZADA

       ENDIF

       GOTO INICIO 'RETORNO A ETIQUETA INICIO'

       


'RUTINAS PARA ACTUALIZAR HORA'

INCMINUTO:

      MINUTO=MINUTO+1

      IF MINUTO>=60 then minuto=0

      goto PAUSA

INCHORA:

      HORA=HORA+1  'RUTINA DE INCREMENTO DE MINUTOS'

      IF HORA>=24 THEN HORA=0

      GOTO PAUSA

PAUSA:

      FOR X=1 TO 30

        PAUSE 10

      NEXT X

      ACTUAL=1    'BANDERA DE ACTUALIZAR LCD

      GOTO ACTUALIZA


'RUTINA DE INTERRUPCION'

DISABLE

INTERRUPCION:

        CUENTA=CUENTA+1

        TMR0=4

        IF CUENTA<31 THEN RESET

        CUENTA=0

        SEGUNDO=SEGUNDO+1

              IF SEGUNDO>=60 THEN

                                SEGUNDO=0

                                MINUTO=MINUTO+1

                                IF MINUTO>60 THEN

                                                MINUTO=0

                                                HORA=HORA+1

                                                IF HORA>=24 THEN

                                                                HORA=0

                                                ENDIF

                                ENDIF

              ENDIF

        ACTUAL=1

RESET:

    INTCON.2=0

RESUME

END