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
Scarica

Registro a scorrimento