Fork me on GitHub

Microcontrolandos

O Blog está passando por uma fase de mudanças. Todos os posts estão sendo atualizados, códigos, links e imagens estão sendo arrumados. Conteúdos novos ainda estão por vir.

Registradores de Deslocamento

Share:

Registradores de Deslocamento

 



Um registrador de deslocamento ou "shift-register", consiste num conjunto de flip-flops que podem ser interligados de diversas formas.

Estes circuitos podem deslocar uma informação (bit) aplicada na entrada a cada pulso de clock. Por exemplo, o bit 1 aplicado na entrada aparece na saída Qa no primeiro pulso de clock, depois desloca-se, aparecendo na saída Qb no segundo pulso de clock e assim por diante, até aparecer na saída do final da sequência, enquanto isso outro bit aplicado na entrada aparecerá na saída Qa e assim sucessivamente.

Podemos encontrar registradores de deslocamento nas famílias TTL ou CMOS. Vejamos alguns:

74164 - SHIFT-REGISTER DE 8 BITS (Entrada serial, saída paralela)

 Pinagem
 Diagrama

A,B - Entradas (geralmente a entrada B é sempre setada)
Qa...Qh - saídas
Clear (ou MR) - Reseta todas as saídas
Clock (ou CLK) - A cada pulso, faz deslocar um bit.

74595 - SHIFT-REGISTER DE 8 BITS COM LATCH (Entrada serial, saída paralela ou serial)

Pinagem

Diagrama

A - Entradas. 
Qa...Qh - saídas.
Reset - Reseta todas as saídas do ShiftRegister
Shift Clock - A cada pulso, faz deslocar um bit.
Latch Clock - A cada pulso, o valor das saídas do ShiftRegister é aplicado na saída do Latch.
Output Enable - Ativa as saídas.


74HC164 e PIC16F628A -- EXEMPLO


sbit data_out at RB4_bit;      //pino saída de dados
sbit clk_out at RB5_Bit;     //pino do clock
sbit data_out_direction at TRISB4_bit;
sbit clk_out_direction at TRISB5_bit;

//74HC164
void shiftout(char c){
 char i;
 for(i=0;i<8;i++){
    
    //verifica se o ultimo bit é 1 ou 0
    data_out = 0;
    if((c>>i).F0 == 1) data_out = 1;
    
    //pulso de clock
    clk_out = 0;
    clk_out = 1;
 }
 
 data_out = 0;
 clk_out = 0;
}

void main() {
data_out_direction = 0;
clk_out_direction = 0;


while(1){
 shiftout(0B01010101);
 delay_ms(1000);
 shiftout(0B10101010);
 delay_ms(1000);
}
}

5 comentários:

  1. Valeu Tiago, mais uma vez PARABÉNS!!!
    Tanto pela atenção ao comentários, quanto pela rapidez na elaboração dos posts, e também pela maneira de explicar e exemplificar. Esse blog ta se tornando minha escola...rsrsrs!!! Obrigado!!!

    ResponderExcluir
  2. Tiago, Parabéns!!!
    Você explica de tal forma que a compreensão se torna fácil e imediata, estou divulgando para meus colegas o seu blog,os que já visitaram, assim como eu, gostaram das informações que encontraram. Peço licença para nosso amigo CIS para usar as palavras dele:"Esse blog ta se tornando minha escola!!!"

    ResponderExcluir
  3. Vamos ver a logica de um 74595. Eu preciso enviar um caractere 8x8 para rolar na matriz também 8x8, neste caso, qual seria o passo a passo:
    1 - Enviar os bits em serie.
    2 - usar oito pulsos de clock para que os bits fiquem armazenados.A cada bit um pulso.
    3 - fazer um pulso no latch para ativar a saida do latch e assim ver na matriz.

    Será que estou no caminho??? Desculpem minha ignorancia, mas ta dificil entender esse passo a passo sozinho. Podem me ajudar???

    ResponderExcluir
  4. Excelente blog. Gracias por tus conocimientos. Logre hacer funcionar
    74ls146 en mikroc gracias a la informacion publicada. Me costo bastante conseguir como hacerlo. De verdad los Felicito. Desde Venezuela Saludos...

    ResponderExcluir