Programació en mpasm del PIC 16F690

Referència Trucs Perifèrics   Recursos CITCEA
Tutorial Exemples Projectes   Inici

Memòria EEPROM

En el nostre programa, a més de la memòria de dades, també podem fer servir la memòria EEPROM per guardar dades. La memòria EEPROM conserva el seu contingut quan es perd l'alimentació elèctrica; per tant és útil per guardar aquelles dades que no interessa que es perdin encara que el programa torni a començar. A la memòria EEPROM hi podem guardar valors en el moment de programar, per tant també és útil per aquells valors constants que sempre són els mateixos.

La forma de lectura i escriptura de la memòria EEPROM és mitjançant un adreçament indirecte gestionat per uns bits de control.

A l'exemple EE guardem dades a la memòria EEPROM en el moment de programar i després les llegim des del programa. Podem provar la la lectura i l'escriptura de l'EEPROM amb l'exemple ME.

Cal tenir present que la memòria EEPROM pot ser esborrada, si ho desitgem, en el moment de programar. Si fem servir el programador PICkit 2, cal tenir marcada la casella Preserve device EEPROM si no volem que a l'enviar un nou programa s'esborrin les dades que tenim guardades.

PICkit 2

Si emprem el programador PICkit 3, cal anar al menú Memories to Program, en el desplegable triar Manually select memories and ranges i deixar sense marcar la casella EEPROM si no volem que a l'enviar un nou programa s'esborrin les dades.

PICkit 3

Lectura de la memòria EEPROM

Per llegir el contingut d'una adreça de la memòria EEPROM cal posar l'adreça al registre EEADR, desactivar el bit EEPGD per indicar que treballem amb EEPROM i activar el bit RD per demanar que es faci la lectura. Un cop activat RD, el valor demanat estarà a EEDAT, d'on el podrem copiar. El tros de programa següent llegeix l'adreça de la memòria EEPROM etiquetada com Adre i deixa el valor a W. S'ha suposat que en començar està actiu el banc 0 que és el que queda actiu en acabar.

...
	bsf		STATUS,RP1	; Tria el banc 2
	movlw		Adre		; Llegim l'adreça de la variable
	movwf		EEADR		; Adreça EEPROM
	bsf		STATUS,RP0	; Tria el banc 3
	bcf		EECON1,EEPGD	; Accés a EEPROM
	bsf		EECON1,RD	; Lectura
	bcf		STATUS,RP0	; Tria el banc 2
	movf		EEDAT,w 	; Llegim
	bcf		STATUS,RP1	; Tria el banc 0
...

Escriptura de la memòria EEPROM

Quan escrivim a la memòria EEPROM hem de seguir un procés similar al de la lectura però una mica més llarg. La primera consideració és que si aparegués una interrupció a mig procés d'escriptura el resultat podria ser greu; per tant cal desactivar les interrupcions i comprovar que el bit GIE s'ha desactivat. Durant el procés d'escriptura cal escriure uns valors a l'adreça EECON2 per activar el procés. El tros de programa següent escriu el valor que hi ha a l'acumulador a l'adreça de la memòria EEPROM etiquetada com Adre. Si s'ha d'escriure més d'un byte, cal repetir cada vegada el procés. S'ha suposat que en començar està actiu el banc 0 que és el que queda actiu en acabar.

...
	bsf		STATUS,RP1	; Tria el banc 2
	movwf		EEDAT		; Guarda el valor de l'acumulador al registre EEDAT
	movlw		Adre		; Llegim l'adreça de la variable
	movwf		EEADR		; Adreça EEPROM
	bsf		STATUS,RP0	; Tria el banc 3
	bcf		EECON1,EEPGD	; Accés a EEPROM
	bsf		EECON1,WREN	; Activa la possibilitat d'escriptura
	bcf		INTCON,GIE	; Desactiva les interrupcions
	btfsc		INTCON,GIE	; Comprova si el bit s'ha desactivat
	goto		$-2
	movlw		0x55		; Valor necessari
	movwf		EECON2		; Escriu 55h
	movlw		0xAA		; Valor necessari
	movwf		EECON2		; Escriu AAh
	bsf		EECON1,WR	; Inicia l'escriptura
	btfsc		EECON1,WR	; Ha acabat l'escriptura?
	goto		$-1		; No, doncs esperem
	bsf		INTCON,GIE	; Torna a activar les interrupcions
	bcf		EECON1,WREN	; Desactiva la possibilitat d'escriptura
	bcf		STATUS,RP0
	bcf		STATUS,RP1	; Tria el banc 0
...

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.