Comunicação Serial Assíncrona
Last updated
Last updated
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.
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.
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.
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.
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.