Elettronica - Componenti
 
  Box
Architettura interna e organizzazione della memoria del PIC16F887

Vedere anche:

Le informazioni contenute in questi appunti sono tratte dai datasheet dei componenti citati e fornite a titolo di esempio, per un uso a livello didattico, sperimentale e hobbystico dei componenti elettronici.

Architettura interna del PIC16F887

Nella figura 1-2 del datasheet, vediamo lo schema a blocchi di come è composto internamente il PIC16F887.

Notiamo gli I/O, nella parte destra, suddivisi su 4 port ad 8 bit e 1 a 4 bit.

Tutti gli altri moduli di periferica disponibili, si vedono nella parte inferiore

Nella tabella 1-2 del datasheet, sono elencati tutti i pin e la loro funzione a seconda della configurazione.
Per ognuna funzione viene indicato il tipo di ingresso, il tipo dell'uscita ed una breve descrizione.

Ad esempio, vediamo che il pin RA6 viene normalmente usato per collegare l'oscillatore a quarzo per il clock (OSC2), ma può essere configurato anche come I/O (RA6) oppure come uscita dell'oscillatore (CLKOUT).

Per il pin RB0, sempre come esempio, vediamo che può essere configurato anche come ingresso analogico (AN12) oppure come interrupt esterno (INT).

In fondo alla tabella, c'è una descrizione per tutti i simboli usati nella stessa.

Memoria programma (FLASH)

Nella figura 2-3 del datasheet, vediamo la mappa della memoria programma (Flash rom).
Questa è la memoria dove risiedono le istruzioni da eseguire.

Il PIC16F887 ha un Program Counter (PC) di 13 bit, capace di trattare un campo di indirizzi di memoria fino a 8192 words (0000h-1FFFh).
In questo tipo di microcontroller (middle range), le istruzioni hanno un'ampiezza di 14 bit e il termine "word" viene usato come unità di misura per una istruzione (8192 words = 8192 istruzioni).

Lo stack è una particolare zona di memoria dove vengono memorizzati gli indirizzi di ritorno quando viene effettuata una istruzione CALL e si compone di 8 livelli.

Il vettore di reset è mappato all'indirizzo 0000h ed il vettore di interrupt è mappato all'indirizzo 0004h.

Lo spazio di memoria è strutturato a pagine di 2048 words (0000h-07FFh). In questo caso abbiamo 4 pagine per un totale di 8192 words di programma.
Sarà compito del progettista, avere una corretta gestione delle pagine nel programma, attraverso istruzioni particolari.

Memoria dati (RAM)

Nella figura 2-6 del datasheet, vediamo che la memoria dati (RAM) è mappata su 4 banchi (Bank) da 128 bytes ognuno.
Per selezionare il banco interessato bisogna impostare i bit (RP1-RP0) nel registro STATUS.

RP1
RP0
Banco
0
0
Bank 0 selezionato
0
1
Bank 1 selezionato
1
0
Bank 2 selezionato
1
1
Bank 3 selezionato

Nella parte colorata in verde si vedono i registri di funzione speciale (SFR - Special Function Register).
Questi registri (a 8 bit) sono usati dalla CPU e dai moduli di periferica per tenere sotto controllo le operazioni del dispositivo.
Alcuni registri di sistema si trovano mappati in tutti i banchi per facilitare la programmazione.

Nella parte colorata in blu, invece, si vedono i registri per uso generale (GPR - General Purpose Register).
Questi registri (a 8 bit) sono disponibili per l'utente per memorizzare i propri dati usati dal programma. Nel PIC16F887 sono disponibili 368 bytes di RAM per i GPR.
Ogni registro è accessibile direttamente dal suo indirizzo oppure, indirettamente, mediante l'uso del registro FSR (File Select Register).
Gli ultimi 16 bytes (da 70h a 7Fh) sono mappati in tutti i banchi per facilitare la programmazione.
Questo significa che, quello che si scriverà nel bank0, lo ritroveremo copiato negli altri banchi.

Nella figura sotto, vediamo una parte della tabella 2-2 del datasheet (riferita al bank1) che contiene:

 
Colonna Descrizione
Addr Indirizzo del registro nella RAM
Name Nome del registro
Bit Nomi assegnati ai vari bit
Value on POR, BOR Il valore che sarà assegnato ad ogni bit durante il reset del dispositivo
Page La pagina del datasheet dove trovare ulteriori info sul registro
 
   

Ad esempio, per il registro OPTION_REG, che si trova all'indirizzo 81h, al reset del dispositivo (quando diamo l'alimentazione), tutti i bit saranno impostati a 1.

Il registro STATUS, al reset del dispositivo, avrà i bit C, DC e Z indefiniti (possono essere sia 0 che 1), i bit PD e TO impostati a 1, il resto dei bit (RP0, RP1, IRP) impostati a 0.
Ulteriori info, su questo registro, le possiamo trovare alle pagine 29 e 217 del datasheet.

Notiamo anche che i bit dei registri TRISA, TRISB, TRISC, TRISD, TRISE, al reset del dispositivo, vengono impostati a 1, quindi vengono configurati come ingressi i corrispondenti registri PORTA, PORTB, PORTC, PORTD, PORTE.

Dalla pagina 29 del datasheet, troviamo la descrizione dei registri usati dal cuore del sistema.
Sopra al nome dei bit troviamo l'indicazione se il bit è scrivibile (W), leggibile (R) ed il valore assegnato durante un Power On Reset (POR).

Ad esempio:

R/W-0 significa che il bit è leggibile, scrivibile e impostato a 0 durante un reset.

R-1 significa che il bit è solo leggibile e impostato a 1 durante un reset.

R/W-x significa che il bit è leggibile, scrivibile e avrà un valore indefinito durante un reset.

Per ogni registro viene descritta, nei dettagli, la funzione di ogni bit in base all'impostazione.

A pagina 30, per esempio, troviamo la descrizione del registro OPTION_REG.
Notiamo che, tutti i bit, sono leggibili, scrivibili e, durante un reset, sono messi a 1.

Vediamo successivamente che, per ogni bit viene data, in base all'impostazione, la descrizione della sua funzione.

PS<2:0> non è una formula. Significa: bit PS da 2 a 0 (precisamente PS2, PS1, PS0) e sotto c'è la tabella con le combinazioni.

Program Counter e registri PCL e PCLATH

Il Program Counter (PC) ha un'ampiezza di 13 bit.

I primi 8 bit sono ubicati nel registro PCL (Program Counter Low), che è un registro leggibile e scrivibile.
Gli altri 5 bit, PCH (Program Counter High), non sono direttamente accessibili , ma possono essere scritti tramite il registro PCLATH.

Dopo un qualsiasi reset, il PC risulterà azzerato.

La figura a lato mostra come viene caricato il PC,

(1) durante un'istruzione dove il registro PCL è la destinazione e

(2) durante un'istruzione GOTO o CALL.

Indirizzamento diretto ed indiretto

(1) Nell'indirizzamento diretto, l’indirizzo del registro viene ottenuto dalla concatenazione di 7 bit che vengono forniti dall’istruzione che si sta eseguendo, e dai bit RP0 ed RP1 del registro STATUS; in pratica, i 7 bit individuano un indirizzo fra 0 e 127, mentre i due bit selezionano uno dei 4 possibili banchi.

(2)
Nell'indirizzamento indiretto, viene utilizzato il registro INDF (che in realtà non è propriamente un registro fisico), in unione col registro FSR. In pratica, la locazione su cui viene eseguita una operazione viene identificata da 7 bit del registro FSR, l’ottavo bit, insieme al bit dato da IRP del registro STATUS, determina l’indirizzo del banco.

 

Caratteristiche elettriche del PIC16F887

Caratteristiche speciali della CPU

Bibliografia:
Datasheet Microchip PIC16F887

 

Ultima modifica  

 
Privacy Policy Cookie Policy