English
Language : 

PIC16F688 Datasheet, PDF (83/174 Pages) Microchip Technology – 14-Pin Flash-Based, 8-Bit CMOS Microcontrollers with nanoWatt Technology
PIC16F688
10.2 USART Baud Rate Generator
(BRG)
The BRG is a dedicated 8-bit or 16-bit generator, that
supports both the Asynchronous and Synchronous
modes of the USART. By default, the BRG operates in
8-bit mode; setting the BRG16 bit (BAUDCTL<3>)
selects 16-bit mode.
The SPBRGH:SPBRG register pair controls the period
of a free running timer. In Asynchronous mode, bits
BRGH (TXSTA<2>) and BRG16 also control the baud
rate. In Synchronous mode, bit BRGH is ignored.
Table 10-1 shows the formula for computation of the
baud rate for different USART modes, which only apply
in Master mode (internally generated clock).
Given the desired baud rate and FOSC, the nearest
integer value for the SPBRGH:SPBRG registers can be
calculated using the formulas in Table 10-1. From this,
the error in baud rate can be determined. An example
calculation is shown in Example 10-1. Typical baud
rates and error values for the various asynchronous
modes are shown in Table 10-2. It may be advanta-
geous to use the high baud rate (BRGH = 1), or the
16-bit BRG to reduce the baud rate error, or achieve a
slow baud rate for a fast oscillator frequency.
Writing a new value to the SPBRGH:SPBRG registers
causes the BRG timer to be reset (or cleared). This
ensures 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 problem, check the status of the RCIDL bit
and make sure that the receive operation is IDLE
before changing the system clock.
10.2.1 SAMPLING
The data on the RC5/RX/DT pin is sampled three times
by a majority detect circuit to determine if a high or a
low level is present at the RX pin.
EXAMPLE 10-1: CALCULATING BAUD
RATE ERROR
For a device with FOSC of 16 MHz, desired baud rate
of 9600, Asynchronous mode, 8-bit BRG:
Desired Baud Rate
=
----------------------------F----O----S---C-----------------------------
64([SPBRGH:SPBRG] + 1)
Solving for SPBRGH:SPBRG:
----------------F----O----S---C------------------
X = -D----e---s--i--r--e---d----B----a---u---d----R----a---t--e- – 1
64
1---6---0----0--0---0---0---0--
=
------9----6---0--0--------
64
–
1
= [25.042] = 25
Calculated Baud Rate
=
--1---6---0---0---0---0---0---0---
64(25 + 1)
= 9615
Error = C-----a--l--c---.---B---a---u----d----R----a---t-e-----–----D----e---s--i--r--e---d-----B---a---u---d-----R---a---t--e---
Desired Baud Rate
=
(---9---6---1---5----–-----9---6---0---0---)-
9600
=
0.16%
Note: When BRGH = 1 and BRG16 = 1 then
SPBRGH:SPBRG values ≤ 4 are invalid.
TABLE 10-1: BAUD RATE FORMULAS
Configuration Bits
SYNC
BRG16
BRGH
BRG/USART Mode
0
0
0
0
1
1
Legend:
0
0
8-bit/Asynchronous
0
1
8-bit/Asynchronous
1
0
16-bit/Asynchronous
1
1
16-bit/Asynchronous
0
x
8-bit/Synchronous
1
x
16-bit/Synchronous
x = Don’t care, n = value of SPBRGH:SPBRG register pair
Baud Rate Formula
FOSC/[64 (n+1)]
FOSC/[16 (n+1)]
FOSC/[4 (n+1)]
 2004 Microchip Technology Inc.
Preliminary
DS41203B-page 81