The Baud Rate Generator (BRG) is an 8-bit or 16-bit timer that is
dedicated to the support of both the asynchronous and synchronous EUSART operations. By
default, the BRG operates in 8-bit mode. Setting the BRG16
bit selects 16-bit mode.
The SPxBRGH:SPxBRGL register pair determines the period of the
free-running baud rate timer. In Asynchronous mode, the multiplier of the baud rate period
is determined by both the BRGH
and the BRG16 bits. In Synchronous mode, the BRGH bit is ignored.
Table 32-1 contains the formulas for determining the baud rate. Equation 32-1 provides a sample calculation for determining the baud rate and baud
rate error.
Typical baud rates and error values for various Asynchronous modes
have been computed and are shown in the table below. It may be advantageous to use the high
baud rate (BRGH = 1
) or the 16-bit BRG (BRG16 =
1
) to reduce the baud rate error. The 16-bit BRG
mode is used to achieve slow baud rates for fast oscillator frequencies. The BRGH bit is
used to achieve very high baud rates.
Writing a new value to the SPxBRGH:SPxBRGL register pair causes the
BRG timer to be reset (or cleared). This ensures that the BRG does not wait for a timer
overflow before outputting the new baud rate.
If the system clock is changed during an active receive operation, a
receive error or data loss may result. To avoid this, check the status of the Receive Idle
Flag (RCIDL ) bit to make sure the receive operation is idle before changing the system
clock.
Equation 32-1. Calculating Baud Rate Error
For a device with FOSC of 16 MHz, desired baud rate of 9600,
Asynchronous mode, 8-bit BRG:
D
e
s
i
r
e
d
B
a
u
d
r
a
t
e
=
F
O
S
C
64
×
(
S
P
x
B
R
G
+
1
)
Solving for SPxBRG:
S
P
x
B
R
G
=
F
O
S
C
64
×
D
e
s
i
r
e
d
B
a
u
d
r
a
t
e
−
1
S
P
x
B
R
G
=
16000000
64
×
9600
−
1
S
P
x
B
R
G
=
25.042
≃
25
C
a
l
c
u
l
a
t
e
d
B
a
u
d
r
a
t
e
=
16000000
64
×
(
25
+
1
)
C
a
l
c
u
l
a
t
e
d
B
a
u
d
r
a
t
e
=
9615
E
r
r
o
r
=
C
a
l
c
u
l
a
t
e
d
B
a
u
d
r
a
t
e
−
D
e
s
i
r
e
d
B
a
u
d
r
a
t
e
D
e
s
i
r
e
d
B
a
u
d
r
a
t
e
E
r
r
o
r
=
9615
−
9600
9600
E
r
r
o
r
=
0.16
%
Table 32-1. Baud Rate Formulas
Configuration Bits
BRG/EUSART Mode
Baud Rate Formula
SYNC
BRG16
BRGH
0
0
0
8-bit/Asynchronous
FOSC /[64 (n+1)]
0
0
1
8-bit/Asynchronous
FOSC /[16 (n+1)]
0
1
0
16-bit/Asynchronous
0
1
1
16-bit/Asynchronous
FOSC /[4 (n+1)]
1
0
x
8-bit/Synchronous
1
1
x
16-bit/Synchronous
Note: x = Don’t
care, n = value of SPxBRGH:SPxBRGL register pair.
Table 32-2. Sample Baud Rates for Asynchronous Modes
Baud
Rate
SYNC =
0
, BRGH = 0
, BRG16 =
0
FOSC = 32.000 MHz
FOSC = 20.000 MHz
FOSC = 18.432 MHz
FOSC = 11.0592 MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
—
—
—
—
—
—
—
—
—
—
—
—
1200
—
—
—
1221
1.73
255
1200
0.00
239
1200
0.00
143
2400
2404
0.16
207
2404
0.16
129
2400
0.00
119
2400
0.00
71
9600
9615
0.16
51
9470
-1.36
32
9600
0.00
29
9600
0.00
17
10417
10417
0.00
47
10417
0.00
29
10286
-1.26
27
10165
-2.42
16
19.2k
19.23k
0.16
25
19.53k
1.73
15
19.20k
0.00
14
19.20k
0.00
8
57.6k
55.55k
-3.55
3
—
—
—
57.60k
0.00
7
57.60k
0.00
2
115.2k
—
—
—
—
—
—
—
—
—
—
—
—
Baud
Rate
SYNC =
0
, BRGH = 0
, BRG16 =
0
FOSC = 8.000 MHz
FOSC = 4.000 MHz
FOSC = 3.6864 MHz
FOSC = 1.000 MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
—
—
—
300
0.16
207
300
0.00
191
300
0.16
51
1200
1202
0.16
103
1202
0.16
51
1200
0.00
47
1202
0.16
12
2400
2404
0.16
51
2404
0.16
25
2400
0.00
23
—
—
—
9600
9615
0.16
12
—
—
—
9600
0.00
5
—
—
—
10417
10417
0.00
11
10417
0.00
5
—
—
—
—
—
—
19.2k
—
—
—
—
—
—
19.20k
0.00
2
—
—
—
57.6k
—
—
—
—
—
—
57.60k
0.00
0
—
—
—
115.2k
—
—
—
—
—
—
—
—
—
—
—
—
Baud
Rate
SYNC = 0
,
BRGH = 1
, BRG16 = 0
FOSC = 32.000
MHz
FOSC = 20.000
MHz
FOSC = 18.432
MHz
FOSC = 11.0592
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
—
—
—
—
—
—
—
—
—
—
—
—
1200
—
—
—
—
—
—
—
—
—
—
—
—
2400
—
—
—
—
—
—
—
—
—
—
—
—
9600
9615
0.16
207
9615
0.16
129
9600
0.00
119
9600
0.00
71
10417
10417
0.00
191
10417
0.00
119
10378
-0.37
110
10473
0.53
65
19.2k
19.23k
0.16
103
19.23k
0.16
64
19.20k
0.00
59
19.20k
0.00
35
57.6k
57.14k
-0.79
34
56.82k
-1.36
21
57.60k
0.00
19
57.60k
0.00
11
115.2k
117.64k
2.12
16
113.64k
-1.36
10
115.2k
0.00
9
115.2k
0.00
5
Baud
Rate
SYNC = 0
,
BRGH = 1
, BRG16 = 0
FOSC = 8.000
MHz
FOSC = 4.000
MHz
FOSC = 3.6864
MHz
FOSC = 1.000
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
—
—
—
—
—
—
—
—
—
300
0.16
207
1200
—
—
—
1202
0.16
207
1200
0.00
191
1202
0.16
51
2400
2404
0.16
207
2404
0.16
103
2400
0.00
95
2404
0.16
25
9600
9615
0.16
51
9615
0.16
25
9600
0.00
23
—
—
—
10417
10417
0.00
47
10417
0.00
23
10473
0.53
21
10417
0.00
5
19.2k
19231
0.16
25
19.23k
0.16
12
19.2k
0.00
11
—
—
—
57.6k
55556
-3.55
8
—
—
—
57.60k
0.00
3
—
—
—
115.2k
—
—
—
—
—
—
115.2k
0.00
1
—
—
—
Baud
Rate
SYNC = 0
,
BRGH = 0
, BRG16 = 1
FOSC = 32.000
MHz
FOSC = 20.000
MHz
FOSC = 18.432
MHz
FOSC = 11.0592
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
300.0
0.00
6666
300.0
-0.01
4166
300.0
0.00
3839
300.0
0.00
2303
1200
1200
-0.02
3332
1200
-0.03
1041
1200
0.00
959
1200
0.00
575
2400
2401
-0.04
832
2399
-0.03
520
2400
0.00
479
2400
0.00
287
9600
9615
0.16
207
9615
0.16
129
9600
0.00
119
9600
0.00
71
10417
10417
0.00
191
10417
0.00
119
10378
-0.37
110
10473
0.53
65
19.2k
19.23k
0.16
103
19.23k
0.16
64
19.20k
0.00
59
19.20k
0.00
35
57.6k
57.14k
-0.79
34
56.818
-1.36
21
57.60k
0.00
19
57.60k
0.00
11
115.2k
117.6k
2.12
16
113.636
-1.36
10
115.2k
0.00
9
115.2k
0.00
5
Baud
Rate
SYNC = 0
,
BRGH = 0
, BRG16 = 1
FOSC = 8.000
MHz
FOSC = 4.000
MHz
FOSC = 3.6864
MHz
FOSC = 1.000
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
299.9
-0.02
1666
300.1
0.04
832
300.0
0.00
767
300.5
0.16
207
1200
1199
-0.08
416
1202
0.16
207
1200
0.00
191
1202
0.16
51
2400
2404
0.16
207
2404
0.16
103
2400
0.00
95
2404
0.16
25
9600
9615
0.16
51
9615
0.16
25
9600
0.00
23
—
—
—
10417
10417
0.00
47
10417
0.00
23
10473
0.53
21
10417
0.00
5
19.2k
19.23k
0.16
25
19.23k
0.16
12
19.20k
0.00
11
—
—
—
57.6k
55556
-3.55
8
—
—
—
57.60k
0.00
3
—
—
—
115.2k
—
—
—
—
—
—
115.2k
0.00
1
—
—
—
Baud
Rate
SYNC = 0
,
BRGH = 1
, BRG16 = 1
or SYNC =
1
, BRG16 = 1
FOSC = 32.000
MHz
FOSC = 20.000
MHz
FOSC = 18.432
MHz
FOSC = 11.0592
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
300.0
0.00
26666
300.0
0.00
16665
300.0
0.00
15359
300.0
0.00
9215
1200
1200
0.00
6666
1200
-0.01
4166
1200
0.00
3839
1200
0.00
2303
2400
2400
0.01
3332
2400
0.02
2082
2400
0.00
1919
2400
0.00
1151
9600
9604
0.04
832
9597
-0.03
520
9600
0.00
479
9600
0.00
287
10417
10417
0.00
767
10417
0.00
479
10425
0.08
441
10433
0.16
264
19.2k
19.18k
-0.08
416
19.23k
0.16
259
19.20k
0.00
239
19.20k
0.00
143
57.6k
57.55k
-0.08
138
57.47k
-0.22
86
57.60k
0.00
79
57.60k
0.00
47
115.2k
115.9k
0.64
68
116.3k
0.94
42
115.2k
0.00
39
115.2k
0.00
23
Baud
Rate
SYNC = 0
,
BRGH = 1
, BRG16 = 1
or SYNC =
1
, BRG16 = 1
FOSC = 8.000
MHz
FOSC = 4.000
MHz
FOSC = 3.6864
MHz
FOSC = 1.000
MHz
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
Actual
Rate
%
Error
SPBRG
value
(decimal)
300
300.0
0.00
6666
300.0
0.01
3332
300.0
0.00
3071
300.1
0.04
832
1200
1200
-0.02
1666
1200
0.04
832
1200
0.00
767
1202
0.16
207
2400
2401
0.04
832
2398
0.08
416
2400
0.00
383
2404
0.16
103
9600
9615
0.16
207
9615
0.16
103
9600
0.00
95
9615
0.16
25
10417
10417
0
191
10417
0.00
95
10473
0.53
87
10417
0.00
23
19.2k
19.23k
0.16
103
19.23k
0.16
51
19.20k
0.00
47
19.23k
0.16
12
57.6k
57.14k
-0.79
34
58.82k
2.12
16
57.60k
0.00
15
—
—
—
115.2k
117.6k
2.12
16
111.1k
-3.55
8
115.2k
0.00
7
—
—
—