Registro a scorrimento • Sistema discreto. • Con memoria in cui il dato scorre da sinistra verso destra comandato da un impulso di clock Registro a scorrimento (shift register) • Serial In Serial Out (SISO) a 4 bit D In Q D Ck Q D Ck Ck Q D Q Out Ck Ck Ck In 0 Out 1 2 3 4 t programma • Per simulare il registro di 8 bit uso un vettore di 8 elementi • Il vettore è inizializzato a 0 • int r[8]={0,0,0,0,0,0,0,0}; Ingresso e clock • Si preme il pulsante 1 per scrivere 1 • il pulsante 2 per il clock 2 Input dato clock clock • Supponiamo di aver inserito un 1 questo deve accendere il primo led 2 clock • E poi ad ogni colpo di clock scorre in alto 3° clock • E poi ad ogni colpo di clock scorre in alto 4° clock • E poi ad ogni colpo di clock scorre in alto 5° clock • E poi ad ogni colpo di clock scorre in alto e se si inserisce un altro 1 questo entrerà dal primo Fase di lettura in ingresso • • • • • • int dato=0; // aspetto finchè non premo il clock (canale 2 in input) do{ if (ReadDigitalChannel(1)) dato=1; } while(!ReadDigitalChannel(2)); Notare il not ! Fase di scorrimento • // fase di scorrimento • for(int i=7;i>0;i--) • r[i]=r[i-1]; • r[0]=dato; 7° dato 8° r[0] 6° r[1] 4° 5° r[2] r[3] 2° 3° r[4] r[5] 1° r[6] r[7] Conversione e accensione led // conversione da binario in decimale int val=r[0]*1+r[1]*2+r[2]*4+r[3]*8+r[4]*16+r[5]*32+r[6]*64+r[7]*128; // un po' di effetti scenografici!! for(int i=1;i<5;i++) {WriteAllDigital(0); Sleep(100*i); WriteAllDigital(val); Sleep(100*i); } } • Proposta aggiungere un pulsante 3 di reset che liberi la memoria in qualsiasi fase