Documentos de Académico
Documentos de Profesional
Documentos de Cultura
P.G.F.
MEMORIA EEPROM
El PIC 16F877A tiene 256 x 8 Bits destinados para almacenar datos NO VOLATILES. El PIC 16F84 tiene 64 x 8. En otras palabras si se apaga el PIC y se vuelve a prender, este conserva estos valores. Principales registros asociados: EECON1, EECON2, EEDATA, EEADR
REGISTRO EECON1
EEPGD WRERR WREN WR RD EEPGD: Bit de seleccin de memorias 1 Selecciona memoria FLASH 0 Selecciona memoria EEPROM WRERR: Bandera de error en la escritura de la memoria 1 El proceso de escritura ha terminado prematuramente (reset, WDT) 0 La escritura se ha realizado con xito WREN: Bit de habilitacin de la escritura en la EEPROM 1 Permite los ciclos de escritura 0 inhabilita la escritura en la EEPROM
REGISTRO EECON1
EEPGD WRERR WREN WR RD
WR: Bit de control de escritura 1 Inicia Escritura 0 Se pone automaticamente en 0 al finalizar la escritura RD: Bit de control de lectura 1 Inicia Lectura 0 No Inicia Lectura
Deshabilita la interrupcin por escritura de la EEPROM (PIE2,EEIE) Desactiva interrupcin de perifricos Desactiva el permiso global de interrupciones
Se pone el bit WREN (EECON1) en 0 para inhabilitar escritura
EEPROM_16F877_CAPC_SI.LIB
;-----------------------------------------------------------------------;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR P.G.F. ;TEMA: Escritura y Lectura de EEPROM SIN usar la interrupcion por escritura de EEPROM ;NOTA: No olvidar declarar las variables: ; DATO_ESCRI, DIR_EEPROM, DATO_LEIDO ;VARIABLES PARA LA EEPROM ;-----------------------------------------------------------------------ESCRI_MEM_F877 MOVF MOVWF BCF BSF BSF BCF BCF perifericos BCF MOVF MOVWF CALL BSF BCF BCF RETURN
DIR_EEPROM,w DATA_EE_ADDR PIR2, EEIF STATUS, RP0 PIE2, EEIE STATUS, RP0 INTCON,PEIE INTCON,GIE DATO_ESCRI,W DATA_EE_DATA ESCRITURA_EEPROM STATUS,RP0 PIE2,EEIE STATUS,RP0
; Registro auxiliar para la direccion de EEPROM ; ; Baja la bandera de interrupcin ; Banco 1 ; Habilita la interrupcin por EEPROM ; regresa al Banco 0 ; DESActiva interrupciones de ; DESActiva interrupciones ; Registro auxiliar DATO a ESCRIBIR
EEPROM_16F877_CAPC_SI.LIB
ESCRITURA_EEPROM BSF BCF MOVF MOVWF MOVF MOVWF BSF BCF BSF MOVLW MOVWF MOVLW MOVWF BSF STATUS,RP1 ; STATUS,RP0 ; Banco 2 DATA_EE_ADDR,W ; EEADR ; Direccion de memoria de datos a escribir DATA_EE_DATA,W ; EEDATA ; Valor de memoria de datos a escribir STATUS, RP0 ; Banco 3 EECON1, EEPGD ; Selecciona memoria EEPROM EECON1, WREN ; Activa permiso de escritura 0x55 ; SECUENCIA REQUERIDA POR EL FABRICANTE EECON2 0xAA EECON2 EECON1, WR ; Activa el bit WR para comenzar a escribir
EEPROM_16F877_CAPC_SI.LIB
ESPERA_ESCRITURA_EEPROM BCF STATUS, RP1 ; BCF STATUS, RP0 ; Banco 0 BTFSS PIR2,EEIF ; Espera hasta que termine de escribir GOTO ESPERA_ESCRITURA_EEPROM BCF PIR2,EEIF ;Borra la bandera de la EEPROM BSF STATUS, RP0 ; Banco 3 BCF EECON1, WREN ; INActivar permiso de escritura BCF STATUS, RP0 ; Banco 0 RETURN
EEPROM_16F877_CAPC_SI.LIB
LEER_MEM_F877 MOVF EEPROM MOVWF BSF BCF MOVF MOVWF BSF BCF BSF BCF MOVF BCF BCF MOVWF RETURN DIR_EEPROM,w DATA_EE_ADDR STATUS, RP1 STATUS, RP0 DATA_EE_ADDR,W EEADR STATUS, RP0 EECON1, EEPGD EECON1, RD STATUS, RP0 EEDATA, W STATUS, RP1 STATUS, RP0 DATO_LEIDO ; Registro auxiliar para la direccion de ; ; ; Banco 2 ; ; Direccion de memoria de datos a leer ; Banco 3 ; Selecciona memoria EEPROM ; Lee EEPROM ; Banco 2 ; W = EEDATA ; ; Banco 0 ; Mover a Registro Auxiliar
;configura puerto A y E como E/S digitales ;MUEVE A ADCON1 ;Resistencias pull up ACTIVAS ;Desactiva puerto paralelo esclavo ;Afecta puerta D tambin ;puerto D como salida y el RD1 para RF ;Configura puerto C para verificar sensores ;puerto E como salida ;Banco 0
;especifica direccion para leer ;lee memoria EEPROM de la direccion especificada ;Carga W con el ultimo dato leido ;Compara ;Si es diferente salta
;Dato a escribir ;especifica direccion para leer ;Escribe memoria EEPROM segun la direccion y el ;dato especificado
CICLO
DATO_LEIDO,0 DATO_ESCRI ;carga el nuevo valor para grabar 0x10 ;especifica direccion para leer DIR_EEPROM ESCRI_MEM_F877 ;Escribe memoria EEPROM segun la direccion y el dato especificado CICLO
;especifica direccion para leer ;lee memoria EEPROM de la direccion especificada ;Carga W con el ultimo dato leido ;Visualiza Valor cargado en W ;2 ;Visualiza Valor cargado en W ;3 ;Visualiza Valor cargado en W ;4 ;Visualiza Valor cargado en W ;5 ;Visualiza Valor cargado en W
EEPROM_16F877_CAPC_CI.LIB
;------------------------------------------------------------------------
;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR P.G.F. ;TEMA: Escritura y Lectura de EEPROM Utilizando INTERRUPCION por EEPROM ;NOTA: No olvidar declarar las variables: ; DATO_ESCRI, DIR_EEPROM, DATO_LEIDO ;VARIABLES PARA EEPROM ;NOTA2: No olvidar crear la rutina de interrupcion en el programa ;INT_ESCR_MEN_F ; BCF STATUS, RP1 ; ; BCF STATUS, RP0 ; Banco 0 ; BTFSS PIR2,EEIF ; goto SALIR_INT ; BCF PIR2,EEIF ;Borra la bandera de la EEPROM ; ;SALIR_INT RETFIE ;------------------------------------------------------------------------
LA
EEPROM_16F877_CAPC_CI.LIB
ESCRI_MEM_F877 MOVF MOVWF BCF BSF BSF BCF BSF BSF MOVF MOVWF CALL BSF BCF BCF BCF BCF RETURN DIR_EEPROM,w ; Registro auxiliar para la direccion de EEPROM DATA_EE_ADDR ; PIR2, EEIF ; Baja la bandera de interrupcin STATUS, RP0 ; Banco 1 PIE2, EEIE ; Habilita la interrupcin por EEPROM STATUS, RP0 ; regresa al Banco 0 INTCON,PEIE ; Activa interrupciones de perifericos INTCON,GIE ; Activa interrupciones DATO_ESCRI,W ; Registro auxiliar DATO a ESCRIBIR DATA_EE_DATA ESCRITURA_EEPROM STATUS,RP0 ; Banco1 PIE2,EEIE ; Habiliar Interrupcin por EEPROM STATUS,RP0 ; Banco0 INTCON,PEIE ; Desactiva interrupciones de perifericos INTCON,GIE ; Desactiva interrupciones
EEPROM_16F877_CAPC_CI.LIB
ESCRITURA_EEPROM BSF BCF MOVF MOVWF MOVF MOVWF BSF BCF BSF MOVLW MOVWF MOVLW MOVWF BSF sleep BSF BCF BCF RETURN STATUS,RP1 STATUS,RP0 DATA_EE_ADDR,W EEADR DATA_EE_DATA,W EEDATA STATUS, RP0 EECON1, EEPGD EECON1, WREN 0x55 EECON2 0xAA EECON2 EECON1, WR STATUS, RP0 EECON1, WREN STATUS, RP0 ; ; Banco 2 ; ; Direccion de memoria de datos a escribir ; ; Valor de memoria de datos a escribir ; Banco 3 ; Selecciona memoria EEPROM ; Activa permiso de escritura ; SECUENCIA REQUERIDA POR EL FABRICANTE
; Activa el bit WR para comenzar a escribir ; debe dormirlo estando en el banco 3 ; Banco 3 ; INActivar permiso de escritura ; Banco 0
EEPROM_16F877_CAPC_CI.LIB
LEER_MEM_F877 MOVF MOVWF BSF BCF MOVF MOVWF BSF BCF BSF BCF MOVF BCF BCF MOVWF RETURN DIR_EEPROM,w DATA_EE_ADDR STATUS, RP1 STATUS, RP0 DATA_EE_ADDR,W EEADR STATUS, RP0 EECON1, EEPGD EECON1, RD STATUS, RP0 EEDATA, W STATUS, RP1 STATUS, RP0 DATO_LEIDO ; Registro auxiliar para la direccion de EEPROM ; ; ; Banco 2 ; ; Direccion de memoria de datos a leer ; Banco 3 ; Selecciona memoria EEPROM ; Lee EEPROM ; Banco 2 ; W = EEDATA ; ; Banco 0 ; Mover a Registro Auxiliar
SEGUNDA_O_MAS clrf movlw movwf call incf movf xorlw btfsc goto movf movwf movlw movwf call goto
;especifica direccion para leer ;lee memoria EEPROM de la direccion especificada ;Incrementa el dato leido
DATO_LEIDO,0 DATO_ESCRI ;carga el nuevo valor para grabar 0x10 ;especifica direccion para leer DIR_EEPROM ESCRI_MEM_F877 ;Escribe memoria EEPROM segun la direccion y el dato especificado CICLO
DATO_LEIDO 0x10 DIR_EEPROM LEER_MEM_F877 DATO_LEIDO,W LCD_DATOS '' LCD_DATOS 'V' LCD_DATOS 'E' LCD_DATOS 'Z' LCD_DATOS
;especifica direccion para leer ;lee memoria EEPROM de la direccion especificada ;Carga W con el ultimo dato leido ;Visualiza Valor cargado en W ;2 ;Visualiza Valor cargado en W ;3 ;Visualiza Valor cargado en W ;4 ;Visualiza Valor cargado en W ;5 ;Visualiza Valor cargado en W
REGISTROS_BK.LIB
;AUTOR: P.G.F. ;PIC: 16F877A ;FUNCION: Libreria que guarda el estado de algunos registros y los restaura ;si es necesario ;NOTA: Es necesario declarar las siguientes variable ;TRISA_BK, TRISB_BK, TRISC_BK, TRISD_BK, TRISE_BK, INTCON_BK, PIE1_BK, PIE2_BK ;PIR1_BK, PIR2_BK, STATUS_BK GUARDAR_REGISTROS movf bcf bcf movwf bsf movf bcf movwf bsf movf bcf movwf STATUS,w STATUS, RP1 STATUS, RP0 STATUS_BK STATUS, RP0 TRISA,w STATUS, RP0 TRISA_BK STATUS, RP0 TRISB,w STATUS, RP0 TRISB_BK
REGISTROS_BK.LIB
bsf movf bcf movwf bsf movf bcf movwf bsf movf bcf movwf bsf movf bcf movwf bsf movf bcf movwf STATUS, RP0 TRISC,w STATUS, RP0 TRISC_BK STATUS, RP0 TRISD,w STATUS, RP0 TRISD_BK STATUS, RP0 TRISE,w STATUS, RP0 TRISE_BK STATUS, RP0 PIE1,w STATUS, RP0 PIE1_BK STATUS, RP0 PIE2,w STATUS, RP0 PIE2_BK
REGISTROS_BK.LIB
movf movwf movf movwf movf movwf movf RETURN CARGAR_REGISTROS bcf bcf movf bsf movwf bcf STATUS, RP1 STATUS, RP0 TRISA_BK,w STATUS, RP0 TRISA STATUS, RP0 INTCON,w INTCON_BK PIR1,w PIR1_BK PIR2,w PIR2_BK STATUS_BK, STATUS
PAGINA 0 1 2 3
PCLATH,3 0 1 0 1
PCLATH,4 0 0 1 1
REGISTROS_BK.LIB
movf bsf movwf bcf PIE2_BK,w STATUS, RP0 PIE2 STATUS, RP0
RETURN
PAGINA 0 1 2 3
PCLATH,3 0 1 0 1
PCLATH,4 0 0 1 1
REGISTROS_BK.LIB
movf bsf movwf bcf PIE2_BK,w STATUS, RP0 PIE2 STATUS, RP0
RETURN
;configura puerto A y E como E/S digitales ;MUEVE A ADCON1 ;Resistencias pull up ACTIVAS ;Desactiva puerto paralelo esclavo ;Afecta puerta D tambin ;puerto D como salida y el RD1 para RF ;Configura puerto C para verificar sensores ;puerto E como salida ;Banco 0
CICLO
;P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P2P ORG d'2100' ;Pagina 2 MENSAJE_CESAR_UNIPAMPLONA call UP_LCD_2P ;RECONFIGURA DENUEVO EL DISPLAY PARA USARLO OTRA VEZ call LCD_INI_2P ;subrutina que inicia el modulo, apaga el cursor y borra el display movlw U' ;1 call LCD_DATOS_2P ;Visualiza Valor cargado en W movlw P' ;2 call LCD_DATOS_2P ;Visualiza Valor cargado en W RETURN include "LCD_LIB_CAPC_877_F_2P.lib" END
LIBRERA EN 2 PAGINA
;-----------------------------------------------------------------------;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR P.G.F. ;TEMA: CONTROL LCD ;FUNCION: Controlar LCD conectado a RB<0:7> (datos) y RBD<5:7> ; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7 ;-----------------------------------------------------------------------;-----------------------------------------------------------------------;UP_LCD: CONFIGURACION PIC PARA EL LCD. UP_LCD_2P bsf bcf bcf bcf bcf clrf bcf clrf bcf bcf return STATUS,5 ;BANCO 1 TRISE,PSPMODE ;DESACTIVA PUERTO PARALELO ESCLAVO ;AFECTA TAMBIEN EL PUERTO D PORTD,5 ;RD5 COMO SALIDA PORTD,6 ;RD6 COMO SALIDA PORTD,7 ;RD7 COMO SALIDA TRISB ;PUERTO B COMO SALIDA STATUS,5 ;BANCO 0 INTCON ;DESACTIVA INTERRUPCIONES PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL PORTD,7 ;E = 0 LCD INABILITADO
LIBRERA EN 2 PAGINA
;LCD_INI: INICIALIZACION LCD. ; LCD_INI_2P movlw b'00111000' ;ENVIA COMANDO FUNCTION SET call LCD_REG_2P ;(BUS DE 8 BITS, 2 LINEAL, CARACTER 5X7) call DELAY_5MS_2P ;5mS.(ESPECIFICACIN DE FABRICANTE) movlw b'00001100' ;LCD ON, CURSOR OFF, PARPADEO CURSOR OFF call LCD_REG_2P ;ENVIA COMANDO call DELAY_5MS_2P ;5ms.(Especificacin de Fabricante) movlw b'00000001' ;BORRA PANTALLA call LCD_REG_2P ;ENVIA COMANDO call DELAY_5MS_2P ;5ms.(Especificacin de Fabricante) return ;------------------------------------------------------------------------;LCD_DATO: ESCRITURA DE DATOS EN DDRAM o CGRAM LCD_DATOS_2P bcf PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL movwf PORTB ;VALOR ASCII A SACAR POR RB call LCD_BUSY_2P ;ESPERA A QUE SE LIBERE EL LCD bsf PORTD,5 ;RS = 1 SELECCION DE REGISTRO DE DATOS goto LCD_E_2P ;GENERA PULSO EN LA SEAL E (HABLILITACIN LCD)
LIBRERA EN 2 PAGINA
;LCD_REG: ESCRITURA DE COMANDOS LCD. ; LCD_REG_2P bcf PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL movwf PORTB ;SACA EL CODIGO DE LA INSTRUCCION call LCD_BUSY_2P ;ESPERA A QUE SE LIBERE EL LCD goto LCD_E_2P ;GENERA PULSO EN LA SEAL E (HABLILITACIN LCD) ;------------------------------------------------------------------------;LCD_E: PULSO DE HABILITACION ; LCD_E_2P bsf PORTD,7 ;E = 1 LCD HABILITADO nop ;ESPERA 1 uS bcf PORTD,7 ;E = 0 LCD INABILITADO return ;-----------------------------------------------------------------------;LCD_BUSY: VERIFICACION QUE EL LCD ESTE NO ESTE OCUPADO. ; LCD_BUSY_2P bsf PORTD,6 ;R/W = 1 MODO LECTURA bsf STATUS,5 ;BANCO 1 movlw b'11111111' movwf TRISB ;PUERTO B COMO ENTRADA bcf STATUS,5 ;BANCO 0 bsf PORTD,7 ;E = 1 LCD HABILITADO nop
LIBRERA EN 2 PAGINA
L_BUSY_2P btfsc PORTB,7 ;CHEQUEA BIT DE BUSY goto L_BUSY_2P bcf PORTD,7 ;E = 0 LCD INABILITADO bsf STATUS,5 ;BANCO 1 clrf TRISB ;PUERTO B COMO SALIDA bcf STATUS,5 ;BANCO 0 bcf PORTD,6 ;R/W = 0 MODO ESCRITURA return ;-----------------------------------------------------------------------;DELAY_5MS: Genera una temporizacin de 5 mS ; DELAY_5MS_2P movlw 0x1a movwf DATO_B ;Carga la variable DATO_B clrf DATO_A ;Carga la variable DATO_A DELAY_1_2P decfsz DATO_A,1 ;Decrementa la variable DATO_A goto DELAY_1_2P decfsz DATO_B,1 ;Decrementa la variable DATO_B goto DELAY_1_2P return