#DEFINE BANCO0 BCF estado,banco
#DEFINE BANCO1 BSF estado,banco
; Sirve para situarse en banco 0
; Sirve para situarse en banco 1
; Definición de macros
PON_ASCII macro ASCII
MOVLW ASCII
CALL LCD_Caracter
endm
; ******************* CUERPO DEL PROGRAMA *********************
inic
; Preparamos el timer para la pausa, como en parpadeo.asm
BSF estado,banco
; Seleccionamos el banco 1
MOVLW 0x06
; En binario 0000 0101
MOVWF opcion
; Ponemos el predivisor a 64
;****************************************************************
; *** OPTION.7 = 0 Resistencias de polarización deshabilitadas
; *** OPTION.6 = 0 Interrupción externa por flanco bajada (no se usa)
; *** OPTION.5 = 0 Fuente de reloj interna
; *** OPTION.4 = 0 Flanco de señal externa (no lo usamos)
***
; *** OPTION.3 = 0 Divisor asignado al TMR0
; *** OPTION.2 = 1 OPTION.1= 0 OPTION.1= 0 División por 64
;***************************************************************
BANCO0
; Y volvemos al banco 0
***
***
***
***
***
; **** Comenzamos con la LCD
CALL LCD_Port
CALL LCD_Inic
PON_ASCII 0x50
PON_ASCII 0x49
PON_ASCII 0x43
;
;
;
;
;
;
;
;
Inicializa los puertos, para acoplarlos
al diseño especificado de la LCD.
Inicializa los valores de la LCD y
la enciende tal cuál la necesitamos:
Resetea la LCD, borra la memoria y activa la pantalla
Carácter ASCII de la P mayúscula (80 decimal)
Carácter ASCII de la I mayúscula (73 decimal)
Carácter ASCII de la C mayúscula (67 decimal)
Pausa_5ms
if velocidad = = 4
; Para un micro a 4 MHZ
MOVLW 0xB2 ; Cargamos el timer con 78 decimal (0xB2)
else
MOVLW 0xD8 ; Si no deducimos que funciona a 2 MHz
;
y cargamos el timer con 39 (la mitad)
endif
MOVWF tmr0
MOVLW 0xA0
; 1010 0000 en binario
MOVWF intcon
; Habilitamos GIE y T0IE (interrupción del timer0)
; Deshabilitamos T0IF (bandera de salto producido)
espera BTFSS intcon,t0if
; Esperamos a que la bandera se active
GOTO espera
RETURN
; *************** RSI: Rutina de servicio de interrupción ******************
; ****** Salta al desbordarse el TMR0, cada 5 ms **************************
RSI
RETURN
; Queda deshabilitada la interrupción mientras no sea necesaria
; No se borra la bandera GIE ni la T0IF
ORG 0X00
GOTO inic
ORG 0x04
GOTO RSI
; Cubrimos el vector de reset
; Saltamos a la primera dirección tras el vector de interrupción
; Cubrimos el vector de interrupción
; Y saltamos a la rutina de servicio de interrupción
END
80