Programació en C del PIC 18F45K20

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.

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 els bits EEPGD i CFGS 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 EEDATA, 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. La següent funció ho fa:

unsigned char llegir_EEPROM(unsigned char adre)
{						// Llegeix el contingut de l'EEPROM
						// a la posició indicada per l'adreça
	EECON1bits.EEPGD = 0;			// Seleccionem EEPROM i no memòria de programa
	EECON1bits.CFGS = 0;			// Seleccionem EEPROM i no configuracions
	EEADR = adre;				// Adreça que volem llegir
	EECON1bits.RD = 1;			// Activa la lectura
	return EEDATA;				// Llegeix i retorna el resultat
}

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. Durant el procés d'escriptura cal escriure uns valors (55h i AAh) a l'adreça EECON2 per activar el procés. La següent funció ho fa:

void escriu_EEPROM(unsigned char adre, unsigned char dada)
{						// Escriu el valor donat a l'adreça EEPROM indicada
	EECON1bits.EEPGD = 0;			// Seleccionem EEPROM i no memòria de programa
	EECON1bits.CFGS = 0;			// Seleccionem EEPROM i no configuracions
	EEDATA = dada;				// Valor que volem escriure
	EEADR = adre;				// Adreça que volem escriure
	EECON1bits.WREN = 1;			// Habilita l'escriptura
	INTCONbits.GIE = 0;			// Desactiva interrupcions
	EECON2 = 0x55;				// Cal escriure uns valors predeterminats (55h i AAh)
	EECON2 = 0xAA;				// a EECON2 per activar el procés d'escriptura
	EECON1bits.WR = 1;			// Activa l'escriptura
	INTCONbits.GIE = 1;			// Reactivem interrupcions
	while (EECON1bits.WR == 1)		// Esperem a que l'escriptura acabi
		;
	EECON1bits.WREN = 0;			// Deshabilitem l'escriptura
}

 

 

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