ROTATE
Questa istruzione ci permette di far ruotare un valore binario a sinistra od a destra di un bit.
La sintassi dell’istruzione è la seguente:
ROTATE variabile {LEFT oppure RIGHT} [SIMPLE]
Immaginiamo di avere una variabile chiamata Memoria con il seguente valore binario 00011101.
Ogni volta che chiameremo l’istruzione ROTATE il valore della variabile ruoterà in un senso o
nell’altro.
Supponendo di far ruotare il valore a destra e quindi con l’istruzione RIGHT,
nel primo caso il valore sarà il seguente: 10001110
Nel secondo invece: 01000111
E nel terzo: 10100011
Se invece la rotazione fosse stata a sinistra (LEFT) avremmo avuto i seguenti valori:
Primo caso: 00111010
Secondo caso: 01110100
Terzo caso: 11101000
Per capire meglio l’istruzione immaginiamo di avere il valore binario seguente 00001000, vedremo
il singolo bit spostarsi a destra o a sinistra.
Il codice seguente permette di vedere quanto descritto usando i diodi led sulla porta B nel Micropic
Trainer
#CHIP 16F84, 4 'Tipo di PIC utilizzato
DIR PORTA IN 'Definisco le porte d'ingresso
DIR PORTB OUT 'e d'uscita
Memoria = b'00001000' 'Bit da far ruotare
INIZIO:
IF PortA.0 = 1 THEN GOTO DESTRA 'Ruoto il bit verso destra
IF PortA.1 = 1 THEN GOTO SINISTRA 'Ruoto il bit verso sinistra
GOTO INIZIO 'Torno all'inizio
DESTRA: 'Ruoto il valore a destra
ROTATE Memoria RIGHT 'Ruoto il bit
WAIT 1 s 'Attendo 1 secondo
PortB = Memoria 'Guardo la posizione del bit
GOTO INIZIO 'Torno all'inizio del programma
SINISTRA: 'Ruoto il valore a sinistra
ROTATE Memoria LEFT 'Ruoto il bit
WAIT 1 s 'Attendo 1 secondo
PortB = Memoria 'Guardo la posizione del bit
GOTO INIZIO 'Torno all'inizio del programma
END
Questo tipo di istruzione può essere utilizzata per fare delle divisioni o moltiplicazioni molto
rapidamente.
Supponiamo di avere il valore binario 00000111 che equivale al valore 7 in decimale e di farlo
ruotare verso sinistra, il valore sarà 00001110 che equivale al valore 14 in binario, quindi una
moltiplicazione per 2.
Lo stesso dicasi per il valore binario 00001110 che equivale al valore 14 in esadecimale, se lo
facciamo ruotare a destra il valore cambierà in 00000111 che è 7, in sintesi una divisione per 2.
Attenzione: Questo ragionamento è possibile perché il valore inserito inizia con uno zero e durante
lo spostamento no c’è un riporto.
Supponiamo di avere il valore 10000010 che equivale al numero 130 in decimale e di farlo ruotare
verso sinistra, il valore sarà di 00000101 che equivale al numero 5 e non 260 come potremmo
pensare, questo perché è presente un riporto.
Un altro utilizzo dell’istruzione ROTATE è quello di poter prelevare un singolo bit per volta per
poi essere elaborato.
Ad ogni istruzione ROTATE nel registro di STATO, nella posizione C (CARRY o riporto), viene
inserito il valore che è stato riportato.
Esempio:
Supponiamo di avere il valore binario 00000001 e di ruotarlo verso destra, il bit 1 sarà riportato
nella posizione iniziale del bit, come nell’esempio 10000000, questo 1 è il riporto che sarà scritto
anche nel registro C di STATO.
Grazie a questo sistema possiamo analizzare ogni singolo bit per poi convertirlo o trasmetterlo nel
seguente modo:
Trasmissione di un valore binario inserito in una variabile tramite la porta A0:
Valore = 00011011 'Inserisco il valore da trasmettere
Rotate Valore RIGHT 'Ruoto il valore verso destra
IF STATUS.C = 1 THEN PortA.0 = 1 'Se il valore è 1 trasmetto 1
IF STATUS.C = 0 THEN PortA.0 = 0 'Se il valore è 0 trasmetto 0
Se non vogliamo che il riporto venga inserito nel registro di STATO basta aggiungere l’istruzione
SIMPLE, nel seguente modo:
ROTATE Valore RIGHT SIMPLE
Questa istruzione può essere utilizzata per attivare in sequenza una serie di sensori per poi
memorizzarne lo stato, per esempio possiamo avere quattro sensori:
Sensore           Controllo
1                 ostacoli anteriori
2                 ostacoli posteriori
3                 ostacoli destri
4                 ostacoli sinistri
Attivando in sequenza questi sensori, per poi memorizzarne lo stato, avremmo una piccola mappa
dell’ambiente in qui si trova il robot.
Grazie a questa mappa il robot potrà “decidere” il percorso più favorevole o cosa dover fare.
Aggiunta il link al corso Linux Uno su Udemy.
Aggiunto il tutorial per la realizzazionedi un Arcade con materiale di riciclo.