Red de conocimientos sobre prescripción popular - Cuidado de la salud en otoño - Recientemente utilicé eeprom en el microcontrolador stc. Espero guardar los datos modificados en la eeprom durante el funcionamiento del microcontrolador y llamarlos desde allí la próxima vez que lo encienda.

Recientemente utilicé eeprom en el microcontrolador stc. Espero guardar los datos modificados en la eeprom durante el funcionamiento del microcontrolador y llamarlos desde allí la próxima vez que lo encienda.

# include ltreg52.h gt

# include ltintrins.h gt

/*Los siguientes son los registros utilizados para configurar el microcontrolador STC*/

/* La información relacionada comienza en la página 35 del PDF STC89C51RC*/

sfr ISP_DATA = 0xE2

sfr ISP_ADDRH = 0xE3

sfr ISP_ADDRL = 0xE4

sfr ISP _ CMD = 0xE5

sfr ISP _ TRIG = 0xE6

sfr ISP _ CONTR = 0xE7

#Definir uint Entero sin signo

#Definir carácter sin firmar uchar

#Definir ISP_byte_read1//ISP byte leído

#Definir ISP_byte_ program2//Programación directa de ISP

#Definir ISP _ sector _ erase3//borrado del sector ISP

tabla de códigos uchar[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};

/************************************ ************** ***********************

*Nombre: Retraso ()

*Función: Retraso, el tiempo de retardo es 10 ms * del.

*Entrada: del

*Salida: Ninguna

********************* * ************************************************* ** /

Retraso no válido_1ms (uint i)

{

uchar x, j;

for(j = 0; j lti; j )

for(x = 0; x lt=148; x );

}

/******* ** ************************************************* * **********

*Nombre: ISP_ERASE()

*Función: Borrar sector EEPROM.

*Entrada: Dirección (la dirección del sector borrado)

*Salida: Ninguna

*********** *** ********************************************** ** *******/

void ISP_ERASE(dirección)

{

ISP_ADDRL = dirección;

ISP_ADDRH = Dirección gt gt8;

ISP_CONTR = 0x 81;

ISP_CMD = ISP_SECTOR_ERASE

ISP_TRIG = 0x46// El manual en PDF dice que escriba 0x46 primero y luego 0xb9 en ISP_TRIG .

ISP _ TRIG = 0xb9

_ nop _()

_ nop _()

}

/************************************************ **********************

*Nombre: ISP_READ()

*Función: Desde la dirección correspondiente de EEPROM Lea el valor.

*Entrada: Dirección (la dirección para leer la EEPROM)

*Salida: Read_Data (el valor leído de la EEPROM)

***** ************************************************** * *******************/

uint ISP_READ(dirección)

{

uchar Leer _ Datos

ISP_ADDRL = Dirección;

ISP_ADDRH = Dirección gt gt8;

EA = 0;

ISP_CONTR = 0x 81;

ISP _ CMD = ISP _ BYTE _ READ

ISP _ TRIG = 0x46

ISP _ TRIG = 0xb9

_ nop _()

_ nop _();

Leer _ Datos = ISP _ DATOS

Devolver Leer _ Datos

}

/********************************************* * **********************

*Nombre: ISP_PROGRAM()

*Función: Implementar los bytes de Programación EEPROM.

*Entrada: Dirección es la dirección a programar, Data_temp es el valor a programar.

*Salida: Ninguna

******************************** *******************************************/

void ISP_PROGRAM( dirección, datos_temporales)

{

ISP_DATA = Data_temp

ISP_ADDRL = dirección;

ISP_ADDRH = Dirección gt gt8;

ISP_CONTR = 0x 81;

ISP_CMD = ISP_BYTE_PROGRAM

ISP_TRIG = 0x46

ISP_TRIG = 0xb9

_nop_();

_nop_();

}

/ ************** ************************************* ************* *****

*Nombre: Main()

*Función: Función principal

*Entrada: Ninguna

*Salida : Ninguno

****************************************** ******************************/

void Main()

{

uint I;

uchar LED _ Buffer = 0;

while(1)

p>

{

for(I = 0;ilt50;i)

{

LED _ Buffer = ISP _ READ(0x2c 00) ;

P0 = tabla[ LED _ Buffer 10];

P2 = 1;

retraso _ 1 ms(6);

P0 = tabla[LED _ Buffer/10 10]

P2 = 0;

retraso _ 1 ms(6

}

LED_buffer;

ISP_ERASE(0x2c 00); //Nota: todo el sector debe borrarse antes de la programación de bytes.

ISP_PROGRAM(0x2c00, LED_Buffer);

}

}