Il pic 16 f84a

32
Il microcontrollore PIC 16F84 di EMANUELE TONUCCI (Matr. 091450 Classe Concorso A042) PAS 2014 Architettura degli Elaboratori Prof. Leonardo Pasini

Transcript of Il pic 16 f84a

Page 1: Il pic 16 f84a

Il microcontrollore PIC 16F84

di EMANUELE TONUCCI

(Matr. 091450 – Classe Concorso A042)

PAS 2014

Architettura degli Elaboratori – Prof. Leonardo Pasini

Page 2: Il pic 16 f84a

Il termine microcontrollore (microcontroller) si intende comunemente un sistema a microprocessore integrato su un unico chip

Comprende oltre alla CPU: una memoria di programma, solitamente di sola

lettura (PROM, EPROM, EEROM o FLASH)

una memoria RAM, generalmente di dimensioni ridotte, per i risultati intermedi dell'elaborazione

periferici di I/O vari (porte seriali e/o parallele, contatori/timer, convertitori AD ecc.)

Page 3: Il pic 16 f84a

PIC = Programmable Integrated Controller

CPU RISC (Riduced Instruction Set Computing, elaborazione con insieme di istruzione ridotto): poche e semplici istruzioni

tutte della stessa lunghezza

tutte richiedenti lo stesso numero di cicli macchina per il fetch e per l’esecuzione

Basato su una struttura del tipo Harvard: Memoria programma e memoria dati (e relativi bus)

separati.

Page 4: Il pic 16 f84a

Questa caratteristica unita alla separazione fisica dei canali lungo cui fluiscono istruzioni e dati: Permette di ottenere una sovrapposizione (Pipe

Lineing) delle fasi di fetch di un’istruzione con quella di esecuzione della precedente

Velocità dovuta al fatto che la riduzione del numero di istruzioni (unita a quella dei tempi di indirizzamento), semplifica l’hardware richiesto per la loro decodifica.

Page 5: Il pic 16 f84a

Nel PIC 16F84, la gestione di una istruzione (fetch + esecuzione) richiede, con l’eccezione delle istruzioni di salto, un singolo ciclo macchina, costituito da 4 cicli di clock come si può vedere dalla figura:

Page 6: Il pic 16 f84a

Il PIC 16F84 è dotato di una FLASH Memory che viene utilizzata per la riprogrammabilità del chip.

Page 7: Il pic 16 f84a
Page 8: Il pic 16 f84a

Set ridotto di istruzioni: 35 istruzioni di una singola parola da 14 bit, tutte di un solo ciclo macchina (200 ns minimo), tranne le istruzioni di salto che ne richiedono 2.

Dati a 8 bit

Frequenza di clock dalla d.c. a 20 MHz, ottenibili con varie opzioni da software (cristallo o risuonatore ceramico bassa/media/alta frequenza o gruppo RC)

Memoria di programma FLASH di 1024 x 14 bit (quindi fino a 1024 istruzioni)

68 byte di RAM di uso generale, organizzata in 68 registri di 8 bit ciascuno.

15 registri con funzioni speciali.

64 byte di memoria dati EEPROM (scrivibile, con tempi dell’ordine dei ms, durante il normale funzionamento da programma)

Page 9: Il pic 16 f84a

Stack hardware (cioè separato dalle aree di memoria dati e programma e non accessibile al programmatore) profondo 8 livelli.

13 linee di I/O organizzate in un Port A di 5 bit e in un Port B di 8 bit, con controllo individuale della direzione, TTL compatibili ad alta corrente di uscita (25 mA in sink e 20 mA in source), alcune delle quali specializzabili (richiesta interrupt, clock contatore, ecc.).Le linee del Port B dichiarate in ingresso possono essere connesse da software a Vdd tramite un pull-up a bassa corrente (circa 100 µA).

Contatore/temporizzatore programmabile a 8 bit, con prescaleprogrammabile sempre a 8 bit.

Possibilità di interrupt su richiesta da linea esterna (bit 0 di PortB), su cambiamento della linee 7÷4 di Port B, su overflow del contatore/temporizzatore e infine su completamento scrittura EEPROM dati.

Page 10: Il pic 16 f84a

I PIC 16FXX hanno un Program Counter a 13 bit in grado di indirizzare uno spazio di memoria di 8K x 14.

Come mostrato nella figura, per il PIC 16F84A solo i primi 1K x 14 di memoria (0000h –03FFh) sono fisicamente implementati. L’accesso a locazioni oltre gli indirizzi fisicamente implementati causerà un “riavvolgimento” degli indirizzi. Per esempio se si tentasse di accedere alle locazioni 20h, 420h, 820h, C20h, 1020h, 1420h, 1820h, and 1C20h, l’istruzioni che si incontrerà sarà sempre le stessa.

Page 11: Il pic 16 f84a

L’autoreset all’accensione, senza necessità di componenti esterni, tale reset porta il Program Counter alla locazione 0000h, da cui parte l’esecuzione del programma.

La possibilità, decidibile da programma, di attivare un Power-uptimer, cioè un temporizzatore interno che ritarda l’esecuzione del programma di qualche millisecondo per dar modo a tutte le tensioni e al clock di stabilizzarsi.

La possibilità di porre da programma il microcontrollore in SLEEP, cioè in uno stato di attesa in cui l’esecuzione del programma di arresta, le linee di I/O restano nello stato in cui erano precedentemente e il consumo del chip diventa minimo (meno di 1 µA a 2 V di alimentazione, uscite escluse). Dallo stato di SLEEP il PIC esce con un livello basso sull’ingresso di reset MCLR, con reset dal Watchdog Timer o con un interrupt.

Page 12: Il pic 16 f84a

La presenza di un Watchdog Timer (WDT), attivabile o disattivabile in fase di programmazione. Il WDT genera un reset ogni 18 ms (espandibili a circa 128 x 18 = 2,3 secondi con un prescaler). Questa ripartenza ciclica del programma è utile per sbloccare il microcontrollore da eventuali situazioni critiche o di blocco in cui possa finire a causa del verificarsi di particolari condizioni esterne.

Per le applicazioni commerciali è possibile proteggere il codice del programma e renderlo inaccessibile in lettura una volta scritto nella FLASH, stessa cosa è possibile farla per i dati presenti nella EEPROM da 64 byte.

Page 13: Il pic 16 f84a

Nella parte bassa delle due pagine di memoria sono presenti 15 registri speciali.

Alcuni di questi registri sono indirizzabili da entrambe le pagine di memoria, come si può vedere dal nome ripetuto sulla stessa riga nella immagine seguente (Mappa del RegisterFile).

Page 14: Il pic 16 f84a
Page 15: Il pic 16 f84a

TMR0 (indirizzo 01h): contiene il conteggio attuale del contatore/temporizzatore programmabile. Può essere letto, ma anche scritto, si può cioè impostare il valore iniziale da cui il contatore comincerà a contare (in avanti).

Il contatore/timer può contare (eventualmente attraverso un prescaler) impulsi esterni (sul piedino RA4, corrispondente al bit 4 del Port A) o gli impulsi dell’instruction cycle clock. Arrivato a 255, riparte da 0; in corrispondenza di questa transizione di overflow può generare una interrupt.

Page 16: Il pic 16 f84a

PCL (indirizzo 02h): è il byte basso del Program Counter (bit 7÷0 degli indirizzi). Di per se il PC è un registro a 13 bit, può quindi indirizzare 213 = 23 * 210 = 8 k locazioni (di 14 bit).

I 5 bit alti 12÷8 non sono accessibili direttamente

Una loro copia aggiornata è contenuta nel registro PCLATH (indirizzo 0Ah).

Ogni operazione che modifichi i bit 12÷8 del PC modifica nello stesso modo i bit 4÷0 di PCLATH.

Viceversa, i bit di PCLATH, che sono scritti da programma, vengono caricati nel Program Counter in occasione di trasferimenti che abbiano PCL come destinazione o quando sono invocate istruzioni di salto.

Page 17: Il pic 16 f84a

STATUS (indirizzo 03h): comprende una serie di bit (flag) che vengono influenzati dal risultato di operazioni o da particolari eventi, e altri che concorrono alla gestione degli indirizzamenti nell’archivio dei registri.

C (bit 0) flag di Carry/Borrow: segnala un riporto/prestito nelle operazioni di addizione e sottrazione su 8 bit.

DC (bit 1) flag di Digit Carry: segnala un riporto/prestito sul nibble (4 bit) basso nelle operazioni di addizione e sottrazione. Utile nelle operazioni BDC.

Z (bit 2) flag di Zero: va a 1 quando il risultato dell’operazione logico/aritmetica precedente è 0; va a 0 se tale risultato è diverso da 0. Viene anche influenzato da alcune istruzione di trasferimento.

PD (bit 3) flag di Power Down: va a 1 durante la temporizzazione di Power-up o per una istruzione CLRWDT (azzeramento del Watchdog timer); viene riportato a 0 da una istruzione di SLEEP (messa in stato di attesa)

TO (bit 4) flag di Time-Out: va a 1 durante la temporizzazione di Power-up o per un’istruzione di CLRWDT; viene riportato a 0 dal time-out del watchdog timer. Sostanzialmente, PD e TO permettono, dalle loro combinazioni, di individuare se un re-inizio di programma (reset) è stato determinato da un normale RESET hardware su MCLR, se invece si tratta di una uscita dal modo SLEEP, o di un time-out del watchdog , o ancora una combinazione di queste combinazioni. Si può notare che PD e TO sono gli unici bit di STATUS che non possono essere scritti direttamente, ma solo letti.

RP1, RP0 (bit 6 e 5): sono bit di selezione pagina per l’indirizzamento diretto nell’archivio registri. Se posti a 00 viene impostata la pagina 0 (00h – 7Fh), mentre se posti a 01 viene impostata la pagina 1 (80h – FFh).

IRP (bit 7): bit di selezione pagine per l’indirizzamento indiretto nell’archivio registri. Poiché in questo tipo di indirizzamento la selezione avviene di due pagine in due e il PIC 16F84 ha solo 2 pagine, tale bit non ha nessun effetto sulla selezione.

Page 18: Il pic 16 f84a

Il procedimento dei due indirizzamenti è descritto nello schema qui di seguito riportato:

Page 19: Il pic 16 f84a

PORTA e PORTB (indirizzi 05h e 06h): sono i registri corrispondenti ai due port di I/O; nel primo sono rilevanti solo i bit 4÷0 (il Port A ha solo 5 linee).

Ciascuna linea di ciascun port può essere indipendentemente impostato in input oppure in output, mediante la scrittura di un 1 (input) o di uno 0 (output) nella corrispondente posizione del registro di controllo TRISA (indirizzo 85h), per il Port A, e TRISB (indirizzo 86h), per il Port B.

Page 20: Il pic 16 f84a

OPTION (indirizzo 81h): è un registro di controllo i cui singoli bit (scrivibili e leggibili) determinano la scelta di particolari opzioni riguardanti il counter/timer, il watchdog timer, le modalità di generazione di interrupt, il comportamento delle linee di input.

Page 21: Il pic 16 f84a

Il PIC 16F84 ha 4 possibili sorgenti di interrupt:

Interrupt esterni dalla linea RB0/INT;

Interrupt su overflow del timer/counter TMR0;

Interrupt su fine scrittura EEPROM dati;

Interrupt su cambiamento di livello ai pin RB7÷RB4

Page 22: Il pic 16 f84a

Se avviene una interruzione, ulteriori interrupt vengono disabilitatidall’abbassamento automatico del flag di abilitazione generale degli interrupt GIE (bit 7 del registro INTCON)

L’indirizzo di rientro è salvato sullo stack hardware e il PIC è caricato con 0004h, indirizzo a cui deve iniziare la routine di gestione dell’interrupt. (Vettore di interruzione unico)

Le diverse interrupt comunque si “qualificano” alzando particolari flag di richiesta contenuti nel registro INTCON.

Il software deve individuare quale condizione ha determinato interrupt interrogando (polling) tali flag e diramarsi di conseguenza.

Al rientro dalla routine di gestione GIE viene riportato a 1, riabilitando gli interrupt non mascherati

Page 23: Il pic 16 f84a

Il contenuto del registro INTCON determina l’interrupt: RBIF (bit 0) che individua l’interrupt su cambiamento delle linee RB7÷RB4;

INTF (bit 1) che individua l’interrupt della linea RB0/INT;

TOIF (bit 2) che individua l’interrupt su overflow del timer/counter.

Se tutti sono a 0 allora la interrupt è stata causa dalla scrittura in EEPROM

RBIE (bit 3) che (dis)abilita l’interrupt corrispondente a RBIF;

INTE (bit 4) che (dis)abilita l’interrupt corrispondente a INTF;

TOIE (bit 5) che (dis)abilita l’interrupt corrispondente a TOIF;

EEIE (bit 6) che (dis)abilita l’interrupt di fine scrittura EEPROM dati.

Page 24: Il pic 16 f84a

Il set di istruzioni, riportato nella prossima slide, è estremamente compatto, in ottemperanza alla logica dei RISC; sono in tutto 35 istruzioni, tutte della stessa lunghezza (14 bit) e tutte della stessa durata di 1 ciclo macchina (4 cicli di clock), tranne quelle di salto che ne impiegano 2.

Page 25: Il pic 16 f84a
Page 26: Il pic 16 f84a

PORTA EQU 5 ; Indirizzo Port A

PORTB EQU 6 ; Indirizzo Port B

TRISA EQU 5 ; Indirizzo reg. controllo Port A (pag.1)

TRISB EQU 6 ; Indirizzo reg. controllo Port B (pag.1)

PC EQU 2 ; Indirizzo Program Counter (parte bassa)

STATUS EQU 3 ; Indirizzo reg, stato

RP0 EQU 5 ; Il flag RP0 Š il bit 5 di STATUS

ORG 0x00 ; Inizio FLASH di programma

BSF STATUS,RP0 ; Alza bit 5 di STATUS (RP0) per

; selezionare Pag.1 del file registri

MOVLW 0xFF ; Port A

MOVWF TRISA ; in input

CLRW ; Port B

MOVWF TRISB ; in output

BCF STATUS,RP0 ; Abbassa RP0 per selezionare

; Pag.0 del file registri

PLA MOVF PORTA,w ; Leggi input in W

ANDLW 0x0F ; (solo i 4 bit bassi)

CALL TBL ; Vai alla subroutine di gestione tabella

MOVWF PORTB ; Aggiorna l'uscita

GOTO PLA ; Ripeti indefinitamente

TBL ADDWF PC,f ; Somma al valore corrente del pc (che punta

; alla istr. successiva) l'ingresso (che va da

; 0 a 15 e sta in W)

Page 27: Il pic 16 f84a

; Qui di seguito la "Look-Up Table": ogni istruzione mette il relativo dato

; di output in W e recupera in pc dallo stack l'indirizzo di rientro

; Display anodo comune

; a = RB0

; b = RB1

; c = RB2

; d = RB3

; e = RB4

; f = RB5

; g = RB6

RETLW b'00111111' ;0

RETLW b'00000110' ;1

RETLW b'01011011' ;2

RETLW b'01001111' ;3

RETLW b'01100110' ;4

RETLW b'01101101' ;5

RETLW b'01111101' ;6

RETLW b'00000111' ;7

RETLW b'01111111' ;8

RETLW b'01100111' ;9

RETLW b'01111001' ;E

RETLW b'01111001' ;E

RETLW b'01111001' ;E

RETLW b'01111001' ;E

RETLW b'01111001' ;E

RETLW b'01111001' ;E

END

; NOTA SULLE TEMPORIZZAZIONI: il ciclo che implementa il PLA è costituito

; da 7 istruzioni di cui 3 di salto, per un totale di 4 + 3 x 2 = 10 cicli

; macchina = 40 periodi di clock. Alla massima frequenza di clock del

; PIC 16F84A (20 Mhz) ciò significa 2µs di ritardo fra variazione degli

; ingressi e aggiornamento delle uscite.

Page 28: Il pic 16 f84a

R1 ÷ R4 = 22 kΩ

R5 = 1 kΩ

R6 = 33 kΩ

R7 = 220 Ω

R8 ÷ R12 = 1 kΩ

C1 = 100 nF

C2 ÷ C3 = 15 pF

X1 = Quarzo 4 MHz

DL1 = Diodo Led

D1 = 1N4148

IC1 = PIC 16F84

SW1 ÷ SW4 = Dip Switch

FND500 = Display 7 segmenti

Page 29: Il pic 16 f84a
Page 30: Il pic 16 f84a
Page 31: Il pic 16 f84a
Page 32: Il pic 16 f84a

prof. Emanuele Tonucci