Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
Microprocessori - Microcontrollori
Nicola Amoroso
[email protected]
NA – L1
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Cosa e’ un microcontrollore ?
> Un piccolo computer, contenente al suo interno tutti i
circuiti necessari al suo funzionamento, senza necessita` di
circuiti integrati esterni.
> Il microprocessore vero e proprio (core) e` il cuore del
sistema e si occupa di eseguire le operazioni matematiche
(ALU) , di spostare i dati fra le varie parti della memoria, di
incrementare i numerosi contatori necessari al
funzionamento.
> Tutti i dispositivi, interni, controllati dal microprocessore
prendono il nome di periferiche
NA – L1
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Cosa e’ un microcontrollore ?
• Un microcontrollore (µC ) è un dispositivo di
elaborazione dati simile al microprocessore (µP )
Sul µP sono basati tutti i calcolatori dai personal
computer ai mainframe
• Sul µC sono basati dispositivi per scopi industriali o
per applicazioni particolari (autronica, domotica,
telefoni cellulari, lettori DVD, video-camere, etc… )
NA – L1
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Cosa e’ un microcontrollore ?
Il microcontrollore contiene gli stessi elementi principali di un sistema programmabile:
° Processore
° Memoria
° Elementi di Input/output
In un PC, questi sottosistemi, sono elementi (chips) separati collegati tra loro
mediante una “connessione a bus”[1], su un unico circuito stampato; il sistema
completo è comunque gestito da una unità centrale che prende il nome di
CPU [microprocessore (µP)].
Ogni sistema può essere configurato per applicazioni “particolari” con CPU,
memorie e gestione di I/O opportune.
[1] “Connessione a bus” => Opportune linee in parallelo che collegano tra loro sistemi,
device, etc… . Il numero delle linee dipende dai collegamenti da effettuare, comunque in
genere si utilizzano bus a 4, 8, 16, 32, 64, … linee.
NA – L1
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Cosa e’ un microcontrollore ?
In un microcontrollore (µC), tutti gli elementi
indicati, sono presenti su un unico chip!
Il µC gestisce tutte le condizioni di I/O,
i calcoli ed eventuali controlli
Sia i µC che i µP sono sistemi programmabili cioè non possono operare senza
opportuno codice (programma) che è una lista di istruzioni, mantenute in memoria
opportuna che viene eseguita in modo sequenziale in modo tale da soddisfare al
processo richiesto.
Per questi sistemi programmabili bisogna considerare oltre allo sviluppo hardware
(Interfacciamento), anche un opportuno sviluppo software in funzione del processo da
eseguire.
NA – L1
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Memorie
Fondamentalmente vi sono due tipi di memoria:
° Volatili
° Non volatili
Le memorie “volatili” [RAM Random Access Memory] perdono i dati immagazzinati
quando non sono più alimentate.
Le memorie “non volatili” [ROM Read Only Memory] mantengono i dati
immagazzinati anche in assenza di alimentazione.
In un PC una piccola ROM (2-4 Mb) è usata per memorizzare le condizioni Hw e
Sw per lo start del sistema; esso contiene il programma BIOS (Basic Input Output
System); il sitema operativo della macchine (es. MS WindowsTM) e le applicazioni
del sistema (es. MS Word) vengono invece caricate in RAM prima di essere
eseguite e questo richiede abbastanza tempo.
NA – L1
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Memorie
E’ facile chiedersi: “perché
il SO non viene memorizzato in una
ROM”? Diventa così facilmente e velocemente accessibile!
La RAM è veloce, sicura, compatta e semplice da gestire; il SO può essere
cambiato o aggiornato senza toccare l’hw del sistema, inoltre gli attuali SO sono
molto grandi e composti da più sw collegati tra loro, ogni sw viene caricato in RAM
nel momento in cui serve mentre le altre applicazioni sono caricati su memorie
statiche molto capienti (es. HD, etc…) e caricati in RAM solo quando servono.
Memorie ROM di tipo FLASH (Elettricamente riscrivibili) sono usate invece in
sistemi mobili di capacità limitata (es MP3 players, memory card, USB pen, etc…)
questo perché questi sistemi utilizzano sw di
gestione facilmente aggiornabili,
infatti essi contengono microcontrollori la cui program-memory può essere
“riprogrammata”.
NA – L1
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Input e Output
Un sistema digitale programmabile non è molto utile senza la possibilità di
poter scambiare (Leggere/Scrivere – Read/Write) dati (Segnali elettrici) con
l’esterno!
Le porte sono insiemi di Pin (Collegamenti mediante piedini), basati su
registri e insiemi di control-registers (registri di controllo) che permettono
lo scambio In/Out di “dati” in modo “controllato” mediante un opportuno
“protocollo di comunicazione”.
Vi sono due tipi fondamentali di porte (e quindi modalità di comunicazione):
° Parallela
NA – L1
° Seriale
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Input e Output
In una porta parallela i dati (digitali) vengono trasferiti contemporaneamente su più
collegamenti paralleli tra loro (es. 8 bits, 16 bits, 32 bits, 64 bits, etc…)
In una porta seriale i dati (digitali) vengono trasferiti 1 bit per volta su una singola
linea.
Potenzialmente la porta parallela è più veloce ma necessita di un numero maggiore
di linee di collegamento e quindi vi sono maggiori possibilità di errore nel processo
di scambio; l’hw e il sw di gestione è invece più semplice rispetto alla trasmissione
seriale dove, il pacchetto dati
deve essere organizzato in
gruppi prima di procedere allo
scambio (possibilità di gestione
a pacchetti e in rete [Network
data]).
NA – L1
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Input e Output
Ad esempio le stampanti di vecchia generazione colloquiavano con l’unità centrale
del PC mediante la porta parallela (centronics), che inviava alla stampante 1 byte
(8 bit) per volta mediante un connettore multipin (25-36 pin.
Le nuove stampanti colloquiano con la unità centrale mediante un collegamento
seriale il quale permette lo scambio di 1 bit per volta. Il nuovo standard USB
(Universal Serial Bus) può operare ad una velocità massima di 480 megabits/sec e
seppur più lenta del collegamento parallelo è, sicuramente, molto più veloce
rispetto ai tempi operativi di una stampante. Il collegamento USB avviene con un
semplice e robusto connettore a 4 capi che fornisce anche, se richiesto dalla
periferica, la tensione di alimentazione necessaria al suo funzionamento (N.B. =>
Solo per periferiche che non assorbono molto).
Lo stadard USB è comunque complesso per la gestione sw e richiede molta
accuratezza nella creazione di driver opportuni.
NA – L1
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Input e Output
Una delle funzioni principali delle PORTE (registri) è quella di separare il data-bus
della CPU con il bus esterno dell’hw considerato; queste porte hanno anche la
funzione di immagazzinare temporaneamente i dati da scambiare (Buffer di
memoria) che successivamente possono essere trasferiti e processati nel modo
opportuno.
I registri (porte) di tipo “seriale” caricano i dati in parallelo dal bus interno della CPU
e poi inviano 1 bit per volta all’esterno operando come uno shift-register. Se viene
adoperato un protocollo di trasmissione asincrono, come ad esempio un RS232
(COM PORT nei vecchi PC), oltre ai bit da scambiare, il protocollo può contenere
anche bit di START, STOP e ERROR CHECK. In definitiva le vecchie trasmissioni
seriali di tipo asincrono, potevano avere pacchetti di 11 bit. Il protocollo USART
(Universal
Syncronus/Asyncronus
Receive/Transmit)
sarà
sicuramente
approfondito in corsi opportuni in seguito.
NA – L1
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il µP contiene :
> Una ALU (Arithmetic Logic Unit ) dove
avvengono i calcoli
> diversi registri per la memorizzazione
temporanea dei dati e la gestione delle istruzioni
> Un bus interno ad alta velocità
> circuiti di controllo e di temporizzazione per
coordinare tutte le attività
> tre bus ( Data Bus , Address Bus , Control Bus )
per comunicare col mondo esterno ( dispositivi
di memoria , dispositivi di ingresso-uscita)
NA – L1
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il µP ha bisogno per funzionare:
•
Di un’ampia area di memoria esterna sia di lavoro (RAM) che di
massa (hard disk ecc ) , dato che tratta grandi quantità di dati
•
Di interfacce verso dispositivi esterni di Input (tastiera,
mouse,scanner, hard disk, floppy , microfoni ….)
•
Di interfacce verso dispositivi esterni di Output ( monitor, stampante,
altoparlanti, hard disk, floppy,modem ……)
•
Di potenza di alimentazione anche di decine di watt
•
………..
NA – L1
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il µC invece possiede su un unico chip:
•
Una CPU RISC
•
Una piccola memoria di programma (EPROM-EEPROM)
•
Una piccola memoria di lavoro RAM ( alcuni KB)
•
Porte di ingresso/uscita
•
Contatori, timer, convertitore A/D
•
Uart, Pwm, interfacce di comunicazione di vari tipi
Contiene cioè, sia quello che possiede un µP (anche se in
quantità molto ridotta), sia parti che il µP non possiede.
Ha ingombro minimo e richiede poca potenza di alimentazione
NA – L1
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
RISC significa :
Reduced Instruction Set Computing
Elaborazione con insieme di istruzioni ridotto
Le istruzioni perciò :
• Sono poche decine
• Sono eseguite molto velocemente
• non serve un clock molto elevato per un efficiente
funzionamento ( dai 4-8 MHz per i tipi più semplici, fino a 33
- 50 MHz per i tipi più evoluti)
NA – L1
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
Microcontrollori Microchip PIC 8 bit
Nicola Amoroso
[email protected]
NA – L2
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Microcontrollori Microchip PIC
8 bit
PIC: Peripheral Interface Control (~1975)
Famiglia 12 (12bit)
PIC12CXXX — 400ns Instruction Execution, 33/35 Instructions, 8Pin Package, 4MHz Internal Oscillator
Famiglia 16 (14bit)
PIC16C5X — 200ns Instruction Execution, 33 Instructions
PIC16CXXX — 4-12 Interrupts, 200ns Instruction Execution, 35
Instructions
Famiglia 17 (16bit)
PIC17CXXX — 120ns Instruction Execution Including Multiply, 58
Instructions
Famiglia 18 (16bit)
PIC18CXXX — 10 MIPS, 77 Instructions, C-compiler Efficient
Instruction Set, Software Stack Capability, Table Operation, 4X PLL
Clock, Switchable Oscillator Sources, 25mA Source/Sink per I/O
NA – L2
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il microcontrollore che utilizzeremo è il
PIC16F877 della Microchip Technology
PIC = Peripheral Interface Controller
(Controllore di periferiche programmabile)
La sua caratteristica più importante sta nella sigla F :
Il programma risiede in una EEPROM FLASH
(Electrically Erasable Programmable Read only Memory)
è modificabile immediatamente anche senza togliere l’integrato
dal circuito (modalità : in-circuit programming)
NA – L2
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il nostro µC
•
implementa su un unico chip tutte le risorse necessarie per il calcolo, per
l’acquisizione e memorizzazione dei dati e per l’interfacciamento e la
comunicazione con il mondo esterno.
NA – L2
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Le periferiche dei microcontrollori
•
•
•
•
•
La ROM (Read Only Memory) è solitamente utilizzata per la memorizzazione
delle istruzioni del programma (può essere permanente o non permanente).
Nella RAM (Random Access Memory) vengono custoditi i dati prodotti e
impiegati durante l’esecuzione del programma.
La EEPROM (Electrical Erasable Programmable Read Only Memory) serve
per memorizzare i dati che devono essere conservati anche al termine del
programma.
La CPU (Central Processing Unit) è l’unità che, comunicando con le varie
periferiche interne attraverso i BUS, si fa carico di eseguire il programma ed
elaborare i dati. Per esempio, l’esecuzione di un programma consiste nella
lettura sequenziale da parte della CPU delle istruzioni memorizzate nella
memoria di programma.
I TIMER consentono al sistema di misurare e sincronizzare sia eventi interni
che esterni. Sono impiegati anche per la generazione di segnali esterni di
controllo.
NA – L2
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Le periferiche dei microcontrollori
• Le I/O PORTS sono le porte di ingresso ed uscita
solitamente utilizzate per acquisire dati o per pilotare
componenti. Usualmente, una porta I/O è costituita da 8
pin (anche meno qualche volta), programmabili sia come
ingressi che uscite.
• Le INTERFACCE SERIALI sono utilizzate per
scambiare dati con il mondo esterno. Sono frequenti
periferiche di comunicazione sia sincrone (SPI, I2C) che
asincrone (USART). Le prime sono utilizzate solitamente
per la comunicazione con dispositivi esterni (memorie,
sensori), le seconde per comunicare con PC o altri µC
(comunicazione seriale RS232 o RS422/485).
NA – L2
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Le periferiche dei microcontrollori
• L’ADC (convertitore Analogico/digitale) converte
un segnale esterno analogico (prelevato
tipicamente in tensione) in una sua
rappresentazione digitale. I microcontrollori che
implementano tali dispositivi sono
particolarmente adatti per essere impiegati in
applicazioni di controllo.
• Il WATCHDOG TIMER, se attivato, genera un
reset ad un intervallo prestabilito in fase di
programmazione. Questo riavvio ciclico è utile
per far uscire il microcontrollore da eventuali
situazioni di stallo.
NA – L2
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Le periferiche dei microcontrollori
• Il PULSE WIDTH MODULATION SIGNAL
GENERATOR è un dispositivo utilizzato per la
generazione di segnali modulati in ampiezza
d’impulso. È anche impiegato nella conversione
DA per la generazione di segnali analogici
facendo transitare il segnale in un filtro passa
basso. Se la costante di tempo del filtro è scelta
opportunamente, è possibile generare un
segnale proporzionale in tensione al duty-cycle.
NA – L2
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Le periferiche dei microcontrollori
Funzioni della CPU
Funzioni principali di una CPU sono:
•
•
•
Trasferimento Dati
Controllo di Flusso (operazioni di salto, jump)
Elaborazioni Aritmetiche e Logiche (addizioni e
sottrazioni,operazioni logiche, incrementi, decrementi, shift,
rotazioni, ecc…)
Ogni CPU ha usualmente un array register con:
•
•
•
•
un Registro Accumulatore (W )
il Program Counter (PCL)
l’Instruction Register (IR)
lo Stack Pointer (SP)
NA – L2
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
NA – L2
http://www.mrscuole.net/anxapic/
10
Il µC che utilizzeremo: Pic16F877 <> Clock 4 – 20 MHz
E’ commercializzato in differenti Packages, come il convenzionale 40-pin DIP (Dual In
Line Package); questo formato è molto usato nelle fasi di sviluppo e prototipi.
Viene riportata di seguito la disposizione dei singoli pin
NA – L2
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Microchip Pic16F877
Molti dei pin sono di I/O, raggruppati in 5 PORT: A[6 pin – RA0..RA5], B[8 pin –
RB0..RB7], C[8 pin – RC0..RC7], D[8 pin – RD0..RD7], E[3 pin – RE0..RE2] per
complessivi 33 pin di I/O. Molti di questi pin possono operare come I/O funzionante in
più modalità, il modo di funzionamento dei singoli pin viene impostata “settando”
opportunamente dei registri di controllo del sistema.
Nella piedinatura riportata si nota come diversi pin presentano più funzioni di I/O (Es.
RA0 – PORTA bit0 può funzionare come I/O digitale oppure come ingresso analogico
AN0).
In particolare notiamo che sia i pin di PORTA che quelli di PORTE possono
funzionare come ingressi digitali I/O oppure come ingressi analogici, per default
in fase di start-up o reset questi pin sono impostati come ingressi analogici, se
richiesto come I/O digitale bisogna agire sui rispettivi registri di controllo; vedremo in
seguito come operare.
NA – L2
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Microchip Pic16F877
PORTB viene anche impiegata per programmare il controllore, cioè caricare il codice di
programma nella FLASH ROM (RB6-RB7 in-circuit programming), inoltre RB0,
RB4..RB7 possono generare interrupt.
PORTC in genere permette l’uso di Timers e possibilità di comunicazione seriale
(serial ports), PORTD in genere si utilizza come normale porta di comunicazione.
Il chip viene alimentato mediante una doppia coppia di pin (Vdd=+5V nominali, Vss=0V).
Spesso i chip funzionano, nei casi previsti, anche con alimentazione compresa tra 2,2V
e 3.1V in casi particolari in cui si sfrutta la alimentazione di pile.
Per il funzionamento occorre un circuito oscillante esterno collegato tra i piedini
CLKIN e CLKOUT; la frequenza di oscillazione può essere compresa tra qualche
decina di KHz (oscillatore R-C) fino a frequenze di 20 MHz (oscillatore al quarzo).
MCLR è il Master-Clear Reset, quando viene portato a livello logico basso permette il
reset della MCU, in condizioni normali deve stare a livello alto (+5V).
NA – L2
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Pic16F877 Block Diagram
Un semplice Diagramma a Blocchi
che descrive il funzionamento del
controllore nei suoi blocchi principali;
si evidenziano:
1. Flash ROM per il program
memory: 8192 locazioni a 14 bit
2. RAM file registers 512 locazioni
a 8 bit che comprende anche
alcuni speciali registri tipo
PORTA, PORTB, etc... . Questa
zona di RAM e suddivisa in 4
banchi di 128 byte ognuna (N.B.
Alcuni registri sono ripetuti tra i
vari banchi; in totale avremo solo
368 locazioni utili)
3. Un registro particolare (W) che
prende il nome di accumulatore
usato sempre con la ALU per il
processo dei dati
4. Varie periferiche per il controllo
I/O dei dati
NA – L2
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Architettura PIC 16F877
NA – L2
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Memorie interne al 16F877
•
•
•
FLASH Memory programmi: contiene il “ programma’’ da eseguire,
ha la caratteristica di mantenere la programmazione anche quando
l’alimentazione al micro viene spenta, e di poter essere cancellata e
riscritta con uno speciale apparecchio chiamato programmatore. e`
Questa memoria profonda 8Kbytes (8192 parole x 14 bit) => il
programma da eseguire al piu` puo` essere composto da una
sequenza di 8192 operazioni. Altri tipi di microprocessore
hanno invece una memoria programma di tipo PROM: questa
puo` essere scritta soltanto una volta.
RAM dati: il programma, in esecuzione, non puo` scrivere sulla
FLASH programmi ( ~ vero …) => l’area di memoria RAM dati e`
scrivibile in esecuzione e contiene le variabili. Il contenuto di questa
memoria viene perso quando si spegne il circuito.
Esiste un’altra memoria FLASH per i dati (EEPROM).
NA – L2
http://www.mrscuole.net/anxapic/
16
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Memorie interne al 16F877
Ricapitolando:
1) FLASH programmi: 8192 parole
2) RAM per le variabili: 368 bytes
3) FLASH dati: 256 bytes (e` in pratica un piccolo hard disk, noi non la
useremo per ora)
Le singole locazioni della RAM vengono chiamate registri.
I registri della RAM possono essere di due tipi :
1) General Purpose: uso generale, tipo per contenere le variabili del
nostro programma.
2) Special Function: scrivendo in queste locazioni si istruisce il micro
ad eseguire determinate operazioni. Per esempio se scrivo il dato
0x4 nel registro 0x1F (mnemonica ADCON0) => l’ADC interno al
microprocessore comincia la conversione
NA – L2
http://www.mrscuole.net/anxapic/
17
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
NA – L2
http://www.mrscuole.net/anxapic/
18
I registri mappati in memoria
I registri sono celle,
locazioni, di memoria dove
il µC legge e scrive valori
fondamentali per il
funzionamento. Sono celle
che hanno un indirizzo
esadecimale ( h ) ; si dice
che sono mappati in
memoria.
Ad esempio
scrivendo/leggendo nelle
locazioni 05h e 06h si
scrive/legge nelle porte A e
B.
NA – L2
http://www.mrscuole.net/anxapic/
19
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
I registri mappati in memoria
Se si programma il PIC in
linguaggio macchina
(Assembler) occorre
precisare molti dettagli per
i registri, con istruzioni da
mettere all’inizio del
programma.
Se si usa un linguaggio ad
alto livello (Basic, C, …),
le istruzioni da aggiungere
sono minori. Tuttavia la
mappa di memoria ( cioè
l’allocazione dei registri)
deve sempre essere
conosciuta.
NA – L2
http://www.mrscuole.net/anxapic/
20
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La gestione delle porte di IN/OUT
E’ fondamentale saper programmare le porte di
ingresso/uscita.
Es. => Ognuno dei pin della porta A (05h) può essere
impostato in modo indipendente come ingresso o come uscita
in base al contenuto del registro di controllo TRISA (85h):
impostando a 1 il bit di TRISA, il corrispondente pin di
PORTA è un ingresso ( se è 0 diventa uscita). Lo stesso vale
per la porta B (06h) gestita da TRISB (86h).
Esempio : con TRISB = 00111111 , RB6 e RB7 sono linee di
uscita ( possono comandare un carico), e le altre linee sono
ingressi ( possono accettare [Read/Leggere] un segnale
esterno).
NA – L2
http://www.mrscuole.net/anxapic/
21
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
La programmazione dei PIC
Nicola Amoroso
[email protected]
NA – L3
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il softw are per il PIC
•
Come per qualsiasi sistema a microprocessore, anche per il PIC è
necessario preparare un programma per farlo funzionare.
•
Un programma è costituito da una sequenza di instruzioni, ognuna
delle quali identifica univocamente una funzione che il PIC deve
svolgere. Ogni istruzione è rappresentata da un codice operativo (in
inglese operation code o più brevemente opcode) composto da 14 bit
ed è memorizzata in una locazione di memoria dell'area programma.
Tale memoria nel PIC16F877 è di tipo EEPROM e dispone di 8192
locazioni ognuna delle quali è in grado di contenere una sola
istruzione oppure una coppia istruzione/dato.
•
Questi codici, completamente privi di senso per un essere umano,
sono gli unici che il PIC è in grado di capire. Per fortuna esistono
alcuni strumenti che consentono di facilitare il compito al
programmatore rendendo le istruzioni più comprensibili.
NA – L3
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il software per il PIC – 1° modo
Il programma per il PIC si può scrivere in linguaggio assembly o
assembler , usando direttamente le 35 istruzioni riconosciute
dal microcontrollore.
Il “codice” si scrive come un file di testo . Esso viene convertito in
codice binario da un programma chiamato Assemblatore. Il file
creato contiene codici esadecimali e ha estensione . HEX
Per trasferire poi il file HEX nella memoria di programma del PIC
occorre un dispositivo chiamato Programmatore
Si usa un Personal Computer :
• per scrivere il testo del programma, con un editor di testi ( non
usando Word ! )
• per convertirlo in codice eseguibile, usando l’Assemblatore
• per scriverlo nel PIC, usando un Programmatore.
NA – L3
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il software per il PIC – 1° modo
La casa costruttrice Microchip fornisce un pacchetto integrato chiamato
MPLAB [Download gratuito => http://www.microchip.com].
Esso comprende :
MPLAB Editor : editor di testo per scrivere il testo del programma
MPASM : il compilatore che traduce il testo in codice eseguibile
(usando il codice esadecimale)
Il compilatore MPASM è liberamente usabile. Si scarica dal sito della
Microchip e si può usare indipendentemente dall’editor.
Lavorando in Assembler, la parte più difficile è il debug , cioè
l’eliminazione degli errori di programmazione. Esistono software di
simulazione, a pagamento in genere, che consentono di controllare il
funzionamento del programma
NA – L3
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
.asm Contiene il codice sorgente
in formato assembler.
.inc File header, intestazioni e defiizioni
hardware per il micro
.lst Contiene l’intero codice assembler
e varie informazioni di compilazione
.tre Albero di allocazione della
memoria.
.err File con errori di compilazione
e numeri di linea.
.hex File con il codice macchina, per la
programmazione del microcontrollore
NA – L3
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il software per il PIC – 1° modo
Esempio di file ASM
…
RestoreLoader
lfsr 0, buff
movlw UPPER Main
movwf t1+3
bcf STATUS, C
rrcf t1+3, F
movlw B'11110000'
iorwf t1+3, F
movlw HIGH Main
movwf t1+2
rrcf t1+2, F
movlw LOW Main
movwf t1
rrcf t1, F
MOVLF 0xEF, t1+1
lfsr 1, t1
MOVLF 0x04, count
rest_rep
movff POSTINC1, POSTINC0
decf count, F
bnz rest_rep
movlw 0xFF
movwf POSTINC0
movwf POSTINC0
movwf POSTINC0
NA – L3
; Construct instructions in buff
; Upper byte of address to main
; Clear carry bit
; Rotate through carry
; Second word in goto must start with F.
; High byte of address to main.
; Low byte of address to main
; High byte in first word is EF
; two last nop
;
;
; buff should now contain 8 bytes :
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Set istruzioni PIC16F84 - 877
Sintassi
Descrizione Microchip
Operazione equivalente
ADDLW k
Add Literal and W
ADDWF f,d
Add W and f
ANDLW k
AND Literal with W
ANDWF f,d
AND W with f
BCF f,b
Bit Clear f
BFS f,b
Bit Set f
BTFSC f,b
Bit Test f, Skip if Clear
BTFSS f,b
Bit Test f, skip if Set
CALL k
Subroutine Call
CLRF f
Clear f
CLRW
Clear W Register
CLRWDT
Clear Watchdog Timer
W=W+ k
d = W + f (dove d può essere W o f)
W = W AND k
d = W AND f (dove d può essere W o f)
f(b) = 0
f(b) = 1
f(b) = 0 ? Si, salta una istruzione
f(b) = 1 ? Si, salta una istruzione
Chiama la subroutine all'indirizzo k
f=0
W= 0
Watchdog timer = 0
NA – L3
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
DECF f,d
Decrement f
d = f -1 (dove d può essere W o f)
DECFSZ f,d
Decrement f, Skip if 0
d = f -1 (dove d può essere W o f) se d = 0 salta
GOTO k
Go to address
Salta all'indirizzo k
INCF f,d
Increment f
d = f +1 (dove d può essere W o f)
INCFSZ f,d
Increment f, Skip if 0
d = f +1 (dove d può essere W o f) se d = 0 salta
IORLW k
Inclusive OR Literal with W
W = W OR k
IORWF f,d
Inclusive OR W with f
d = f OR W (dove d può essere W o f)
MOVLW k
Move literal to W
W=k
MOVF f,d
Move f
d = f (dove d può essere W o f)
MOVWF f
Move W to f
f=W
NOP
No Operation
Nessuna operazione
OPTION
Load Option Register
OPTION = W
RETIE
Return from Interrupt
Ritorna da un interrupt handler
RETLW k
Return Literal to W
Ritorna da una subroutine con W = k
RETURN
Return from Subroutine
Ritorna da una subroutine
RLF f,d
Rotale Left f through Carry
d = f << 1 (dove d può essere W o f)
NA – L3
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Set istruzioni PIC16F84 - 877
RLF f,d
Rotale Left f through Carry
RRF f,d
Rotale Right f through Carry
SLEEP
Go into Standby Mode
SUBLW k
Subtract W from Literal
SUBWF f,d
Subtract W from f
SWAPF f
Swap f
TRIS f
Load TRIS Register
XORLW k
Exclusive OR Literal with W
XORWF f,d
Exclusive OR W with f
NA – L3
d = f << 1 (dove d può essere W o f)
d = f >> 1 (dove d può essere W o f)
Mette in standby il PIC
W= k - W
d = f - W (dove d può essere W o f)
f = Swap dei bit 0123 con 4567 di f
TRIS di f = W
W = W XOR k
d = f XOR W (dove d può essere
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il software per il PIC – 2° modo
Il programma per il PIC si può scrivere usando un Compilatore ad alto
livello , ossia un software che usa istruzioni a livello più elevato , per
velocizzare e facilitare la stesura del programma .
Il Compilatore può essere
• in linguaggio BASIC ( ad esempio il PicBasic)
• in linguaggio C
• di tipo grafico, ossia che usa simboli grafici al posto delle istruzioni. Ad
esempio usa il simbolo di una porta AND al posto dell’istruzione
assembler equivalente . Due esempi di compilatori grafici sono il Visual
Parsic e il Proton+.
I compilatori devono essere acquistati ; i più semplici in Basic o C sono
a basso costo o anche freeware. Alcuni compilatori, come il Proton+,
offrono delle versioni di prova dette Lite , cioè con funzioni limitate .
NA – L3
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il software per il PIC – 2° modo
NA – L3
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il sistema di sviluppo CCS PCWH
NA – L3
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Programmazione dei PIC
Esempio di file HEX
:1000000008308A00C92D0000FF00030E8301A10003
:100010000A08A0008A010408A2007708A300780853
:10002000A4007908A5007A08A6007B08A70083131E
:1000300083128B1E1D280B1936288C308400801EDD
:1000400023288C1A3928220884002308F700240862
:10005000F8002508F9002608FA002708FB00200808
:100060008A00210E8300FF0E7F0E09008A110A12FA
:10007000E4288A110A1287280A108A100A118207B6
:1000800020344D34413441345234533420345334C9
:1000900054344134523454345534503420344D3473
....................
:103F10008A1525308316B0000A128A1183120426EE
:103F20000A168A1501308316B0000A128A1183120C
:103F300004260A168A1583162B08B0000A128A1165
:103F4000831204260A168A1523308316B0000A123B
:103F50008A11831204260A168A15AE2F8A150A12B0
:103F6000B12E0A148A140A158207FE2CFE2CFE2C90
:023F7000FE2C25
:02400E00323F3F
:00000001FF
;PIC16F876
NA – L3
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Programmazione del PIC
La famiglia PIC16F8X , che comprende il 16F84, il 16F877
ecc. , può essere programmata :
• separatamente, con un Programmatore
• direttamente, mentre si trova già montato nel circuito
finale , aggiungendo nello schema del progetto un adatto
connettore in più ( programmazione in-circuit)
Dato che il PIC ha una memoria Flash di programma,
sono possibili veloci variazioni o aggiornamenti del
codice programma.
NA – L3
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Programmazione del PIC
Dopo aver scritto il programma , cioè il codice sorgente, lo si
compila: viene creato un file oggetto con estensione .HEX, il quale
deve essere caricato nella memoria di programma del PIC.
Per caricare il file .HEX nella memoria programma del PIC occorre:
• Un personal computer
• Un programmatore
• Il software di gestione del programmatore
NA – L3
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il primo esercizio => Blinking Led
Led lampeggiante che si accende e si spegne ogni mezzo secondo
Punti fongamentali per:
Analisi, progettazione e stesura del software
•Analisi e stesura per punti cronologici del
problema
•Flow – Charts          
•Scrittura del codice
NA – L3
http://www.mrscuole.net/anxapic/
16
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi della soubroutine di ritardo di 500 ms
Il concetto è molto semplice: il microcontrollore deve aspettare 500 ms “senza compiere alcuna
operazione attiva”.
Ad esempio se il controllore 
1.
Decrementa il contenuto di un registro (1 µs)
2.
Torna a 1. se il contenuto del registro è <> 0 [Confronto] (2 µs)
In totale avremo un tempo di esecuzione pari a 3 µs. Se ripetiamo questa operazione per 167.000 volte avremo
un tempo di esecuzione pari a 501.000 µs cioè circa 500 ms
Il nostro controllore possiede registri ad 8 bit allora possiamo sfruttare la seguente logica sfruttando 2 registri ad 8 bit e
ricordando che i registri sono ciclici cioè 00 - 1= FF 
1.
Riserviamo due registri (delayL e delayH); set delayL  0 e delayH  0
2.
Decrement delayL
3.
se delayL ≠ 0 jump 2. else 4.
4.
questa operazione viene ripetuta per FF
5.
(256) volte cioè per
6.
4. Decrement delayH
7.
se delayH ≠ 0 jump 2. else 6.
8.
questa operazione viene ripetuta per FF
9.
(256) volte cioè per
1 µs

2 µs
256 x 3 = 768 µs
1 µs

2 µs
256 x 3 = 768 µs
Considerando che i due cicli sono “annidati” avremo che i due registri tornano ambedue a zero dopo un tempo
pari a 768 x 768 = 589. 824 µs cioè quasi 500 ms.
Fine Routine  Return
NA – L3
http://www.mrscuole.net/anxapic/
17
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi della soubroutine di ritardo di 500 ms -> Flow Chart
Il concetto è molto semplice: il microcontrollore deve aspettare 500 ms “senza compiere
alcuna
operazione attiva”.
Ad esempio se il controllore 
•
Decrementa il contenuto di un registro (1 µs)
•
Torna a 1. se il contenuto del registro è <> 0 [Confronto] (2 µs)
In totale avremo un tempo di esecuzione pari a 3 µs. Se ripetiamo questa operazione per
167.000 volte avremo un tempo di esecuzione pari a 501.000 µs cioè circa 500 ms
Il nostro controllore possiede registri ad 8 bit allora possiamo sfruttare la seguente logica sfruttando
2 registri ad 8 bit e ricordando che i registri sono ciclici cioè 00 - 1= FF 
1.
Riserviamo due registri (delayL e delayH); set delayL  0 e delayH  0
2.
Decrement delayL
3.
se delayL ≠ 0 jump 2. else 4. 2 µs
4.
questa operazione viene ripetuta per FF
5.
(256) volte cioè per
6.
Decrement delayH
7.
se delayH ≠ 0 jump 2. else 6.
8.
questa operazione viene ripetuta per FF
9.
(256) volte cioè per
1 µs

256 x 3 = 768 µs
1 µs

2 µs
256 x 3 = 768 µs
Considerando che i due cicli sono “annidati” avremo che i due registri tornano ambedue a
zero dopo un tempo pari a 768 x 768 = 589. 824 µs cioè quasi 500 ms.
Fine Routine  Return
NA – L3
http://www.mrscuole.net/anxapic/
18
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Il Listato completo
;***********************************************************
;Led blinking -> ON/OFF ogni 500 ms
;Led collegato su RB0
;N.A. October 2004
;********************************************
PROCESSOR
16F877A ;Direttive preprocessore
RADIX
DEC
INCLUDE
"P16F877A.INC"
ERRORLEVEL -302
__CONFIG
3FF1H
LED EQU 0
;Bit 1 della porta relativa
Spegni
ORG 20h
;Registro general purpose
bcf PORTB,LED ;Spengo il led
ram RES 2
;Riservo due registri a 8 bit
ORG 00H
;Start reset vector
goto loop ;Jump a Loop
bcf STATUS,RP1
;Scelgo il Bank 1
bsf STATUS,RP0
;RP1=0 RP0=1
Delay500
;Sobroutine di ritardo
movlw 00111111B ;Bit PORTA come input
movwf TRISA
movlw 11111110B
;Bit1 PORTB in Out
movwf TRISB
;gli altri bit in input
bcf STATUS,RP0
;Torno al Bank0
bsf PORTB,LED
;Accendo il Led
Loop ; Label
call Delay500 ;Delay 500 ms
btfsc PORTB,LED ;Spengo il led
goto Spegni ;se è acceso
bsf PORTB,LED ;Accendo il led
goto loop ;Jump a Loop
NA – L3
Clrf ram
Clrf ram+1
;Azzero i due registri
;riservati
Ciclo_di_ritardo
decfsz ram,1 ;Decremento il registro ram
goto Ciclo_di_ritardo ;per 256 volte
decfsz ram+1,1 ;Decremento il registro ram +1
goto Ciclo_di_ritardo ;per 256 volte
return ;Fine soubroutine
END
;Indispensabile alla fine del listato
http://www.mrscuole.net/anxapic/
19
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  Direttive
Le direttive non sono delle istruzioni mnemoniche che il compilatore
traduce nel rispettivo opcode, ma delle semplici indicazioni rivolte al
compilatore per determinarne il funzionamento durante la compilazione
PROCESSOR 16F877
PROCESSOR è una direttiva del compilatore assembler che consente di
definire per quale microprocessore è stato scritto il nostro source. In questo caso
informiamo il compilatore che le istruzioni che abbiamo inserito nel nostro
source sono relative ad un PIC16F877
RADIX DEC
La direttiva RADIX serve ad informare il compilatore che i numeri riportati
senza notazione, sono da intendersi come numeri decimali
ORG 00H
Questa seconda direttiva fa riferimento ad un indirizzo in area programma nella
EEPROM. Da questo punto in poi andremo infatti ad inserire le istruzioni
mnemoniche che il compilatore dovrà convertire negli opportuni opcode per il
PIC.
Il primo opcode eseguito dal PIC dopo il reset è quello memorizzato nella
locazione 0, da qui il valore 00H inserito nella ORG.
NA – L3
http://www.mrscuole.net/anxapic/
20
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  Direttive
La direttiva EQU (parola riservata)è molto importante in quanto ci consente di definire delle
costanti simboliche all'interno del nostro codice sorgente. In particolare :
LED EQU 3
la parola LED (nome scelto da noi) da questo punto in poi nel sorgente sarà equivalente al valore 3
Nel prossimo esempio incontriamo una (label)etichetta : RAM e una direttiva: RES.
La direttiva RES indica al compilatore che intendiamo riservare un certo numero di byte o meglio di
file register all'interno dell'area dati:
ORG 20h
ram RES
2
in questo caso verranno riservate la locazione 20H e 21H .
La label RAM, dove RAM è un nome scelto da noi, è un marcatore che nel resto del codice sorgente
assumerà il valore dell'indirizzo in cui è stato inserito.
ORG 00H
Questa seconda direttiva ORG fà riferimento ad un indirizzo in area programma (nella EEPROM)
anzichè in area dati.
Da questo punto in poi andremo infatti ad inserire le istruzioni mnemoniche che il compilatore dovrà
convertire negli opportuni opcode per il PIC.
NA – L3
http://www.mrscuole.net/anxapic/
21
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
•
Il primo opcode eseguito dal PIC dopo il reset è quello memorizzato nella locazione 0, da qui il valore
00H inserito nella ORG.
bsf STATUS,RP0
Ecco finalmente la prima istruzione mnemonica completa di parametri.
•
I PIC hanno una CPU interna di tipo RISC per cui ogni istruzione occupa una sola locazione di memoria,
opcode e parametri inclusi. In questo caso l'istruzione mnemonica bsf sta per BIT SET FILE REGISTER
ovvero metti a uno (condizione logica alta) uno dei bit contenuti nella locazione di ram specificata.
•
Il parametro STATUS viene definito nel file P16F877A.INC tramite una direttiva EQU. Il valore assegnato
in questo file è 03H e corrisponde ad un file register (ovvero una locazione ram nell'area dati) riservato.
•
Anche il parametro RP0 viene definito nel file P16F877A.INC con valore 05H e corrisponde al
numero del bit che si vuole mettere a uno. Ogni file register è lungo 8 bit e la numerazione di
ciascuno parte da 0 (bit meno significativo) fino ad arrivare a 7 (bit più significativo)
•
Questa istruzione in pratica mette a 1 il quinto bit del file register STATUS, è necessaria per accedere ai
file register TRISA e TRISB come vedremo ora.
movlw 00011111B
•
Questa istruzione sta a significare: MOVE LITERAL TO W REGISTER ovvero muovi un valore costante
nell'accumulatore. L'accumulatore è un particolare registro utilizzato dalla CPU in tutte quelle situazioni in
cui vengono effettuate operazioni tra due valori oppure in operazioni di spostamento tra locazioni di
memoria. In pratica è un registro di appoggio utilizzato dalla CPU per memorizzare temporaneamente un
byte ogni volta che se ne presenta la necessità.
•
Il valore costante da memorizzare nell'accumulatore è 00011111B ovvero un valore binario a 8 bit dove il bit più a
destra rappresenta il bit 0 o bit meno significativo.
NA – L3
http://www.mrscuole.net/anxapic/
22
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
Nell'istruzione successiva:
movwf TRISA
•
il valore 00011111 viene memorizzato nel registro TRISA (come per il registro
STATUS anche TRISA è definito tramite una direttiva EQU) la cui funzione è
quella di definire il funzionamento di ogni linea di I/O della porta A. In
particolare ogni bit ad uno del registro TRISA determina un ingresso sulla
rispettiva linea della porta A mentre ogni 0 determina un'uscita.
Nella seguente tabella viene riportata la configurazione che
assumeranno i pin del PIC dopo l'esecuzione di questa istruzione:
Come è possibile vedere i bit
6 e 7 non corrispondono a
nessuna linea di I/O e quindi
il loro valore non ha alcuna
influenza.
NA – L3
http://www.mrscuole.net/anxapic/
23
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
Le due istruzioni successive svolgono le stesse funzioni per la porta B del PIC:
movlw 11111110B
Movwf TRISB
in questo caso la definizione delle linee sarà la seguente:
L'istruzione movwf TRISB trasferisce il
valore contenuto nell'accumulatore
(inizializzato
opportunamente
con
l'istruzione movlw 11111110 B) nel
registro TRISB. Il significato di movwf
è infatti MOVE W TO FILE
REGISTER.
Si noti come il valore 0 nel bit 0 del registro TRISB
determini la configurazione in uscita della rispettiva linea
del PIC.
Nella nostra applicazione infatti questa linea viene utilizzata
per pilotare il LED da far lampeggiare.
NA – L3
http://www.mrscuole.net/anxapic/
24
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
bcf STATUS,RP0
•
Questa istruzione è simile alla bsf vista in precedenza, con la sola differenza che azzera il bit
anzichè metterlo a uno. La sigla un questo caso è BIT CLEAR FILE REGISTER.
•
Dal punto di vista funzionale questa istruzione è stata inserita per consentire l'accesso ai
registri interni del banco 0 anzichè ai registri interni del banco 1 di cui fanno parte TRISA e
TRISB.
N.B:=> La direttiva assembler “BankSel …..” Viene oggi suggerita dalla microchip per la
selezione dei registri dei rispettivi banchi di memoria; in seguito vedremo un uso appropriato
di questa direttiva.
bsf PORTB,LED
•
Con questa istruzione viene effettuata la prima operazione che ha qualche riscontro
all'esterno del PIC. In particolare viene acceso il led collegato alla linea RB0.
PORTB è una costante definita in P16F877A.INC e consente di referenziare il file
register corrispondente alle linee di I/O della porta B mentre LED è il numero della
linea da mettere a 1. All'inizio del source la costante LED è stata definita pari a 0,
quindi la linea interessata sarà RB0.
NA – L3
http://www.mrscuole.net/anxapic/
25
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
Loop
•
Questa linea contiene una label ovvero un riferimento simbolico ad un indirizzo di memoria. Il valore della
label, come detto in precedenza, viene calcolato in fase di compilazione in base al numero di istruzioni, alle
direttive ORG e alle altre istruzione che in qualche modo allocano spazio nella memoria del PIC. In questo
caso, se contiamo le istruzioni inserite a partire dall'ultima direttiva ORG possiamo calcolare il valore che
verrà assegnato a MainLoop ovvero 09H.
•
In realtà il valore che assumono le label non ha molta importanza in quanto il loro scopo è proprio quello di
evitare di dover conoscere la posizione precisa degli opcode nella memoria del PIC permettendo comunque
di referenziare una determinata locazione di memoria.
•
In questo caso la label Loop viene utilizzata come punto di ingresso di un ciclo (dall'inglese Loop) di
accensione e spegnimento del led, ovvero una parte di codice che verrà ripetuta ciclicamente all'infinito.
call Delay500
•
•
Questa istruzione dermina una chiamata (dall'inglese call) ad una subroutine che inizia in corrispondenza
della label Delay.
Le subroutine sono delle parti di programma specializzare ad effettuare una funzione specifica. Ogni
qualvolta è necessaria quella funzione è sufficiente richiamarla con una sola istruzione, anzichè ripetere
ogni volta tutte le istruzioni necessarie ad effettuarla. In questo caso la subroutine inserisce un ritardo pari
al tempo di accensione e spegnimento del led.
NA – L3
http://www.mrscuole.net/anxapic/
26
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  OpCode
btfsc PORTB,LED
•
Il significato di questa istruzione è BIT TEST FLAG, SKIP IF CLEAR ovvero controlla lo stato di un bit all'interno di un
registro e salta l'istruzione successiva se il valore di tale bit è zero. Il bit da controllare corrisponde alla linea di uscita cui è
collegato il diodo led, tramite questo test potremo determinare quindi se il led è acceso o spento e quindi agire di
conseguenza, ovvero se il led è gia acceso lo spegneremo, se il led è spento lo accenderemo.
goto Spegni
•
Questa istruzione è un salto incondizionato (dall'inglese GO TO, vai a)alla label SetToZero dove troveremo le istruzioni per
spegnere il led. Questa istruzione verrà saltata dall'istruzione successiva se il led è gia spento.
bsf PORTB,LED
goto Loop
•
Queste due istruzioni semplicemente accendono il led e rimandano il programma all'ingresso del ciclo di lampeggiamento.
Spegni
bcf PORTB,LED
goto Loop
•
Queste istruzioni semplicemente spengono il led e rimandano il programma all'ingresso del ciclo di lampeggiamento.
NA – L3
http://www.mrscuole.net/anxapic/
27
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  La soubroutine Delay
•
Come descritto in precedenza questa subroutine inserisce un ritardo di circa un secondo e può essere
chiamata più volte nel source tramite l'istruzione call Delay.
La soubroutine di ritardo
Delay500
clrf ram
clrf ram+1
Ciclo_di_ritardo
decfsz ram,1
goto Ciclo_di_ritardo
decfsz ram+1,1
goto Ciclo_di_ritardo
return
END
Delay e Ciclo_di_ritardo sono due label.
Delay identifica l'indirizzo di inizio della subroutine e
viene utilizzato per le chiamate dal corpo principale del
programma.
Ciclo_di_ritardo viene chiamato internamente dalla
subrountine e serve come punto di ingresso per il ciclo
(dall'inglese loop) di ritardo. In pratica il ritardo viene
ottenuto eseguendo migliaia di istruzioni che non fanno
nulla !
Questo tipo di ritardo si chiama ritardo software o ritardo a programma. E' il tipo di ritardo più semplice da
implementare e può essere utilizzato quando non è richiesto che il PIC esegua altri compiti mentre esegue
il ritardo.
NA – L3
http://www.mrscuole.net/anxapic/
28
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  La soubroutine Delay
La soubroutine di ritardo
•
Delay500
clrf ram
clrf ram+1
Ciclo_di_ritardo
decfsz ram,1
goto Ciclo_di_ritardo
decfsz ram+1,1
goto Ciclo_di_ritardo
return
END
•
Clrf ram
clrf ram +1
CLEAR FILE REGISTER azzerano le due
locazioni di ram riservate precedentemente con
l'istruzione: ram RES 2
Queste due locazioni sono adiacenti a partire
dall'indirizzo referenziato dalla label ram (in
pratica 20H e 21H
decfsz ram,1
•
L'istruzione significa DECREMENT FILE
REGISTER, SKIP IF ZERO ovvero decrementa il
contenuto di un registro (in questo caso Count e
salta l'istruzione successiva se il valore raggiunto
è zero). Se il valore raggiunto non è zero viene
eseguita l'istruzione successiva:
goto Ciclo_di_ritardo
•
NA – L3
Che rimanda rimanda l'esecuzione all'inizio del
ciclo di ritardo.
http://www.mrscuole.net/anxapic/
29
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Analisi del listato  La soubroutine Delay
La soubroutine di ritardo
Delay500
clrf ram
clrf ram+1
Ciclo_di_ritardo
decfsz ram,1
goto Ciclo_di_ritardo
decfsz ram+1,1
goto Ciclo_di_ritardo
return
END
•
•
Una volta raggiunto lo zero con il contatore ram
vengono eseguite le istruzioni:
decfsz ram+1,1
goto Ciclo_di_ritardo
Che decremetano il registro seguente fino a che anche
questo raggiunge lo zero. Il registro ram+1 in
particolare verrà decrementato di uno ogni 256
decrementi di ram.
Quando anche ram +1 avrà raggiunto lo zero l'istruzione:
return
•
il cui significato è RETURN FROM SUBROUTINE
determinerà l'uscita dalla routine di ritardo ed il
proseguimento
dell'esecuzione
dall'istruzione
successiva la call Delay.
Per finire END è una direttiva (indispensabile)
che indica al compilatore la fine del source
assembler.
NA – L3
http://www.mrscuole.net/anxapic/
30
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Corso introduttivo sui
microcontrollori
A. S. 2007 – 2008
La programmazione dei PIC
Assembler: esempi - applicazioni
Nicola Amoroso
[email protected]
NA – L4
http://www.mrscuole.net/anxapic/
1
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Un programma in assembler è scritto come codice sorgente (un semplice file di
testo) su un normale PC, qualsiasi text-editor (es. notepad, blocco note di MS
Windows, etc…) può essere usato.
Il PIC development system software MPLAB (dowload gratuito su
http://www.microchip.com) contiene un editor di testo per la scrittura di codice.
Le istruzioni sono semplici e facilmente consultabili sul Data-Sheet del
microcontrollore PIC16F877 (Table 13-2); il codice scritto viene salvato con
estensione “*.ASM “ (Es. Led_Blinking.asm).
Il codice sorgente, in assembler, viene quindi “compilato” (convertito in
linguaggio macchina) mediante il compilatore MPASM (Gratuito e compreso in
MPLAB) che converte in binario il codice sorgente (visibile con un editor
esadecimale – Hex editor, come sequenza di numeri esadecimali). L’estensione di
questo file è “*.HEX” (Es. Led_Blanking.hex).
Mediante un opportuno programmatore (opportunamente interfacciato al PC),
questo “codice binario” viene memorizzato nella FLASH PROGRAM MEMORY
del controllore.
NA – L4
http://www.mrscuole.net/anxapic/
2
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
:1000000008308A00C92D0000FF00030E8301A10003
:100010000A08A0008A010408A2007708A300780853
:10002000A4007908A5007A08A6007B08A70083131E
:1000300083128B1E1D280B1936288C308400801EDD
:1000400023288C1A3928220884002308F700240862
:10005000F8002508F9002608FA002708FB00200808
:100060008A00210E8300FF0E7F0E09008A110A12FA
:10007000E4288A110A1287280A108A100A118207B6
:1000800020344D34413441345234533420345334C9
:1000900054344134523454345534503420344D3473
....................
:103F10008A1525308316B0000A128A1183120426EE
:103F20000A168A1501308316B0000A128A1183120C
.....................
:103F6000B12E0A148A140A158207FE2CFE2CFE2C90
:023F7000FE2C25
:02400E00323F3F
:00000001FF
;PIC16F876
NA – L4
Esempio file assembler *************
;Led blinking -> ON/OFF ogni 500 ms
;Led collegato su RB0
;N.A. October 2004
;********************************************
;**************
Esempio di file HEX
PROCESSOR
16F877A ;Direttive preprocessore
RADIX
DEC
INCLUDE
"P16F877A.INC"
ERRORLEVEL
-302
__CONFIG
3FF1H
LED EQU 0
;Bit 1 della porta relativa
ORG 20h
;Registro general purpose
ram RES 2
;Riservo due registri a 8 bit
ORG 00H
;Start reset vector
bcf STATUS,RP1
;Scelgo il Bank 1
bsf STATUS,RP0
;RP1=0 RP0=1
movlw 00111111B
;Bit PORTA come input
movwf TRISA
movlw 11111110B
;Bit1 PORTB in Out
movwf TRISB
;gli altri bit in input
bcf STATUS,RP0
;Torno al Bank0
bsf PORTB,LED
;Accendo il Led
Loop ; Label
call Delay
;Delay 500 ms
btfsc PORTB,LED ;Spengo il led
goto Spegni ;se è acceso
bsf PORTB,LED ;Accendo il led
goto loop ;Jump a Loop
http://www.mrscuole.net/anxapic/
3
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Dopo aver scritto il programma , cioè il codice sorgente, lo si
compila: viene creato un file oggetto con estensione .HEX, il quale
deve essere caricato nella memoria di programma del PIC.
Per caricare il file .HEX nella memoria programma del PIC occorre:
• Un personal computer
• Un programmatore
• Il software di gestione del programmatore
NA – L4
http://www.mrscuole.net/anxapic/
4
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La Demo-Board “AnxaPic3”
Pull-Up [A4-B5-B4-B2-B1-B0]
10
1
2
21
20
3
23
4
5
19
18
6
23
17
7
16
8
15
6
14
13
10
21
NA – L4
20
9
12
11
22
22
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
LCD Display
LCD Contrasto – Luminosità
Cicalino
Alimentazione 9-12 Vcc
Power ON-OFF
ICD2 - PicKit2 Programmer
RS232 Com
EEPROM
Cicalino Pin select
Pull-Up [A4-B5-B4-B2-B1-B0]
I2C Conn
1-Wire Conn
Tastierino 4x4 Conn
Expansion-Replicate PORT
Expansion BUS Conn
RTC Conn
ADC Pot
RB0 Interrupt Sw
Reset Sw
Display Pin Select
I2C Pull-Up
RS232 Rx-Tx En/Dis
[RA0 ADC – LD1] ON/OFF
http://www.mrscuole.net/anxapic/
5
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La Demo-Board AnxaPic3
NA – L4
[Schema elettrico]
http://www.mrscuole.net/anxapic/
6
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
PIC Software
Il sistema integrato “MPLAB IDE” è il mezzo più efficace per lavorare con i
microcontrollori PIC.
MPLAB viene eseguito su un PC, quando il codice è scritto e compilato, il
funzionamento dello stesso può essere “simulato” e “verificato” all’interno di
MPLAB stesso, successivamente il programma può essere memorizzato nella
Flash Memory Program del controllore mediante opportuno programmatore
collegato (USB/RS232C/PARALLEL) con un PC.
Uno degli strumenti più utili e
versatili, per programmare il PIC,
è l’ICD (In Circuit Debugger) Programmer che permette di
programmare oppure effettuare il
Debug (verifica codice step by
step) in modo diretto mediante
l’ausilio
del
collegamento
“USB/RS232C” con un PC e i
PIN RB6 e RB7 del controllore.
NA – L4
http://www.mrscuole.net/anxapic/
7
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Il sistema integrato MPLAB IDE ha un text-editor incluso per
la scrittura del codice; può essere scaricato gratuitamente dal
sito della Microchip [http://www.mcrochip.com]
NA – L4
http://www.mrscuole.net/anxapic/
8
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
MPLAB è un “sistema integrato” che permette di creare e sviluppare un programma
con estrema facilità. Lo si può descrivere come uno ambiente di sviluppo (IDE) per un
determinato linguaggio standard necessario per programmare un Microcontrollore
Microchip. Non occore eseguire funzioni mediante riga di comando ma tale ambiente
di sviluppo è in grado di supportare l’operatore in tutte le fasi, dalla scrittura del
codice fino alla simulazione e anche fino alla fase di emulazione con opportuno hw.
Creazione di un progetto
La preparazione del programma da caricare nel
microcontrollore richiede i seguenti passi:
1. Creare un progetto
2. Scrivere il programma
3. Convertirlo in binario (compilare)
La prima schermata dopo l’apertura di MPLAB
NA – L4
http://www.mrscuole.net/anxapic/
9
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creazione di un progetto: Creare un nuovo progetto
Cliccare su PROJECT e successivamente su
PROJECT WIZARD
NA – L4
sarà aperta la seguente finestra.
Cliccare su NEXT per continuare
http://www.mrscuole.net/anxapic/
10
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo progetto
Occorre adesso scegliere l’appropriato
microcontrollore della famiglia PIC. Nella
seguente
videata
viene
scelto
il
PIC16F84A.
N.B: => Noi lavoreremo sempre con i PIC
16F877/16F877A
Scegliere il microcontrollore appropriato.
Cliccare su NEXT per continuare
NA – L4
http://www.mrscuole.net/anxapic/
11
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo progetto
Il passo successivo consiste nel definire il
linguaggio che si intende utilizzare per la
programmazione. Se useremo il linguaggio
assembler,
occorre
selezionare
l’opzione
“Microchip MPASM Toolsuite”
Selezionare il corretto “language toolsuite”
Cliccare su NEXT per continuare
NA – L4
Indichiamo il nome del progetto e il percorso. Il
nome dovrebbe riflettere lo scopo e il contenuto
del programma
Nome del progetto.
Cliccare su NEXT per continuare
http://www.mrscuole.net/anxapic/
12
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo progetto
si aprirà la finestra “summary” contenente i parametri precedentemente definiti
Cliccare FINISH per creare il progetto
NA – L4
http://www.mrscuole.net/anxapic/
13
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Scrivere il programma: Creare un nuovo file in assembler
Dopo aver creato il progetto mediante il wizard
apparirà la seguente schermata.
Adesso dobbiamo scrivere il programma,
questa operazione richiede ulteriori file da
dover creare/aprire e aggiungere al progetto.
Cliccare su FILE > NEW, si aprirà una
nuova finestra all’interno della working
area di MPLAB (La nuova finestra conterrà
il programma che si dovrà scrivere). Dopo
aver aperto il nuovo file dobbiamo salvarlo
(è buona regola), useremo il solito percorso
in cui è salvato l’intero progetto, ed il nome
del file sarà “Blink.asm", questo è un nome
che ci permetterà di ricordare la natura del
programma (ad esempio lampeggio di un
diodo led collegato sul pin RD3 della porta
D del microcontrollore della DemoBoard
AnxaPIC).
NA – L4
http://www.mrscuole.net/anxapic/
14
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo file in assembler
Per includere un nuovo file al progetto.
Premere il tasto
destro del mouse
sul “source file”
nella finestra di
progetto.
Si apre una nuova ‘browse window’ cerchiamo la
nostra cartella di progetto e selezioniamo il file
".asm", da aggiungere al progetto..
Questo aprirà una
piccola
finestra
con due opzioni.
Scegliamo: "Add
Files"
Inserimento di un nuovo file Assembler nel progetto. I
nomi di file e progetto sono puramente indicativi.
NA – L4
Inserimento di un nuovo file Assembler nel progetto.
N.B. => Nomi puramente indicativi!
http://www.mrscuole.net/anxapic/
15
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo file in assembler
Scriviamo nella finestra di editor il codice “assembler” per il
nostro programma.
La fnestra di progetto dopo
aver aggiunto il file assembler.
NA – L4
; Anxa3 Led Blinking
; BLINK.ASM
; ------------------------------------------------; LED ON-OFF con ritardo di circa 500 ms
; Il led è collegato su RD3
; ------------------------------------------------; Hardware => AnxaPic3 v3.0 rA
; Processor => Pic16F877
; Clock => 10 MHz
; ------------------------------------------------;
(C)N.A. August 2007
;**************************************************
PROCESSOR
16F877
RADIX
DEC
;
INCLUDE
"P16F877.INC"
; --- Setup of PIC config fuses
……………………………………………………..
http://www.mrscuole.net/anxapic/
16
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Creare un nuovo file in assembler
La fnestra di editor può essere personalizzata con numeri di riga e altro => [Edit > Properties …]
NA – L4
http://www.mrscuole.net/anxapic/
17
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Compilare il progetto: Creare un file .hex
Al termine della scrittura del programma nella finestra di
editor, dopo aver verificato la correttezza del codice scritto e
aver salvato il file con estensione “.asm”, siamo pronti a
compilare il progetto, per farlo andiamo su PROJECT ->
BUILD ALL; questo comando traduce il file assembler in un
file eseguibile in formato HEX (esadecimale). Apparirà una
finestra di log nella quale verrà indicato se la compilazione è
andata a buon fine. "BUILD SUCCEEDED" è un messaggio
che indica la corretta compilazione (nessun errore).
In caso di errori è possibile fare doppio click sul messaggio d’errore nella finestra di “Output”
ed automaticamente verrà mostrato il codice assembler esattamente alla linea dove si è incontrato
l’errore.
NA – L4
http://www.mrscuole.net/anxapic/
18
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Il simulatore software MPSIM
l simulatore è una parte dell’ambiente MPLAB il quale permette di avere una visione globale sul
comportamento del nostro programma per un determinato microcontrollore permettendoci di
verificare che il comportamento dello stesso sia corretto.
Mediante il simulatore possiamo monitorare il valore corrente delle variabili utilizzate, dei registri
e lo stato delle porte a livello di pin. Il valore aggiunto dato dal simulatore non è sempre costante
infatti dipende dal programma che stiamo simulando.
Se abbiamo un programma semplice (come questo da noi creato come esempio), la simulazione
non è così importante poichè portare il valore sul pin della porta D non è poi così difficile da
realizzare; diversamente si rivela uno strumento indispensabile nel caso di programmi più
complessi che magari contengano timers, oppure operazioni matematiche. La simulazione, così
come indicato dal nome, “simula l’operare di un microcontrollore”. Il simulatore esegue il
programma linea per linea ed evidenzia i valori dei registri e variabili del microcontrollore.
Dopo aver scritto il programma è buona norma simularlo per controllare di non aver commesso
errori o che quanto realizzato soddisfi i nostri obbiettivi, successivamente si può far girare
l’applicazione in un sistema reale.
La simulazione è un passo importante nella realizzione di un progetto con microcontrollori.
NA – L4
http://www.mrscuole.net/anxapic/
19
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Il simulatore software MPSIM
Per aprire il simulatore
cliccare su:
DEBUGGER > SELECT
TOOL > MPLAB SIM
Appariranno quattro nuove icone sulla destra. Sono
relative alla simulazione con il seguente significato
Una delle principali caratteristiche del simulatore è l’abilità di visualizzare lo stato dei registri
all’interno del microcontrollore. Questi vengono anche chiamati “special function registers”, ovvero
SFR. Possiamo visualizzarli cliccando su VIEW > SPECIAL FUNCTION REGISTERS.
Oltre agli SFR, è utile dare uno sguardo nei file registers. La rispettiva finestr può essere aperta
cliccando su VIEW > FILE REGISTERS.
Inoltre se il programma contiene delle variabili può essere interessante monitorarle. Ciascuna
variabile viene visualizzata in una finestra (Watch Windows) cliccando su VIEW > WATCH.
NA – L4
http://www.mrscuole.net/anxapic/
20
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Il simulatore software MPSIM
NA – L4
http://www.mrscuole.net/anxapic/
21
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Il simulatore software MPSIM
Quando tutte le variabili e registri di nostro interesse sono visibili nella workarea, possiamo iniziare
la simulazione.
La prima cosa da fare è il reset del microcontrollore mediante il comando DEBUGGER >
RESET oppure cliccando sulla icona di reset. Verrà evidenziata una freccia in verde a sinistra
della prima linea del grogramma, e il program counter PCL verrà resettato a zero, questo
può essere visto nella finestra dei registri (Special Functions Registers window).
Possiamo impartire il comando Step Into oppure Step Over, a seconda se si vogliano eseguire o
meno step by step le subroutine. I medesimi comandi possono essere impartiti da tastiera mediante
i tasti F7 o F8.
Nella finestra SFR, Si può osservare come i vari registri cambiano i rispettivi valori al variare delle
righe di codice e di come il registro W immagazzini e trasferisca i rispettivi valori alla porta D (in
questo esempio di Led ON-OFF su RD3).
Durante la simulazione evitare di entrare nelle routine di “delay” in quanto in queste routine i
registri interessati cambiano stato migliaia di volte e solo dopo lungo tempo si riesce ad eseguire
l’intera soubroutine, è sempre utile utilizzare step over (F8) nella fase di simulazione (Spesso le
routine di ritardo vengono disabilitate nella simulazione).
NA – L4
http://www.mrscuole.net/anxapic/
22
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
MPLAB e Proteus VSM
Proteus VSM (Virtual System Modelling – Labcenter Electronics UK) è uno dei sistemi più
avanzati per la simulazione di circuiti digitali-analogici comprendenti microcontrollori; è l’unico,
sino ad oggi, ad avere un larghissimo range di modelli software per microcontrollori.
E’ possibile integrare Proteus VSM all’interno di MPLAB IDE è procedere con la simulazione in
modo più avanzato rispetto a quanto visto con il modulo MPSIM di Microchip.
Per lavorare con MPLAB IDE e Proteus VSM bisogna avere disponibile il software proteusmplabPlugin e installare lo stesso dopo aver installato MPLAB IDE.
Lo schema del circuito da simulare deve essere realizzato al di fuori di MPLAB con il modulo
“Isis” di proteus, non modificare il circuito originale all’interno di MPLAB è sempre buona norma
utilizzare “Isis” per realizzare e modificare gli schemi.
Caricare lo schema nel modulo Proteus in MPLAB mediante gli opportuni menu di Proteus.
Per il software del micro si procede come visto in precedenza: => Progetto -> Compilazione -> file
compilato; siamo a questo punto pronti per la simulazione, bisogna solo associare il file compilato
(.Hex) al microcontrollore dello schema (Vedasi mauale proteus VSM).
NA – L4
http://www.mrscuole.net/anxapic/
23
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
MPLAB e Proteus VSM
Per caricare e aprire il modulo PROTEUS VSM in MPLAB IDE selezionare il
menu: Debugger > Select Tool > Proteus VSM
NA – L4
http://www.mrscuole.net/anxapic/
24
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
MPLAB e Proteus VSM
Il modulo Proteus VSM in MPLAB IDE – Simulazione Visual con microcontrollori PIC
NA – L4
http://www.mrscuole.net/anxapic/
25
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
MPLAB e Proteus VSM
Il modulo Proteus VSM in MPLAB IDE – Simulazione Visual con microcontrollori PIC
NA – L4
http://www.mrscuole.net/anxapic/
26
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Programmare il PIC
Una volta che il programma è stato scritto, compilato e simulato possiamo passare alla
programmazione del PIC.
Innanzitutto bisogna selezionare il
tipo di programmatore di cui
disponiamo tra quelli elencati nel
menu Programmer
> Select
Una volta selezionato il programmatore
comparirà una nuova barra degli
strumenti, la barra degli strumenti del
programmatore:
Programmer
N.B. => L’Hardware necessario
viene installato con l’installazione
di MPLAB nel PC; in questo caso
si sceglie il programmatore
PicStart Plus della Microchip
NA – L4
Prima di eseguire la programmazione è
necessario configurare i bit riguardanti
il tipo di oscillatore e tutte le altre
opzioni attivabili del microcontrollore
(Watchdog timer ecc…)
http://www.mrscuole.net/anxapic/
27
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
La programmazione dei PIC
Il sistema di sviluppo MPLAB IDE
Programmare il PIC
Per fare questo basta sceglire nel menu
corrispondente, la voce: Configure >
Configuration Bits
N.B. => Spesso la configurazione del
controllore viene “settato” nel programma
che stiamo compilando, ad es. in assembler
vi è la direttiva “__Configure xxxxH. “ che
assolve a questo compito. Il valore
esadecimale
“xxxx”
è
un
numero
corrispondente ai fuses attivati
Comparirà quindi una finestra nella quale potremo
editare le varie voci
N.B. => In questo esempio il valore esadecimale
3F52 è il numero corrispondente alla
configurazione scelta.
La direttiva assembler __Configure sarà in
questo caso: __Configure 0x3F52
N.B. => Sul microcontrollore non finisce la versione salvata del programma compilato ma l’ultima
versione di cui è stato fatto il BUILD, MPLAB IDE darà comunque un messaggio di avvertimento a
riguardo nel caso in cui il programma sia stato modificato e non sia stato fatto il BUILD.
NA – L4
http://www.mrscuole.net/anxapic/
28
http://www.mrscuole.net/anxapic/
http://www.mrscuole.net/anxapic/
Scarica

Appunti di Sistemi 2