33
PIC 16F84 D. Ch. 1 Il μcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le grandi case costrutrici di semiconduttori come la Intel, la Philips Semiconductors, la Nec, la Texas Instruments, La Amtel, la Zilog, la Microchip Tecnology e altre, ad offrire sul mercato una vasta gamma di μC. I microcontrollori si distinguono per il parallelismo di memoria (8, 16, 32 bit), per il set istruzioni più o meno esteso, per la complessità circuitale interna che può comprendere comparatori, convertitori A/D, generatori di segnali PWM, per la potenza di calcolo come i DSP (digital signal processor) progettati per elaborare grandi quantità di segnali (audio, immagini) in brevissimo tempo. I PIC Programmable Integrated Controller” sono la famiglia di μC prodotti dalla Microchip Tecnology . Il PIC 16F84 è un microcontrollore di fascia medio-bassa con un parallelismo di 8 bit, di facile impiego e soprattutto ricco di letteratura.

Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

  • Upload
    doannga

  • View
    232

  • Download
    1

Embed Size (px)

Citation preview

Page 1: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 1

Il µcontrollore PIC 16F84

Microchip Tecnology

Il grande successo dei microcontrollori ha indotto tutte le grandi case costrutrici di

semiconduttori come la Intel, la Philips Semiconductors, la Nec, la Texas Instruments, La

Amtel, la Zilog, la Microchip Tecnology e altre, ad offrire sul mercato una vasta gamma di

µC.

I microcontrollori si distinguono per il parallelismo di memoria (8, 16, 32

bit), per il set istruzioni più o meno esteso, per la complessità circuitale interna che può

comprendere comparatori, convertitori A/D, generatori di segnali PWM, per la potenza di

calcolo come i DSP (digital signal processor) progettati per elaborare grandi quantità di

segnali (audio, immagini) in brevissimo tempo.

I PIC “Programmable Integrated Controller” sono la famiglia di µC prodotti dalla

Microchip Tecnology.

Il PIC 16F84 è un microcontrollore di fascia medio-bassa con un parallelismo di 8 bit, di

facile impiego e soprattutto ricco di letteratura.

Page 2: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 2

I microcontrollori

I µcontrollori sono dei sistemi single chip completi di CPU,

Memoria, Porte di I/O, Contatori, Timer ecc.

Sono stati concepiti per applicazioni industriali di controllo.

Il programma, una volta messo a punto, risiede all’interno

del chip.

I microcontrollori sono praticamente dei completi microelaboratori integrati su un unico

chip.

Sono ormai impiegati in tutte le moderne applicazioni elettroniche che vanno dagli

“elettrodomestici intelligenti” all’automobilismo, dagli apparati per le telecomunicazioni

alla robotica, dagli apparati elettromedicali alla alta fedeltà, alla elaborazione dei segnali

audio e video, alla sicurezza.

Vengono detti “embedded” perché, una volta programmati per una particolare applicazione,

vengono incorporati nell’apparecchio che devono controllare. Hanno praticamente

rimpiazzato i soffisticati circuiti di controllo analogici e digitali.

Page 3: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 3

Il PIC 16F84:

• ha CPU “RISC”

• ha struttura “Harvard”

• ha semplice modalità di indirizzamento

.

A differenza dei classici microprocessori con struttura di tipo “Von

Neumann” (aventi un’unica memoria, come già visto nella prima parte del corso) il PIC ha

la strutture di tipo “Harvard” (Università dove è stato creato) caratterizzato dal fatto che la

memoria dati e la memoria istruzioni sono diverse e separate e ciascuna con il proprio bus;

in questo modo la CPU può operare una singola istruzione ma su dati multipli o anche

istruzioni multiple su dati multipli.

Il PIC 16F84 ha un parallelismo di memoria di 8 bit ossia è capace di

trattare 8 bit con un solo accesso in memoria ed è un microcontrollore con CPU RISC

(Reduced Instruction Set Computing) dotata di un set di sole 37 istruzioni tutte della stessa

lunghezza, ciascuna di 14 bit di cui 35 comuni a tutti i PIC e 2 proprie del 16F84;

Anche i modi di indirizzamento sono pochi e semplici (diretto ed indiretto) e di

conseguenza è sufficiente un semplice hardware di decodifica.

Tutto questo fa si che il PIC abbia una grande velocità operativa.

Page 4: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 4

Il vero fattore velocizzante della operatività del PIC è la modalità di lavoro in “pipeline”

(Metodo che consente l'elaborazione di nuovi dati senza necessità di attendere che i dati

precedentemente inviati termino la loro elaborazione).

Le istruzioni del PIC oltre che poco numerose sono anche molto brevi; durano tutte 8 cicli

T(ad eccezione delle istruzioni si salto). Di questi, i primi 4 cicli sono utilizzati per il

caricamento del codice operativo (fase di fetch) mentre i 4 successivi sono dedicati alla fase

di execute (l’esecuzione del microprogramma).

Al fine di raddoppiare la velocità di esecuzione del programma, grazie anche all’architettura

che lo consente, si fa in modo che nelle istruzioni consecutive le fasi operative si

sovrapongano creando il “pipeline flow”. Praticamente, mentre si esegue l’execute di una

istruzione si esegue contemporaneamente anche il fetch dell’istruzione successiva. Così

facendo ogni istruzione dura solo 4 cicli T anziché 8 ( nel caso di un clock di 20 MHz ogni

istruzione durerà appena 200 ns mentre nelle nostre applicazioni dove utilizziamo un clock

di 4MHz ogni istruzione dura 1 µs).

Page 5: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 5

T_Fetch = T_ ExecuteSeparazione dei

canali dei dati e

delle istruzioni

Pipelining

(sovrapposizione del fetch di

un’istruzione e del execute

della precedente.)

velocizzazione

velocizzazionePoche istruzioni

Pochi modi di

indirizzamento

Hw di

decodifica

semplice

RIEPILOGANDO:

In questa slide sono sintetizzati i motivi grazie ai quali il PIC ha una

velocità operativa superiore ai comuni microprocessori.

Page 6: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 6

Schema a blocchi interno del PIC

L’architettura interna del PIC è quella di un µcontrollore completo. Si distinguono:

•L’ALU: unità centrale

•I Registri:

�W: Accumulatore, a 8 bit coinvolto nelle istruzioni di trasferimento.

�STACK:Registro LIFO a 8 livelli; il programmatore può creare fino a 8 subroutinenidificate.

�PC: Program Counter, a 13 bit con i quali è possibile indirizzare 8K locazioni di Memoria Programma (in effetti sono ridondanti per il PIC 16F84 visto che esso ha solo 1K di Memoria Programma). Il PC è composto da due registri: PCL di 8 bit e PCH di 5 bit; nel registro PCH non si può accedere direttamente (come nel PCL) ma bisogna coinvolgere il registro PCLATH ( vedi slide n. 12).

•La Memoria:

�EEPROM Programma: a 14 bit (1024 locazioni)

�EEPROM dati a 8 bit (64 locazioni)

�RAM a 8 bit suddivisa in

•22 Registri speciali (11 + 11)

•68 Registri dati di uso generale

•Le Porte :

�Port A (5 linee)

�Port B (8 linee)

Le linee delle porte sono configurabili sia in input che in output, sono compatibili TTL e possono erogare / assorbire fino ad un massimo di 25 mA.

•Timing generation: Circuiteria sia per la generazione di clock all’interno del PIC sia per la ricezione di un clock dall’esterno.

•RTCC: (Real Time Counter/ Clock) fa riferimento al registro TMR0 a 8 bit ( vedi slide n. 12).

Page 7: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 7

Il pinout del PIC 16F84

(18 pin di cui ben 13 disponibili per l’I/O)

Fig. (α )

Fig. ( β )

Il PIC 16F84 è un integrato a 18 pin di cui ben 13 sono dedicati all’ I/O.

In figura (α) è riportato lo schema funzionale mentre in figura (β) è riportato in pinout del

PIC. Si distinguono:

•il PortA (5pin),

•il PortB (8 pin),

•i 2 pin di alimentazione e massa (VDD e GND),

•il master Reset (MCLR) attivo basso e

•due pin (OSC1 e OSC2) dedicati al clock; fra questi due pin si collega l’oscillatore esterno.

Page 8: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 8

Descriviamo ora la funzione dei pin dell’integrato:

•OSC1/ CLKIN e OSC1/ CLKOUT: sono pin rispettivamente di ingresso e di uscita; fra

questi solitamente va collegato un’oscillattore a quarzo esterno che unitamente

all’amplificatore interno al PIC costituisce il generatore di clock del sistema.

Oltre il quarzo (4MHz o di high speed fino a 20MHz), come oscillatore esterno è possibile

anche l’utilizzo di una rete RC o anche di un risonatore ceramico fino a 200 kHz.

•Il MCLR (Master Reset): è un pin di input ed è attivo basso. Ogni volta che viene attivato

carica il Program Counter con l’indirizzo 000H da dove poi riparte il programma.

•RA0 – RA4: sono le 5 linee di I/O del Port A e possono essere utilizzate sia in input che in

output;

In particolare, fare attenzione su RA4 quando viene utilizzata in out bisogna inserire un

resistore di pull up esterno perché è un pin “open drain”. RA4 inoltre può essere utilizzata

anche come ingresso per il clock del Registro TMR0.

•RB0 – RB7: sono le 8 linee di I/O del PORT B e possono essere utilizzate sia in input che

in output;

In particolare, RB0 può essere utilizzata anche come linea di input di interrupt;

In particolare anche RB4 – RB7 possono essere utilizzate come input di interrupt ma attive

“edge triggered” (attive sul cambiamento di stato).

(vedi registro INTCON, slide 13).

Page 9: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 9

EEPROM (1K)

Memoria di Programma

14 bit

1k

Banco

0

Banco

1

RAM

64 locazioni

EEPROMDati

8 bit

LA MEMORIA DEL PIC 16F84

La memoria del PIC 16F84 è organizzata in 3 blocchi:

a) Una Memoria Programma di tipo EEPROM a 16 bit con 1024 locazioni dove tra altro

sono contenuti i codici operativi di due istruzioni chiave: “RESET” nella locazione

000H e “INTERRUPT” nella locazione 004H;

b) Una Memoria RAM a 8 bit di 90 locazioni dislocate in uno spazio di 256 locazioni

totali (da 00h a FFh) e divisa in due blocchi detti Banchi (Banco 0 e Banco 1).

L’organizzazione della RAM prevede 22 Registri speciali (11 per ogni Banco) e 68

Registri di uso generale. Dei Registri speciali ci occuperemo dettagliatamente più

avanti.

c) Infine esiste una terza memoria a 8 bit di 64 locazioni, di tipo EEPROM utilizzata

esclusivamente come Memoria Dati.

Page 10: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 10

LA MEMORIA RAM

La memoria RAM, come gia detto, è organizzata in 2 Banchi consecutivi, qui rappresentati

affiancati.

Per selezionare il Banco su cui si vuole lavorare bisogna coinvolgere i bit RP1 ed RP0 del

Registro STATUS: 00 seleziona il Banco 0 mentre 01 seleziona il Banco 1;

in effetti nel PIC 16F84 il bit RP1 è sempre a 0 per cui è sufficiente impostare solo RP0

(vedi slide n. 29).

Page 11: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 11

I Registri Speciali del Banco 0:

Il Registro TMR0 è un registro contatore che può funzionare in modalità timer oppure in modalità counter:

•In modalità counter esso conta gli impulsi applicati dall’esterno al pin RA4/T0CKI del portA. Si può anche inizializzare TMR0 ad un valore desiderato e poi farlo incrementare fino a creare un overflow; questo overflow può essere utilizzato per generare un interrupt(vedi registro INTCON, slide 15).

•Nella modalità timer il TMR0 conta gli impulsi di un segnale interno avente frequenza pari ad ¼ del segnale del clock. E’ possibile dividere ulteriormente questa frequenza per 2, per 4,… per 256 per ottenere impulsi del timer lunghi; questa funzione prende il nome Prescaler.Il Prescaler si attiva attraverso i bit PS2 PS1 PS0 del registro OPTION.

I Registri PORTA e PORTB contengono il valore dei vari pin delle Porte. Se i pin sono configurati come ingressi essi assumono il valore della periferica collegata mentre se i pin sono configurati come uscite il loro valore è stabilito dal programma.

I pin di questi registri possono essere trattati sia singolarmente sia come un’unica parola

Il Registro STATUS, appartiene sia al banco 0 che al banco 1; è utilizzato per la selezione del Banco 0 o Banco 1

Il Registro INTCON appartiene sia al banco 0 che al banco 1; viene utilizzato esclusivamente per la gestione degli interrupt.

I Registri EEDATA e EEADR abilitano la memoria dati

I Registri PCLATH (5 bit) e PCL (8 bit) contengono i 13 bit (i 5 alti + gli 8 bit bassi) del Program Counter.

I Registri FSR e INDF sono utilizzati nell’indirizzamento indiretto.

Page 12: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 12

Alcuni Registri Speciali del Banco 1:

Il PIC 16F84 per gestire le linee di I/O utilizza una coppia di registri per ciascuna Porta: tali

registri sono TRIS A e PORT A per la porta A e TRIS B e PORT B per la porta B (di ogni

coppia però uno risiede nel banco 0 e uno nel banco 1)

I Registri TRIS A e TRIS B sono utilizzati per configurare le porte A e B (o i loro singoli

bit) in ingresso o in uscita:

Mettere un pin di questi registri a 0 implica configurare il corrispondente pin della porta

come uscita mentre mettere un pin a 1 implica configurare il corrispondente pin della

porta come ingresso;

p.e. TRIS B: 00010011 configura B4, B1 e B0 come input mentre tutti gli altri saranno

configurati come out. (in tal caso se volessimo collegare un LED lo collegheremo su B7 o

su B6 o su B5 oppure su B3 o su B2).

I Registri EECON1 e EECON2 abilitano la memoria dati.

Il Registro OPTION viene utilizzato prevalentemente per programmare il funzionamento

del registro TMR0.

Page 13: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 13

Il Registro STATUS:

il bit RP0 è utilizzato per la selezione del Banco 0 o del Banco 1;

IRP e RP1 sono sempre a 0;

TO: è attivo basso, manda il WDT in time out; (*)

PD: attivo basso, si attiva quando viene eseguita una istruzione di sleep; (**)

Z: flag di zero, si attiva (a 1) quando il risultato di un’operazione aritmetica o logica è zero;

DC: indica se c’è riporto o prestito sul bit meno significativo;

C: indica se c’è riporto o prestito sul bit più significativo.

(*) La funzione WDT (Watchdog time) rileva eventuali blocchi della CPU, resetta il PIC e

lo riavvia per farlo riprendere la normale esecuzione del programma.

(**) Lo Sleep Mode o Power Down Mode è uno stato di funzionamento in Stand by in cui

gran parte della circuiteria del PIC viene disalimentata in attesa di uno sporadico evento

esterno (si pensi alla premuta di un tasto del telecomando); il PDM è utile per limitare il

consumo di energia che farebbe scaricare la pila durante i lunghi tempi di inattività del PIC.

Page 14: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 14

* *** ***** ***

Il Registro INTCON viene utilizzato esclusivamente per la gestione degli interrupt.

Nel PIC 16F84 esistono 3 possibili modalità di attivazione di interrupt:

a) l’overflow del TMR0: viene abilitata attraverso il pin TOIE;

b) l’attivazione del segnale RB0/INT: viene abilitata attraverso il pin INTE;

c) i segnali (cambio del livello) delle linee RB4, RB5, RB6, e RB7: viene abilitata

attraverso il pin RBIE;

Esistono anche 3 pin “FLAG” che segnalano l’avvenuta interrupt (e che devono essere

azzerati via software prima di uscire dalla subroutine di gestione):

TOIF segnala l’avvenuta interrupt da RMR0;

INTF segnala l’avvenuta interrupt da RB0/INT;

RBIF segnala l’avvenuta interrupt da RB4÷RB7.

GIE: se attivo (1) abilita gli interrupt (qualsiasi tipologia). Questo pin viene disattivato (0)

automaticamente subito dopo il verificarsi del interrupt affinchè sia possibile che

avvenga un nuovo interrupt; a questo è preposta l’istruzione RETFIE che chiude ogni

subroutine di gestione di un interrupt.

EEIE: abilita la scrittura in memoria dati.

Page 15: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 15

Il Registro OPTION viene utilizzato prevalentemente per programmare il

funzionamento del registro TMR0; infatti a questo sono dedicati ben 6 bit del registro

(PS0, PS1, PS2, PSA, TOSE e TOCS).

PS2, PS1, PS0 selezionano il rapporto di prescaler ( il divisore di fT);

PSA stabilisce se il prescaler verrà utilizzato da TMR0 oppure da watch dog timer (WDT);

TOSE stabilisce se TMR0 funzionerà con il fronte positivo oppure negativo del clock;

TOCS stabilisce se come clock del registro TMR0 sarà utilizzato il fronte di un segnale

esterno applicato a RA4/TOCK1 oppure il clock interno al pic.

INTEDG stabilisce se l’interrupt RB0/INT sarà abilitata con il fronte positivo oppure

negativo;

RBPU abilita o disabilita i resistori di pull-up interni della porta B.

Page 16: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 16

LE ISTRUZIONI DEL PIC

Ogni istruzione del PIC corrisponde ad un opcode a 14 bit.

Esempio:

00 0001 0000 0000B ⇔ 0100H ⇔ CLRw

(notaz. Bin) (notaz. Hex) (cod. mnemonico Assembler)

(Il 16F84 ha 37 opcode diversi)

Ogni istruzione del PIC corrisponde ad un codice operativo a 14 bit.

Ogni codice operativo viene memorizzato in una memoria di programma costituita

da una EEPROM di 1024 locazioni a 14 bit (come già detto nella slide 10) in cui

ogni locazione, infatti, contiene una sola istruzione.

Page 17: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 17

LE ISTRUZIONI DEL PIC 16F84 (1 / 3)

(Letterali e di Controllo)

Le istruzioni del PIC sono raggruppate in tre tipologie: letterali e di controllo, orientate al byte e orientate al bit.

a) Istruzioni letterali e di controllo; quasi tutte operano su grandezze alfanumeriche e molte fanno uso del registro accumulatore W. Durano tutte 1 ciclo macchina (1µs) pari a 4 cicli di clock ad eccezione delle istruzioni di salto che durano 2 cicli (p.e. CALL, GOTO, RETURN,..)

Esaminiamo alcune delle istruzioni letterali:

MOVLW 0C: sposta la costante 0C(hex) nel registro W.

MOVLW B’00001011’: sposta la costante 00001011(bin) nel registro W.

MOVLW D’11’: sposta la costante 11(dec) nel registro W.

MOVLW 0xFF: sposta la costante FF(hex) nel registro W (per esigenze del compilatore, quando la costante inizia per lettera si fa precedere per 0x

oppure per 0).

ADDLW 03: addiziona la costante 03h al contenuto del registro W.

GOTO 10A: salta nella locazione 10A della memoria programma.

Page 18: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 18

LE ISTRUZIONI DEL PIC 16F84 (2 / 3)

(Orientate al Byte)

b) Istruzioni orientate al byte; operano con parole lunghe 1 byte e spesso sul contenuto

dei registri; molte fanno uso del registro accumulatore W.

Esaminiamo alcune delle istruzioni orientate al byte tenendo presente che f è un registro

generico a cui possiamo dare un nome qualsiasi e a cui il compilatore attribuirà il giusto

indirizzo e che d è un parametro binario: se d=0 il risultato dell’istruzione verrà posto in W

mentre se d=1 il risultato sarà posto in f stesso).

MOVWF 06: sposta il contenuto di W nel registro con indirizzo 06 (ossia scrivi il

contenuto di W nel PortB).

DECFSZ 1A: decrementa il contenuto del registro alla locazione 1Ah e salta la prossima

istruzione se il contenuto è zero.

SUBWF 0A,0: sottrai il contenuto di W dal registro 0A0h e metti il risultato in W.

ADDWF 03,1: addiziona il contenuto di W al contenuto del registro 03h e il risultato

mettilo in 03h.

Page 19: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 19

LE ISTRUZIONI DEL PIC 16F84 (3 / 3)

(Orientate al bit)

c) Istruzioni orientate al bit; operano sul contenuto del singolo bit dei registri.

(f è un registro generico, b è il bit su cui opera l’istruzione)

BCF 06,3: metti a 0 il bit 3 del registro alla locazione 06 ossia metti a 0 il bit RB3.

BSF 06,3: metti a 1 il bit RB3.

BTFSC 03,2: esegui il test sul bit 2 del registro alla locazione 03 ossia testa il bit ZERO del

registro STATUS e se lo trovi a zero salta la prossima istruzione.

Le due istruzioni particolari del PIC 16F84:

TRIS f [dove f può essere 05 (PORT A) oppure 06 (PORT B)]; questa istruzione trasferisce

il contenuto di W nel registro TRIS A o TRIS B e consente di configurare i pin delle

porte in ingresso o in uscita (vedi slide n. 29).

OPTION: trasferisce il contenuto di W nel registro OPTION in modo da evitare lo scambio

di banco tramite RP0 di STATUS.

Page 20: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 20

(File testo)

(mnem. ⇒ opcode)

Differente per ogni tipo di

PIC

Notepad.exe

Edit.exe

Word (file.testo)(P16F84.INC)

(MPASMWIN.EXE)

Trasforma il mnemonico

in opcode

(Contiene i codici operativi)(Contiene i codici operativi)

La Compilazione e la Programmazione

Programmare in assembler è una attività da Progettista; l’assembler è un linguaggio

“dedicato” alla particolare macchina (µprocessore o µcontrollore) e dunque il Progettista

deve conoscere bene l’architettura dell’hardware per stilare adeguatamente il programma.

La programmazione del PIC richiede due fasi: la costruzione di un hardware e la gestione di

due software per la Compilazione e la Programmazione vera e propria.

La Compilazione:

Il programma in assembler è scritto in linguaggio alfanumerico e, affinchè possa venire

riconosciuto dalle circuiterie dovrà essere tradotto in codice macchina. A questo provvede

un apposito software detto “Assemblatore” (nel nostro caso MPASMWIN.EXE).

Tutti i microcontrollori della famiglia dei PIC, anche se ciascuno con la propria architettura

interna, hanno lo stesso set di istruzioni; per questo motivo è possibile utilizzare un unico

assemblatore al quale però bisognerà fornire, insieme al file sorgente (che contiene il

“programma utente”), anche un file con le specifiche del PIC da programmare. Questo file

ha estensione INC e nel nostro caso è il “P16F84.INC”.

L’assemblatore fornisce più file, alcuni di servizio come il XX.ERR attraverso la lettura del

quale il Progettista può risalire agli errori di compilazione (fornisce anche la linea del

sorgente assembler in cui sono stati rilevati gli errori) e quindi rimuoverli e come il

XX.LST contenente il listato degli OP. COD. in formato testo. Infine il file XX.HEX

contenente i codici operativi delle istruzioni sarà l’unico ad essere trasferito all’interno della

memoria programma del PIC attraverso una successiva fase detta di “Programmazione”.

Page 21: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 21

LA COMPILAZIONE ASSEMBLER

Fig. 1

Fig. 2

La compilazione assembler è affidata al programma MPASM della MICROCHIP. Una volta

lanciato il programma MPASMWIN.EXE si apre la finestra di figura 1 dove dopo aver

selezionato il nostro file sorgente, il processore utilizzato e i file che desideriamo generare

avvieremo la compilazione clickando su “Assemble”.

L’assemblatore eseguirà la compilazione e fornirà il report di figura 2; se ci saranno errori la

striscia colorata sarà rossa e ci sarà anche il numero di errori da correggere.

Page 22: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 22

IL PROGRAMMATORE

Il programmatore è un circuito molto semplice contenente pochi semplici componenti tra cui

uno zoccolo “DIL” con adeguato numero di pin (18 nel caso del 16F84) e un connettore

seriale per la connessione alla porta del computer.

Per programmare il PIC basta inserirlo sullo zoccolo del programmatore, collegarlo alla

porta seriale del computer e lanciare il software di programmazione.

Il circuito programmatore non necessita di alimentatore perché viene alimentato dalla porta

COM selezionata del computer.

Prestare sempre attenzione all’inserimento del PIC nello zoccolo del programmatore anche

se il rischio di danneggiarlo durante la programmazione, nel caso di errato inserimento, è

basso viste le modeste intensità di corrente in gioco.

Page 23: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 23

LA PROGRAMMAZIONE DEL PIC

La Programmazione:

Dopo aver inserito il PIC nello zoccolo del programmatore e collegato quest’ultimo alla

seriale del PC lanceremo il software NTPicprog.exe. Si apre la finestra di dialogo nella

quale dobbiamo impostare alcuni parametri come mostrato in figura: il mode 16C84 va bene

anche per il 16F84, mentre come COM dovrà essere selezionata quella disponibile ed

effettivamente adoperata, dobbiamo indicare il tipo di clock che sarà utilizzato

nell’applicativo finale (oscillatore RC, circuito con risonatore ceramico (LP), quarzo a

media frequenza (XT), o quarzo high speed (HS)).

A questo punto lanciamo “Load” per caricare il file XX.HEX e comandiamo “Write” per

trasferire i dati nel PIC.

Talvolta è utile precedere le operazioni dal comando “Erase” che pulisce la memoria del

programma mentre è sempre consigliabile controllare l’avvenuta scrittura facendo

un’operazione di “Read”.

Al termine della programmazione non resta che staccare il PIC programmato dallo zoccolo

del programmatore ed inserirlo nel circuito di destinazione finale.

Page 24: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 24

Riepilogando..

per programmare il PIC:

Per programmare il PIC:

• Scrivere il file source con Blocco Note o altro editor(se si usa word salvare come

XX.txt) e salvarlo come XXX.ASM

• Copiare il file XXX.ASM nella cartella Pasmwin

• Lanciare il programma Mpasmwin (file “exe”); nella finestra cercare il file XXX.ASM

(Browse) e cliccare su “Assemble”.

Verranno creati i file:

� XXX.COD

� XXX.ERR

� XXX.HEX

� XXX.LST

• Controllare il file ERR e correggere eventuali errori.

• Inserire il PIC sul programmatore e collegarlo sulla seriale del PC (COM1,

COM2,….)

• Lanciare NTPicprog (Scegliere COM1 o COM2…Scegliere XT e PuT

• Eseguire i comandi:

� Erase

� Load (il file XXX.HEX)

� Write

• Prelevare infine il PIC dal programmatore ed inserirlo nel circuito a cui è destinato.

Page 25: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 25

Fig. (a)

Hardware standard di base

Fig. (b)

Per presentare lo schema hardware applicativo di base faremmo riferimento allo “schema

funzionale” del PIC; Questa è una parte comune a tutti i PIC della famiglia. La parte

standard riguarda la parte sinistra dello schema che sostanzialmente contiene le circuiterie

del Clock e del Reset.

Come circuito di Clock, abbiamo già anticipato, utilizzeremmo un quarzo a 4MHz. Nella

tabella di figura (b) sono riportati i valori consigliati per i condensatori nel caso si intenda

usare un cristallo diverso.

Il circuito di Reset è un classico circuito RC; i valori in figura sono indicativi: il

condensatore deve essere del ordine di qualche centinaio di nF mentre il Resistore di

qualche decina di KOhm.

Page 26: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 26

Come collegare una semplice Periferica

Il collegamento delle periferiche

Le 13 linee del PIC dedicate all’I/O presentano livelli compatibili TTL e sono in grado,

quando configurate in uscita, di erogare correnti (di source e drain) fino a 25 mA.

Prestare attenzione al pin RA4 al quale bisogna collegare un resistore di pull up esterno se

lo si vuole utilizzare come uscita perché è “open drain”.

In figura sono riportati alcuni possibili schemi applicativi per collegare un LED, uno switch,

un relè.

Sulle linee del PIC può essere collegata qualsiasi periferica, ovviamente opportunamente

interfacciata.

Page 27: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 27

Il REGISTER FILE

( è un insieme di locazioni RAM denominate “registri” )

10 + 10

Registri speciali

Per accedere alla pag 1 e

per uscirne, si fa uso del

bit ausiliario RP0:

bsf STATUS, RP0

bcf STATUS, RP0

48 byte

direttamente

indirizzabili

Riportiamo qui un riepilogo dei registri speciali del PIC perché saranno coinvolti nella

stesura dei software applicativi.

Page 28: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 28

Procedure software di base 1/4

bsf STATUS, RP0

movlw 11111110B

movwf TRIS B

bcf STATUS, RP0

Fig. ( a )

bsf PORT B, 0

bcf PORT B, 0

Fig. ( b )

loop

call delay

btfsc PORT B,0

goto spegni

bsf PORT B,0

goto loop

spegni bcf PORTB, 0

goto loop

Fig. (c )

Primi passi

Per eseguire i primi passi nella programmazione assembler assumiamo di voler far lampeggiare (ininterrottamente) un LED applicato sul pin RB0 del PIC.

Con la procedura di figura (a) abbiamo configurato in uscita il bit 0 del PORT B; la prima istruzione “bsf STATUS,RP0” fa accedere al banco 1 dove alloggia TRISB; la seconda e la terza istruzione caricano la parola binaria 11111110 nel registro TRISB (tramite il registro W) configurando tutti i pin in input tranne l’RB0 che è messo in output; l’ultima istruzione fa ritornate al banco 0.

Le due istruzioni di figura (b), in ordine, settano e resettano il bit 0 del PORT B cosi che il LED collegato potrà accendersi e spegnersi. A questo punto facciamo due osservazioni:

1) bisogna testare lo stato del pin, in modo da far accendere il LED se èspento e farlo spegnere se è acceso, altrimenti si rischia di tenerlo sempre acceso o sempre spento (istruzione “btfsc Port B, 0”);

2) affinchè il lampeggiamento sia visibile bisognerà lasciar acceso e spento il LED per un tempo sufficientemente prolungato (istruzione “call delay”).

Queste due problematiche vengono risolte nel listato della figura (c). In questa procedura notiamo anche il concetto di “label” (etichetta), di “loop”, del uso di “salto” (goto) e di chiamata di una “subroutine” (call delay).

Page 29: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 29

Procedure software di base 2/4

( Delay )

SI

COUNT = 0

DECREMENTA COUNT

RETURN

SI

NO

Fig. (a )

Clrf COUNT

Dec Decfsz COUNT, 1

Goto Dec

Return

Fig. (b)

Per creare un ritardo, problema molto frequente in programmazione, si usa far eseguire

ripetutamente per un certo numero di volte una o più istruzioni.

In figura (a) consideriamo il generico registro “COUNT” di 8 bit (una locazione della

RAM), lo carichiamo con 00000000B e lo facciamo decrementare fin quando, passando da

255, 254,.., non arrivi di nuovo a 0. Al termine saranno eseguite 256 istruzioni “decfsz F”

(da 1µs) e 256 istruzioni “goto” (da 2 µs) per un tempo totale di circa 770 µs.

Page 30: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 30

Procedure software di base 3/4

Clrf COUNT+1

Clrf COUNT

Dec decfsz COUNT,1

goto Dec

decfsz COUNT+1,1

goto Dec

Return

Fig.( b )

Fig. ( a )

RETURN

N0

COUNT+1 = 0

COUNT = 0

DECREM. COUNT = 0

DECREM. COUNT+1 = 0

N0

SI

SI

In figura (a) sono eseguiti due cicli “annidati” che creano un ritardo di circa 0,5 sec

sufficienti affinchè l’occhio umano percepisca il lampeggiamento (0,5 s acceso e 0,5 s

spento).

Page 31: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 31

Procedure software di base 4/4

(direttive obbligatorie)

PROCESSOR 16F84

RADIX DEC

INCLUDE “P16F84.INC”

LED EQU 0

ORG 0CH

COUNT RES 2

ORG 00H

Le direttive non sono istruzioni e non hanno un corrispondente codice operativo; sono delle

semplici dichiarazioni che contengono indicazioni per il compilatore.

PROCESSOR 16F84: indica al compilatore qual è il processore in uso;

RADIX DEC: informa il compilatore che i numeri senza indicazione specifica vanno intesi

decimali;

INCLUDE P16F84.INC: informa il compilatore che troverà incluso nel source anche il file

“P16F84.INC”;

LED EQU 0: questa direttiva significa che la parola LED equivale a 0; potrebbe essere

usata nello scrivere “bsf PORTB, LED” anziché “bsf PORTB, 0” (e analogamente “bcf

PORTB, LED” anziché “bcf PORTB, 0”). Questo facilita la correzione del programma nel

caso volessimo spostare il Led su un altro pin del PORT.

COUNT RES 2: significa che vogliamo riservare 2 locazioni di RAM per i due contatori

(COUNT e COUNT+1) a partire dall’indirizzo 0CH dichiarato con la direttiva ORG 0CH.

Le locazioni riservate saranno 0Ch e 0DH;

ORG 00H: indica al compilatore l’origine (inizio) della EEPROM memoria di programma.

Page 32: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 32

PROCESSOR 16F84

RADIX DEC

INCLUDE "P16F84.INC“

LED EQU 0

ORG 0CH

Count RES 2

;Reset Vector

;Punto di inizio del programma al reset della CPU

ORG 00H

bsf STATUS,RP0

movlw 11111110B

movwf TRISB

movlw 0001111B

movwf TRISA

bcf STATUS,RP0

bsf PORTB,LED

Loop call Delay

btfsc PORTB,LED

goto Spegni

bsf PORTB,LED

goto Loop

Spegni bcf PORTB,LED

goto Loop

;Subroutine

Delay

clrf Count

clrf Count+1

Dec decfsz Count,1

goto Dec

decfsz Count+1,1

goto Dec

return

END

Lampeggiatore ad un LED

Le scritte precedute da “;” sono commenti e non vengono prese in considerazione

dal compilatore.

L’istruzione “return” chiude la subroutine e fa tornare nel main program mentre

l’istruzione END chiude tutto il programma.

Page 33: Il µcontrollore PIC 16F84 - Eledea · 2009-01-09 · PIC 16F84 D. Ch. 1 Il µcontrollore PIC 16F84 Microchip Tecnology Il grande successo dei microcontrollori ha indotto tutte le

PIC 16F84

D. Ch. 33

Esercizio applicativo

4 SW e 4 LED

Esercizio applicativo

Sia dato il circuito rappresentato in figura:

Si hanno quattro LED e quattro switch applicati al PORT B del PIC 16F84;

Scrivere un programma in assembler che testi lo stato degli interruttori e faccia accendere i

LED in modo che ogni LED si accenda solo se viene premuto il suo corrispondente SW.

Programmare il PIC e realizzare l’applicativo.