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
 
              