PIC y su EEPROM

AlfredoB

Lanero Reconocido
23 Jun 2006
145
Hola LANeros!!
Tengo una pregunta sobre PICs y sus EEPROMS:

En la página 34 del datasheet del 16F84 sale un ejemplo de un programa para leer un dato que está escrito en la EEPROM.
Pero qué pasa si tengo que leer 20 caracteres que están escritos en la EEPROM y quiero por ejemplo, meter cada uno de esos 20 caracteres en variables de esas "EQU 0x20"?
Tengo que repetir ese párrafo de programación 20 veces?

Y además, cómo son las direcciones de cada caracter que está en algúna celda de la EEPROM? La cosa es que, ya que es una tabla de 16 columnas por... no sé cuántas filas, y no es una memoria de pila como la memoria de programa.

O sea: quiero decir que, por ejemplo en el registro EEADR está escrita la dirección. Cómo es ese número? es de 8 Bits?

Además estudiaré todo sobre lo del "direccionamiento indirecto".
Toda opinión sirve!
Muchas gracias1
 
Hola!
Ya, disculpen por hacer esta pregunta que fue en verdad un tiro al aire muy rápido.
Ya sé casi todo, pero una cosa todavía no:
¿Cómo leer varios bytes de corrido en esta memoria sin tener que repetir todo el rato ese párrafo que lee byte por byte?
Esop! la proxima vez que pase por Laneros adjuntaré el tutorial que encontré, que me explicó casi todo.
Gracias!
 
Lo tengo lo tengoo!! jajaja. Aquí para quien quiera saber más:
Abajo sale que omití algunas cosas, ahora por el apuro no voy a explicar qué es, pero los que saben, sabran, y EL QUE NO SABE, PREGUNTE por favor!
Talvez otro día escriba lo que está omitido, que en verdad no es tanto, son un par de detalles. Saben usar Direccionamiento indirecto? Eso es el corazón del asunto.
Saludos!

;Configuración del PIC 16F84A
STATUS EQU 0x03
PORTA EQU 0x05
PORTB EQU 0x06
TRISA EQU 0x85
TRISB EQU 0x86
EEDATA EQU 0x08
EEADR EQU 0x09
EECON1 EQU 0x88
EECON2 EQU 0x89
INDF EQU 0x00
FSR EQU 0x04
;Variables en las que serán metidos los datos de la EEPROM
C1 EQU 0x10
C2 EQU 0x11
C3 EQU 0x12
C4 EQU 0x13
C5 EQU 0x14
C6 EQU 0x15
C7 EQU 0x16
C8 EQU 0x17
C9 EQU 0x18
C10 EQU 0x19
bsf STATUS, 5 ;No usaremos puertos, asique CLR para todo
clrf TRISA
clrf TRISB
bcf STATUS, 5
clrf PORTA
clrf PORTB
;Comienzo de lectura de EEPROM
movlw 0x10 ;Iniciación de FSR
movwf FSR
movlw 0x00 ;Iniciación de EEADR (el comienzo de la EE)
movwf EEADR
LECTURA
bsf STATUS,5 ;Banco 1
bsf EECON1,0 ;Activar lectura
bcf STATUS,5 ;Banco 0
movf EEDATA,0 ;Meter EEDATA a W
movwf INDF ;Meter contenido de W en INDF
incf FSR ;Incrementar el FSR
incf EEADR ;Incrementar el EEADR
btfss STATUS,2 ;Supuesto mecanismo de detensión...
goto LECTURA
END

;Listo!
;Rellene la EEPROM mediante el visor de la EEPROM del MPLAB.
;Esa rutina sirve para leer una cierta cantidad de caracteres
;guardadas en la EEPROM de corrido, guardándolas en el registro
;desde la dirección 0x10. Y no uno por uno... mucho más fácil esto.
;Algunas cosas están omitidas, debido a que son obvias.
;No me he preocupado por hacer un mecanismo que detenga la
;lectura.