¿Quién conoce los detalles de W78e58b?
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 p>
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: