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 In Ck Out D Q Ck In 0 1 2 3 4 t Out
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
Supponiamo di aver inserito un 1 questo deve accendere il primo led clock Supponiamo di aver inserito un 1 questo deve accendere il primo led
E poi ad ogni colpo di clock scorre in alto
E poi ad ogni colpo di clock scorre in alto
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; 4° 2° 1° 7° 6° 5° 3° dato 8° r[0] r[1] r[2] r[3] r[4] r[5] 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); }
Proposta aggiungere un pulsante 3 di reset che liberi la memoria in qualsiasi fase