Questão de Arquitetura de Computadores — Hexadecimal — FGV 2024
Arquitetura de Computadores›Hexadecimal
Código
fg085487
Banca
FGV
Órgão
INPE
Ano
2024
Nível
Superior
Cargo
Tecnologista Júnior I - Desenvolvimento de Software Embarcado
A figura a seguir foi retirada de uma comunicação síncrona SPI usando o mostrador digital MAX 7219.Fonte: Módulos e Sensores: Guia de Interface com o Arduino. Editora Interciência.Sabe-se que a amostragem é no flanco de subida do relógio. Os dois bytes comunicados, em hexadecimal, são
A06 e 03.
B0C e 03.
C07 e 03.
D0C e 01.
E06 e 01.
Revelar gabarito e comentário▾
GabaritoD — 0C e 01.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Resolução
Gabarito: letra D — a conta chega a 0C e 01 — alternativa D.
A ideia por trás
A comunicação SPI é um protocolo síncrono em que o mestre gera um sinal de clock e os dados são enviados bit a bit, um bit por pulso de clock. No MAX7219, cada transmissão tem dois bytes: o primeiro é o endereço do registrador (que seleciona qual função ou dígito será configurado) e o segundo é o dado (o valor a ser escrito nesse registrador).
A leitura dos bits é feita no flanco de subida do clock, ou seja, no momento em que o clock passa de 0 para 1. Os bits são transmitidos do mais significativo (MSB) para o menos significativo (LSB). Para converter em hexadecimal, agrupam-se os bits de 4 em 4, formando nibbles, e cada nibble é convertido segundo a tabela padrão (0000=0, 0001=1, ..., 1100=C).
Esta questão cobra exatamente a leitura correta da forma de onda: identificar os 16 pulsos de clock, ler o nível da linha de dados em cada flanco de subida, agrupar os bits em nibbles e converter para hexadecimal. O erro mais comum é ler no flanco de descida ou inverter a ordem dos bits.
O que a questão dá
comunicação SPI com clock e linha de dados (DIN)
amostragem no flanco de subida do clock
dois bytes transmitidos, um após o outro
O que queremos: os dois bytes comunicados, em hexadecimal
Passo 1 — Contar os pulsos de clock
Cada byte tem 8 bits, e cada bit é transmitido em um pulso de clock. Como são dois bytes, há 16 pulsos no total. Identificar esses pulsos é o primeiro passo para saber onde ler cada bit.
NÃO CAIA NESSA!
Contar apenas 8 pulsos e esquecer que são dois bytes.
Passo 2 — Ler os bits no flanco de subida
A amostragem é no flanco de subida, então em cada pulso de clock, no momento em que o clock sobe de 0 para 1, devemos verificar se a linha de dados está em nível alto (1) ou baixo (0). Isso dá a sequência de bits de cada byte.
Primeiro byte: 00001100; segundo byte: 00000001
NÃO CAIA NESSA!
Ler no flanco de descida (quando o clock cai) — isso inverte os bits e leva a valores errados.
Passo 3 — Agrupar os bits em nibbles
Hexadecimal usa 4 bits por dígito, então cada byte de 8 bits vira dois nibbles. Separar os bits em grupos de 4 é o passo intermediário para a conversão.
Primeiro byte: 0000 1100; segundo byte: 0000 0001
NÃO CAIA NESSA!
Agrupar os bits na ordem errada, por exemplo, do LSB para o MSB, o que trocaria os nibbles.
Passo 4 — Converter cada nibble para hexadecimal
Com os nibbles separados, basta usar a tabela de conversão: 0000=0, 0001=1, 0010=2, ..., 1100=C. Isso transforma os grupos de 4 bits nos dígitos hexadecimais.
Por que esta fórmula: A tabela de conversão binário-hexadecimal é a relação direta entre os 16 possíveis nibbles e os dígitos 0-F.
De onde vem cada valor: = passo 3
Primeiro byte: 0C; segundo byte: 01
NÃO CAIA NESSA!
Confundir o nibble alto com o baixo, trocando 0C por C0 ou 01 por 10.