Tutorials - PIC18

 

Passare da PIC16 a PIC18

 


Set di istruzioni

Il set di istruzioni passa da 35 a più di 70, quindi è più che raddoppiato, ma questo non provoca grossi problemi in quanto le nuove istruzioni sono in parte identiche alle precedenti e le nuove sono assai pratiche.

Come riassunto si può dire che i problemi di traslazione del sorgente riguardano in generale :

  • istruzioni con mnemonico e funzione analoga a quella dei PIC16, ma modificano i bit dello STATUS in modo diverso 
  • istruzioni con mnemonico e funzione nuova
  • istruzioni con mnemonico simile al nome utilizzato per macro oppure agli mnemonici delle pseudo istruzioni accettate dal MPASM

Un primo punto riguarda la lunghezza delle istruzioni enhanced che è, di base, 16 bits
Quindi le istruzioni iniziano sempre in locazioni PARI e un salto ad un indirizzo programma dispari è errato.
Questo è importante per chi ha l' abitudine di utilizzare il simbolo $ per puntare un salto.
Ancor più imporatnte considerando che alcune istruzioni sono codificate su 4 bytes.

Un altro punto riguarda le istruzioni di rotazione che, nei mid-range, coinvolgono sempre il Carry (gli opcodes rlf e rrf).
Negli enhanced, invece, sono disponibili due opcodes per ogni direzione della rotazione, ovvero :

  • rrcf / rlcf  che agiscono come gli equivalenti rlf /rrf
  • rrncf / rlncf che, invece, ruotano il registro oggetto SENZA coinvolgere il Carry

Dunque una sostituzione diretta dei mid-range rlf / rrf è, per gli enghanced, rlcf / rrcf , dato che MPASM, compilando per un PIC18, indica gli eventuali opcodes rlf / rrf come errori.

Un altro punto riguarda i diverso effetto delle istruzioni sullo STATUS.
Le istruzioni di rotazione degli enhanced possono modificare un bit addizionale N non presente nello STATUS dei PIC16  altre, come i rotate modificano anche il bit Z, cosa che, invece, nei mid range non era possibile.
Questo rende molto più ampia e flessibile la casistica dei test possibili, ma richiede di rivedere il sorgente per evitare risultati errati in comparazioni successive.

 La tabella seguente riporta alcune istruzioni comparate evidenziando le diverse risposte dei flag di STATUS:

Istruzione

STATUS

16F 18F
ADDLW C, DC, Z C, DC, Z, OV, N
ADDWF C, DC, Z C, DC, Z, OV, N
ANDLW Z Z, N
ANDWF Z Z, N
COMF Z Z, N
DECF Z C, DC, Z, OV, N
INCF Z C, DC, Z, OV, N
IORLW Z Z, N
IORWF Z Z, N
MOVF Z Z, N
RETFIE GIE GIE/GIEH
GIEL/PEIE
RLCF (RLF) C, DC, Z C, Z, N
RRCF
(RRF)
C, DC, Z C, Z, N
SUBLW C, DC, Z C, DC, Z, OV, N
SUBWF C, DC, Z C, DC, Z, OV, N
XORLW Z Z, N
XORWF Z Z, N

Altre differenze riguardano il fatto che il registro WREG è realmente accessibile da tutte le istruzioni, quindi la NEGW è sostituita da una NEGF WREG.

Esistono poi istruzioni del tutto assenti dal set a 14 bit:

  1. BTG per l' inversione dello stato di un bit 
  2. una serie di branch sui flag dello STATUS (BC, BNC, BZ, BNZ, BN, BNN, BOV, BNOV)
  3. una chiamata a subroutine "corta" RCALL
  4. MULWF e MULLW che effettuano una moltiplicazione 8 bit hardware
  5. DAW per l' aggiustamento delle operazioni in BCD
  6. PUSH e POP per la manipolazione dello stack
  7. Alcune istruzioni per la manipolazione dei banchi e degli FSR (MOVLB, LFSR)
  8. 8 istruzioni di lettura e scrittura delle tabelle
  9. 4 comparazioni con skip tra WREG e un file
  10. 2 istruzioni di incremento e decemento con skip se non-zero
  11. La MOVFF che sposta file to file nell' intera area di memoria
  12. SUBFWB che sottrae f da WREG con borrow e SUBWFB che sottrae WREG da f con borrow
  13. TSTFSZ che testa se il file è a 0

Oltre a queste, sono abilitabili altre istruzioni del set detto "esteso" che assumono una certa imporatnza con il compilatore C.

Un cenno particolare sarà dato più avanti al punto 2 e 6.

Una sezione diversa dei tutorial è dedicata ad una analisi più approfondita del set di istruzioni a 16 bit.

 


 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 05/06/19.