Cursos / Eletrônica / Projeto de Sistemas RF / Aula
Sabemos que o sinal sai do PIC por um de seus pinos, mas existem alguns processos internos que são realizados antes do sinal realmente ser transmitido pelo fio: o que ocorre basicamente é um joguinho de passagem de dados através de alguns registradores do microcontrolador. Podemos ver uma forma simplificada dessa transmissão assíncrona na Figura 1.
Para transmitir 1 byte (8 bits) usando o módulo USART, escrevemos o byte no registrador TXREG. O módulo então se encarrega de transferir o byte para um registrador de deslocamento, e então transmitir cada bit pelo pino de transmissão. A USART normalmente é utilizada para transmitir pacotes de 8 bits, mas pode também ser utilizada para transmitir 9 bits. Para transmitir 9 bits, é necessário setar para '1' o bit TX9 do registrador TXSTA e armazenar o nono bit no bit TX9D do registrador TXSTA antes de colocar os 8 bits restantes no registrador TXREG.
Na recepção, após o "Start Bit" ser detectado, os bits são recebidos do pino de recepção um a um e vão sendo armazenados em um registrador de deslocamento, até serem armazenados 8 ou 9 bits, dependendo de como o receptor estiver configurado. Para receber 9 bits, o bit RX9 do registrador RCSTA tem que estar setado em '1'. Após serem recebidos todos os bits, o módulo verifica o "Stop Bit", e estando tudo OK, o dado recebido é colocado em um buffer, para depois ser passado para o registrador RCREG. Se existir um nono bit no dado, ele é passado para o bit RX9D do registrador RCSTA. O buffer e os registradores formam uma fila de duas posições. Isso é importante porque caso os dados sejam transmitidos mais rápido do que processados pelo dispositivo receptor, é possível ter 2 dados ainda não processados, um nos registradores RCREG (e RX9D, para o caso de 9 bits de dados) e outro no buffer, enquanto um terceiro está sendo recebido no registrador de deslocamento, diminuindo a chance de ocorrer perda de dados. Como podemos verificar na Figura 2
Parece estranho a USART permitir a transmissão de dados em 9 bits, mas isso tem um motivo. Normalmente, o nono bit é um "bit de paridade", gerado pelo transmissor e utilizado pelo receptor para verificar se os outros 8 bits foram transmitidos corretamente. Ele ainda pode ser utilizado como bit de paridade, ou então como um bit de dado a mais do pacote. Uma aplicação interessante é utilizar o bit de paridade como "indicador de endereço": quando existem mais de um receptor, podemos enviar primeiro um dado de endereço (com o nono bit setado em '1') e, logo depois, o dado que queremos enviar (com o nono bit em '0'). Todos recebem o dado de endereço, mas somente o dispositivo com o endereço informado é que recebe o segundo dado.
Versão 5.3 - Todos os Direitos reservados