Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Changing code with 9600 baud rate to 4800

Status
Not open for further replies.

Livingston

Full Member level 2
Full Member level 2
Joined
Nov 26, 2007
Messages
129
Helped
3
Reputation
6
Reaction score
1
Trophy points
1,298
Location
Chennai-India
Activity points
2,104
Regarding Baud rate

The code shown below which is of 9600 baud rate i want to change for 4800
Please guide me

/*------------------------------------------------------------------------------
Serial.c
------------------------------------------------------------------------------*/

#include <REG52.H> /* special function register declarations */
/* for the intended 8051 derivative */

#include <stdio.h> /* prototype declarations for I/O functions */


#ifdef MONITOR51 /* Debugging with Monitor-51 needs */
char code reserve [3] _at_ 0x23; /* space for serial interrupt if */
#endif /* Stop Exection with Serial Intr. */
/* is enabled */

/*------------------------------------------------
The delay function
------------------------------------------------*/
void Delay (const unsigned int DELAY)
{
unsigned int x, y;
for (x = 0; x <= DELAY; x++)
{
for (y = 0; y <= 120; y++);
}
}

/*------------------------------------------------
The main C function. Program execution starts
here after stack initialization.
------------------------------------------------*/
void main (void) {

/*------------------------------------------------
Setup the serial port for 9600 baud at 11.0952 MHz.
------------------------------------------------*/
#ifndef MONITOR51
SCON = 0x42; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592 MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
#endif

/*------------------------------------------------
Note that an embedded program never exits (because
there is no operating system to return to). It
must loop and execute forever.
------------------------------------------------*/
while (1)
{
P1 ^= 0x01; /* Toggle P1.0 each time we print */
Delay(2000);
printf ("Gprmc, utc, date, Time, Lat, Long, Speed"); /*Print "Character Data" */
}
}
 

Re: Regarding Baud rate

Change the TH1 reload value from FDh to FAh ..

Regards,
IanP

Code:
        Some typical baud rates for an 11.0592 crystal:

           Baud rate  SMOD   TH1
           ---------------------
             19200      1   0FDH
              9600      0   0FDH
              4800      0   0FAH
              2400      0   0F4H
              1200      0   0E8H
               300      0   0A0H
 

Re: Regarding Baud rate

Please can you explain me how to calculate the bard rate Is there is any formula?
 

Re: Regarding Baud rate

This info (including formulas) is readily available on the web ..
For example, here:
"Setting the Serial Port Baud Rate"
**broken link removed**

Regards,
IanP
 

Re: Regarding Baud rate

Can you help me how to write a program to receive and to transmit the data in uart of 89c52, 4800 baud rate

Please
 

Re: Regarding Baud rate

You need tree functions:

void initBaudRate(void)
{
SCON = 0x42; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFA; /* TH1: reload value for 4800 baud @ 11.0592 MHz */
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
}

unsigned char uartSend(unsigned char uc)
{
while(TI==0)
; /* wait until transmiter empty */
TI = 0;
SBUF = uc; /* send char */
return uc;
}

unsigned char uartGet(void)
{
unsigned char uc;
while(RI==0)
; /* wait for char */
uc =SBUF; /* read the received char */
RI = 0;
return uc;
}

Added after 19 minutes:

The formulas for baudrate in modes 1 and 3 are:

BaudRate = (1+SMOD)•(fXTAL/ 12 ) / (32•(256-TH1)) = (1+SMOD)•(fXTAL/ 384) / (256-TH1)

TH1 = 256 – (1+SMOD)•(fXTAL/ 384) / BaudRate

TH1 = 256 – (fXTAL/ 384) / BaudRate if SMOD = 0
TH1 = 256 – (fXTAL/ 192) / BaudRate if SMOD = 1

You can use a better initBaudRate function:

void initBaudRate(unsigned baudrate)
{
PCON |= 0x80; /* SMOD = 1 */
SCON = 0x42; /* SCON: mode 1, 8-bit UART, enable rcvr */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = (unsigned char)(256 – ((fXTAL/ 384) / BaudRate))
TR1 = 1; /* TR1: timer 1 run */
TI = 1; /* TI: set TI to send first char of UART */
}
 

    Livingston

    Points: 2
    Helpful Answer Positive Rating
Re: Regarding Baud rate

hey i dont know about c but in assembly you just change the value in scon
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top