EEPROM PIC Memoria Interna [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

EEPROM PIC Memoria interna

Compartir: 

0

0

0

EEPROM PIC en la memoria interna EEPROM del microcontrolador PIC se pueden guardar datos que no se quiere que se borren en caso se corte la alimentación del PIC, en esta sección se comentará para el caso de la memoria EEPROM PIC para el PIC16F877A, lo que aquí se comente es muy similar en caso de utilizar otro microcontrolador PIC, siempre tener a mano la hoja de datos del PIC utilizado, en la memoria EEPROM PIC del PIC16F877A se pueden almacenar hasta 256 bytes, esto es 256 datos de 8 bits, la capacidad de la memoria EEPROM PIC puede variar de un PIC a otro. Para la escritura y la lectura de datos en la EEPROM PIC se tienen que seguir una serie de pasos, en el orden que viene indicado en la hoja de datos del PIC.

EEPROM PIC REGISTROS Los registros utilizados para el manejo de la EEPROM PIC del PIC16F877A son el registro EECON1, el registro EECON2, el registro EEDATA, el registro EEDATH, el registro EEADR y el registro EEADRH, en el caso de utilizar las interrupciones por finalización de  escritura de la EEPROM PIC también se utilizarán los registros PIE2 y PIR2. El registro EECON1 este es el registro de control de la memoria EEPROM PIC

El bit7 EEPGD para programar dentro de la memoria EEPROM PIC este bit tiene que ser puesto a 0, cuando este bit se pone a 1 será para programar en la memoria FLASH. Los bits 6, 5, y 4 no son utilizados. El bit3 WRERR este bit se pondrá automáticamente a 1 si ocurre algún reset mientras se esta escribiendo en la EEPROM PIC, al ocurrir el reset el dato no se escribirá correctamente, por lo que este bit indicará un error de escritura. El bit2 WREN al poner a 1 este bit se habilita la escritura en la EEPROM PIC, al ponerlo a 0 la escritura en la EEPROM estará inhabilitada. El bit1 WR al poner este bit a 1 se inicia la escritura en la EEPROM PIC, una vez que la escritura a terminado este bit se pondrá automáticamente a 0, se puede utilizar este bit para detectar cuando la escritura en la EEPROM a terminado, al finalizar la escritura también puede producirse una interrupción si esta se encuentra habilitada, si no también puede utilizarse la bandera de interrupción, el bit4 EEIF del registro PIR2 para detectar cuando se ha finalizado la escritura en la EEPROM PIC El bit0 RD al poner este bit a 1 se inicia la lectura en la EEPROM PIC, una vez que la lectura a terminado este bit se pondrá automáticamente a 0. El registro EECON2 este registro no es accesible, es un registro auxiliar para la escritura en la EEPROM PIC. Los registros EEDATA y EEDATH juntos hacen un solo registro donde se cargará el dato que se quiere escribir en la EEPROM PIC, será el registro desde el programa colocará el dato que se quiera leer desde la EEPROM PIC. Los registros EEADR y EEADRH juntos hacen un solo registro donde se cargará la dirección de la EEPROM PIC desde donde se quiere leer el dato, o donde se quiere escribir el dato.

EEPROM PIC Pasos a seguir en su programación en el XC8 Se comenta  lo que se hará para escribir o leer en la EEPROM PIC, los pasos a seguir son  los indicados en la hoja de datos del PIC16F877A. Escritura en la EEPROM PIC para la secuencia a seguir sl escribir un byte en la EEPROM PIC con el XC8 se seguirá lo que indica la hoja de datos: 1.

Comprobar si hay alguna escritura en curso, esto se puede hacer leyendo el bit WR del registro EECON1, si está a 1 es porque hay una escritura en curso. Si hay alguna escritura en curso se tendrá que esperar que esta termine.

2.

En el registro EEADR cargar la dirección de la EEPROM PIC donde se quiera escribir, para el PIC16F877A estas direcciones están entre 0 y 256.

3.

En el registro EEDATA se carga el dato que se quiere escribir en la EEPROM PIC.

4.

El bit7 EEPGD del registro EECON1 se pone a 0 para que programar en la EEPROM PIC.

5.

El bit2 WREN del registro EECON1 se pone a 1 para habilitar la escritura en la EEPROM PIC.

6.

Deshabilitar las interrupciones poniendo el bit7 GIE del registro INTCON a 0.

7.

Cargar el registro EECON2 con 0x55.

8.

Cargar el registro EECON2 con 0xaa.

9.

El bit7 WR del registro EECON1 se pone a 1 para que inicie la escritura en la EEPROM PIC.

10.

Habilitar las interrupciones poniendo el bit7 GIE del registro INTCON a 1.

11.

El bit2 WREN del registro EECON1 se pone a 0 para deshabilitar el uso de la EEPROM PIC.

12.

Comprobar si la escritura a terminado, esto se puede hacer leyendo el bit WR del registro EECON1, si está a 0 es porque la escritura a terminado, también se puede leer la bandera de interrupción (bit4 EEIF del registro PIR2), si está a 1 es porque la

escritura a terminado, al finalizar la escritura está bandera tiene que ser puesta a 0, al utilizar la bandera de interrupción no será necesario verificar el paso 1. Lectura de la EEPROM PIC la secuencia a seguir para leer un byte desde la EEPROM PIC según indica la hoja de datos es la siguiente: 1.

En el registro EEADR cargar la dirección de la EEPROM PIC donde se quiera escribir, para el PIC16F877A estas direcciones están entre 0 y 256.

2.

El bit7 EEPGD del registro EECON1 se pone a 0 para que programar en la EEPROM PIC.

3.

El bit7 RD del registro EECON1 se pone a 1 para que inicie la lectura en la EEPROM PIC.

4.

Leer el dato de la dirección indicada, este dato se puede leer desde el registro EEDATA.

EEPROM PIC EN EL XC8 Se crearán dos funciones para ser utilizadas en la escritura u la lectura de la EEPROM PIC, las funciones están realizadas siguiendo los pasos indicados por la hoja de datos. Escritura en la EEPROM PIC, para la escritura se utilizará una función a la que se llamará escribir_eeprom(dirección,dato), se le puede llamar como se desee, se le darán dos parámetros, el primero será la dirección de la EEPROM PIC donde se quiera escribir el dato, y el segundo el dato que se quiera escribir en la dirección indicada, la función realizada en el XC8 es la siguiente:

1 ////////////////////////////////////////////////////////// 2 /////////////////////////////////////////////////////////// 3 //función para la escritura de datos en la EEPROM PIC

4 //es necesario darle dos parámetro, el primero será la dirección 5 //de la EEPROM que se quiera leer 6   7 void escribir_eeprom(unsigned char direccion,unsigned char dato){ 8     while(EECON1bits.WR==1);  //mientras se esté realizando alguan escritura 9                               //anterior espera 10     EEADR=direccion;          //se carga la dirección donde se quiere escribir 11     EEDATA=dato;              //se carga el dato que se quiere escribir 12     EECON1bits.EEPGD=0;       //para acceder a la memoria EEPROM PIC 13     EECON1bits.WREN=1;        //habilita la escritura en la EEPROM PIC 14     INTCONbits.GIE=0;         //deshabilita las interrupciones 15     EECON2=0x55;              //cargar en EECON2 0x55 16     EECON2=0xaa;              //cargar en EECON2 0xaa 17     EECON1bits.WR=1;          //inicia la escritura en la EEPROM PIC 18     INTCONbits.GIE=1;         //habilita las interrupciones 19     EECON1bits.WREN=0;        //deshabilita la escritura en la EEPROM PIC 20     while(EECON1bits.WR==1);  //mientras se esté realizando la escritura espera 21 }

Lectura de la EEPROM PIC, para la lectura se utilizará una función a la que se llamará leer_eeprom(dirección), se le puede llamar como se desee, se le dará un parámetro que será la dirección de la EEPROM PIC de donde se quiera leer el dato, la función realizada en el XC8 es la siguiente:

1 /////////////////////////////////////////////////////////// 2 /////////////////////////////////////////////////////////// 3 //función para la lectura de datos desde la EEPROM PIC 4 //es necesario darle un parámetro, este será la dirección 5 //de la EEPROM que se quiera leer 6   7 unsigned char leer_eeprom(unsigned char direccion){ 8     EEADR=direccion;      //direccion de la eeprom que se quiere leer 9     EECON1bits.EEPGD=0;   //para acceder a la memoria EEPROM PIC 10     EECON1bits.RD=1;      //habilita la lectura de la EEPROM PIC 11     return EEDATA;        //en el registro EEDATA se encuentra el dato 12                           //leido, la función retorna el dato leido 13 }

EEPROM PIC EN EL XC8 EJEMPLO En el ejemplo a realizar se escribirá en la memoria EEPROM PIC del microcontrolador PIC16F877A, desde la dirección de memoria EEPROM 0 hasta la dirección 255 las mismas posiciones de memoria que tengan, luego se leerán estos valores de las posiciones de memoria, estos valores serán vistos en forma binaria en unos leds conectados al puerto D.

El circuito utilizado es el siguiente:

El programa realizado en el XC8 para la escritura y lectura de la memoria interna EEPROM PIC es el siguiente:

1 /////////////////////////////////////////////// 2 ///////*********************************/////// 3 ///*** microcontroladores-mrelberni.com ***////

4 ///////*****************************////////// 5 //* EEPROM PIC ejemplo código para el PIC16F877A* // 6 ///////********************************/////// 7   8 #pragma config FOSC = XT        // Oscillator Selection bits (XT oscillator) 9 #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled) 10 #pragma config PWRTE = ON       // Power-up Timer Enable bit (PWRT enabled) 11 #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled) 12 #pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit 13 #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit 14 #pragma config WRT = OFF        // Flash Program Memory Write Enable bits 15 #pragma config CP = OFF 16   17 #define _XTAL_FREQ 4000000 18 #include 19   20 void escribir_eeprom(unsigned char,unsigned char); //prototipo de función para la 21                                                    //escritura en la EEPROM PIC 22 unsigned char leer_eeprom(unsigned char); //prototipo de función para la lectura 23                                           //desde la EEPROM PIC

24   25   26 void main(void) { 27     unsigned char i=0;//variable auxiliar iniciada a 0 28                       //para escribir una sola vez en la EEPROM PIC 29   30     TRISD=0;  //puerto D como salidas digitales, aquí se conectan los leds para ver 31               //en forma binaria los valores guardados en la EEPROM PIC 32     PORTD=0;  //los leds inicia apagados 33      34     while(1){//ciclo del programa 35         if(i==0){ 36             for(unsigned int i=0;i