¿Quién conoce los detalles de W78e58b?
Dado que el microcontrolador tiene dos espacios ROM, puede cambiar a diferentes ROM para comenzar a programar. Las dos ROM se pueden borrar y programar entre sí. La dirección es como se muestra en la figura:
Ambos espacios ROM comienzan a ejecutarse en la dirección 0X0000, es decir, uno de APROM o LDROM debe tener un programa correspondiente para realizar el trabajo del ISP.
II. Inicie el cambio:
A). Modo de cambio de hardware:
Al arrancar, deje que P43, P26 o P27 presionen la siguiente combinación de teclas:
p>
p>
B). Modo de cambio de software:
1. De APROM a LDROM
caso MAIN_JUMP_LDROM:
//debe borrar todos los registros p>
//así que esto solo se puede hacer en LDROM
/* PSW = 0;
/*.PSW = 0;
B = 0;
PCON = 0;
SCON = 0;
SBUF = 0; 0;
DPL = 0;
P0 = 0XFF;
P1 = 0XFF;
P2 = 0XFF.
P3=0XFF;
TH1=0;
TL1=0
*/
CHPENR; = 0X87;
CHPENR = 0X59; //Habilitar CHPCON en write_enable
CHPCON = 0x03; //Establecer FLAG
TMOD = 0X01; -modo de bits
TCON = 0; //STOP TIMER0
IP = 0X02;
IE = 0X82; //TIMER0INT HABILITADO PARA DESPERTAR DESDE // INACTIVO MODO
TH0 = 0XFF;
TL0 = 0xa0;//0XF0;// 2uS
TR0 = 1;//TR0 = 1 GO
PCON = 0X01;//EN INACTIVO PARA ISP
pausa;
2. De LDROM a APROM
CHPENR = 0X87;
CHPENR = 0X59;
CHPCON = 0X83;
Operación III.EEPROM
El siguiente programa es un ejemplo de mi aplicación LDROM: p>
Borrar APROM con suma de comprobación.
BIT erase_ROM(bloque BYTE)
{
Índice BYTE, i;
BIT verificar_ok = 1;
TR0 = 0;
TH0 = TIMER_H_15MS;
TL0 = TIMER_L_15MS
timer_enable = 0 //deshabilitar TR0 = 1
SFRCN = 0X22; //borrar la aprom
TR0 = 1;
// TCON = 0X10;// ENABLE TIMER0 TR0 = 1
# ifdef ENABLE_IDLE //prueba
PCON |= 0x01;// en conducción inactiva
#endif
//watting para borrar ok
//Los datos serán verificados a continuación (0xff)
TH0_temp = TIMER_H_1uS5;//establecer operación en 1.5uS
TL0_temp = TIMER_L_1uS5;
TH0 = TH0_temp ;
TL0 = TL0_temp;
SFRCN = 0X00;//Estado de lectura
SFRAH = 0X00;
SFRAL = 0X00;
para(índice = 0; índice < bloque; índice++)
{
para( i = 0; i < BUF_SIZE; i ++)
{
TR0 = 1;
#ifdef ENABLE_IDLE //prueba
PCON |= 0x01;// en conducción inactiva p>
#endif
if(SFRFD != 0XFF)
{
verificar_ok = 0;
romper;
}
más
{
SFRAL ++;
si(SFRAL == 0) p>
SFRAH ++;
}
}
SFRAL ++;
si(SFRAL == 0)
SFRAH ++;
#endif
if(SFRFD !
}
}
if(verify_ok)
Devuelve 1;
else
Devuelve 0;
}
Bits secretos del programa.
void pgm_security_byte(BIT osc1)
{
TR0 = 0;
timer_enable = 0;//deshabilitar TR0 = 1
TH0 = TIMER_H_50uS;//establecer operación a 50uS
TL0 = TIMER_L_50uS;
SFRCN = 0X61;//escribir datos
SFRAH = 0xff;
SFRAL = 0xff;
si (osc1)
SFRFD = 0xf8
en caso contrario
< p; > SFRFD = 0x78;TR0 = 1;
#ifdef ENABLE_IDLE //prueba
PCON |= 0x01;
# endif
}
Programa APOROM, 128 BYTES a la vez
BIT pgm_ROM_block(BYTE dirección_alta, BYTE dirección_baja)
{
BYTE i, addr_high1, addr_low1;
BIT verificar_ok = 1;
addr_high1 = dirección_alta
addr_low1 = dirección_baja
TR0 = 0;
timer_ enable = 0; //Desactivar TR0 = 1
TH0_temp = TH0 = TIMER_H_50uS //Establecer operación en 50uS
TL0_temp = TL0 = TIMER_L_50uS;
SFRCN = 0X21; //Escribir datos
for( i = 0; i < 128; i ++)
{
SFRAH = addr_high1;
SFRAL = addr_low1;
SFRFD = ringbuf[i]; >
#ifdef ENABLE_IDLE //prueba
PCON |= 0x01;// en conducción inactiva
#endif
addr_low1 ++ ;
if(addr_low1 == 0)
addr_high1 ++;
}
//Verificar datos
addr_high1 = dirección_alta;
addr_low1 = dirección_low;
TH0 = TH0_temp = TIMER_H_ 1uS5;//establecer operación en 1.5uS
TL0 = TL0_temp = TIMER_L_1uS5 ;
SFRCN = 0X00;//Leer datos
for( i = 0; i < BUF_SIZE; i ++)
{
SFRAH = addr_high1;
SFRAL = addr_low1;
TR0 = 1;
#ifdef ENABLE_IDLE //prueba
PCON | = 0
x01;// en conducción en reposo
#endif
addr_low1 ++;
if(addr_low1 == 0)
addr_high1 + +;
if(SFRFD != ringbuf[i])
Devuelve 0;
}
for(i = 0; i < 128; i++)
{
ringbuf[i] = 0;
}
if(verify_ok)
Regresar 1;
}
V. Interfaz My ISP VC++:
Interfaz ENCRYPT, primero cifra el programa y luego conviértelo.
Interfaz de programación:
Herramienta WINBOND: