O artigo anterior explica a comunicação serial usando transferência de dados de 8 bits. O microcontrolador AVR também suporta transferência de dados serial com tamanho de quadro de 5, 6, 7 e 9 bits de dados. O tamanho do quadro de dados pode ser ajustado de acordo com a aplicação. Por exemplo, considere um sistema que precisa transmitir apenas códigos ASCII como dados. Neste caso, o tamanho do quadro de dados de 7 bits é suficiente porque o comprimento dos dados do código ASCII é igual a 7 bits. Isto tornará o sistema mais eficiente, economizando tempo de um período de clock em cada transmissão de quadro de dados. Este artigo explica a transferência serial de dados com diferentes tamanhos de quadro.
O tamanho do quadro dos dados pode ser selecionado configurando os bits UCSZ (USART Character Size). O registrador UCSRC contém bits UCSZ (1:0) e UCSRB contém bits UCSZ2. A tabela a seguir mostra as configurações de bits UCSZ correspondentes a diferentes tamanhos de quadro de dados.
Fig. 2: Configuração de bits do UCSZ para comunicação serial de diferentes tamanhos de quadro de dados
Programação:
Caso 1: Tamanho de quadro 5, 6 e 7 bits:
Esses três tamanhos de quadro podem ser selecionados programando apenas os bits UCSZ1 e UCSZ0. Não há necessidade de programar o bit UCSZ2 porque o valor padrão deste bit é zero.
Por exemplo: UCSRC= (1<
// Sem paridade, 1 bit de parada.
As etapas de programação de envio e recebimento de dados permanecerão as mesmas usadas na transmissão e recepção de dados de 8 bits. Para mais informações, os leitores podem consultar o artigo anterior em comunicação em série.
Programa de teste para recepção e transmissão de 6 bits:
Um programa de teste é escrito para comunicação de dados de 6 bits entre Microcontrolador e PC. Neste experimento, a entrada é obtida do usuário por meio de um teclado. Os dados correspondentes são enviados ao microcontrolador através da porta COM do PC. O microcontrolador recebe os dados e os retorna novamente para a porta COM do PC. O HyperTerminal é usado para configurar a porta COM para torná-la compatível com este experimento.
As etapas a seguir são usadas para configurar portas COM:
1. Defina a taxa de transmissão = 9600 bps, bit de dados=6, Paridade=Nenhum, Bit de parada=1.
Fig. 3: Configurar portas COM para comunicação serial
2. Marque a caixa de seleção correspondente a Echo conforme mostrado na imagem a seguir para observar a transmissão e o recebimento de dados.
Saída:
A seguinte saída é recebida quando 1 2 3 4 5 6 teclas ABCDEFG são pressionadas no teclado.
Fig. 5: Saída de comunicação serial entre AVR e PC
Conforme mostrado na imagem acima, a saída adequada é recebida quando as teclas numéricas são pressionadas, mas quando as teclas alfabéticas são pressionadas, algum símbolo aparece. Esta saída inesperada é recebida porque estamos trabalhando com tamanho de quadro de dados de 6 bits. Se o quadro de dados de 6 bits for selecionado, dois bits mais significativos serão mascarados para zero durante a leitura do UDR. O código ASCII de '1' é 0x31 (0011 0001). Se os dois bits mais significativos forem mascarados, restam 11 0001, que também é igual a 0x31. O tamanho dos códigos ASCII para todos os valores numéricos é de 6 bits, portanto não haverá problemas em receber e transmitir valores numéricos no modo de 6 bits. Mas o valor ASCII de 'A' é 0x41 (0100 0001). Se dois bits mais significativos forem mascarados, restará 00 0001, que é igual a 0x01, portanto será impresso algum símbolo incomum.
Caso2: Tamanho do quadro 9 bits:
A comunicação de dados de 9 bits pode ser usada na comunicação multiprocessador. Para selecionar o quadro de dados de 9 bits, todos os bits UCSZ são definidos como 1(UCSZ (2:0) =7).
Por exemplo:
UCSRB=(1<
UCSRC=(1<
1. Transmissão de dados de 9 bits:
Os dados de 9 bits devem ser armazenados em buffer antes da transmissão. Como o tamanho dos dados do registro UDR é apenas de 8 bits, o nono bit deve ser armazenado no bit TXB8 do registro UCSRB antes que o byte inferior seja armazenado no UDR.
void usart_tx(unsigned int serial_data) //function transmission{
2. Recepção de dados de 9 bits:
O nono bit deve ser lido do bit RXB8 antes da leitura do byte inferior. O status de FE (Erro de quadro), DOR (Data Over Run) e PE (Erro de paridade) também deve ser verificado para verificar os dados.
unsigned int usart_rx(void) // função para recepção
{
enquanto(!(UCSRA & (1<
if(UCSRA & ((1<
retornar -1;
UCSRB =(UCSRB>>1)&0x01; //filtra 9 bits
retornar ((UCSRB<<8) UDR); // valor de retorno
}
Código-fonte do projeto
###
// Programa para comunicação serial (USART) com diferentes tamanhos de quadro usando microcontrolador AVR
###
Diagramas de circuito
Diagrama de circuito de comunicação serial-USART com tamanho de quadro diferente usando microcontrolador AVR |
Componentes do Projeto
- ATmega16
- LCD
- MÁX232