Tutorials - PIC18

 

Passare da PIC16 a PIC18

 


Lo STATUS

A riguardo dello STATUS va detto che esso :

  1. non contiene più RP1:0, il cui meccanismo non è più usato
     
  2. non si trova a 0x03 
     
  3. e ai suoi flag sono stati aggiunti N e OV

Queste differenze sono del tutto trasparenti al programmatore che utilizzi simboli e non valori assoluti , per cui non c'è niente di cui preoccuparsi.

Il punto 1, per quanti riguarda gli SFR, viene risolto vantaggiosamente nei PIC18 con il fatto che tutti i registri sono accessibili senza scambio di banchi , e quindi ogni riferimento a RP1:0 attorno agli SFR  va eliminato.

Per quanto riguarda la RAM, se il sorgente PIC16 utilizza al massimo 128 bytes, nel PIC18 non occorre alcuna gestione dei banchi in quanto , come per gli SFR, i primi 128 bytes di RAM sono accessibili in modo Access Bank, del tutto trasparente in MPASM. Se l' impiego della RAM si estende su più banchi occorrerà sostituire RP0:1 con il registro BSR.  Più avanti sono disponibili maggiori dettagli.

Per il punto 2, la soluzione, come già indicato prima, è semplicemente l' uso  degli mnemonici e non degli indirizzi assoluti : lo mnemonico STATUS viene interpretato automaticamente e correttamente assegnato dall' Assembler, sia che si tratti di mid-range che di enhanced.

Per quanto riguarda i nuovi flag, dato che un sorgente mid-range non ne fa uso, possono essere del tutto trascurati, a meno di voler ottimizzare il codice.

Invece, la differenza maggiore è l' attivazione dei flag dello STATUS da parte delle nuove istruzioni : una scorsa al loro elenco permette di prendere visione di eventuali differenze. 


Azione

  • Eliminare i riferimenti a RP1:0

  • Eliminare gli indirizzi assoluti e sostituirli con label

  • Verificare i test sullo STATUS in modo da evitare selezioni non desiderate che coinvolgono il bit N o Z

 


 

FSR

Il registro indiretto FSR dei mid-range è sostituito dal corrispondente FSR0 (coppia FSR0H:L). In effetti gli enhanced dispongono di tre coppie FSR (FSR0, FSR1, FSR2), ma per la compatibilità con i mid range sarà sufficente utilizzare la prima.
Ovviamente la label FSR0 dovrà sostiuire la label FSR.

In pratica, dati i limiti dei mid-range, basterà utilizzare la sostituzione:

FSR <- FSR0L

dato che FSR0H può essere lasciato a 0, senza doverlo manipolare.
Negli enhanced, ad ogni FSR corrisponde un INDF, per cui sarà necessario anche  la sostituzione:

INDF <- INDF0

Microchip non invita ad usare l' indirizzamento indiretto per accedere agli SFR in quanto se questa pratica aveva senso nei mid-range per saltare la continua necessità di cambio dei banchi, negli enhanced, come detto, gli SFR sono in unico banco, accessibile comunque senza operazioni speciali.
Pertanto si invita a fare le seguenti modifiche al sorgente:

  1. Se FSR è usato per accedere agli SFR, semplicemente sostituire INDF con il nome del registro
     
  2. Sostituire le istruzioni bsf STATUS, IRP o bcf STATUS, IRP con clrf FSR0H
     
  3. Sostituire i BANKSEL con clrf FSR0H

  4. Sostituire FSR con FSR0L

  5. Sostituire INDF con INDF0

Se FSR (FSR0L) viene incrementato o decrementato utilizzando l' istruzione INCF o DECF è possibile che si superi il contenuto a 8 bit e i flag dello STATUS saranno modificati in corrispondenza. Però questo non tocca FSR0H, che resta invariato.

Con un esempio:

   clrf     FSR0H   ; FSR0H = 0
  movlw    0xFF
  movwf    FSR0L   ; FSR0L = massimo
  incf     FS0L, f ; Incrementa FSR0L

Come conseguenza :

  • STATUS, C = 1 perchè FFh + 1 = 100h e su 8 b it dà un riporto
  • STATUS, Z = 1 perchè su 8 bit FFh + 1 = 00
  • FSR0H = 0, ovvero non viene cambiato

 


Azione

  1. Se FSR è usato per accedere agli SFR, semplicemente sostituire INDF con il nome del registro 
  2. Sostituire le istruzioni bsf STATUS, IRP o bcf STATUS, IRP con clrf FSR0H 
  3. Sostituire i BANKSEL con clrf FSR0H

  4. Sostituire FSR con FSR0L e INDF con INDF0

 


 

 

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