Código del microcontrolador STC 89c52rc
Ola La velocidad de bits está establecida en 9600, sin verificación de paridad, oscilador de cristal de 11,0592 MHz, STC89C52.
El microcontrolador recibe el carácter "a" a través del puerto serie, y el microcontrolador retroalimenta "a" y enciende p1.0 =1.
Si el microcontrolador no recibe "a" en 30 segundos p 1.0 = 0.
Preguntas: 1. Los retrasos y los puertos deben cambiarse según su situación real.
2. Después del encendido o reinicio, el primer tiempo de conmutación de P1.0=0 es más largo que el tiempo de conmutación posterior, lo cual es inconsistente. Será normal después de eso
*************************************** ***** ****************************/
# incluir & ltreg52.h & gt p>
#Definir carácter uchar sin signo
#Definir uint entero sin signo
uchar buf
sbit out = p1^0;
Retraso nulo (carácter sin signo) //11.0592 MHz, con retardo de parámetro.
{
Caracteres sin signo I, j, k
for(k = s; k & gt0;k -)
{
I = 180;
j = 73
Hacer
{
mientras(-j ) ;
} while(-I);
}
}
Administrador no válido (no válido)
{
SCON = 0x 50; //Establece el modo de funcionamiento del puerto serie
PCON = 0x 00; //La velocidad en baudios no se multiplica
TMOD = 0x 20; //El temporizador 1 funciona en modo de recarga automática de 8 bits para generar velocidad en baudios.
EA = 1;
ES = 1; //Habilitar interrupciones del puerto serie
TL 1 = 0x FD
th 1; = 0x FD; //Velocidad en baudios 9600
tr 1 = 1;
mientras(1)
{
Tiempo de retardo( 100); // Retraso, esto debe modificarse al valor que necesite según la situación real.
out = 0; //Arranque normal. Después del retraso, P1.0 será igual a 0.
//Después de recibir A del puerto serie, P1.0 será igual a 1 inmediatamente.
//Entonces, si A no se recibe nuevamente dentro del tiempo de retardo, el programa hará que P1.0 sea igual a 0 nuevamente y realizará un bucle. . .
}
}
/*************************** *****************************
Función de servicio de interrupción en serie
*** ********************************************** ** *****/
Interrupción serie() no válida 4
{
ES = 0 //Desactivar interrupción serie
RI = 0; //Borrar el indicador de aceptación de serie.
buf = SBUF//Obtener datos del buffer serie
Cambiar (buffer)
{
caso 0x 61: out = 1; break; //Se recibe el carácter A, lo que hace que P2.0 sea alto (0x61 es la forma hexadecimal del código ASCII de "A")
//case 0x 32:out = 0; //Se recibe el carácter 2, lo que hace que P2.0 tenga un nivel bajo (para pruebas)
Valor predeterminado: interrupción//Se reciben otros datos, no se realiza ninguna acción.
}
ES = 1; //Permitir interrupciones del puerto serie
}