Me gustaría saber si una velocidad de transmisión de 9600 es tan rápida para una MCU 8051 que utiliza un cristal de 11.0952 MHz. ¿Por qué? He observado cierta incoherencia en el comportamiento de mi MCU, ya que cuando envío un conjunto de caracteres en busca de un personaje en particular para realizar ciertas operaciones, descubro que mi MCU no realiza la operación requerida. Lo que significa que hubo un mal lugar a lo largo de la línea durante la recepción. Entonces hice alguna rutina en serie. Envié un "ABC" desde el terminal a la MCU, que debería transmitir al terminal un incremento de cada carácter enviado, por lo tanto, debería dar "BCD". Pero esto es lo que obtuve consistentemente - "BD" falta "C". Lo que significa que la MCU perdió "B". También envié otro conjunto de caracteres y descubrí que la MCU pierde algunos caracteres. Cuál podría ser la causa de esto. ¿Podría ser la velocidad de transmisión o en mi código. ¿Cómo puedo rectificar esto?
Aquí está el código.
void initUART()
{
SCON = 0x50;
TMOD = 0x20;
TH1 = TL1 =-3;
TR1 = 1;
}
void sendCHAR()
{
SBUF = uartBUFF[s];
while(!TI);
TI=0;
}
void serial_isr(void) interrupt 4
{
if (RI)
{
RI = 0;
tmpBUFF = SBUF;
charFLAG=1;
}
}
main()
{
IE= 0x91;
initUART();
while (1)
{
if(charFLAG)
{
SBUF = (tmpBUFF+1);
while(!TI);
TI=0;
charFLAG = 0;
}
}
}
¡Gracias!