Lezione 2

Step 1/4

Passo precedenteInizio lezionePasso successivo

L'area di programma e il Register File

 

Dopo aver fatto un pò di pratica, passiamo ora alla teoria. Iniziamo a vedere com'è fatto internamente un PIC, quali dispositivi contiene e come interagiscono tra loro.

Nella figura seguente viene riprodotto lo schema a blocchi semplificato dell'architettura interna del PIC16F84 che ci aiuterà a seguire meglio quanto verrà spiegato. Le parti evidenziate in giallo, sono le componenti che di volta in volta andremo ad analizzare.

Iniziamo dalla memoria EEPROM e dal REGISTER FILE.

La EEPROM è una memoria speciale, non cancellabile elettricamente, utilizzata nel PIC per memorizzare il programma da eseguire.

La sua capacità di memorizzazione è di 1024 locazioni ognuna in grado di contenere un opcode a 14 bit ovvero una istruzione base del PIC. Il programma più complesso che potremo realizzare non potrà essere quindi più lungo di 1024 istruzioni.

Gli indirizzi riservati alla EEPROM vanno da 0000H a 03FFH. Il PIC può solamente eseguire le istruzioni memorizzate in queste locazioni. Non può in alcun modo leggere, scrivere o cancellare quanto in esse contenuto.

Per scrivere, leggere e cancellare queste locazioni è necessario un dispositivo esterno denominato programmatore. Un esempio di programmatore è il nostro YAPP! o il PICSTART-16+© prodotto dalla Microchip o molti altri ancora disponibili in commercio.

La prima locazione di memoria, all'indirizzo 0000H, deve contenere la prima istruzione che il PIC dovrà eseguire al reset e per questo viene nominata Reset Vector.

Come ricorderete, nel source LED.ASM presentato nella prima lezione era stata inserita la direttiva:

	ORG 00H

per segnare l'inizio del programma. Questa direttiva tiene conto del fatto che l'esecuzione del programma al reset parte dall'indirizzo 0000H dell'area programma.

L'istruzione che segue immediatamente la direttiva ORG 00H:

	bsf     STATUS,RP0 

sarà quindi la prima istruzione ad essere eseguita.

Il REGISTER FILE è un'insieme di locazioni di memoria RAM denominate REGISTRI. Contrariamente alla memoria EEPROM destinata a contenere il programma, l'area di memoria RAM è direttamente visibile dal programma stesso.

Quindi potremo scrivere, leggere e modificare tranquillamente ogni locazione del REGISTER FILE nel nostro programma ogni volta che se ne presenti la necessità.

L'unica limitazione consiste nel fatto che alcuni di questi registri svolgono una funzione speciale per il PIC e non possono essere utilizzati per scopi diversi da quelli per cui sono stati riservati. Questi registri speciali si trovano nelle locazioni più basse dell'area di memoria RAM secondo quanto illustrato di seguito.

Le locazioni di memoria presenti nel REGISTER FILE sono indirizzabili direttamente in uno spazio di memoria che va da 00H a 2FH per un totale di 48 byte, denominato pagina 0. Un secondo spazio di indirizzamento denominato pagina 1 va da 80H a AFH. Per accedere a questo secondo spazio è necessario ricorrere ai due bit ausiliari RP0 e RP1 secondo le modalità che andremo a spiegare più avanti.

Le prime 12 locazioni della pagina 0 (da 00H a 0BH) e della pagina 1 (da 80H a 8BH) sono quelle riservate alle funzioni speciali per il funzionamento del PIC e, come già detto, non possono essere utilizzate per altri scopi.

Le 36 locazioni in pagina 0 indirizzate da 0CH a 2FH possono essere utilizzate liberamente dai nostri programmi per memorizzare variabili, contatori, ecc.

Nel nostro esempio LED.ASM la direttiva:

	ORG 0CH

indica proprio l'indirizzo di inizio dell'area dati utilizzabile dal nostro programma.

La direttiva che segue:

Count     RES 2 

riserva uno spazio di due locazioni, che il programma utilizzerà per memorizzare i contatori di ritardo della subroutine Delay.

I registri specializzati del PIC vengono utilizzati molto di frequente nei programmi.

Ad esempio, si ricorre alla coppia di registri specializzati TRISA e TRISB, per definire quali linee di I/O sono in ingresso e quali in uscita. Lo stesso stato logico delle linee di I/O dipende dal valore dei due registri PORTA e PORTB.

Alcuni registri riportano lo stato di funzionamento dei dispositivi interni al PIC o il risultato di operazioni aritmetiche e logiche.

E' necessario conoscere quindi esattamente quale funzione svolge ciascun registro specializzato e quali effetti si ottengono nel manipolarne il contenuto.

Per facilitare le operazioni sui registri specializzati, nel file P16F84.INC (che come ricorderete era stato incluso nel source LED.ASM con la direttiva INCLUDE) la Microchip ha inserito una lista di nomi che identificano univocamente ciascun registro specializzato e a cui sono associati gli indirizzi corrispondenti nell'area dei REGISTER FILE.

Se, ad esempio, volessimo definire tutte le linee della porta B del PIC in uscita agendo sul registro TRISB, potremmo scegliere di referenziare direttamente il registro con il suo indirizzo:

	movlw B'00000000'
	movwf 06H

oppure, referenziare lo stesso registro con il suo nome simbolico:

	movlw B'00000000'
	movwf TRISB

avendo però l'accortezza di inserire la direttiva INCLUDE "P16F84.INC" nel nostro source.

Nel passo successivo vedremo un altro componente interno al PIC denominato ALU ed il registro W conosciuto anche con il nome di accumulatore.

 
Home page

PICPOINT, SXPOINT and ELETTROSHOP (C) 1997/98 by Andrea Galizia
For comments on this web site, write to webmaster@picpoint.com
Web design by Tiziano Galizia

Pic by example (c) 1997/98 by Sergio Tanzilli & Tiziano Galizia