/*****************************************************************************
 *  Baud_TH1.c
 *  Author: Alexander Belchenko, 2004
 *  http://onembedding.com/tools/utility/baud_th1/
 *****************************************************************************
 */

#include "stdio.h"
#include "math.h"
#include "conio.h"

/*--------------------------------------------------------------------------*/
main()
{
    float           Fosc, div, baud;

    float           th1, baud_real, error;
    unsigned int    TH1;

    printf("Calculate baud const for Fosc\n\n");

    while(1)
    {
        /* Dialogue */
        printf(" Enter Fosc, MHz > ");
        scanf("%f", &Fosc);

        printf(" Enter needed baud rate, bps > ");
        scanf("%f", &baud);

        printf(" Enter divisor for Timer osc (4/12) > ");
        scanf("%f", &div);

        printf("\n");

        /* Calculate */
        th1 = 256 - Fosc * 1e6 / div / baud / 16;
        TH1 = (th1 + 0.5);
        baud_real = Fosc * 1e6 / 16 / div / (256 - TH1);
        error = 100 * fabs(baud - baud_real) / baud;

        /* Results */
        printf("TH1 = %d (%f)\n", TH1, th1);
        printf("Baud real = %f\n", baud_real);
        printf("error = %f %%\n", error);

        printf("\n Repeat calculation (1/0)?\n\n");
        if (getch() == '0') break;
    }
    return 0;
}
/*--------------------------------------------------------------------------*/