Red de conocimientos turísticos - Lugares de interés turístico - ¿Quién conoce los detalles de W78e58b?

¿Quién conoce los detalles de W78e58b?

1. Introducción:

Debido a que este microcontrolador tiene dos espacios ROM, puede cambiar a diferentes programas de arranque ROM. Entre sí se pueden borrar y programar. La dirección es como se muestra en la figura:

Ambos espacios de ROM se ejecutan con la dirección 0X0000, es decir, APROM o LDROM deben tener un programa correspondiente para que el ISP funcione.

2. Comience a cambiar:

a). Modo de conmutación de hardware:

Cuando esté encendido, deje que P43 o P26 y P27 se combinen de la siguiente manera:

b). Modo de cambio de software:

1. De APROM a LDROM

caso MAIN_JUMP_LDROM:

//Todos los registros deben borrarse

// Entonces, solo haciendo esto puedes ingresar LDROM

/* PSW = 0

b = 0

PCON = 0; >SCON = 0;

SBUF = 0;

DPH = 0;

DPL = 0

P0 = 0XFF

p>

p 1 = 0x ff;

P2 = 0x ff;

P3 = 0x ff;

ésimo 1 = 0;

TL 1 = 0;

*/

CHPENR = 0X87

CHPENR = 0X59//Habilitar CHPCON en write_enable

CHPCON = 0x03 //Establecer bandera

TMOD = 0x 01; //Temporizador 0 modo de 16 bits

TCON = 0 //Detener temporizador 0

IP = 0X02

IE = 0X82 //El temporizador 0INT habilita el despertar desde //el modo inactivo

TH0 = 0XFF

TL0 = 0xa0//0xf 0 ; // 2uS

TR0 = 1; //TR0 = 1 GO

PCON = 0x 01; el ISP entra en estado inactivo

Pausa;

2. De LDROM a APROM

CHPENR = 0X87

CHPENR = 0X59

CHPCON = 0X83

Tres. Operación de EEPROM

El siguiente proceso es un ejemplo para mi aplicación LDROM:

Borra la APROM y verifícala.

Bit erase_ROM (bloque de bytes)

{

Índice de bytes, I;

Bit verificar_ok = 1

<; p>TR0 = 0;

TH0 = TEMPORIZADOR _ H _ 15 ms;

TL0 = TEMPORIZADOR _ L _ 15 ms; /Deshabilitar TR0 = 1

SFRCN = 0X22 //Borrar aprom

TR0 = 1;

//TCON = 0x 10 //Habilitar temporizador 0 TR0; = 1

# ifdef ENABLE _ IDLE //Prueba

PCON | = 0x 01; //En estado de conducción inactivo

p>

#endif

//Esperando el éxito del borrado

//El siguiente paso será verificar los datos (0xff)

TH0_temp = TIMER_H_1us 5; operación a 1.5uS

TL0_temp = TIMER_L_1us 5;

TH0 = TH0_temp

TL0 = TL0_temp

SFRCN = 0X00// estado de lectura

SFRAH = 0X00

SFRAL = 0X00

for(index = 0;index<shield;index++)

{

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

{

TR0 = 1;

# ifdef ENABLE _ IDLE //Prueba

PCON | = 0x 01; //En estado de conducción inactiva

# endif

if (SFRFD!= 0XFF)

{

verificar _ ok = 0;

Romper;

}

Otro

{

SF ral++;

if(SFRAL == 0)

SF rah++;

}

}

}

Si (la verificación es normal)

Devuelve 1;

Otros

Devuelve 0;

}

Bit de seguridad del programa.

void pgm_security_byte (bit osc1)

{

TR0 = 0;

timer_enable = 0 //Desactivar TR0 = 1<; /p>

TH0 = TIMER_H_50uS//Establecer operación a 50uS

TL0 = TIMER_L_50uS

sfr cn = 0x 61;/ /Escribir datos

SFRAH = 0xff

SFRAL = 0xff

if(osc1)

SFRFD = 0xf8

Otro

SFRFD = 0x78

TR0 = 1;

# ifdef ENABLE _ IDLE//Prueba

PCON | = 0x 01 //En estado de conducción inactivo

#endif

}

Programar un APOROM, 128 bytes a la vez.

Bit pgm_ROM_block(byte dirección_alta, byte dirección_baja)

{

Byte I, addr_high1, addr_low 1 // , tg_data

bit verificar_ok = 1;

addr_high 1 = dirección_alta;

addr_low 1 = dirección_baja

TR0 = 0

temporizador _ habilitar; = 0; // Deshabilita TR0 = 1

TH0 _ temp = TH0 = TIMER _ H _ 50uS // Establece operación en 50uS

TL0 _ temp = TL0 = TIMER _ L _ 50uS

sfr cn = 0x 21; //Escribir datos

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

{

SF rah = addr_high 1;

SFRAL = addr_low 1;

SF rfd = ringbuf[I];

TR0 = 1;

# ifdef ENABLE _ IDLE//Prueba

PCON | = 0x 01; //En estado de conducción inactivo

#endif

addr _ low 1++ ;

if(addr_low1 == 0)

addr _ high 1++;

}

//Verificar datos

addr _ high 1 = dirección _ high;

addr_low 1 = dirección_low;

TH0 = TH0_temp = TIMER_H_1us 5 //Establece la operación en 1.5uS

TL0 = TL0_ temp = TIMER_L_1us 5;

SFRCN = 0X00 //Leer datos

for(I = 0;I<BUF_SIZEi++)

{

SF rah = dirección _ alta 1;

SFRAL = dirección _ baja 1

TR0 = 1

# ifdef ENABLE _ IDLE //Prueba

PCON | = 0x 01; //En estado de conducción inactivo

#endif

addr _ low 1++;

if(addr_low1 == 0)

addr_high 1++

if (SFRFD! = ringbuf[i])

Devuelve 0;

}

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

{

ringbuf[I]= 0;

}

Si (la verificación es normal)

Devuelve 1;

}

Verbo (abreviatura de verbo) Mi interfaz ISP VC++:

Interfaz de cifrado, primero cifre el programa de conversión.

Interfaz de programación:

Utilidad Winbond: