TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web...

22

Click here to load reader

Transcript of TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web...

Page 1: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

IL MICROCONTROLLORI PIC 16F84 DESCRIZIONE DELLA STRUTTURA INTERNA

Indice degli argomenti:

- Confronto tra logica cablata e logica programmata

- Schema a blocchi e piedinatura del microcontrollore PIC16F84

- Funzionamento di un circuito in logica programmata

- Differenze tra microprocessore e microcontrollore

- Caratteristiche generali di un microcontrollore della famiglia PIC con particolare

riferimento al PIC16F84

- Analisi della memoria contenuta nel chip

- La ALU ed il registro accumulatore nel PIC 16F84

- Le Porte A e B

- Il TMR0 (timer 0)

- Il Prescaler

- Il Watchdog timer

- Il Registro STATUS

- Il Registro OPTION

- La tecnica di colloquio con i dispositivi esterni tramite polling ed interrupt.

- Il set delle istruzioni

- Come creare un programma per il microcontrollore PIC usando MPLAB

1

Page 2: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

CONFRONTO TRA LOGICA CABLATA E LOGICA PROGRAMMATA

I circuiti logici sono quelli in cui i segnali possono assumere solamente due valori: livello

alto e livello basso.

Generalmente il livello basso assume la tensione di 0 volt, mentre quello alto assume la

tensione di 5 volt (sono i livelli TTL).

I circuiti in logica cablata sono realizzati collegando in maniera opportuna porte logiche e

flip-flop.

Esempi di circuiti in logica cablata sono: decodificatori, multiplexer, contatori etc…i quali

possono assolvere ad una sola funzione: quella per la quale sono stati progettati.

Ad esempio, un contatore di modulo 8 non può effettuare un conteggio con modulo

differente, se non si modifica il circuito, ossia il cablaggio.

I circuiti in logica programmata contengono, oltre alle porte logiche e flip-flop, anche uno o

più microprocessori o microcontrollori, che eseguono dei comandi memorizzati.

Un circuito in logica programmata possiede, pertanto, caratteristiche migliori in quanto può

assolvere funzioni differenti cambiando solamente il programma, ma non il cablaggio.

Generalmente un circuito in logica cablata è più semplice da progettare e realizzare, più

economico e più veloce; viceversa, quello in logica programmata è più complesso da

realizzare, più costoso e meno spedito nelle sue funzioni.

Oggi, questi svantaggi sono stati ridotti o eliminati, in quanto la velocità di esecuzione di

una singola istruzione del programma è scesa sotto il microsecondo ed il costo dei

microcontrollori si aggira intorno a pochi euro.

2

Page 3: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

SCHEMA A BLOCCHI E PIEDINATURA DEL MICROCONTROLLORE PIC 16F84

La struttura interna di un microcontrollore PIC16F84 è la seguente

I blocchi principali che lo costituiscono sono:

- Una unità centrale di controllo che coordina i vari blocchi

- Una memoria riservata ai programmi o PROGRAM MEMORY (di tipo EEPROM)

- Una memoria riservata ai dati variabili o REGISTER FILE (di tipo RAM)

- Una memoria riservata ai dati fissi o DATA MEMORY (di tipo EEPROM)

- Una memoria STACK per gestire i sottoprogrammi

- Una unità aritmetico-logica ALU

- Un registro di lavoro W (Work)

- Il Program counter PC

- Un generatore ad onda quadra per il clock

- Due tipi di TIMER: il TIMER0 ed il WATCHDOG

- Due porte d’ingresso e uscita PORT A e PORT B.

Questi blocchi verranno spiegati meglio in seguito.

3

Page 4: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

Il PIC16F84A è dotato di un totale di 18 PIN disposti su due file parallele da 9 PIN

ciascuna. I PIN RA ed RB rappresentano le 13 linee di I/O disponibili per le nostre

applicazioni, i PIN Vss e Vdd sono quelli di alimentazione, gli altri sono riservati al

funzionamento del PICmicro (ad esempio MCLR per il reset e OSC1-2 per il clock).

La piedinatura dell’integrato è la seguente:

4

Page 5: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

FUNZIONAMENTO DI UN CIRCUITO IN LOGICA PROGRAMMATA

In un circuito in logica programmata sono sempre presenti:

- uno o più banchi di memoria,

- una unità centrale di controllo (CPU),

- una unità aritmetico logica (ALU) .

Parliamo inizialmente delle memorie.

Ogni cella di memoria è individuata da un numero che costituisce il suo indirizzo. Esse

sono raggruppate in banchi. Ogni cella di memoria può essere paragonata ad un cassetto

con un certo numero di scompartimenti (i singoli bit) ed un banco di memoria, invece, ad

una cassettiera.

Nel disegno seguente abbiamo un banco di memoria contenente 8 registri, ciascuno dei

quali formato da 8 bit.

Le operazioni che si possono fare sui registri sono semplici, ad esempio porre nel registro

di indirizzo 110 tutti i bit a zero (azzerare il registro 110) oppure spostare il contenuto da

un registro ad un altro.

I contenuti delle celle di memoria sono sempre i bit, ma questi possono rappresentare o un

numero in codifica binaria oppure un comando codificato (OPCODE di una istruzione).

5

Page 6: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

Il numero dei bit di una cella è limitato, per cui possono contenere numeri codificati in

binario fino ad una quantità definita, oppure solo un certo numero di opcode diversi.

Parliamo ora dell’unità centrale di controllo.

L’unità centrale di controllo provvede ad eseguire ciclicamente le seguenti operazioni:

1) Prelevamento dalla memoria di una istruzione scritta in codice binario; l’istruzione

attraversa un insieme di fili (il bus dati) e raggiunge un registro della CPU.

2) Il dato prelevato, cioè l’istruzione, viene decodificato dall’unità centrale di controllo

che capisce di quale tipo di comando si tratti (trasferimento di dati tra registri,

operazioni logiche o aritmetiche, operazioni di controllo di flusso del programma

ecc).

3) Il comando viene eseguito, coinvolgendo eventualmente anche la ALU, e vengono

trovati i risultati.

Le tre fasi precedenti vengono chiamate in inglese: FETCH, DECODE ed EXECUTE.

L’indirizzo dell’istruzione da prelevare è contenuto in un registro chiamato PROGRAM

COUNTER (PC). Il codice della istruzione arriva alla memoria della CPU attraversando un

insieme di fili chiamato “bus degli indirizzi”.

Il PROGRAM COUNTER assume il valore 0 all’inizio e si incrementa automaticamente

durante l’esecuzione delle istruzioni.

Le istruzioni sono scritte in un opportuno codice binario chiamato “codice macchina” e ogni

processore capisce solamente il proprio. Per evitare che i programmatori debbano

conoscere tutti i codici macchina di tutti i processori in commercio, è stato inventato un

linguaggio chiamato ASSEMBLER, più vicino al linguaggio dell’uomo, e sono stati

realizzati dei programmi specifici, chiamati PROGRAMMI ASSEMBLATORI, a cui si è

affidato il compito di tradurre il linguaggio ASSEMBLER nel codice macchina del

processore utilizzato.

DIFFERENZA TRA MICROCONTROLLORE E MICROPROCESSORE

La differenza più evidente tra un microcontrollore ed un microprocessore è la seguente: in

un microprocessore la memoria che contiene dati e le istruzioni è unica ed esterna

all’integrato, mentre in un microcontrollore la memoria dati e la memoria programma sono

separate, ma entrambe contenute all’interno del CHIP dove si trova anche la CPU.

In un microprocessore la velocità di esecuzione delle istruzioni è molto elevata, ma un

microcontrollore ha il vantaggio di integrare al suo interno alcuni periferici d’ingresso e

6

Page 7: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

uscita come: porte seriali e/o parallele, contatori e/o timer, convertitori analogico/digitali,

generatori di onde quadre ecc.

Con queste caratteristiche i microcontrollori si prestano ad essere utilizzati in

elettrodomestici, telecomandi, antifurti, strumenti di laboratorio, macchine a controllo

numerico etc…, nonchè sono facilmente utilizzabili in applicazioni in cui il programma,

una volta messo a punto, verrà raramente modificato.

CARATTERISTICHE GENERALI DI UN MICROCONTROLLORE DELLA FAMIGLIA PIC CON PARTICOLARE RIFERIMENTO AL PIC16F84

Vengono elencate di seguito le caratteristiche principali del PIC16F84:

1) Set ridotto di istruzioni (35), codificate su parole di 14 bit, eseguite tutte in un solo ciclo

macchina (4 colpi di clock), tranne le istruzioni di salto che richiedono 2 cicli macchina.

2) Dati a 8 bit .

3) Frequenza di clock che va dalla continua fino a 10 Mhz (tipica 4 Mhz), ottenibile o con

un quarzo o con un gruppo RC.

4) Memoria di programma non volatile di tipo EEPROM di 1024 x 14 bit

5) Un banco di memoria RAM diviso in due pagine organizzata in registri. Alcuni registri

hanno funzioni speciali mentre gli altri possono essere utilizzati liberamente (per

vedere numero ed utilizzo vedi disegno più avanti).

6) 64 byte di memoria dati non volatile EEPROM

7) 13 linee di ingresso/uscita organizzate in 2 porti PORT A di 5 bit e PORT B di 8 bit, con

controllo individuale della direzione, TTL compatibili e con alta corrente in uscita

(20mA) ed in ingresso (25mA). Alcune di queste linee possono essere utilizzate per

altri scopi quali richieste di interruzione conteggi ecc.

Un microcontrollore possiede poi delle caratteristiche, assenti nei microprocessori, ma utili

nelle applicazione di automazione e controllo.

Queste caratteristiche sono:

- l’autoreset all’accensione (ad ogni accensione il programma riparte dall’inizio da solo);

- la possibilità di porre da programma il microcontrollore in sleep, cioè in uno stato di

attesa, in cui l’esecuzione del programma si interrompe. In tale stato il consumo del chip

diventa minimo

7

Page 8: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

- la presenza di watchdog timer attivabile da programma. Questo dispositivo genera un

reset se il contatore non viene opportunamente ricaricato. Questa ripartenza è utile per

sbloccare il microcontrollore da eventuali situazioni di malfunzionamento. Il watchdog

timer può comunque essere escluso quando non è necessario.

ANALISI DELLA MEMORIA CONTENUTA NEL CHIP

Come già elencato in precedenza il PIC16F84 contiene quattro tipi di memoria:

- Il program memory;

- Data memory;

- Il register file;

- Lo stack.

Il PROGRAM MEMORY è una memoria di tipo flash, non volatile ma cancellabile e

riscrivibile elettricamente, utilizzata per contenere il programma da eseguire. La sua

capacità è di 1024 locazioni, ciascuna formata da 14 bit. Ogni cella contiene un upcode

cioè il codice di una sola istruzione. Il programma quindi non potrà essere più lungo di

1024 istruzioni. Gli indirizzi vanno da 000h a 3FFh.

Il DATA MEMORY è una memoria non volatile di tipo EEPROM. La sua capacità è di 64

locazioni, ognuna formata da 8 bit. Essa contiene i dati fissi, è una memoria di tipo flash,

non volatile, ma cancellabile e riscrivibile elettricamente

Il REGISTER FILE è un insieme di locazioni di memoria RAM, ovvero una memoria

volatile in cui è possibile leggere e modificare il contenuto direttamente dal programma in

esecuzione. Il register file perde il suo contenuto quando il micro viene spento.

Le prime 12 locazioni della pagina 0 (da 00h a 0Bh) e le prime 12 locazioni della pagina 1

sono riservate alle funzioni speciali per il funzionamento del PIC e non devono essere

utilizzate per altri scopi

Le rimanenti 48 locazioni in pagina 0 indirizzate da 0Ch a 3Fh possono essere utilizzate

liberamente dai nostri programmi per memorizzare variabili, contatori, etc…

Attenzione! Molte celle sono duplicate nelle due pagine, cioè 2 indirizzi diversi possono

portare allo stesso contenuto. Il registro 03h ed il registro 83h infatti portano allo stesso

registro chiamato STATUS.

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

riportano, ad esempio, lo stato di funzionamento dei dispositivi interni al PIC o il risultato di

operazioni aritmetiche e logiche.

8

Page 9: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

E' necessario conoscere esattamente quale funzione svolge ciascun registro specializzato

e quali effetti si ottengono nel manipolarne il contenuto.

Per facilitare le operazioni sui registri specializzati, 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. Per utilizzare i nomi e non gli

indirizzi è sufficiente inserire nel source del programma una direttiva, chiamata INCLUDE.

Essa è la direttiva “P16F84.INC”.

Vediamo di seguito la mappa del REGISTER FILE

Parliamo ora di un banco di memoria molto particolare chiamato STACK.

Esiste una particolare operazione denominata   “CHIAMATA A SUBROUTINE”, ovvero

un’interruzione momentanea del normale flusso di programma per "chiamare" in

esecuzione una serie di istruzioni, per poi ritornare al normale flusso di esecuzione.

Queste interruzioni vengono eseguite usando la memoria stack: questa parola in inglese

significa "catasta" ed infatti su questa catasta è possibile depositare,  uno sull'altro,

più  indirizzi e dati, per recuperarli, quando servono, durante una gestione di una

9

Page 10: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

interruzione. Questo tipo di memorizzazione viene anche denominata LIFO dall'inglese

Last In First Out, in cui l'ultimo elemento inserito (last in) deve necessariamente essere il

primo ad uscire (first out). Grazie a questa caratteristica è possibile effettuare più CALL

annidate, ovvero l'una nell'altra e mantenere sempre traccia del punto in cui riprendere il

flusso al momento che si incontra una istruzione RETURN.

LA ALU ED IL REGISTRO ACCUMULATORE DI UN PIC 16F84L’unità aritmetico - logica è quella parte interna del microcontrollore dedicata

all’esecuzione delle operazioni aritmetico e logiche richieste dal programma.

Essa ha 2 ingressi ed 1 uscita.

Un ingresso è sempre un registro particolare esterno al file register che si chiama “registro

di lavoro” (W).

Il risultato dell’operazione può andare sia sul registro di lavoro stesso (W) che su un

registro del file register. Questo registro deve essere però lo stesso che è stato usato in

ingresso. La ALU del PIC lavora quindi sempre su non più di 2 registri.

LE PORTE A e B

Il PIC 16F84 possiede un totale di 13 linee dedicate alle operazioni di ingresso e uscita.

Esse sono distinte in 2 gruppi: Porta A (5 linee) Porta B (8 linee).

Ciascuna linea può essere settata individualmente come ingresso o come uscita. Per

stabilire quali delle linee saranno utilizzate come ingressi e quali come uscite, si deve

agire sui singoli bit di due registri che si trovano all’indirizzo 05h e 06h del banco 1 del file

register.

Questi 2 registri prendono il nome di TRIS A e TRIS B. Ogni bit del TRIS B è legato ad

una linea della porta B, i primi 5 bit del TRIS A sono legati alle 5 linee della porta A.

Se un bit del registro TRIS vale 0, allora la corrispondente linea è settata come uscita,

mentre se vale 1, la corrispondente linea è settata come ingresso.

Supponiamo ora che una linea sia settata come uscita. Da programma posso porre tale

linea ad una tensione 0 Volt oppure 5 Volt agendo su un registro di indirizzo 05h o 06h nel

banco 0 del file register; questo registro prende il nome di PORT A o PORT B.

Se la linea invece è settata come ingresso sarà l’esterno a scrivere un opportuno valore

nel registro PORT A o PORT B.

La relazione tra il valore binario all’interno del registro e la tensione sulla linea è la

seguente: Bit = “0” logico se la tensione è 0V, bit = “1” logico se la tensione è 5V.

10

Page 11: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

IL TIMER0 (timer zero)

All’interno del PIC è presente anche un timer a 8 bit utile per eseguire delle

temporizzazioni.

Il segnale ad onda quadra che pilota questo timer può essere o un segnale esterno, in

ingresso al pin RA4, oppure un segnale interno legato al clock di sistema. È possibile

selezionare l’ingresso al TIMER tramite un’istruzione del programma ed è possibile ridurre

la frequenza di conteggio utilizzando un divisore di frequenza chiamato prescaler.

Il fattore di divisione è uguale a 2ⁿ-1, con n che va da 1 a 8.

Il valore di divisione del prescaler è modificabile via software ed è possibile incrementare il

conteggio sui fronti di salita o di discesa dell’onda quadra. Il Timer può generare una

interruzione ogni volta che il contatore passa da 255 a 0.

IL PRESCALER

Il Prescaler, come detto sopra, è un divisore di frequenza selezionabile via software.

Il valore di tale divisione va da un minimo di 2 ad un massimo di 256. Il valore della

divisione viene impostato tramite 3 Bit del registro OPTION (vedi più avanti). Il prescaler

può essere assegnato oltre che al TIMER 0 ad un altro timer chiamato WATCHDOG.

IL WATCHDOG TIMER

Il registro watchdog timer è un registro a 8 Bit che si incrementa con il clock di sistema.

Quando il valore passa da 255 a 0 si genera un reset e quindi una ripartenza del

programma dall’inizio. Il programmatore deve provvedere a ricaricare il watchdog timer in

maniera software, prima che il contatore arrivi a 0, tramite delle istruzioni di ricarica.

In condizioni di malfunzionamento, cioè nei blocchi del programma, queste istruzioni di

ricarica non vengono eseguite e quindi il watchdog timer, dopo un tempo abbastanza

breve, resetta il sistema e sblocca il programma.

11

Page 12: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

IL REGISTRO STATUS

Il registro STATUS si trova nella zona riservata del file register duplicato in pagina 0 e in

pagina 1. L’indirizzo vale 03h. Ogni Bit del registro status è un flag (bandierina) che

segnala alcuni eventi avvenuti all’interno della CPU. Vediamo ora uno ad uno tutti gli 8 bit.

Bit 0 - viene chiamato CARRY, segnala la presenza di un riporto in un operazione fatta

dalla ALU.

Bit 1 - DIGIT-CARRY, segnala la presenza di un riporto a metà registro (dopo 4 Bit)

all’interno della ALU.

Bit 2 - viene chiamato ZERO, e segnala che l’operazione fatta dalla ALU ha dato come

risultato zero.

Bit 3 - viene chiamato Power-Down, e segnala che il controllore si trova in una situazione

di sleep.

Bit 4 - viene chiamato TIME OUT, e segnala se il watchdog ha raggiunto il valore zero ed

ha resettato il sistema

Bit 5 - viene chiamato Registro di Pagina, e segnala quale delle due pagine è attiva.

Bit 6 - e BIT 7 vengono chiamati IRP e RP1 ma non sono utilizzati nel PIC16F84 e nel

PIC 16C84.

bit nome significato0 C È posto a 1 quando c’è riporto dal bit più significativo (MSB)

1 DC È posto a 1 quando c’è riporto dal bit più significativo del primo semi-byte

2 Z È posto a 1 quando il risultato di un operazione logica o aritmetica è 0

3 PD\ È posto a 0 quando il controllore è in sleep

4 TO\ È posto a 0 quando il watchdog va in time-out

5 RP0 Seleziona il banco; se vale 0 agisco sul banco 0 e viceversa

6 e 7 IRP e IRP1 Non Utilizzati nel PIC16F84 e 16C84

12

Page 13: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

IL REGISTRO OPTION

Il registro OPTION viene utilizzato per configurare il sistema. Esso si trova in pagina 1

all’indirizzo 01h. Il significato dei Bit viene espresso dalla seguente tabelle:

bit nome significato0 PS0 Primo bit del fattore di divisione per il prescaler

1 PS1 Secondo bit del fattore di divisione per il prescaler

2 PS2 Terzo bit del fattore di divisione per il prescaler

3 PSA Se vale 0 il prescaler è assegnato al TMR0 altrimenti è assegnato al watchdog

4 T0SE se vale 0 il conteggio viene fatto sul fronte di discesa altrimenti su quello di salita

5 T0CS Se vale 0 il TMR0 conta il segnale di clock interno altrimenti conta quello esterno

6 INTEDG Se vale 0 l’interruzione si genera sul fronte di discesa del segnale in RB0

7 RBPU\ Se vale 0 i resistori interi di pull-up sono disabilitati

TECNICA DI COLLOQUIO CON I DISPOSITIVI ESTERNI TRAMITE POLLING E INTERRUPT

Il microcontrollore viene spesso usato nella seguente maniera:

1) controlla gli ingressi;

2) esegue l’elaborazione;

3) modifica le uscite.

Il controllo degli ingressi può essere fatto testando ciclicamente tutti gli ingressi per

leggerne lo stato. Questa tecnica viene chiamata polling. Essa è abbastanza semplice da

realizzare, ma ha il difetto di essere lenta, in quanto il microcontrollore deve testare, ad

ogni ciclo, tutti gli ingressi, anche se questi non sono variati e questo può impegnare

anche in maniera pesante il controllore. Molto più efficiente è la tecnica chiamata interrupt.

In base a questa tecnica il microtrollore non testa ciclicamente gli ingressi, ma si accorge

che un ingresso ha modificato il suo stato, quando questo evento avviene. La modifica di

un ingresso, lancia al microcontrollore una richiesta di interruzione e questo provvede a

lanciare il sottoprogramma di gestione di questa interruzione. La gestione delle

interruzioni è abbastanza complessa da programmare ma rende il microcontrollore libero

13

Page 14: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

di fare altre cose invece di testare se gli ingressi sono variati, come deve fare nella

gestione degli ingressi con la tecnica del polling.

Il PIC 16F84 ha quattro possibili sorgenti d’interruzione:

1) interrupt per cambiamento di stato della linea RB0

2) interrupt per overflow del TIMER0

3) interrupt per fine scrittura sulla EEPROM dati

4) interrupt per cambiamento di livello delle linee RB4, RB5, RB6, RB7.

Ciascuno dei quattro tipi di interruzione può essere comunque mascherato, ovvero inibito.

Questo è quello che faremo nei nostri programmi.

SET DELLE ISTRUZIONI

SINTASSI DESCRIZIONE OPERAZIONEADDLW k Add literal and W W=k+W

ADDWF f,d Add W and f d = W + f

ANDLW k AND literal, W W = W AND k

ANDWF f,d AND W, f d = W AND f

BCF f,b Bit Clear f F(b)=0

BSF f,b Bit Set f F(b)=1

BTFSC f,b Bit Test f, Skip if Clear F(b)=0? Se si salta 1 istr.

BTFSS f,b Bit Test f, Skip if Set F(b)=1? Se si salta 1 istr.

CALL k Subrutine Call Chiama il sottoprogramma k

CLRF f Clear f f = 0

CLRW Clear W W=0

CLRWDT Clear Watchdog Timer WDT=0

COMF f,d Complement f d = not f

DECF f,d Decrement f d = f-1

DECFSZ f,d Decrementa f, salta se 0 d = f-1, se d=0 salta una istr.

GOTO k Go to address k Salta all’istruzione k

INCF f,d Increment f d = f+1

INCFSZ f,d Increment f, skip if 0 d = f+1, se d=0 salta una istr.

IORLW Inclusive OR, literal with W W = W OR K

IORWF f,d Inclusive OR W with F d = f OR W

MOVLW k Move literal to W W = k

14

Page 15: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

MOVF f,d Move f d = f

MOVWF f Move W to f f = W

NOP No operation Nessuna

OPTION Load Option Register Option = W

RETFIE Return from Interrupt Ritorna da un interruzione

RETLW k Return literal to W Ritorna da un sottop.Con W = k

RETURN Return from Subroutine Ritorna da un sottopro.

RLF f,d Rotate Left f through Carry Sposta a sx i bit di f usando C.

RRF f,d Rotate Rigth f through Carry Sposta a dx i bit di f usando C.

SLEEP Go into Standby mode Mette in Stanby il PIC

SUBLW k Subtract W from Literal W = k - W

SUBWF f,d Subtract W from f d = f - W

SWAPF f Subtract W from f d = f - W

TRIS f Load TRIS register Carica il TRIS con W

XORLW k Exclusive OR Literal with W W = W XOR k

XORWF f,d Exclusive OR W with f d = XOR W

- d è file di destinazione e può essere il registro di lavoro W o il file f

- b è il bit di un registro e può valere da 0 a 7

- k è un dato numerico o una etichetta (label).

COME CREARE UN PROGRAMMA PER IL MICROCONTROLLORE PIC USANDO MPLAB

Per creare un programma che può essere caricato nella memoria del PIC (Program

Memory) occorre effettuare i seguenti passaggi:

1) Creare un file testo con estensione ASM

2) Creare un file progetto estensione PJT

3) Compilare il progetto PJT per avere automaticamente, se non si hanno errori di sintassi,

un file HEX

La creazione del file ASM può essere fatto con qualunque editor di testo settato in modo

che non inserisca caratteri di controllo (l'editor di MPLAB, word pad o word) Il file deve

essere salvato come nomefile.ASM

15

Page 16: TITOLO - xoomer.virgilio.itxoomer.virgilio.it/giorgio.bonanni/DISPENSE/6DISPENSA PIC.doc  · Web viewCome creare un programma per il microcontrollore PIC usando MPLAB. CONFRONTO

La fase di creazione del file ASM viene fatta con MPLAB nella seguente maniera:

1) si apre MPLAB

2) si clicca sul menu "file" e poi "new"

3) si risponde "yes" alla domanda di voler creare un nuovo file

4) si chiude la finestra successiva

Abbiamo così la possibilità di scrivere in un file vuoto che per default si chiamerà

"untitled". Possiamo scrivere in questo file o salvarlo con il nome che vogliamo, usando

come estensione ASM (ad esempio "paperino.ASM"). Sia che abbiamo salvato il file vuoto

o meno con il nome "paperino.ASM", possiamo ora aprirlo e scrivere il programma

all'interno. Ricordarsi di salvare spesso il file per sicurezza. Finita la fase di editazione

del file "paperino.ASM" possiamo passare alla compilazione per creare il file esadecimale

che può essere caricato nel PIC. E' consigliabile chiamare questo file esadecimale con lo

stesso nome del file sorgente cioè "paperino.HEX" e per far questo occorre:

1) creare il file progetto cioè il file "paperino.PJT". Questo si ottiene aprendo il menù projet,

new e nella finestra che appare nominare "paperino.PJT" il file progetto che voglio

creare.

2) aggiungere al file "paperino.PJT" che voglio creare (add nella finestra che appare) il file

"paperino.ASM". Premere OK avremo un file "paperino.PJT"

3) Per creare il file esadecimale nel menù projet cercare "make proget" ed avremo la

compilazione. Se non ci sono errori avremo anche un file "paperino.HEX".

4) Se ci sono errori occorre rientrare nella fase di editazione e correggeli.

16