Quiero establecer una comunicación en serie entre un microcontrolador de 8 bits, AT89S52 y una PC. Estoy usando un oscilador de cristal de 8 MHz de frecuencia. Para el cálculo de la velocidad en baudios, he utilizado la siguiente fórmula:
Fbaud = (2^SMOD * Fosc)/(12*32*(256-TH1))
En mi caso
SMOD = 1;
Fbaud =9600; // baud rate
Fosc = 8MHz // oscillator frequency
Entonces, usando la fórmula TH1 = 251.659722222
He usado TH1 = 251
es decir, 0xFB
y también 252
es decir, 0xFC
. En ambos casos, obtengo valores de basura en el terminal Hyper.
He usado el siguiente código ::
#include <REGX52.h>
#include <stdio.h>
void serial_ini();
void serial_ini()
{
SCON = 0x50; // mode 1 , 8 bit UART, enanle receiver
TMOD = 0x20; // timer 1 mode 2(auto reload mode)
TH1 = 0xFB ; // baud rate 9600 // crystal = 8.000 mhz..
TR1 = 1; // Timer1 run
TI = 1;
}
void main()
{
serial_ini();
while(1)
{
SBUF = 0x41;
while(TI==0);
TI=0;
}
}
Por favor, sugiérame cómo calcular el TH1
para el microcontrolador AT89S52.