Tutorials - PIC

 

PIC12F508/509 e 16F505


L' indirizzamento indiretto

Si tratta di un meccanismo che permette l' accesso alla memoria RAM attraverso un puntatore, che è costituito dal registro FSR e dal registro INDF.
Il registro INDF appare nella lista degli SFR, ma non è un registro fisico. Indirizzando INDF effettivamente si indirizza il registro il cui indirizzo è contenuto in FSR: FSR è un puntatore.

FSR è un registro con 5 bit utili: i primi 4 identificano la locazione nell' area 00h-1Fh e il bit 5 indica il banco di RAM a cui accedere (00-1Fh, Bank 0 o 20h-3Fh, Bank 1). Con questo metodo è possibile accede alla RAM del Bank 1:

  • FSR<5> = 0 ->  Banco 0
  • FSR<5> = 1 ->  Banco 0.

Un esempio di uso di FSR come puntatore indiretto per INDF: la locazione di RAM  all' indirizzo 10h contiene il valore CCh.  La locazione 11h contiene il valore 0Ah.
Se carichiamo l' indirizzo 10h in FSR, leggendo INDF si otterrà CCh, ovvero il valore contenuto nella locazione puntata. Incrementando di uno FSR (10+1=11) la lettura di INDF renderà 0Ah, dato che ora il puntatore indica la locazione all' indirizzo 11.

Una applicazione : azzerare la RAM da 10h a 1Fh

     MOVLW 0x10           ;inizializza il puntatore
     MOVWF FSR            ;alla locazione da cui iniziare
NEXT CLRF  INDF           ;azzera indiretto (INDF)
     INCF  FSR,F          ;puntatore + 1
     BTFSC FSR,4          ;fine area RAM (>1Fh)?
     GOTO  NEXT           ;no, un altro loop
CONT                      ;si, fine loop                  

La lettura INDF (FSR = 0) produrrà 00h. Un tentativo di scrivere indirettamente INDF si traduce in 
nessuna operazione (anche se i bit dello STATUS possono essere modificati).

In PIC16F506, il meccanismo è del tutto analogo, ma, data la maggiore estensione dei banchi, FSR utilizza un bit in più.

Per riassumere:

  • PIC12F510  ha due banchi. Utilizza FSR<5> per l' accesso al secondo banco. FSR<7:6> non sono implementati e se letti rendono '1'.
  • PIC16F506 ha 4 banchi di RAM. Utilizza FSR<6:5> per l' accesso ai banchi. FSR<7> è non implementato e se letto rende '1'.

Dopo quanto detto potrebbe essere utile un riepilogo dell' organizzazione della memoria. Ricordiamo che in base all' architettura Harvard memoria dati e memoria programma stanno su bus diversi.
Questo comporta che ci sarà un indirizzo 00h per il bus dati, corrispondente ad una locazione di RAM (in questo caso il registro INDF).
E un indirizzo 00h sul bus della memoria programma, corrispondente ad una locazione della Flash (in questo caso, il vettore di Reset).

La memoria programma:

  • in tecnologia Flash, è organizzata in "bytes" da 12 bit ciascuno
  • Contiene i codici di istruzione e quant' altro serve nell' esecuzione del programma
  • Il suo contenuto è creato dalla compilazione del file sorgente del programma e resta invariato anche se manca la tensione di alimentazione
  • Il suo contenuto non può essere alterato durante l' esecuzione del programma
  • Ci si accede in scrittura e lettura attraverso un dispositivo di programmazione (ICSP)
  • In questo PIC è ripartita in due pagine da 512 bytes ciascuna. L' accesso alle pagine si effettua con l' aiuto del bit PA0 dello STATUS

La memoria dati:

  • in tecnologia RAM, è organizzata in bytes da 8 bit ciascuno
  • Comprende sia l' area di RAM dati vera propria, sia l' area dei registri SFR
  • Il suo contenuto è modificabile durante l' esecuzione del programma e va perso se manca la tensione di alimentazione
  • Il contenuto della RAM dati è indefinito all' accensione, mentre per quanto riguarda gli SFR essi sono inizializzati dai default
  • Ci si accede in scrittura e lettura attraverso le istruzioni del programma
  • In questo PIC è ripartita in due banchi . L' accesso ai banchi si effettua con l' aiuto del bit 5 di FSR.

PIC12F510

Memoria Tipo Bus Amp. Divisione Accesso Note
programma Flash 12 1k Pagina 0
Pagina 1
PA0 = 0 000h-1FFh
PA0 = 1 200h-3FFh
 
dati RAM 8 38 Banco 0
Banco 1
FSR5 = 0 10h-1Fh
FSR5 = 1 30h-3Fh
0Ah-0Fh area comune 
accessibile senza commutare i banchi
SFR RAM 8 10

accessibili da tutti i banchi

PIC16F506

Memoria Tipo Bus Amp. Divisione Accesso Note
programma Flash 12 1k Pagina 0
Pagina 1
PA0 = 0 000h-1FFh
PA0 = 1 200h-3FFh
 
dati RAM 8 67 Banco 0
Banco 1
Banco 2
Banco 3
FSR6:5 = 00 10h-1Fh 
FSR6:5 = 01 30h-3Fh
FSR6:5 = 10 50h-5Fh
FSR6:5 = 11 70h-7Fh
0Dh-0Fh area comune 
accessibile senza commutare i banchi
SFR RAM 8 13

accessibili da tutti i banchi

 


 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 01/05/13.