<br />
;***************************** Librería "EEPROM.INC" **********************************
<br />
;
<br />
; ====================================================================
<br />
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
<br />
; E. Palacios, F. Remiro y L. López. <!-- w --><a href="http://www.pic16f84a.com" target="_blank">www.pic16f84a.com</a><!-- w -->
<br />
; Editorial Ra-Ma. <!-- w --><a href="http://www.ra-ma.es" target="_blank">www.ra-ma.es</a><!-- w -->
<br />
; ====================================================================
<br />
;
<br />
; Estas subrutinas permiten realizar las tareas básicas de escritura y lectura de la
<br />
; memoria EEPROM de datos del PIC.
<br />
;
<br />
; Subrutina "EEPROM_LeeDato" ------------------------------------------------------------
<br />
;
<br />
; El microcontrolador lee el dato que hay escrito en la posición de la EEPROM del PIC apuntada
<br />
; por el contenido del registro de trabajo W. El resultado se proporciona en el mismo W.
<br />
;
<br />
; Entrada: En (W) la dirección de la memoria EEPROM a leer.
<br />
; Salida : En (W) el byte leído.
<br />
<br />
EEPROM_LeeDato
<br />
bcf STATUS,RP0 ; Asegura que trabaja con el Banco 0.
<br />
movwf EEADR ; Dirección a leer.
<br />
bsf STATUS,RP0 ; Banco 1.
<br />
bsf EECON1,RD ; Orden de lectura.
<br />
EEPROM_SigueLeyendo
<br />
btfsc EECON1,RD ; El PIC indica que ha terminado la lectura
<br />
goto EEPROM_SigueLeyendo ; poniendo en bajo este bit.
<br />
bcf STATUS,RP0 ; Banco 0.
<br />
movf EEDATA,W ; El byte leído al registro W.
<br />
return
<br />
<br />
; Subrutina "EEPROM_EscribeDato" --------------------------------------------------------
<br />
;
<br />
; Escribe el dato introducido en el registro de trabajo W en la posición de memoria EEPROM del
<br />
; PIC apuntada por el registro EEADR.
<br />
;
<br />
; Como altera el valor del registro INTCON al posicionar el flag GIE, éste se debe guardar al
<br />
; principio de la subrutina y restaurarlo al final.
<br />
;
<br />
; Entradas: En el registro EEADR la dirección de la memoria EEPROM a escribir.
<br />
; En el registro W el byte a escribir.
<br />
;
<br />
CBLOCK
<br />
EEPROM_GuardaINTCON
<br />
ENDC
<br />
<br />
EEPROM_EscribeDato
<br />
bcf STATUS,RP0 ; Asegura que trabaja con el Banco 0.
<br />
movwf EEDATA ; El byte a escribir.
<br />
movf INTCON,W ; Reserva el valor anterior de INTCON
<br />
movwf EEPROM_GuardaINTCON
<br />
bsf STATUS,RP0 ; Acceso al Banco 1.
<br />
bcf INTCON,GIE ; Deshabilita todas las interrupciones.
<br />
bsf EECON1,WREN ; Habilita escritura.
<br />
;
<br />
; El fabricante especifica que hay que seguir esta secuencia para escritura en EEPROM:
<br />
;
<br />
movlw 0x55
<br />
movwf EECON2
<br />
movlw 0xAA
<br />
movwf EECON2
<br />
bsf EECON1,WR ; Inicia la escritura.
<br />
EEPROM_TerminaEscribir
<br />
btfsc EECON1,WR ; Comprueba que termina de escribir en la EEPROM.
<br />
goto EEPROM_TerminaEscribir
<br />
bcf EECON1,WREN ; Desautoriza la escritura en EEPROM.
<br />
bcf EECON1,EEIF ; Limpia este flag.
<br />
bcf STATUS,RP0 ; Acceso al Banco 0.
<br />
movf EEPROM_GuardaINTCON,W ; Restaura el valor anterior de INTCON.
<br />
movwf INTCON
<br />
return
<br />
<br />
; ====================================================================
<br />
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS".
<br />
; E. Palacios, F. Remiro y L. López. <!-- w --><a href="http://www.pic16f84a.com" target="_blank">www.pic16f84a.com</a><!-- w -->
<br />
; Editorial Ra-Ma. <!-- w --><a href="http://www.ra-ma.es" target="_blank">www.ra-ma.es</a><!-- w -->
<br />
; ====================================================================
<br />
<br />