Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cómo borrar el microcontrolador STC12C5A60S2?

¿Cómo borrar el microcontrolador STC12C5A60S2?

# incluir & ltreg52.h & gt

# incluir & ltLCM 12864 h & gt;

sfr ISP_DATA = 0xe2

sfr ISP_ADDRH = 0xe3

sfr ISP_ADDRL = 0xe4

sfr ISP_CMD = 0xe5

sfr ISP_TRIG = 0xe6

sfr ISP_CONTR = 0xe7

# Defina ISP_IAP_BYTE_READ 1

#Defina ISP_IAP_BYTE_PROGRAN 2

#Defina ISP_IAP_BYTE_ERASE 3

#defina WAITE_TIME 1

Retraso no válido (recuento interno)

{

int I;

for(I = 0;i<cnti++);

}

Sector_erase vacío (int dirección)

{

ISP _ ADDRH = dirección & gt& gt8;

ISP _ ADDRL = dirección & amp0x0ff

ISP _ CONTR = WAITE _ TIME

ISP _ CONTR = 0x80

ISP _ CMD = ISP _ IAP _ BYTE _ ERASE

ISP _ TRIG = 0x46

ISP _ TRIG = 0xb9

}

void Byte_Program(int addr, unsigned char dat)

{

Sector_erase(addr);

ISP_DATA = dat

ISP_ADDRH = addr & gt& gt8;

ISP _ ADDRL = addr & amp0x 00 ff;

ISP_CONTR=WAITE_TIME

ISP_CONTR=0x80

ISP_CMD=ISP_IAP_BYTE_PROGRAN

ISP_TRIG = 0x46

ISP _ TRIG = 0xb9

ISP _ CMD = 0x7F

}

Carbón sin firmar Byte_Read(dirección int)

{

Datos de caracteres sin firmar

ISP _ ADDRH = addr & gt& gt8;

ISP _ ADDRL = addr & amp0x 00 ff;

ISP _ CONTR = ESPERA _ TIEMPO

ISP _ CONTR = 0X80

ISP _ CMD = ISP _ IAP _ BYTE _ READ

ISP _ TRIG = 0x46

ISP _ TRIG = 0xb9

dat = ISP _ DATA

ISP _ CMD = 0x00

Devolver dat

}

Administrador no válido (no válido)

{

Carácter sin firmar dat 1 = 0

init; _ 12864 palabra();

Byte_P

rogram(0x2001, 0x 11);

dat 1 = Byte _ Read(0x 2001);

LCM 12864 _ wr _ Cmd(0x 80); >LCM 12864 _ wr _ Dat(Dat 1/100x 30

LCM 12864 _ wr _ Dat(Dat 1% 100/10x 30); 12864 _ wr _ Dat(Dat 1% 10x 30);

while(1);

}

No recuerdo si es STC12C5A60S2. o 89C52. Si observa la tabla de datos a continuación, las razones principales son que los nombres de los registros son diferentes y la asignación ISP_TRIG es diferente. Todo lo demás es igual.

Atención:! ! ! ! ! ¡No es un borrado de bytes, solo un borrado de sector! ! ! ! ! !

Programación de bytes: sólo se puede cambiar "1" a "0", la programación de bytes "0" es inútil. Si los bytes son "1111, 111b",

entonces "1" se puede programar como "0". Si un bit de este byte es un "0", para cambiarlo a un "1" primero se debe cambiar todo el ventilador.

Borrado de área, porque sólo el "borrado de sector" puede convertir "0" en "1".

Borrado de Sector: Sólo "Borrado de Sector" puede borrar "0" a "1".

Por lo tanto, los sectores se borran antes de escribir.