Sei sulla pagina 1di 33

PIC 16F84

Il controllore

PIC 16F84

Microchip Tecnology

D. Ch.

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.

PIC 16F84

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 allinterno del chip.

D. Ch.

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 allautomobilismo, 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 nellapparecchio che devono controllare. Hanno praticamente rimpiazzato i soffisticati circuiti di controllo analogici e digitali.

PIC 16F84

. Il PIC 16F84: ha CPU RISC ha struttura Harvard ha semplice modalit di indirizzamento

D. Ch.

A differenza dei classici microprocessori con struttura di tipo Von Neumann (aventi ununica 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 conseguenza sufficiente un semplice hardware di decodifica. (diretto ed indiretto) e di

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

PIC 16F84

D. Ch.

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 (lesecuzione del microprogramma). Al fine di raddoppiare la velocit di esecuzione del programma, grazie anche allarchitettura che lo consente, si fa in modo che nelle istruzioni consecutive le fasi operative si sovrapongano creando il pipeline flow. Praticamente, mentre si esegue lexecute di una istruzione si esegue contemporaneamente anche il fetch dellistruzione 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).

PIC 16F84

RIEPILOGANDO: T_Fetch = T_ Execute Separazione dei canali dei dati e delle istruzioni

Pipelining
(sovrapposizione del fetch di unistruzione e del execute della precedente.)

velocizzazione

Poche istruzioni Pochi modi di indirizzamento

Hw di decodifica semplice

velocizzazione

D. Ch.

In questa slide sono sintetizzati i motivi grazie ai quali il PIC ha una velocit operativa superiore ai comuni microprocessori.

PIC 16F84

Schema a blocchi interno del PIC

D. Ch.

Larchitettura interna del PIC quella di un controllore completo. Si distinguono: LALU: 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 subroutine nidificate. 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 allinterno del PIC sia per la ricezione di un clock dallesterno. RTCC: (Real Time Counter/ Clock) fa riferimento al registro TMR0 a 8 bit ( vedi slide n. 12).

PIC 16F84

Il pinout del PIC 16F84 (18 pin di cui ben 13 disponibili per lI/O)

Fig. ( ) Fig. ( )
D. Ch. 7

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 loscillatore esterno.

PIC 16F84

D. Ch.

Descriviamo ora la funzione dei pin dellintegrato: OSC1/ CLKIN e OSC1/ CLKOUT: sono pin rispettivamente di ingresso e di uscita; fra questi solitamente va collegato unoscillattore a quarzo esterno che unitamente allamplificatore 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 lutilizzo 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 lindirizzo 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).

PIC 16F84

RAM
EEPROM (1K)
Memoria di Programma

EEPROM
Banco 0

Dati
8 bit

14 bit

64 locazioni 1k

Banco 1

D. Ch.

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; 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). Lorganizzazione della RAM prevede 22 Registri speciali (11 per ogni Banco) e 68 Registri di uso generale. Dei Registri speciali ci occuperemo dettagliatamente pi avanti. Infine esiste una terza memoria a 8 bit di 64 locazioni, di tipo EEPROM utilizzata esclusivamente come Memoria Dati.

b)

c)

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).

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 dallesterno 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 ununica 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 nellindirizzamento indiretto.

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.

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 unoperazione 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.

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) loverflow del TMR0: viene abilitata attraverso il pin TOIE; b) lattivazione 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 lavvenuta interrupt (e che devono essere azzerati via software prima di uscire dalla subroutine di gestione): TOIF segnala lavvenuta interrupt da RMR0; INTF segnala lavvenuta interrupt da RB0/INT; RBIF segnala lavvenuta interrupt da RB4RB7. 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 listruzione RETFIE che chiude ogni subroutine di gestione di un interrupt. EEIE: abilita la scrittura in memoria dati.

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 linterrupt RB0/INT sar abilitata con il fronte positivo oppure negativo; RBPU abilita o disabilita i resistori di pull-up interni della porta B.

PIC 16F84

LE ISTRUZIONI DEL PIC

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


(Il 16F84 ha 37 opcode diversi)

Esempio: 00 0001 0000 0000B 0100H


(notaz. Bin) (notaz. Hex)

CLRw
(cod. mnemonico Assembler)

D. Ch.

16

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.

PIC 16F84

LE ISTRUZIONI DEL PIC 16F84 (Letterali e di Controllo)

(1 / 3)

D. Ch.

17

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 (1s) 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 B00001011: sposta la costante 00001011(bin) nel registro W. MOVLW D11: 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.

PIC 16F84

LE ISTRUZIONI DEL PIC 16F84 (Orientate al Byte)

(2 / 3)

D. Ch.

18

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 dellistruzione 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.

PIC 16F84

LE ISTRUZIONI DEL PIC 16F84 (Orientate al bit)

(3 / 3)

D. Ch.

19

c) Istruzioni orientate al bit; operano sul contenuto del singolo bit dei registri.
(f un registro generico, b il bit su cui opera listruzione) 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.

PIC 16F84

Notepad.exe Edit.exe Word (file.testo)

Differente per ogni tipo di PIC (P16F84.INC)

Trasforma il mnemonico in opcode (MPASMWIN.EXE)

(File testo) (mnem. opcode)

(Contiene i codici operativi)

D. Ch.

20

La Compilazione e la Programmazione
Programmare in assembler una attivit da Progettista; lassembler un linguaggio dedicato alla particolare macchina (processore o controllore) e dunque il Progettista deve conoscere bene larchitettura dellhardware 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. Lassemblatore 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 lunico ad essere trasferito allinterno della memoria programma del PIC attraverso una successiva fase detta di Programmazione.

PIC 16F84

LA COMPILAZIONE ASSEMBLER

Fig. 1 Fig. 2 D. Ch. 21

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. Lassemblatore 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.

PIC 16F84

IL PROGRAMMATORE

D. Ch.

22

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 allinserimento 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.

PIC 16F84

LA PROGRAMMAZIONE DEL PIC

D. Ch.

23

La Programmazione: Dopo aver inserito il PIC nello zoccolo del programmatore e collegato questultimo 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 nellapplicativo 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 lavvenuta scrittura facendo unoperazione di Read. Al termine della programmazione non resta che staccare il PIC programmato dallo zoccolo del programmatore ed inserirlo nel circuito di destinazione finale.

PIC 16F84

Riepilogando.. per programmare il PIC:

D. Ch.

24

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. XXX.COD XXX.ERR XXX.HEX XXX.LST Controllare il file ERR e correggere eventuali errori. Inserire il PIC sul programmatore COM2,.) Eseguire i comandi: Erase Load (il file XXX.HEX) Write Prelevare infine il PIC dal programmatore ed inserirlo nel circuito a cui destinato. e collegarlo sulla seriale del PC (COM1,

Verranno creati i file:

Lanciare NTPicprog (Scegliere COM1 o COM2Scegliere XT e PuT

PIC 16F84

Hardware standard di base

Fig. (a)

Fig. (b)

D. Ch.

25

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.

PIC 16F84

Come collegare una semplice Periferica

D. Ch.

26

Il collegamento delle periferiche Le 13 linee del PIC dedicate allI/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.

PIC 16F84

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: 48 byte direttamente indirizzabili bsf STATUS, RP0 bcf STATUS, RP0

D. Ch.

27

Riportiamo qui un riepilogo dei registri speciali del PIC perch saranno coinvolti nella stesura dei software applicativi.

PIC 16F84

Procedure software di base 1/4 bsf STATUS, RP0 movlw 11111110B movwf TRIS B bcf STATUS, RP0
Fig. ( a )

loop call delay btfsc PORT B,0 goto spegni bsf PORT B,0 goto loop spegni bcf PORTB, 0 goto loop

bsf PORT B, 0 bcf PORT B, 0


Fig. ( b )
D. Ch. 28

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 lRB0 che messo in output; lultima 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).

PIC 16F84

Procedure software di base 2/4 ( Delay )

COUNT = 0

Clrf
DECREMENTA COUNT

COUNT

Dec

Decfsz COUNT, 1 Goto Dec

NO SI SI RETURN

Return
Fig. (b)

Fig. (a )

D. Ch.

29

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 1s) e 256 istruzioni goto (da 2 s) per un tempo totale di circa 770 s.

PIC 16F84

Procedure software di base 3/4


COUNT+1 = 0

COUNT = 0 Dec DECREM. COUNT = 0

Clrf Clrf

COUNT+1 COUNT

decfsz COUNT,1 goto Dec

decfsz COUNT+1,1
N0

goto Return
SI DECREM. COUNT+1 = 0

Dec

Fig.( b )

Fig. ( a )
N0

SI RETURN

D. Ch.

30

In figura (a) sono eseguiti due cicli annidati che creano un ritardo di circa 0,5 sec sufficienti affinch locchio umano percepisca il lampeggiamento (0,5 s acceso e 0,5 s spento).

PIC 16F84

Procedure software di base 4/4

(direttive obbligatorie)

PROCESSOR RADIX INCLUDE LED ORG COUNT ORG

16F84 DEC P16F84.INC EQU 0 0CH RES 2 00H

D. Ch.

31

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 dallindirizzo 0CH dichiarato con la direttiva ORG 0CH. Le locazioni riservate saranno 0Ch e 0DH; ORG 00H: indica al compilatore lorigine (inizio) della EEPROM memoria di programma.

PIC 16F84

PROCESSOR RADIX INCLUDE LED ORG EQU 0CH 2

16F84

Lampeggiatore ad un LED
;Subroutine

DEC "P16F84.INC 0

Delay clrf Count clrf Count+1 Dec decfsz Count,1 goto Dec decfsz Count+1,1 goto Dec return END

Count RES ;Reset Vector

;Punto di inizio del programma al reset della CPU ORG bsf 00H STATUS,RP0

movlw 11111110B movwf TRISB movlw 0001111B movwf TRISA bcf bsf Loop STATUS,RP0 PORTB,LED

call Delay btfsc PORTB,LED goto Spegni bsf PORTB,LED

goto Loop Spegni bcf PORTB,LED

D. Ch.

32

goto Loop

Le scritte precedute da ; sono commenti e non vengono prese in considerazione dal compilatore. Listruzione return chiude la subroutine e fa tornare nel main program mentre listruzione END chiude tutto il programma.

PIC 16F84

Esercizio applicativo

4 SW e 4 LED

D. Ch.

33

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 lapplicativo.