Anem a provar el funcionament d'un registre de desplaçament. Agafarem l'entrada analògica on hi ha connectat el potenciòmetre i mostrarem els vuit bits de més pes sobre vuit LED connectats a un registre de desplaçament.
En el següent diagrama es mostra com s'ha connectat el registre per controlar vuit LED.

El programa que emprarem serà:
#include <p16F690.inc> __config (_INTRC_OSC_NOCLKOUT&_WDT_OFF&_PWRTE_OFF&_MCLRE_OFF&_CP_OFF&_BOR_OFF&_IESO_OFF&_FCMEN_OFF)
cblock 0x20 Port ; Bits a enviar al port B Sortida ; Valors a enviar al registre de desplaçament Compta ; Variable per comptar els bits Retard1 ; Variables per als cicles de retard Retard2 endc
org 0 Inici bsf STATUS,RP0 ; Tria el banc 1 movlw 0xFF ; Posa l'acumulador a FFh (tot uns) movwf TRISA ; Posa tots els bits del port A com a entrada clrf TRISB ; Posa tots els bits del port B com a sortida clrf TRISC ; Posa tots els bits del port C com a sortida movlw b'00010000' ; Posa el conversor a 1/8 de la freqüència movwf ADCON1 ; Copia W a la configuració del conversor A/D bcf STATUS,RP0 bsf STATUS,RP1 ; Tria el banc 2 movlw b'00000001' movwf ANSEL ; Configura AN0 com entrada analògica bcf STATUS,RP0 bcf STATUS,RP1 ; Tria el banc 0 movlw b'00000001' ; activa el conversor A/D connectat a AN0 movwf ADCON0 ; amb el resultat justificat per l'esquerra clrf Port ; Posa a zero tots els bits de la variable Port movf Port,w movwf PORTB ; I ho envia al port B Bucle nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon nop ; espera un microsegon, en total 5 bsf ADCON0,GO ; Inicia la conversió btfsc ADCON0,GO ; Quan el bit sigui 0 la conversió haurà acabat goto $-1 ; repetim la línia fins que deixi de ser 1 movf ADRESH,w ; Agafa els vuit bits superiors del valor llegit movwf Sortida ; i ho prepara per enviar-ho al registre call EnviaR8 ; Ho envia al registre call RetM ; Espera 0,2 s goto Bucle ; Torna a llegir
; ; Bucle de retard de 0,2 s ; RetM decfsz Retard1,f goto RetM decfsz Retard2,f goto RetM return ; ; Envia 8 bits a un registre de desplaçament ; EnviaR8 ; Els bits estan a la variable Sortida ; Al final de la funció, el valor de Sortida queda corromput ; Si es vol conservar, cal copiar-lo a una altra variable bcf Port,5 ; S'assegura que Clock està desactivat bcf Port,6 ; S'assegura que Latch està desactivat ; En cas contrari, els bits enviats es copiarien immediatament a les sortides movf Port,w ; Agafa el valor de Port movwf PORTB ; I el posa al port B movlw .8 ; Número de bits a enviar movwf Compta ; Variable per comptar els bits BucleR8 bcf Port,4 ; Desactiva Data. Si toca activar-ho, ja ho farem rlf Sortida,f ; Fa sortir el bit de més a l'esquerra cap a C i roda els altres a l'esquerra btfsc STATUS,C ; Mira si el bit de l'esquerra era un 1 bsf Port,4 ; Si era 1, activa Data movf Port,w ; Agafa el valor de Port. El valor que ha canviat és Data movwf PORTB ; I el posa al port B bsf Port,5 ; Activa Clock, forçant a llegir el bit movf Port,w ; Agafa el valor de Port. El valor que ha canviat és Clock movwf PORTB ; I el posa al port B bcf Port,5 ; Desactiva Clock movf Port,w ; Agafa el valor de Port. El valor que ha canviat és Clock movwf PORTB ; I el posa al port B decfsz Compta ; Decrementa Compta goto BucleR8 ; Si Compta no és zero, repeteix el bucle bsf Port,6 ; Torna a activar Latch. Els valors es copiaran a la sortida del registre movf Port,w ; Agafa el valor de Port. El valor que ha canviat és Latch movwf PORTB ; I el posa al port B return end

Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.