microprocessori

Transcript

microprocessori
MICROPROCESSORI
CFP Manfredini Este – Pd
MICROPROCESSORI
I PICMICRO (Microprocessori PIC) sono dei circuiti integrati che appartengono alla categoria dei
MICROCONTROLLORI, ovvero quei componenti che integrano in un unico dispositivo tutti i
circuiti necessari a realizzare un completo sistema digitale programmabile.
MICROCONTROLLORE PIC16F84A
Il microcontrollore PIC16F84A è il più diffuso processore prodotto dall’americana MICROCHIP e
assieme al prezzo ridotto unisce doti di elevata velocità (può arrivare anche a 20MHz).
SRUTTURA
INTERNA
DEL
PIC16F84A
PROGRAM
MEMORY
1K * 14
STACK
A
B
I/O PORTS
PC
REGISTER
FILE
W
RTCC
ALU
DATA
MEMORY
64*8
OSCILLATORE
Quarzo
WATCH DOG
TIMER
START-UP
TIMER
MCLR Vdd/Vss
LA PROGRAM MEMORY
La PROGRAM MEMORY è una memoria speciale di tipo FLASH, cancellabile elettronicamente ed
utilizzata dal P (microprocessore) per tenere memorizzato il programma da eseguire.
La sua capacità di memorizzazione è di 1024 locazioni di memoria, ognuna in grado di contenere
un’istruzione a 14 bit.
Il programma più complesso memorizzabile non può superare quindi 1024 istruzioni.
Per scrivere in questa memoria è necessario un PROGRAMMATORE esterno che solitamente è
collegato alla porta seriale di un computer. La scrittura viene abilitata portando a 13V un PIN
dell’integrato.
Dall’interno del programma non è possibile scrivere nella PROGRAM MEMORY; per poter
salvare dei dati del programma bisogna utilizzare la DATA MEMORY.
LA DATA MEMORY
È una memoria di 64 byte (64*8 bit) in cui il programma può registrare fino a 64 caratteri; essendo
di tipo FLASH ha le stesse caratteristiche della memoria precedente.
Su questa memoria può scrivere direttamente il programma in esecuzione.
1
MICROPROCESSORI
IL REGISTER FILE
Il REGISTER FILE (file di registro) è un insieme di locazioni di memoria RAM (Random Access
Memory = memoria ad accesso casuale)) ovvero memorie con cui è possibile modificare il
contenuto senza l’ausilio di programmatori esterni e direttamente dal programma in esecuzione sul
PICMICRO.
Date le sue caratteristiche il REGISTER FILE è la memoria normalmente utilizzata per
memorizzare VARIABILI di programma, ovvero tutti quei valori il cui contenuto VARIA durante
l’esecuzione.
Contrariamente alla PROGRAM MEMORY il REGISTER FILE perde il suo contenuto quando il μP
viene spento.
LA ALU (Aritmethic Logic Unit )
La ALU è la componente più complessa del μP in quanto contiene tutta la circuiteria delegata a
svolgere le funzioni di calcolo e manipolazione dei dati durante l’esecuzione di un programma.
La ALU è una componente presente in tutti i μP e da essa dipende direttamente la potenza di calcolo
del μP stesso.
La ALU del PIC16F84A è in grado di operare su valori ad 8 BIT, ovvero valori numerici non più
grandi di 255; limite superabile comunque via software.
L’ACCUMULATORE O REGISTRO W
Direttamente connesso con la ALU c’è il REGISTRO W denominato anche ACCUMULATORE.
Questo registro consente in una semplice locazione memoria in grado di contenere un solo valore a
8 bit.
La differenza sostanziale tra il registro W e le altre locazioni di memoria consiste proprio nel fatto
che, per leggere il registro W, la ALU non deve fornire nessun indirizzo di memoria, ma può
accedere direttamente.
IL PROGRAM COUNTER ( PC )
Per determinare quale sarà l’istruzione da eseguire, il μP utilizza uno speciale registro denominato
PROGRAM COUNTER (contatore di programma) la cui funzione è proprio quella di mantenere
traccia dell’indirizzo che contiene la prossima istruzione da eseguire.
Questo registro viene incrementato automaticamente ad ogni istruzione eseguita per determinare il
passaggio all’istruzione successiva. Nel momento del RESET il PROGRAM COUNTER viene
azzerato, determinando così l’inizio dell’esecuzione a partire dall’indirizzo 0.
L’istruzione GOTO cambia il valore del PC.
2
MICROPROCESSORI
LO STACK POINTER
Un’altra istruzione molto utile, che influenza il valore del PROGRAM COUNTER è GOSUB con la
quale è possibile effettuare delle chiamate a SUBROUTINE. Questa istruzione funziona in maniera
molto simile alla GOTO, infatti permette di scrivere nel PROGRAM COUNTER un nuovo indirizzo
di esecuzione del programma. La differenza sostanziale consiste però nel fatto che prima di eseguire
il salto, il P memorizza, in un registro speciale, denominato STACK (dall’inglese CATASTA),
l’indirizzo di quella che sarebbe dovuta essere la successiva istruzione da eseguire se non si fosse
incontrata la chiamata GOSUB.
Tutte le SUBROUTINE devono terminare con la parola chiave RETURN (RITORNO) che informa
il P di saltare all’indirizzo memorizzato nello STACK.
LE PORTE “A” E “B”
Il PIC16F84A dispone di un totale di 13 LINEE di I/O (INPUT/OUTPUT) organizzate in 2 porte
denominate PORTA A e PORTA B.
La PORTA A dispone di 5 LINEE configurabili sia in ingresso che in uscita identificate dalle sigle
RA0, RA1, RA2, RA3 ed RA4.
La PORTA B dispone di 8 LINEE anch’esse configurabili sia in ingresso che in uscita identificate
dalle sigle RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7.
U1
PIEDINI DI
COLLEGAMENTO
DEL PIC16F84A
RB0
RB1
RB2
RB3
RB4
VDD+
MCLR
RB5
RB6
RB7
OSC1
pic 16f84a
OSC2
RA0
RA1
RA2
RA3
VSS-
RA4
P
O
R
T
A
B
P
O
R
T
A
A
Per la gestione delle linee di I/O da programma , il PIC dispone di 2 registri interni per ogni porta
denominati TRISA e PORTA per la porta A e TRISB e PORTB per la porta B.
I registri TRISA e B, determinano il funzionamento in ingresso o in uscita di ogni singola linea.
Ad esempio il comando
RB7
RB0
TRIS B = % 00001111
Imposta è primi 4 piedini come ingressi (1111) e gli ultimi 4 come uscite (0000).
I registri PORTA e B, determinano lo stato delle linee in uscita o riportano lo stato delle linee in
ingresso, ad esempio il comando:
PORT B = % 11100000
Imposta gli ultimi 3 piedini a potenziale positivo e a massa tutti gli altri.
3
MICROPROCESSORI
La corrente massima prelevabile da ogni piedino (impostato in uscita) è di 25 mA più che sufficiente
per alimentare un diodo LED.
IL WATCH DOG TIMER (WDT )
Il “Temporizzatore cane da guardia” ha lo scopo di migliorare l’affidabilità dei circuiti.
Il WDT è in pratica un oscillatore interno al μP, ma completamente indipendente dal resto della
circuiteria, il cui scopo è quello di rilevare eventuali blocchi della CPU e resettare il μP per
riprendere la normale esecuzione del programma.
Per abilitare il WDT occorre abilitare questa funzione dall’interno del programma di trasferimento
file HEX (nel nostro caso ICPROG).
RTCC O CONTATORE TMR0
Il registro TMR0 è un contatore, ovvero un particolare tipo di registro il cui contenuto viene
incrementato con cadenza regolare e programmabile direttamente dall’hardware del PIC.
In pratica, a differenza di altri registri, il TMR0 non mantiene inalterato il valore che gli viene
memorizzato ma lo incrementa continuamente, se ad esempio salviamo in esso il valore 10 dopo 4
cicli macchina il suo valore sarà 14.
Una volta raggiunto il valore 255 riparte da zero.
START-UP TIMER
Questo temporizzatore aspetta 1024 oscillazioni del quarzo prima di far partire il μP, in questo
modo l’oscillatore ha il tempo di stabilirsi e il programma parte evitando blocchi.
4
MICROPROCESSORI
LINGUAGGI DI PROGRAMMAZIONE E COMPILATORI
Il linguaggio nativo dei µP è il LINGUAGGIO MACCHINA, linguaggio spesso difficile e poco
mnemonico. Si ricorre così a linguaggi più evoluti e vicini al linguaggio umano, uno di questi è il
PICBASIC o il C. Una volta scritto il programma con uno di questi linguaggi lo si converte in
linguaggio macchina attraverso un COMPILATORE.
MICRO
STUDIO
EDITOR
PICBASIC
PRO
COMPILATORE
FILE. BAS
LING.
MACCHINA
FILE. HEX
Il file con estensione HEX viene poi trasferito alla memoria del µP attraverso un programmatore e
un software adatti (IC-PROG).
Il file SORGENTE (FILE.BAS) non deve mai essere cancellato perché altrimenti non sono più
possibili eventuali modifiche al programma.
Il file SORGENTE è un file generico e non è associato ad un particolare µP, sarà poi il compilatore
ad adattare il nostro programma ad un specifico µP (ad esempio il PIC16F84A).
HIGH
HIGH Pin
Porta a livello logico 1 il Pin specificato. Non serve specificare ingressi o uscite perché questo
comando imposta Pin come uscita.
Pin può essere un numero che va da 0  15.
HIGH 0
HIGH PORTB.2
‘ Imposta il Pin 0 a 5 Volt
‘ Imposta il PIN 2 a 5 Volt (della porta B)
LOW
LOW Pin
Porta a livello logico 0 il Pin specificato. Ha le stesse caratteristiche del comando precedente.
Per entrambi i comandi lo stato del PIN non cambia fino a quando nmon si interviene con una
nuova impostazione del PIN.
LOW 0
LOW portb.2
‘ Porta a 0 il Pin 0
‘ Porta a livello 0 il PIN della PORTA B
I comandi HIGH e LOW (alto e basso) servono per “accendere e spegnere” le uscite desiderate del
µP.
5
MICROPROCESSORI
PAUSE
PAUSE Periodo
Questo comando porta in pausa il P per il PERIODO specificato espresso in mS.
La precisione della pausa è legata al quarzo utilizzato.
Se si usa un quarzo diverso da 4MHz bisogna specificarlo nel programma con il comando:
DEFINE OSC
PAUSE 1000
8
‘per quarzi a 8MHz
‘pausa di 1000 mS = 1 secondo
La pausa massima impostabile è di 65.535 mS che è poco più di un minuto.
Esempio
‘ programma per accendere e spegnere un LED alternativamente
INIZIO
‘etichetta
HIGH 0
‘accende il primo LED
PAUSE 500
‘si ferma per 0.5 secondi
LOW 0
‘spegne il primo LED
PAUSE 500
‘si ferma per 0.5 secondo
GOTO INIZIO
‘ritorna all’ETICHETTA INIZIO
BUTTON
Questo comando è uno tra i più importanti perchè permette di far “sentire” al P se in uno degli
ingressi è presente un segnale ad esempio di qualche pulsante.
I pulsanti collegati possono fornire un segnale positivo o negativo a seconda di come sono collegati:
+5V
+5V
10k
I/O
DOWN = 0
I/O
DOWN = 1
10k
BUTTON
Pin, Down, Delay, Rate, BVar, Action, Label
Pin:
Specifica in quale piedino è collegato il pulsante; può essere un valore tra 015. Oppure può
essere l’indirizzo di una porta specifica come PORTA.4
Down: Stato del PIN quando il pulsante è premuto (01)
Delay: È un ritardo che serve per evitare il rimbalzo dei pulsanti, può essere un numero che va da 0
a 255:
0
 no antirimbalzo. No auto-repeat
137  antirimbalzo e auto-repeat
255  antirimbalzo, no auto-repeat
6
MICROPROCESSORI
Rate: (0…255) Velocità dell’auto-repeat dei pulsanti
Bvar: È una variabile che serve al comando BUTTON per funzionare. In questa variabile il
comando memorizza i tempi di ritardo/ripetizione. Deve essere definita all’inizio come
variabile grande 1 BYTE.
Action: Definisce quando il comando deve agire (0 se il tasto NON è premuto; 1 se è premuto).
Label: Etichetta a cui fa saltare l’esecuzione del programma il comando BUTTON.
Button PORTA.4,0,255,10,Bu,1,ETICHETTA
In questo esempio il pulsante è collegato alla PORTA A.4 e quando è “DOWN” è a zero; c’è il
dispositivo antirimbalzo ma non l’auto-repeat (255) anche se quest’ultimo è impostato a 10. Button
usa la variabile Bu per funzionare e l’azione di BUTTON è vera quando il pulsante è premuto (1).
Quando il pulsante è premuto il programma salta ad ETICHETTA.
Button PORTA.4,0,255,10,Bu,0,ETICHETTA
Quest’ultimo esempio salta ad “ETICHETTA” quando il pulsante NON è premuto.
ESERCIZIO
Realizzare un FIRMWARE per PIC16F84A in modo che una sua uscita (PORTA B.0) vada allo
stato logico 1 per un tempo di 1 minuto dopo la passione di un tasto (PORTA a.4).
DEFINE
OSC
4
BU
VAR
BYTE
MAIN
BUTTON
PORTA.4,0,255,10,Bu,1,TASTOPREM
GOTO MAIN
TASTOPREM
HIGH 0
PAUSE
60000
LOW 0
GOTO MAIN
END
7
‘Quarzo da 4MHz
‘Variabile per il comando Button
‘INIZIO
‘Vai All’inizio
‘Tasto Premuto
‘Accensione primo LED
‘Per 1 minuto
‘Spegnimento LED
‘Vai All’inizio
‘Fine
MICROPROCESSORI
FOR… NEXT
FOR COUNT = start TO end
.
.
.
NEXT COUNT
Queste tre istruzioni combinate assieme generano un ciclo che va dal valore START fino a END.
Possono servire per generare cicli in modo da eseguire tante volte determinati comandi.
ESEMPIO
I VAR BYTE
FOR I=1 TO 15
HIGH 0
PAUSE 60000
NEXT I
LOW 0
‘Definizione di I come byte
‘Inizio del ciclo FOR…NEXT
‘Accensione 1° LED
‘Pausa di 1 minuto
‘Fine del ciclo
‘Spegnimento LED
Questo programma tiene acceso un LED per 15 minuti appena il µP riceve tensione; per questa
funzione viene inserito un comando di PAUSA di 1 minuto all’interno di un CICLO FOR… NEXT
ripetuto 15 volte.
ESEMPIO
I VAR BYTE
FOR I=1 TO 100
HIGH 0
PAUSE 200
LOW 0
PAUSE 200
NEXT I
‘Definisce I come Byte
‘Ciclo FOR… NEXT
‘Accende il 1 LED
‘Pausa di 200 ms
‘Spegne il LED
‘Pause di 200 ms
‘Chiusura del CICLO
Questo programma accende e spegne un LED 100 volte utilizzando il comando FOR… NEXT
impostato a 100.
8
MICROPROCESSORI
ESERCIZIO
B1 VAR BYTE
‘Variabile del comando button
I VAR WORD
‘Variabile del ciclo “FOR… NEXT” = WORD
MAIN
BUTTON PORTA.4,0,255,10,B1,1,ACCENDE
GOTO MAIN
ACCENDE
‘ciclo che accende il LED per 1 minuto
HIGH 0
FOR I=1 TO 600
PAUSE 100
BUTTON PORTA.4,0,255,10,B1,1,SPEGNE
NEXT I
SPEGNE
‘ciclo che spegne il LED.
LOW 0
GOTO MAIN
END
Questo programma accende un LED per un minuto e poi si spegne automaticamente. Se durante
l’accensione si preme il pulsante il LED si spegne.
BRANCH
BRANCH index , [label 1 ,label 2 , …….]
BRANCH (ramo) fa saltare il μP alla etichetta (label) specificata in base al valore della variabile
index .
Se il valore di index è più grande del numero delle etichette non viene effettuato nessun salto. Si
possono usare fino ad un massimo di 255 label.
BRANCH B0,[uno,due,tre]
uno……
………..
due……
……….
tre……
……….
RANDOM
RANDOM
Var
Questo comando genera un numero casuale e lo memorizza dentro la variabile Var. Il numero
generato è a 16 bit, quindi la variabile Var deve essere impostata come WORD.
9
MICROPROCESSORI
GOTO
GOTO LABEL
Incontrando questa istruzione il P salta all’etichetta specificata (LABEL).
È importante che all’interno del programma l’etichetta sia scritta allo stesso modo della label
dopo il comando GOTO (vai a….).
GOSUB
GOSUB LABEL
Questo comando fa un salto ad una SUBROUTINE (pezzo di programma) e poi, terminata
la SUBROUTINE, al comando RETURN, torna all’istruzione successiva.
IF…THEN
IF comp. THEN label
ELSE
…
…
END IF
I comandi IF…THEN…ELSE (se…allora…altrimenti) servono per fare un confronto
(comparison) fra una variabile e una costante e prendere delle decisioni di salto condizionato
a delle etichette (label) a seconda del valore che assumono.
IF PORTA.1 = 0
THEN
T=50
Questa linea di programma si legge: se il PIN1 della PORTA A del P è uguale a 0 allora
poni T uguale a 50; cioè T=50 quando il piedino opportuno viene collegato a massa.
IF
PORTA.4 = 0 THEN
HIGH 0
PAUSE 50
LOW 0
PAUSE 50
ELSE
HIGH 0
PAUSE 500
LOW 0
PAUSE 500
END IF
10
MICROPROCESSORI
SOUND
Sound Pin, [Note , Duration ]
Questo comando genera un tono nel piedino specificato; 0 rappresenta silenzio, da 1/127 sono toni e
da 128 a 255 è rumore. Il valore 1 è 78,74 Hz, il valore 127 è circa 10000 Hz .
L’uscita del P è ad onda quadra e può pilotare direttamente una capsula piezoelettrica (alta
impedenza); se invece si vuole comandare un altoparlante (bassa impedenza) bisogna collegare in
serie un condensatore:
pin
Sound port B.7, [100,10,50,10]
Questo comando manda in uscita (nella porta B.7) due note della durata di 10 ( circa 120 ms);
le note sono 100 e 50.
11
MICROPROCESSORI
LCD OUT
LCDOUT messaggio
Questo comando permette di visualizzare un messaggio in un display modello HITACHI 44780 o
compatibili.
Il µP deve essere informato, prima di usare questo comando, dei collegamenti utilizzati dal display
per collegarsi al PIC16F84A; per questa funzione viene inserito all’inizio di ogni programma tutta
una serie di comandi DEFINE LCD… per i settaggi opportuni.
LCDOUT $FE,1,”CIAO”
Con questo comando viene, prima cancellato lo schermo, poi scritta la stringa CIAO.
Il codice $FE serve per inviare comandi al display, come ad esempio 1 che cancella lo schermo, 2
che riporta il cursore all’inizio (HOME) ecc.
È interessante notare che una volta inviato al display il messaggio, questo rimarrà visualizzato fino
a quando non verrà cancellato perché resta nella memoria del display.
Quando si scrive un messaggio, l’inizio verrà posto alla fine del messaggio precedente; se ad
esempio scriviamo due volte CIAO esso apprirà così: CIAOCIAO.
Per farlo si usa il comando:
LCDOUT $FE,1
LCDOUT “CIAO”
LCDOUT “CIAO”
‘Cancella lo schermo
‘Scrive CIAO
‘Scrive CIAO di seguito
Vediamo di seguito i comandi da inviare al display preceduti dal codice $FE
COMANDO
OPERAZIONE
$FE,1
Cancella il Display
$FE,2
Ritorna all'inizio, in alto a sinistra (HOME)
$FE,$0C
Spegne il cursore
$FE,$0E
Accende il cursore
$FE,$0F
Cursore lampeggiante
$FE,$10
Muove il cursore a sinistra di una posizione
$FE, $14
Muove il cursore a destra di una posizione
$FE, $80
Sposta il cursore all'inizio della 1° riga
$FE, $C0
Sposta il cursore all'inizio della 2° riga
$FE, $94
Sposta il cursore all'inizio della 3° riga
$FE, $D4
Sposta il cursore all'inizio della 4° riga
12
MICROPROCESSORI
POT
POT Pin, Scala, Var
Pin
Specifica in quale piedino del µP è collegato il potenziometro.
Scala Specifica la scala da usare per avere come valore minimo 0 e come massimo 255 in modo da
utilizzare la massima risoluzione possibile.
Var
È la variabile in cui sarà memorizzato il valore analogico.
47 KΩ
100nF
Con questo comando è possibile simulare un ingresso analogico in un µP che non ne è dotato. Per
far questo si sfrutta l’hardware disegnato sopra.
Il comando POT carica dapprima il condensatore e poi lo scarica contando in quanto tempo avviene
la scarica. Il tempo di scarica è una buona approssimazione del valore analogico del potenziometro.
13