Red de conocimientos turísticos - Conocimientos sobre calendario chino - Problemas en la programación de la comunicación serie RS232 entre el microcontrolador y el medidor de fase. No hay problema con el hardware, pero sí con el programa C. Ayúdenos a modificarlo.

Problemas en la programación de la comunicación serie RS232 entre el microcontrolador y el medidor de fase. No hay problema con el hardware, pero sí con el programa C. Ayúdenos a modificarlo.

/****************************************** *******

Si su medidor de fase solo necesita enviar estos tres p0 c0 l0 al principio, es decir, los datos posteriores serán enviados por el medidor de fase,

Si el microcontrolador está recibiendo, no hay gran problema en la parte de inicialización, pero hay un problema con la parte ReceStr() que recibe los datos. Debería ser que los datos no se pueden recibir, ¿verdad?

1. ¿El programa de inicialización del puerto serie primero determina si el valor de TH1 coincide con el oscilador de cristal del microcontrolador? 0xfd se usa para 9600bps en el modo donde la velocidad en baudios del oscilador de cristal de 11.0592M no se duplica (smod = 0)

Esto puede controlar el microcontrolador para enviar y la computadora configura 9600 para recibir. si la velocidad serial del microcontrolador está configurada correctamente

2. La función de recepción del puerto serial actual no puede recibir datos incluso si se ejecuta debido a que el puerto serial del microcontrolador solo tiene un búfer de un byte, el método de interrupción es. generalmente se usa para recibir datos.

Cada vez que se recibe un byte, el byte recibido se coloca en el búfer del programa a través de una interrupción.

¿Y por qué la variable receptora se escribe como flotante? Utilice char para un solo byte.

Si los datos enviados desde el medidor de fase son de tipo flotante, deberá convertirlos mediante su propio programa. El puerto serie solo enviará datos hexadecimales de 8 bits. Si el programa necesita ser muy preciso Si hay un retraso, es necesario depurar la función de retraso

Rutina de recepción del puerto serie:

Variables globales:

unsigned char x_Buf[50] = {0};

unsigned char * pX = x_Buf;

//volatile unsigned char posBf = 0;

Interrumpir servicio:

void Serial_ISR( void) interrupción 4

{

if(RI)

{

RI = 0;

* pX++ = SBUF;

if(pX == &x_Buf[49]+1) pX = x_Buf;

}

}

**************************************** ***********/

/***----------------------- ------------ -------

Inicialización del puerto serie

-------------- ------------ ----------------------*/

void InitUART (void)

{

SCON = 0x50;

TMOD |= 0x20;

TH1 = 0xFD

TR1 = 1;

ES = 1; / /Habilitación de interrupción del puerto serie

EA = 1;