Lo STATUS
A riguardo dello STATUS va detto che esso :
- non contiene più RP1:0, il
cui meccanismo non è più usato
- non si trova a 0x03
- 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:
- Se FSR è usato per accedere agli SFR, semplicemente sostituire INDF
con il nome del registro
- Sostituire le istruzioni bsf STATUS, IRP o bcf STATUS, IRP con
clrf FSR0H
-
Sostituire i BANKSEL con clrf FSR0H
-
Sostituire FSR con FSR0L
-
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
- Se FSR è usato per accedere agli SFR, semplicemente sostituire INDF
con il nome del registro
- Sostituire le istruzioni bsf STATUS, IRP o bcf STATUS, IRP con clrf FSR0H
-
Sostituire i BANKSEL con clrf FSR0H
-
Sostituire FSR con FSR0L e INDF con INDF0
|
|