Comunicação Serial Assíncrona
A comunicação serial assíncrona é bem simples e tem como função enviar e receber bytes de informação, transferindo um bit de cada vez. As características do protocolo serial, ilustrado na Figura abaixo, são:
Taxa de transmissão (baud rate): Indica o número de bits transmitidos por segundo;
bits de dados (data bits): Tamanho da informação que é transferida;
bits de parada (stop bits): Utilizados para sinalizar o fim da transferência;
Paridade: Uma forma bem simples de verificação de erros na transferência de dados.
Registradores
Conforme a Figura abaixo, a interface serial é configurada pelo registrador SCON. Esse registrador pode ser endereçado bit a bit e está localizado no endereço 98H.
SM0~SM2: Modo de operação do canal serial;
REN: Habilita recepção do canal serial;
TB8: Determina o valor do 9º bit que será transmitido nos modos 2 e 3;
RB8: Determina o valor do 9º bit recebido nos modos 2 e 3;
TI - Transmit Interrupt Flag – Seu valor é determinado pelo hardware:
1: Após a transmissão do 8º bit (modo 0) ou no início da transmissão do stop bit (demais modos);
Deve ser zerado por software;
RI - Transmit Interrupt Flag – Seu valor é determinado pelo hardware:
1: Após a recepção do 8º bit (modo 0) ou no meio da recepção do stop bit (demais modos);
Deve ser zerado por software.
Além disso, os dados são transmitidos/recebidos a partir do registrador SBUF. Esse registrador está localizado no endereço 99H:
É composto por dois registradores distintos: transmissão e recepção;
Qualquer operação com destino a esse registrador inicia a transmissão de dados.
Configuração da Interface Serial
As configurações da interface serial devem ser realizadas para atender os requisitos especificados anteriormente. Essas configurações são realizadas no registrador SCON, responsável por determinar o modo de operação do circuito que pode ser 0, 1, 2 ou 3.
Modo 0
Taxa fixa: Frequência de clock dividido por 12.
Frame de 8 bits de dados.
Comunicação Síncrona.
Modo 1
Taxa variável.
Comunicação Assíncrona.
Frame de 8 bits de dados.
Modo 2
Taxa fixa: Frequência de clock dividido por 12.
Comunicação Assíncrona.
Frame de 9 bits de dados.
Modo 3
Taxa variável.
Comunicação Assíncrona.
Frame de 9 bits de dados.
As operações realizadas com o canal serial envolvem a manipulação do registrador SBUF e das flags RI e TI do registrador SCON. Basicamente, qualquer operação de escrita no registrador SBUF faz com que a transmissão de dados seja iniciada, já a leitura desse registrador retorna o último valor recebido. Nessas operações, as flags RI e TI devem ser monitoradas. De modo geral:
Nos modos 1, 2 e 3, a flag TI é ativada no início da transmissão do stop bit. Já no modo 0, é ativada após a transmissão do 8º bit.
Nos modos 1, 2 e 3, a flag RI é ativada no meio da recepçãp do stop bit. Já no modo 0, é ativada após a recepção do 8º bit.
Os pinos utilizados para transmissão e recepção são P3.1 e P3.0, respectivamente. Cabe ressaltar que no modo 0 a comunicação é síncrona, portanto o pino P3.1 é utilizado como clock e os dados são transmitidos e recebidos pelo pinos P3.0.
Frequência de Transmissão Variável
Nos casos em que a taxa de baud rate é variável o temporizador 1 é utilizado para gerar a frequência desejada. Como ilustrado na figura, o clock do módulo Timer1 é dividido por 12 e depois por 32. Essa frequência é utilizada pelo Timer1 que está configurado no modo recarga automática. Assim, o número de pulsos contados representa o fator de divisão N dessa frequência.
O valor de K é determinado pelo bit SMOD (double baud rate bit) do registrador PCOM. De modo geral:
K = 1, se SMOD é 0.
K = 2, se SMOD é 1.
O exemplo abaixo mostra a recepção e transmissão de um byte. A taxa de comunicação utilizada é de 9600 bps. O valor de recarga necessário para gerar essa frequência é 253 (FDH), pois considerou-se a frequência de clock igual a 11,0592 MHz e K = 1. Logo, o valor N é igual a 28800/9600 = 3.
Interrupção do Canal Serial
O canal serial pode gerar interrupções de transmissão e recepção de dados. Porém, o mesmo vetor de interrupção é utilizado para tratar os dois eventos, portanto é dever do programador monitorar a flag que indica qual foi a fonte de interrupção gerada. Além disso, essas flags de interrupção devem ser zeradas por software.
O programa abaixo apresenta a mesma operação do exemplo anterior.
Last updated