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