Red de conocimientos turísticos - Conocimientos sobre calendario chino - El microcontrolador envía un dato y el asistente de depuración del puerto serie recibe dos datos. Por favor vea el código
El microcontrolador envía un dato y el asistente de depuración del puerto serie recibe dos datos. Por favor vea el código
Dado que el controlador de interrupciones no se escribe cuando se completa la transmisión, la interrupción del puerto serie se activa para ejecutarse en la dirección 0x0023, lo que equivale a un reinicio. Entonces habrá 2 veces. (La segunda vez, debido a que TI ya es 1, la interrupción no se activará)
Solución
1. Apague la interrupción del puerto serie
EA=0. ;
ES=0;
2. Escriba una función de procesamiento de interrupción del puerto serie
void UARTInterrupt(void) interrupción 4
{
if(RI)// El bit de bandera de RI es 1, lo que significa recibir datos
{
RI = 0 // Borra el bit de bandera de recepción;
// Agregue la función de manejo de interrupciones aquí
}
else
TI = 0; // Si RI no es 1, es es una interrupción de finalización de la transmisión. Borrar TI (indicador de finalización de transmisión)
}
Borrar TI después de que se complete la transmisión
SBUF = 'i';
while( !TI);//Esperando que se complete el envío
TI = 0;//borrar TI cuando se complete el envío
De esta manera puede enviar varios bytes sin conflictos.