encuentre TH1 en el microcontrolador AT89s52 en comunicación en serie

3

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.

    
pregunta user24215

1 respuesta

1

Toda la siguiente información está disponible en el Atmel 8051 Microcontrollers Hardware Manual al que se hace referencia en la Sección 9 de Hoja de datos AT89S52 como el lugar para buscar información sobre los temporizadores 0 y 1.

Nota: asumo que lo que tienes en los comentarios es lo que estás tratando de hacer.

En primer lugar, tu fórmula es incorrecta. Si está intentando usar el Modo 1, SMOD no entra en él. Aun así, SMOD está en PCON que no está configurando (que mencionó MikeJ-UK).

  

La velocidad en baudios en el Modo 0 es fija:

     

La velocidad en baudios en el Modo 2 depende del valor del bit SMOD en Especial   Función de registro PCON.

     

Si SMOD = 0 (que es su valor al restablecerse), la velocidad en baudios es 1/64   Frecuencia del oscilador. Si SMOD = 1, la velocidad en baudios es 1/32 del   frecuencia del oscilador.

     

En el 80C51, las tasas de baudios en los modos 1 y 3 están determinadas por la tasa de desbordamiento del temporizador 1. En el caso de Timer2, estos baudios pueden ser   determinado por el temporizador 1, o por el temporizador 2, o por ambos (uno para transmitir y   el otro para recibir).

Emphasis mine.

A continuación, su SCON no coincide con el comentario:

Tienes:

SCON = 0x50

Lo que equivale a:

 FE SM0 SM1 SM2 REN TB8 RB8 TI  RI
 0   1   0   1   0   0   0   0   0

Así que estás en Modo 2, UART de 9 bits con la velocidad en baudios dada como:

F CPU PERIPH / 32 or / 16

Y la recepción serial deshabilitada.

Y luego tienes:

TI = 1

Lo que no debes hacer. Usted borra el indicador de interrupción. Es establecido por hardware.

Averigüe exactamente lo que quiere lograr y eche un vistazo a los manuales. Probablemente deba volver a trabajar su fórmula, cambiar SCON y luego establecer TH1 y TL1 .

    
respondido por el embedded.kyle

Lea otras preguntas en las etiquetas