pic Jul. 2016 | Page 82

#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