12.1 Gerador de Taxa de Transmissão (BRG) do USART dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A
Tradução: Maria Elisa - Assessoria em Inglês e Alemão
Revisão: Renato Kodaira
O BRG dos microcontroladores PIC16F627A, PIC16F628A e PIC16F648A suporta ambos os modos Assíncrono e Síncrono do USART. Consiste em um gerador de taxa de transmissão (Baud Rate Generator) com 8 bits dedicados. O registrador SPBRG controla o período de um temporizador de 8 bits de funcionamento livre. No modo Assíncrono, o bit BRGH (TXSTA<2>) também controla a taxa de transmissão. No modo Síncrono, o bit BRGH é ignorado. A Tabela 12.1 apresenta a fórmula para o cálculo da taxa de transmissão para diferentes modos do USART, a qual se aplica somente ao modo Mestre (clock interno).
Dada a taxa de transmissão desejada, e a FOSC, o valor inteiro mais próximo para o registrador SPBRG pode ser calculado utilizando-se a fórmula na Tabela 12.1. A partir deste, o erro na taxa de transmissão pode ser determinado.
O Exemplo 12.1 apresenta o cálculo do erro da taxa de transmissão para as seguintes condições:
-
FOSC = 16 MHz
-
Taxa de Transmissão Desejada = 9600
-
BRGH = 0
-
SYNC = 0
Pode ser vantajoso se utilizar a alta taxa de transmissão (BRGH = 1) mesmo para clocks de transmissão mais lenta. Isto porque a equação FOSC/(16(x + 1)) pode reduzir o erro da taxa de transmissão em alguns casos.
A escrita de um novo valor no registrador SPBRG faz o temporizador BRG ser reinicializado (ou apagado) e assegura que o BRG não espere por um overflow do temporizador para dar saída a uma nova taxa de transmissão.
Os dados no pino RB1/RX/DT são amostrados três vezes por um circuito detector de maioria, a fim de determinar se um nível alto ou baixo está presente no pino RX.
SYNC |
BRGH = 0 (Baixa Velocidade) |
BRGH = 1 (Alta Velocidade) |
0 |
(Assíncrono) Taxa de Transmissão = FOSC/(64(x + 1)) |
Taxa de Transmissão = FOSC/(16(x + 1)) |
1 |
(Síncrono) Taxa de Transmissão = FOSC/(4(x + 1)) |
NA |
TABELA 12.2: REGISTRADORES ASSOCIADOS AO GERADOR DE TAXA DE TRANSMISSÃO
Endereço |
Nome |
Bit 7 |
Bit 6 |
Bit 5 |
Bit 4 |
Bit 3 |
Bit 2 |
Bit 1 |
Bit 0 |
Valor na POR |
Valor em Todas as Outras Reinicializações |
98h |
TXSTA |
CSRC |
TX9 |
TXEN |
SYNC |
--- |
BRGH |
TRMT |
TX9D |
0000 -010 |
0000 -010 |
18h |
RCSTA |
SPEN |
RX9 |
SREN |
CREN |
ADEN |
FERR |
OERR |
RX9D |
0000 000x |
0000 000x |
99h |
SPBRG |
Registrador Gerador de Taxa de Transmissão |
0000 0000 |
0000 0000 |
Legenda:
x = desconhecido
- = não implementado, lido como '0'
células sombreadas = não utilizadas para o BRG
TABELA 12.3: TAXAS DE TRANSMISSÃO PARA O MODO SÍNCRONO
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 20 MHz |
FOSC = 16 MHz |
FOSC = 10 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
1,2 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
2,4 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
9,6 |
NA |
--- |
--- |
NA |
--- |
--- |
9,766 |
+1,73% |
255 |
19,2 |
19,53 |
+1,73% |
255 |
19,23 |
0,16% |
207 |
19,23 |
+0,16% |
129 |
76,8 |
76,92 |
+0,16% |
64 |
76,92 |
+0,16% |
51 |
75,76 |
-1,36% |
32 |
96 |
96,15 |
+0,16% |
51 |
95,24 |
-0,79% |
41 |
96,15 |
+0,16% |
25 |
300 |
294,1 |
-1,96% |
16 |
307,69 |
+2,56% |
12 |
312,5 |
+4,17% |
7 |
500 |
500 |
0 |
9 |
500 |
0 |
7 |
500 |
0 |
4 |
ALTA |
5000 |
--- |
0 |
4000 |
--- |
0 |
2500 |
--- |
0 |
BAIXA |
19,53 |
--- |
255 |
15,625 |
--- |
255 |
9,766 |
--- |
255 |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 7,15909 MHz |
FOSC = 5,0688 MHz |
FOSC = 4 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
1,2 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
2,4 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
9,6 |
9,622 |
+0,23% |
185 |
9,6 |
0 |
131 |
9,615 |
+0,16% |
103 |
19,2 |
19,24 |
+0,23% |
92 |
19,2 |
0 |
65 |
19,231 |
+0,16% |
51 |
76,8 |
77,82 |
+1,32% |
22 |
79,2 |
+3,13% |
15 |
75,923 |
+0,16% |
12 |
96 |
94,20 |
-1,88% |
18 |
97,48 |
+1,54% |
12 |
100 |
+4,17% |
9 |
300 |
298,3 |
-0,57% |
5 |
316,8 |
+5,60% |
3 |
NA |
--- |
--- |
500 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
ALTA |
1789,8 |
--- |
0 |
1267 |
--- |
0 |
100 |
--- |
0 |
BAIXA |
6,991 |
--- |
255 |
4,950 |
--- |
255 |
3,906 |
--- |
255 |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 3,579545 MHz |
FOSC = 1 MHz |
FOSC = 32,768 kHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
NA |
--- |
--- |
NA |
--- |
--- |
0,303 |
+1,14% |
26 |
1,2 |
NA |
--- |
--- |
1,202 |
+0,16% |
207 |
1,170 |
-2,48% |
6 |
2,4 |
NA |
--- |
--- |
2,404 |
+0,16% |
103 |
NA |
--- |
--- |
9,6 |
9,622 |
+0,23% |
92 |
9,615 |
+0,16% |
25 |
NA |
--- |
--- |
19,2 |
19,04 |
-0,83% |
46 |
19,24 |
+0,16% |
12 |
NA |
--- |
--- |
76,8 |
74,57 |
-2,90% |
11 |
83,34 |
+8,51% |
2 |
NA |
--- |
--- |
96 |
99,43 |
+3,57% |
8 |
NA |
--- |
--- |
NA |
--- |
--- |
300 |
298,3 |
-0,57% |
2 |
NA |
--- |
--- |
NA |
--- |
--- |
500 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
ALTA |
894,9 |
--- |
0 |
250 |
--- |
0 |
8,192 |
--- |
0 |
BAIXA |
3,496 |
--- |
255 |
0,9766 |
--- |
255 |
0,032 |
--- |
255 |
TABELA 12.4: TAXAS DE TRANSMISSÃO PARA O MODO ASSÍNCRONO (BRGH = 0)
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 20 MHz |
FOSC = 16 MHz |
FOSC = 10 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
1,2 |
1,221 |
+1,73% |
255 |
1,202 |
+0,16% |
207 |
1,202 |
+0,16% |
129 |
2,4 |
2,404 |
+0,16% |
129 |
2,404 |
+0,16% |
103 |
2,404 |
+0,16% |
64 |
9,6 |
9,469 |
-1,36% |
32 |
9,615 |
+0,16% |
25 |
9,766 |
+1,73% |
15 |
19,2 |
19,53 |
+1,73% |
15 |
19,23 |
+0,16% |
12 |
19,53 |
+1,73% |
7 |
76,8 |
78,13 |
+1,73% |
3 |
83,33 |
+8,51% |
2 |
78,13 |
+1,73% |
1 |
96 |
104,2 |
+8,51% |
2 |
NA |
--- |
--- |
NA |
--- |
--- |
300 |
312,5 |
+4,17% |
0 |
NA |
--- |
--- |
NA |
--- |
--- |
500 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
ALTA |
312,5 |
--- |
0 |
250 |
--- |
0 |
156,3 |
--- |
0 |
BAIXA |
1,221 |
--- |
255 |
0,977 |
--- |
255 |
0,6104 |
--- |
255 |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 7,15909 MHz |
FOSC = 5,0688 MHz |
FOSC = 4 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
NA |
--- |
--- |
0,31 |
+3,13% |
255 |
0,3005 |
-0,17% |
207 |
1,2 |
1,203 |
+0,23% |
92 |
1,2 |
0 |
65 |
1,202 |
+1,67% |
51 |
2,4 |
2,380 |
-0,83% |
46 |
2,4 |
0 |
32 |
2,404 |
+1,67% |
25 |
9,6 |
9,322 |
-2,90% |
11 |
9,9 |
+3,13% |
7 |
NA |
--- |
--- |
19,2 |
18,64 |
-2,90% |
5 |
19,8 |
+3,13% |
3 |
NA |
--- |
--- |
76,8 |
NA |
--- |
--- |
79,2 |
+3,13% |
0 |
NA |
--- |
--- |
96 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
300 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
500 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
ALTA |
111,9 |
--- |
0 |
79,2 |
--- |
0 |
62,5 |
--- |
0 |
BAIXA |
0,437 |
--- |
255 |
0,3094 |
--- |
255 |
3,906 |
--- |
255 |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 3,579545 MHz |
FOSC = 1 MHz |
FOSC = 32,768 kHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
0,3 |
0,301 |
+0,23% |
185 |
0,300 |
+0,16% |
51 |
0,256 |
-14,67% |
1 |
1,2 |
1,190 |
-0,83% |
46 |
1,202 |
+0,16% |
12 |
NA |
--- |
--- |
2,4 |
2,432 |
+1,32 |
22 |
2,232 |
-6,99% |
6 |
NA |
--- |
--- |
9,6 |
9,322 |
-2,90% |
5 |
NA |
--- |
--- |
NA |
--- |
--- |
19,2 |
18,64 |
-2,90% |
2 |
NA |
--- |
--- |
NA |
--- |
--- |
76,8 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
96 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
300 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
500 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
ALTA |
55,93 |
--- |
0 |
15,63 |
--- |
0 |
0,512 |
--- |
0 |
BAIXA |
0,2185 |
--- |
255 |
0,0610 |
--- |
255 |
0,0020 |
--- |
255 |
TABELA 12.5: TAXAS DE TRANSMISSÃO PARA O MODO ASSÍNCRONO (BRGH = 1)
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 20 MHz |
FOSC = 16 MHz |
FOSC = 10 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
9.600 |
9.615 |
+0,16% |
129 |
9.615 |
+0,16% |
103 |
9.615 |
+0,16% |
64 |
19.200 |
19.230 |
+0,16% |
64 |
19.230 |
+0,16% |
51 |
18.939 |
-1,36% |
32 |
38.400 |
37.878 |
-1,36% |
32 |
38.461 |
+0,16% |
25 |
39.062 |
+1,7% |
15 |
57.600 |
56.818 |
-1,36% |
21 |
58.823 |
+2,12% |
16 |
56.818 |
-1,36% |
10 |
115.200 |
113.636 |
-1,36% |
10 |
111.111 |
-3,55% |
8 |
125.000 |
+8,51% |
4 |
250.000 |
250.000 |
0 |
4 |
250.000 |
0 |
3 |
NA |
--- |
--- |
625.000 |
625.000 |
0 |
1 |
NA |
--- |
--- |
625.000 |
0 |
0 |
1.250.000 |
1.250.000 |
0 |
0 |
NA |
--- |
--- |
NA |
--- |
--- |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 7,16 MHz |
FOSC = 5,068 MHz |
FOSC = 4 MHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
9.600 |
9.520 |
-0,83% |
46 |
9.598,485 |
-0,016% |
32 |
9.615,385 |
+0,16% |
25 |
19.200 |
19.454 |
+1,32% |
22 |
18.632,35 |
-2,956% |
16 |
19.230,77 |
+0,16% |
12 |
38.400 |
37.286 |
-2,90% |
11 |
39.593,75 |
+3,109% |
7 |
35.714,29 |
-6,994% |
6 |
57.600 |
55.930 |
-2,90% |
7 |
52.791,67 |
-8,348% |
5 |
62.500 |
+8,507% |
3 |
115.200 |
111.860 |
-2,90% |
3 |
105.583,3 |
-8,348% |
2 |
125.000 |
+8,507% |
1 |
250.000 |
NA |
--- |
--- |
316.750 |
+26,700% |
0 |
250.000 |
0 |
0 |
625.000 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
1.250.000 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
TAXA DE TRANSMISSÃO (x1000) |
FOSC = 3,579545 MHz |
FOSC = 1 MHz |
FOSC = 32,768 kHz |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
TAXA CALCULADA |
ERRO |
Valor de SPBRG (decimal) |
9.600 |
9.725,543 |
+1,308% |
22 |
8.928 |
-6,994% |
6 |
NA |
--- |
--- |
19.200 |
18.640,63 |
-2,913% |
11 |
20.833,3 |
+8,507% |
2 |
NA |
--- |
--- |
38.400 |
37.281,25 |
-2,913% |
5 |
31.250 |
-18,620% |
1 |
NA |
--- |
--- |
57.600 |
55.921,88 |
-2,913% |
3 |
62.500 |
+8,507% |
0 |
NA |
--- |
--- |
115.200 |
111.243,8 |
-2,913% |
1 |
NA |
--- |
--- |
NA |
--- |
--- |
250.000 |
223.687,5 |
-10,525% |
0 |
NA |
--- |
--- |
NA |
--- |
--- |
625.000 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |
1.250.000 |
NA |
--- |
--- |
NA |
--- |
--- |
NA |
--- |
--- |