I PIC18 contengono diversi tipi di memorie con caratteristiche nettamente diverse. In questa pagina si farà riferimento ai cosiddetti File Registers, che costituiscono la memoria RAM principale del PIC18. La dimensione, a seconda dei modelli, varia fino ad un massimo di 4 096 byte ed è suddivisa in 16 banchi (blocchi da 256 byte ciascuno). Essa include due tipi di registri:
L'accesso ai vari registri avviene secondo due modalità, meglio illustrate nella prosecuzione di questa pagina:
Quasi tutte le istruzioni possono utilizzare entrambi questi metodi di accesso. Il programmatore sceglierà il primo metodo per le variabili usate più frequentemente, il secondo per le variabili di dimensioni più ampie.
L'istruzione movwf (MOVe W register to File register) sposta il dato a 8 bit contenuto del registro W in una qualunque cella di memoria del File Register. Leggiamo nel foglio tecnico la descrizione (nota 1)
La cella di memoria f è identificata da un indirizzo compreso tra 0 e 255 (0000 0000 e 1111 1111 in binario, 0x00 e 0xFF in esadecimale). Si noti l'uso delle parentesi () con il significato di numero contenuto in.
Il secondo argomento dell'istruzione {,a} specifica se deve essere usato l'Access Bank (quando a=0) oppure un altro banco (quando a=1), scelto attraverso il registro BSR. Questo argomento è facoltativo, come indicato dall'uso delle parentesi graffe {} .
Le celle in cui è più facile scrivere o leggere sono le prime 96, con indirizzo da 0 a 0x5F. Gli esempi e gli esercizi di questo paragrafo faranno riferimento a questa modalità, spesso indicata come indirizzamento diretto nell'Access Bank o semblicemente Access.
Osserviamo il seguente spezzone di programma:
movlw 0x55
movwf 0x10
La seconda istruzione copia nel registro con indirizzo 0x10 il contenuto del registro W (cioè, nell'esempio, il numero 0x55). Si noti che è presente il solo indirizzo in cui scrivere, cioè dopo lo 0x10 non vi è nulla. Come sintassi alternativa (e un po' ridondante) si sarebbe potuto scrivere anche movwf 0x10,0 con lo stesso significato. (nota 4)
Scrivere un breve programma che usa tale istruzione e ad eseguirlo con il simulatore, osservando il contenuto della Program Memory e dei File Registers. (nota 2).
Si consideri il seguente spezzone di programma (senza alcuno scopo reale...). Dopo aver esaminato sui fogli tecnici gli effetti delle istruzioni utilizzate, eseguire passo-passo il programma osservando gli effetti sui vari registri:
movlw 0x12
movwf 0x01
addlw 0x34
movwf 0x02
clrf 0x01
Scrivere un programma che memoriazza nelle celle di memoria da 0 a 3 i quattro codici ASCII "Ciao". A volte questo modo di rappresentare parole o anche intere frasi viene indicato con il termine stringa. (nota 5)
Nota: per memorizzare nel registro W il codice ASCII del carattere "A" (=0x41) è possibile usare indifferentemente una delle due seguenti forme, identiche negli effetti:
movlw 0x41
movlw "A"
Per utilizzare tutte le celle di memoria occorre utilizzare l'indirizzamento diretto di tipo Banked ed il registro speciale BSR. Questo registro di quattro bit contiene il numero del banco che un'istruzione deve utilizzare; in pratica è la prima cifra esadecimale dell'indirizzo. Per esempio il registro 0x56 del banco 0x3 è indicata come registro 0x356; il registro BSR contiene 3.
Per indicare se verrà utilizzata la modalità Banked oppure Access, ciascuna istruzione utilizza una virgola seguita da 0 oppure da 1 dopo l'operando (nota 4):
Esempio:
La scrittura dei quattro bit nel BSR deve essere effettuata con l'apposita istruzione assembly movlb (MOVe Literal to low nibble in Bsr).
Usando il simulatore, il banco che verrà utilizzato è mostrato in alto a destra, a fianco del WREG, del PC e dei flag.
Simulare il seguente spezzone di programma ed individuare in quali GPR verrà scritto 0xAA.
movlw 0xAA
movlb 0x5
movwf 0x11,1
movwf 0x22,0
movlb 0xA
movwf 0x33,1
movwf 0x44,0
Riscrivere l'esercizio 3 usando celle poste nel banco 8 per memorizzare la stringa "Ciao".
Gli SFR sono registri con usi speciali. Tra i principali possiamo individuare tre registri già visti:
Questo registro è utilizzato per molte istruzioni per contenere risultati e/o operandi. Può essere per molti versi paragonato a quello che in altre architetture è indicato come Accumulatore. Come quasi tutti i registri è formato da 8 bit
Questo registro contiene i flag della ALU, cioè alcuni bit che hanno un particolare significato dopo l'esecuzione di un'istruzione. Abbiamo già visto una loro breve descrizione.
Viene utilizzato per selezionare uno dei banchi del File Register
I tre registri WREG, STATUS e BSR descrivono lo stato del processore e possono essere considerati i registri fondamentali del PIC18
Tutti i registri speciali sono sempre direttamente accessibili al codice (è come appartenessero all'Access Bank) e di fatto costituiscono l'ultima parte della memoria RAM.
Data di creazione di questa pagina: gennaio 2017
Ultima modifica: 17 giugno 2017
Assembly PIC18 - Versione 0.5 - aprile 2018
Copyright 2016-2018, Vincenzo Villa (https://www.vincenzov.net)
Assembly PIC18 di Vincenzo Villa è distribuito con Licenza Creative Commons Attribuzione 4.0 Internazionale