Programació en C 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. Ho podem veure a l'exemple EP.

Podem provar la la lectura i l'escriptura de l'EEPROM amb l'exemple EE.

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. La funció següent llegeix l'adreça de la memòria EEPROM que se li indica com a paràmetre i retorna el valor llegit.

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
	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 a l'adreça EECON2 per activar el procés. La funció següent escriu el valor se li passa com a paràmetre a l'adreça de la memòria EEPROM que s'indica.

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
	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
	while (EECON1bits.WR == 1)		// Esperem a que l'escriptura acabi
		;
	EECON1bits.WREN = 0;			// Deshabilitem l'escriptura
	INTCONbits.GIE = 1;			// Reactivem interrupcions
}

 

 

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