Red de conocimiento informático - Problemas con los teléfonos móviles - Lenguaje de programación Wren

Lenguaje de programación Wren

La función del perro guardián en el circuito del microcontrolador 51 es evitar que el sistema actúe después de que el programa se "desvía" o "falla", pero "desperta" el sistema mediante un reinicio.

Los microcontroladores de las series 89S51 y 89S52 tienen funciones de vigilancia. El registro A6H en el área de datos del chip tiene funciones de vigilancia. Es muy sencillo de usar:

# incluye ltreg 51. h. gt;

...

sfr WDTRST = 0xA6

...

void main()

{

wd trst = 0x 1E;; //Inicializa el mecanismo de vigilancia

wd trst = 0xe 1; //Inicializa el mecanismo de vigilancia

for( ;;)

{

wd trst = 0x 1E;; // Comando de alimentación del perro

wd trst = 0xe 1; // Comando de alimentación del perro

}

}

Como puedes ver, todo lo que tienes que hacer es agregar una instrucción de alimentación para perros al bucle grande del programa. Sin embargo, este perro guardián tiene funciones limitadas y no es muy fiable. Funciona con oscilador de cristal. Una vez que el oscilador de cristal no puede vibrar, no tiene ningún efecto.

En la práctica, se suele utilizar el método de vigilancia externa y hay muchos chips para elegir: MAX708 y MAX813.

, X25045...La programación específica depende del material de referencia del chip.

Por ejemplo, X25045 es un chip de vigilancia para el bus SPI y el terminal de reinicio está conectado al terminal de reinicio de la MCU. Puede elegir la interfaz IO adecuada para la entrada de datos SPI.

WREN 0x06 establece el bit de habilitación de escritura

WRDI 0x04 restablece el bit de habilitación de escritura.

RDSR 0x05 Registro de estado de lectura

WRSR 0x01 Registro de estado de escritura

Leer 0x03/0x0b La dirección de la página EEPROM interna durante una operación de lectura.

Escribe 0x02/0 la dirección de la página interna EEPROM durante la operación de escritura.

# incluir ltreg 51 . h gt;

sbit cs = p2^7

sbit entonces = p2^6

sbit sck = p2^5;

sbit si = p2^4;

#Define WREN 0x06 //

#Define WRDI 0x04 //

#Define RDSR 0x05 //

#Define WRSR 0x01 //

#Define READ0 0x03 //

#define READ1 0x0b //

#define WRITE0 0x02 //

#define WRITE1 0 //

#Define uchar carácter sin firmar

uchar byte leído() / /Leer un byte del dispositivo

{

bit bData

uchar ucLoop

uchar ucData

para (bucle UC = 0; ucLoop lt8; ucLoop )

{

SCK = 1;

SCK = 0;

bData = SO

ucData lt lt=1;

if(bData)

}

Devolver ucData

}

void write byte(uchar UC data)//Escribe un byte en el dispositivo

{

uchar ucLoop

for(UC loop = 0; ucLoop lt8; ucLoop )

{

if((UC data amp; 0x 80)== 0)//MSB se envía primero

Otro

SCK = 0;

SCK = 1;

ucData lt lt=1; p>}

uchar ReadReg()//Leer registro

{

uchar ucData

CS = 0;

escribir byte(RDSR);

Datos UC = leer byte();

CS = 1;

Devolver ucData

}

uchar escribir registro(uchar datos UC)//escribir registro

{

uchar ucTemp

UC temp = leer registro ();

if((UC temp amp; 0x 01)== 1)//El dispositivo está ocupado

Devuelve 0;

CS = 0 ;

write byte(WREN); //Al escribir WREN, cs debe tener un nivel alto

CS = 1;

CS = 0 ;

escribir byte(WRSR);

escribir byte(datos UC);

CS = 1;

Devolver 1;

}

void WriteEpm(uchar cData, uchar cAddress, bit bRegión)

/*

Escriba un byte, cData es el número escrito, dirección CAD es la dirección escrita, bRegión es la página*/

{

while((ReadReg() amp; 0x 01) = = 1); //El dispositivo está ocupado

CS = 0;

write byte(WREN); //Al escribir wren, cs debe tener un nivel alto

CS = 1;

CS = 0;

if(bRegión==0)

//Escribir dirección de página

Otros

escribir byte(dirección CAD);

escribir byte(cData);

SCK = 0; //

CS = 1;

}

uchar ReadEpm(uchar cAddress, bit bRegión)

/*Leer un byte, donde dirección de lectura es la dirección de lectura, bRegión es la página */

{

uchar cData

while((ReadReg() amp; 0x 01)= = 1);

CS = 0;

if(bRegión==0)

Otros

escribir byte(dirección CAD);

cData = leer byte();

CS = 1;

Devolver cData

}

Principal()

{

write reg(0x 00); //Establece el tiempo de vigilancia en 1,4 s

CS = 1;

CS = 0; //Restablecer perro guardián

}

Respuesta: Xu Zhimin 9514

Todas las series 89S tienen perros y las series 80C no tienen perros.

Entonces, 89S51 y 89S52 traen perros, pero ni 80C51 ni 80C52 traen perros.