Flip-flops e latches: memória digital com D, JK, T e SR

Capítulo 8

Tempo estimado de leitura: 9 minutos

+ Exercício

Latches vs flip-flops: o que muda na prática

Latch é um elemento de memória sensível a nível: enquanto a entrada de habilitação (ENABLE, GATE ou CLK em alguns símbolos) estiver no nível ativo, a saída pode acompanhar a entrada. Quando a habilitação desativa, o latch “segura” (memoriza) o último valor.

Flip-flop é um elemento de memória sensível à borda: ele só atualiza seu estado no instante da borda ativa do clock (subida ou descida, conforme o componente). Entre bordas, a saída permanece estável, mesmo que as entradas mudem.

Quando usar latch

  • Armazenar um valor enquanto um sinal de habilitação estiver ativo (ex.: capturar um dado durante uma janela de tempo).
  • Interfaces simples onde o dado é garantidamente estável durante toda a janela de ENABLE.
  • Atenção: se o dado variar enquanto o latch estiver habilitado, a saída pode “seguir” e gerar glitches em lógica posterior.

Quando usar flip-flop

  • Sistemas sincronizados por clock (contadores, registradores, máquinas de estado).
  • Isolar mudanças de entrada para que a saída só mude em instantes definidos (bordas), reduzindo efeitos de glitches.
  • Captura de eventos (ex.: amostrar um botão já condicionado) de forma previsível.

SR latch e SR flip-flop: memória básica e condição inválida

O elemento SR (Set/Reset) é a forma mais direta de memória: uma entrada força Q=1 (Set) e outra força Q=0 (Reset). O ponto crítico é a condição inválida quando Set e Reset são acionados ao mesmo tempo (depende da implementação, mas em geral é proibida).

Tabela de funcionamento (SR ativo em nível alto)

SRQ(n+)/Q(n+)Observação
00Q(n)/Q(n)Mantém estado
1010Set
0101Reset
11??Inválido (evitar)

Como evitar a condição inválida:

  • Garanta por lógica que S e R nunca sejam 1 simultaneamente (ex.: intertravamento com portas).
  • Prefira D para armazenamento de dados (elimina o caso inválido por construção).
  • Se precisar de SR por simplicidade, use sinais mutuamente exclusivos (ex.: botões separados com lógica que bloqueia o outro).

D latch e D flip-flop: o armazenador “sem ambiguidade”

O tipo D (Data) resolve o problema do SR: em vez de Set e Reset separados, existe um único dado D. Internamente, ele equivale a um SR controlado de modo que nunca ocorra S=R=1.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

D latch (sensível a nível)

Com ENABLE ativo, Q acompanha D. Com ENABLE inativo, Q mantém o último valor.

ENDQ(n+)Observação
0XQ(n)Trava (mantém)
100Transparente
111Transparente

D flip-flop (sensível à borda)

Atualiza Q apenas na borda ativa do clock. Fora da borda, mantém.

ClockDQ(n+)Observação
Borda ativa00Amostra D
Borda ativa11Amostra D
Sem bordaXQ(n)Mantém

JK flip-flop: SR “corrigido” com alternância

O JK é um flip-flop que elimina a condição inválida do SR: quando J=K=1, ele alterna (toggle) em vez de entrar em estado proibido.

JKQ(n+)Observação
00Q(n)Mantém
101Set
010Reset
11/Q(n)Toggle

Cuidados práticos: JK costuma ter mais pinos/condições (clock, preset/clear assíncronos em alguns CI). Se você só precisa armazenar um bit de dado, D é mais direto. Se você precisa alternar estado de forma controlada, JK é muito útil.

T flip-flop: alternância simples

O T (toggle) é conceitualmente um flip-flop que alterna quando T=1 e mantém quando T=0. Ele pode ser obtido a partir de um JK com J=K=T.

TQ(n+)Observação
0Q(n)Mantém
1/Q(n)Toggle

Condição inválida: o T não tem condição inválida na tabela funcional. O cuidado aqui é garantir que o clock seja “limpo” (um evento por acionamento), senão o LED pode alternar mais de uma vez por pressão.

Montagem prática 1: flip-flop D como armazenador de estado para um botão (com debounce)

Objetivo: transformar um botão em um comando digital estável, armazenado em Q, sem múltiplas transições por ruído mecânico. A ideia é: condicionar o botão (debounce) e então amostrar esse sinal em um D flip-flop.

Visão geral do bloco

  • Botão + rede de condicionamento (debounce) → gera um sinal BTN_STABLE.
  • Clock de amostragem (pode ser um pulso gerado a cada pressão, ou um clock lento) → entra no pino CLK do D FF.
  • D = BTN_STABLE → o flip-flop guarda o valor do botão no instante da borda.
  • Saídas Q e /Q disponíveis para lógica/LED.

Passo a passo (ligação típica)

  1. Alimentação: conecte VCC e GND do CI conforme a família lógica usada. Adicione desacoplamento (ex.: 100 nF próximo ao CI).
  2. Entrada D: conecte D ao sinal BTN_STABLE (saída do seu circuito de debounce já estudado anteriormente).
  3. Clock: forneça um clock que represente o momento de captura. Duas opções comuns:
    • Clock lento contínuo: amostra periodicamente; Q reflete o botão com atraso de até um período.
    • Pulso por acionamento: um gerador de pulso (monostável/edge detector) cria uma borda única por pressão; Q atualiza apenas quando você pressiona.
  4. Preset/Clear (se existirem): fixe em nível inativo para não flutuar. Se quiser um estado inicial definido, use Clear para forçar Q=0 na energização (com cuidado para não deixar o pino flutuando).
  5. Indicador: ligue um LED (com resistor) em Q ou /Q para visualizar o estado armazenado.

O que observar

  • Sem debounce, o flip-flop pode capturar bordas indesejadas se o clock for derivado do botão ou se o botão gerar múltiplas transições próximas à borda.
  • Com debounce e clock bem definido, Q muda uma única vez por evento de captura.

Montagem prática 2: alternar um LED a cada pressionamento usando JK ou T

Objetivo: cada pressão do botão alterna o LED (liga/desliga). Isso é um caso clássico de toggle.

Opção A: usando JK (J=K=1)

Configuração: fixe J=1 e K=1. A cada borda ativa de clock, Q alterna.

  1. Fixar J e K: conecte J e K ao nível lógico 1 (conforme a família lógica, com ligação direta ou via resistor, se apropriado).
  2. Clock: aplique um pulso limpo por pressionamento (idealmente proveniente de um circuito de debounce + gerador de pulso). Esse pulso vai ao CLK.
  3. LED: conecte o LED em Q (ou /Q para lógica invertida).
  4. Preset/Clear: mantenha inativos; opcionalmente use Clear para iniciar com LED apagado.

Opção B: usando T (T=1)

Configuração: fixe T=1. A cada borda ativa de clock, Q alterna.

  1. Fixar T: conecte T ao nível lógico 1.
  2. Clock por pressionamento: igual ao JK, use um pulso único por evento.
  3. LED em Q: observe a alternância a cada pulso.

Se você só tem D flip-flop: como fazer toggle com D

Você pode obter alternância ligando D = /Q. Assim, a cada borda, Q recebe o inverso do estado atual.

D <- /Q  (realimentação)
CLK <- pulso por pressionamento
Q <- LED

Cuidado: mantenha a realimentação curta e bem conectada; evite fios longos em protoboard que possam captar ruído.

Condições inválidas e armadilhas comuns (e como evitar)

SR: S=R=1 (proibido)

  • Problema: saída indefinida/contraditória dependendo da implementação; pode levar a comportamento imprevisível.
  • Evite: intertravamento lógico, ou substitua por D/JK.

Latch transparente: “vazamento” de glitches

  • Problema: com EN ativo, qualquer oscilação em D aparece em Q.
  • Evite: use flip-flop por borda quando o sinal de entrada pode variar durante a janela; ou garanta que D esteja estável enquanto EN estiver ativo.

Clock vindo direto do botão

  • Problema: múltiplas bordas por bounce fazem o flip-flop alternar várias vezes.
  • Evite: use debounce e, de preferência, gere um pulso único por acionamento.

Pinos assíncronos flutuando (PRE/CLR)

  • Problema: mudanças aleatórias de estado.
  • Evite: prenda em nível inativo com ligação firme (e respeite se são ativos em 0 ou em 1).

Estratégias de teste e diagnóstico em bancada

1) Teste por estímulos controlados

  • Defina entradas fixas (por exemplo, D=0 e depois D=1) e aplique bordas de clock conhecidas.
  • Para JK/T, teste sequências: mantenha J=K=0 (mantém), depois J=1 K=0 (set), depois J=0 K=1 (reset), depois J=K=1 (toggle).

2) Observe Q e /Q simultaneamente

  • Regra prática: em operação normal, /Q deve ser o inverso de Q.
  • Se Q e /Q estiverem iguais por longos períodos, suspeite de: ligação errada, pino errado, CI danificado, ou pinos assíncronos acionados indevidamente.

3) Verifique estados iniciais

  • Ao energizar, alguns flip-flops podem iniciar em estado indefinido se não houver reset/preset. Se o seu teste exige estado conhecido, aplique Clear/Preset no início.

4) Diagnóstico de ligações (checklist rápido)

  • Alimentação: VCC/GND corretos e desacoplamento próximo.
  • Clock: está chegando no pino certo? A borda ativa é a esperada? O pulso tem amplitude lógica válida?
  • Entradas não usadas: não deixe pinos de entrada flutuando (J, K, D, T, EN, PRE/CLR).
  • LED: resistor em série correto; se ligado em /Q, a lógica fica invertida (isso pode parecer “erro” se você esperava o contrário).
  • Pinagem: confirme o datasheet do CI específico; diferentes CIs têm pinagens distintas mesmo para a mesma função.

5) Teste com tabela na mão

Uma forma eficiente é executar uma sequência e anotar:

PassoEntradasAção no clock/enableQ esperadoQ medido
1D=0Borda0
2D=1Borda1
3D=0Sem borda1 (mantém)

Agora responda o exercício sobre o conteúdo:

Em um sistema onde a entrada pode sofrer variações rápidas (glitches) entre instantes de amostragem, qual característica do flip-flop ajuda a evitar que essas variações apareçam na saída?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

O flip-flop atualiza apenas na borda ativa do clock e mantém Q estável entre bordas. Assim, mudanças e glitches na entrada fora da borda não se propagam para a saída.

Próximo capitúlo

Contadores digitais e divisão de frequência: de ripple a síncronos

Arrow Right Icon
Capa do Ebook gratuito Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas
53%

Eletrônica Digital para Iniciantes: Portas Lógicas, TTL/CMOS e Interfaces Básicas

Novo curso

15 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.