Per quanto riguarda Baud rate

L

Livingston

Guest
Il codice riportato qui sotto, che è di 9600 baud rate i desideri modificare per 4.800
Per favore mi guida

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

# include <REG52.H> / * dichiarazioni registro speciale funzione * /
/ * Per il 8051 destinati derivata * /

# include / * dichiarazioni prototipo per funzioni di I / O * /# ifdef MONITOR51 / * Debugging con Monitor-51 ha bisogno * /
riserva di codice char [3] _at_ 0x23; / * spazio per interrompere la serie, se * /
# endif / * Exection Stop con Serial Intr.* /
/ * È attivata * /

/*------------------------------------------------
La funzione di ritardo
------------------------------------------------*/
void Delay (const RITARDO unsigned int)
(
unsigned int x, y;
for (x = 0; x <= RITARDO; x )
(
for (y = 0; y <= 120; y );
)
)

/*------------------------------------------------
La funzione C principale.L'esecuzione del programma inizia
qui, dopo l'inizializzazione stack.
------------------------------------------------*/
void main (void) (

/*------------------------------------------------
Impostare la porta seriale per 9600 baud a 11,0952 MHz.
------------------------------------------------*/
# ifndef MONITOR51
SCON = 0x42; / * SCON: Modo 1, 8-bit UART, attivare RCVR * /
TMOD | = 0x20; / * TMOD: timer 1, la modalità 2, 8-bit reload * /
TH1 = 0xFD; / * TH1: valore di reload per 9600 baud@11.0592 MHz * /
TR1 = 1; / * TR1: timer 1 run * /
TI = 1; / * TI: TI impostato per inviare prima di UART char * /
# endif

/*------------------------------------------------
Si noti che non è mai un programma incorporato uscite (perché
non esiste un sistema operativo per tornare a).Esso
devono loop ed eseguire sempre.
------------------------------------------------*/
while (1)
(
P1 ^ = 0x01; / * Toggle P1.0 ogni volta che la stampa * /
Delay (2000);
printf ( "GPRMC, UTC, data, ora, Lat, Long, Speed"); / * stampa "dati di tipo carattere" * /
)
)

 
Cambia il valore di TH1 ricarica da FDH a Fäh ..

Saluti,
IanP

Codice:

Alcune tariffe tipiche baud per un cristallo 11,0592:Baud rate SMOD TH1

---------------------

19.200 1 0FDH

9.600 0 0FDH

4800 0 0FAH

2400 0 0F4H

1200 0 0E8H

300 0 0A0H

 
Per favore mi può spiegare come calcolare il tasso di Bard è non vi è alcuna formula?

 
Queste informazioni (comprese le formule) è facilmente disponibile sul web ..
Ad esempio, qui:
"Impostare la porta seriale Baud Rate"
http://www.8052.com/tutser.phtml

Saluti,
IanP

 
Can you help me come scrivere un programma per ricevere e trasmettere i dati in UART di 89c52, 4800 baud rate

Per favore

 
Avete bisogno di funzioni albero:

void initBaudRate (void)
(
SCON = 0x42; / * SCON: Modo 1, 8-bit UART, attivare RCVR * /
TMOD | = 0x20; / * TMOD: timer 1, la modalità 2, 8-bit reload * /
TH1 = 0xFA; / * TH1: valore di reload per 4.800 baud@11.0592 MHz * /
TR1 = 1; / * TR1: timer 1 run * /
TI = 1; / * TI: TI impostato per inviare prima di UART char * /
)

unsigned uartSend char (uc unsigned char)
(
while (TI == 0)
; / * Attendere trasmettitore vuoto * /
TI = 0;
SBUF = uc; / * invia char * /
return uc;
)

unsigned uartGet char (void)
(
unsigned char uc;
while (RI == 0)
; / * Attendere char * /
uc = SBUF; / * Leggi il carattere ricevuto * /
RI = 0;
return uc;
)Aggiunto dopo 19 minuti:Le formule per baudrate in modi 1 e 3 sono:

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 se SMOD = 0
TH1 = 256 (fXTAL / 192) / BaudRate se SMOD = 1

È possibile utilizzare una funzione migliore initBaudRate:

void initBaudRate (baudrate unsigned)
(
PCON | = 0x80; / * SMOD = 1 * /
SCON = 0x42; / * SCON: Modo 1, 8-bit UART, attivare RCVR * /
TMOD | = 0x20; / * TMOD: timer 1, la modalità 2, 8-bit reload * /
TH1 = (unsigned char) (256 ((fXTAL / 384) / baudrate))
TR1 = 1; / * TR1: timer 1 run * /
TI = 1; / * TI: TI impostato per inviare prima di UART char * /
)

 
Hey dont know su C, ma in assemblea basta modificare il valore di scon

 

Welcome to EDABoard.com

Sponsor

Back
Top