L'istruzione GOTO salta all'indirizzo in memoria di programma (EEPROM) specificato. L'indirizzo viene normalmente indicato per mezzo di un'etichetta, come nell'esempio che segue;
Un caso usato frequentemente con l'istruzione GOTO è il seguente:
Il simbolo del dollaro $ indica per convenzione l'indirizzo dell'istruzione stessa: perciò in questo modo il programma si blocca in un ciclo infinito. Questa istruzione viene spesso utilizzata al termine dei programmi per bloccare il funzionamento del PIC (il quale non dispone di un'istruzione di HALT, come lo Z80).
E' anche possibile scrivere:
Usando il simbolo del $ un ciclo infinito può essere scritto nel seguente modo:
NOTA:
Il PIC16F690 possiede 4k = 4096 locazioni di memoria di programma a 14 bit. Per indirizzare l'intera memoria occorrerebbero 12 bit (212 = 4096). In realtà il Program Counter interno del PIC ha 13 bit e dunque è potenzialmente in grado di indirizzare fino a 8192 locazioni di memoria (213 = 8192).
Tuttavia, essendo lo spazio occupato da ciascuna istruzione limitato a 14 bit (che devono contenere sia il codice operativo che l'operando) in realtà l'istruzione GOTO può usare solo 11 bit per indirizzare la memoria:
dove 101 è il codice operativo di GOTO e kkk kkkk kkkk sono gli 11 bit riservati all'indirizzo.
In conclusione con il campo operando della GOTO non è possibile indirizzare l'intera memoria del PIC. Per ottenere questo risultato il Program Counter viene caricato con gli 11 bit forniti dalla GOTO (in figura OPCODE<10:0>) e con 2 bit aggiuntivi forniti dal registro PCLATH (in figura PCLATH<4:3>, di cui il PIC16F690 ne utilizza solo uno). In questo modo si riescono a ottenere fino a 13 bit di indirizzo in memoria:
Per fortuna la complessità di questi calcoli viene risparmiata al programmatore, il quale può indicare l'indirizzo di destinazione della GOTO utilizzando un'etichetta e lasciare all'assembler il compito di gestire l'indirizzo fisico in memoria.
Il PIC dispone di quattro istruzioni di salto condizionato:
Anche se i nomi di queste istruzioni possono apparire complicati, il loro funzionamento è estremamente semplice. In linea di massima si comportano tutte nello stesso modo: se la condizione di salto è falsa si esegue l'istruzione successiva; se invece la condizione di salto è vera, viene saltata l'istruzione immediatamente successiva ed eseguita quella ancora dopo. La figura spiega meglio il concetto:
In questo esempio è stata scelta BTFSS, ma le considerazioni svolte valgono per tutte le istruzioni di salto condizionato. Se la condizione di salto (specifica per ognuna delle istruzioni) è falsa, allora si prosegue normalmente con l'esecuzione del programma, cioè eseguendo istruzione 1, poi istruzione 2 e così via come mostrato nella figura.
Se la condizione di salto è vera allora non viene eseguita istruzione 1 ma si continua con l'esecuzione del programma da istruzione 2 in poi. Molto spesso istruzione 1 è un salto incondizionato (GOTO): in questo modo è possibile redirigere l'esecuzione del programma ad un altro punto:
Nell'esempio precedente viene testato il bit 2 del registro di stato. Finché questo bit non diventa zero, il ciclo viene ripetuto. Il bit 2 del registro di stato è il bit Z, che vale '1' quando il risultato dell'ultima operazione eseguita è zero:
Bit7 | Bit6 | Bit5 | Bit4 | Bit3 | Bit2 | Bit1 | Bit0 |
IRP | RP1 | RP0 | TO | PD | Z | DC | C |
In questo modo è possibile programmare un ciclo che termina quando l'ultima operazione eseguita fornisce come risultato zero.
Un altro esempio, che fa uso dell'istruzione INCFSZ, è il seguente:
In questo caso il ciclo viene ripetuto 256 volte, finché il registro TMP non si azzera.
Sito realizzato in base al
template offerto da
http://www.graphixmania.it