Programm azione:principi generali
Per pater uttlizzare molli àppàròLi "intelligenti" e necessario che siano programmòti
ar tnilizzsra :l monlin mnlti<<rma :nn:rar-'-v'" '
rhi:rrrre " intollinenti" e noro<<:rin nrnnr:m-
--.1^ À A^t+t ^,.-^tt -^rarati elettronicr di uti_| | ror rE. rvrvrLr vrLLUrr oPf
lizzo comune, ad esempio un videoregistra-trrrp nor rpni<tr:rp l: nn<tr: <orio T\/ nroforii:
oppure un gioco all'interno del nostro computer, o la
moltitudine degli apparati rntelligenti che abbiamointorno a noi, devono essere dotati di un programmaper poter eseguire le loro funzioni. Programmare non è
altro che indicare a un orocessore ouello che deve fare
n rrn linnrr:nnin rho nro<tn rnmnranrio l-ncì nrr:nÀnll ul I lrl l9uo99lw Ll lq 9uLJLv Lvr rrprL. ruL. !v)l 9uol luu
premiamo il tasto play del video, le istruzioni che sonostate fornite relative a quel tasto specifrco, mettono in
funzione il motore che trascrna la pellicola, leggono le
nformazroni che questa contiene, ecc.
A n:rtirp d::dpssn diventpremo rla semolici utiliz-, ' Y", .,,
--+^"i -l^ll- +^-^^l^^i- +^.i -L^.^-li--.^^4OtUt tuEilo LEL|tutuvto, a vrw9ro|iltroLv rLtrE rcdil//drr(,-^^r:--- ^^i ^^. ^ri -r+.i O ner noi stessi Per orteStO dOb_oPPilLO4 Ur il Ptrr 9il OrLr I
biamo strutturare il nostro pensiero e tradurlo in uno
dei molti linguaggi di programmazione esistenti. Un lin-
S*#*wwrs
' Chiedere chiave diaccesso all'utente.;--
.Leggere chiave.
'Girare la chiave.
. Se la chiave è giilstaaprire la porta.
.Se la chiave non ègiusta. ..
Le diverse fasi per la realizzazione di un programma
guaggio di programmazione è un insieme di regole,simboli e parole speciali per costruire un programma.
Come passo intermedio bisogna trasformare l'idea in
quello che viene chiamato pseudo-codice, che è la rap-presentazione del linguaggio che noi utilizziamo - il
Linguaggio Naturale - ìn forma strutturata. ll risultatofinale è il programma.
Yflffifl4sru#L*#XÉs *g $*&S$:
Un programma scritto in pseudo-codice deve servire dabase per la realizzazione del programma finale, quale
sia il linguaggio di programmazione che utilizzeremo.Per questo, in questa prima fase del programma, dob-biamo avere un'idea chiara di quello che il programma
stesso deve fare, per non generare errori di tipo logicoo semantico.
Una volta scelto il linguaggio di programmazione,
bisognerà conoscerlo per non commettere errori di tiposintattico. La conoscenza del programma è facile, basta
seguire le norme che lo regolano. Dovremo conoscerela struttura del programma nel suo linguaggio, i tipi di
dati che si possono ulilizzare e i loro possibili valori, l'in-sieme di istruzioni, la struttura di controllo, e tutte le
rnse rhe trt snipnhoromn srrrroq<irrampnttr nor lz rnrratru v I Jvrryr tq LUt tE(-
ta programmazione di Monty. ll nostro linguaggio sarà
l'Assembler, e sfateremo il tipico mito che sia uno deilinguaggi di programmazione piu difficili.
$?.R*S*Sîí *3 treài*ffi*ll primo caso e quello di un programma che funzionamale, però non presenta errori sintattici, ed è difficile
$*S$e*es$w€P
da risolvere; si
vede che fun-Aona male e
che non dà i
rr:lnri <norrii
però non indicadove c'è l'erro-re. ll nostro caso
è aggravato dal
fatto che si trat-ta or un pro-gramma chedeve funzionarecon un narowa-re, e non in unaÒmn||tér nor
cui l'errorepotrebbe nondinondorp del
cattrvo f u nzio-namento delprogramma, ma
da problemidell'hardwarecontrollato.Anrho <e l'a<no-
rienza f orn itaJ-ll- ^"-+:-- À l-udild prdLrLd c rd
migliore alleata;^ ^,,^-+i -^-ìil t vuc)U Ld)t,
noi drsponiamo
di strumenti che
ci facilitanonrra<tn lrrrnrn
Nella figurasono rappresen-+r+i ; ^-.-i ,-J-Lq Lr I vo))t uc
segurre quandoun progello, Fs<i nar ls raalízzszinna di._-,r-, ._ .- _, un progeftocome la pro-grammazionedel nostro microrobot, ha una parte software e una^-'+^ h-'!'^'-'^ | - !p<rrizinno di nnnrrnn di nrro<tiPdILE lldlUVVdlC. Ld ULJ!r r.rvrrs ut uyttUtru
passi verrà fatta nei fascrcoii seguenti. Osserviamo
attentamente le differenze dei testi all'interno dei ret-tangoli, e all'interno dei rombi. Le etichette dei dati, laforma di rappresentazione delle azioni, sono tutti datiessenziali al momento di proqrammare e che meritano,,^- ^-^;^- î ^-r+^u ro Pogil rd d pd r Lc.
Organigramma
Stesura delprogramma principale
Compìlazìone del
pf0gramma
Errore di
sintassi?
#Simulazione del
pr0gramma
Enore di
sintassi?
#Scrittura del
microprocessore
Prova con il sistema
di sviluppo
Problemi
hardware?
Monlaggio del
Problemi
hardware?
ffiMontaggio finale
:.:iiliì.:ìi::-:l
Strumenti di lavoro:i linguaggi di programm azione
La differenza fra il programmare con linguaggidi dlto livello o con uno dt basso livello, e analoga adagg i u sta re u no stru me nto el ettro n rco
cambiando i suoi pezzi o aggiustare i pezziche compongono quello strumento.
ome gia abbiamo spiegato nelle pagire pre-
cedenti, un linguaggto di programmazione è
rrn insieme di rcnole simhnli c n:rnlo snprr:li,,L v, ir\Jv,L,
per la costruzione di un programma, Esistono
molti linguaggi di programmazione, di svaria-
ti trni con caratteristiche a volte srmili e a volte molto
diverse fra di loro.
ilL;{5*î fít&X:* l; ;: * il: Li"ru* :-r,&{"r*:
Una delle molte classificazioni che si possono fare
con ilinguaggi di programmazione, differenzia la
loro similitudine dal codìce che è direttamenteaccettato dal computer, cioe jl "codice macchina".
Quindi, si è soliti dividere il settore in linguaggi di
alto livello e in linguaggi di basso livello. Anche nel
lavoro con il PIC seguiremo questa distinzione. Un
linguaggio di alto liveìlo è più vicino al modo di pen-
sare delle persone, mentre un linguaggio di basso
livello e piu vicino al tipo di dati che accetta ìl micro-nr.ìro<qr'ìro Fntr,amhp lo r:teoorie h:nno \/'^+-^^; ^,- ,drLov9rtrsvantaggi.
1r{fl9{_ffie$:iI linguaggi di alto livello piu utilizzatr per programmare
i microprocessorì, sono il C e il Basic. Entrambi sono lin-
guaggi di impiego generale, croe si utilizzano per appli-
cazioni molto diverse fra loro. Questi lìnguaggi sononrodotti d: divprse C:sp e orrr màntenendo trna strut-
'l|--',
tura fondamentalmente simile, possono presentare
alcune differenze, anche se, come qualsiasi linguaggio
di programmaztone,la ioro efficacia dipende dal modo
con cui il programmatore Ii ulilizza.
S***wcisr*ì-tìtì:tì)r*r: : .:.:r. .:.ì : , .: ,.rr. iiii,rrl
main ( )
{set_bit ( STATUS, RpO ) ;oPTroN-REG = l; / / Assegna un divisore di L:256set_tris_b( 0 );clear_bit ( STATUS, Rp0 ) ;oulput_porc_b( O );
enable_ínterrupt ( Cfn ) ;enable_interrupt( T0IE ); // Abilita interrupt de1 TMRO
while( 1 ); / / Ciclo infinito
Frammento di un programma scritto in linguaggio C
Nella frgura precedente è illustrato un esempio di fram-mento di programma scritto in linguaggio C per il plC
In esso si configura nel banco 1, la Porta B come usci-ta, e si assegna un divisore per 256 alla frequenza dilavoro per il suo utilizzo con il timer TN/R0. Si continuatogliendo gli zeri dalla Porta B e si abilita l'rnterruptall'attivazione del TMR0. Proseguendo, si entra dentroad un ciclo infinito che verrà forzalo solamente dalTMRO alla fine del suo conteggio.
A prima vista si possono notare alcune caratteri-stiche di questo programma, che sono quelle chehanno contribuito a renderlo uno dei linguaggi piùutilizzati. Le istruzioni di controllo strutturate. come
Vantaggt dell'uso dei ltnguaggi di alto livello
la "while" danno chiarezza al programma: in que-sto esempio è utilizzata per restare in un ciclo sinoa che la condizione scritta all'interno delle parente-si e realizzata. In pratica si converte in un ciclo infi-nito sino a che un evento non modifichi la condi-zione scritta all'interno delle parentesi.
Se si volessero ripetere diverse istruzioni per il
tempo in cui resta valrda una determinata condizio-ne, basterebbe inserire queste rstruzioni fra leparentesi. Trattandosi di un pezzo di programmanon si puo apprezzare la seconda delle caratteristi-che fondamentali: nonostante sia collegato al pro-gramma principale, e quindi s a stato abilitato daun evento di interrupt, all'interno di questo spezzo-ne potremmo inserire un altro richiamo ad un ulte-riore pezzo di programma - anche quest'ultimo saràinserito all'interno di parentesi - e sara indipenden-te dal programma principale, comunicando conesso solo per lo scambio di parametri e risultati.
Oltre alle rstruzioni standard, il linguaggio C
specifico per il PIC ne dispone di altre, che si pos-sono considerare delle piccole funzioni di uso fre-quente: come il settaggio da'l a 0 di un registrospecifico, o di un bit di un registro, o l'abilitazionedi un interrupt.
La differenza con iinguaggi come l'Assemblernon sta neila complessità del codice, inteso comechiarezza, ma nel minimo numero di funzionr utiliz-zate per dire quello che si deve fare Altre funzioni
.Ì ::"-l
)$é
I
,1,,,'.i,$:t
:;.. r::iììiir:tliij
.::.:ììià!'',t}i1,
,',:l liÍi:
'..:ì,ì,:.ì::ii;
'l
:.::,.1€*
a.::',..,:t.'ììì:ilt:ìì:t:::
...:a:j:at
':.rr-:rìì
r.ìi::t
'uruìi::
.ììÈ
::,4
a:.:::'atta
r :::ììì:-,,::t;&
".,a,:,'.tl*
riì:a,,:.:e
'-::il
t. .::::t*.l;
'::...1
.-,::l::', j:.:::a:.,i,:7,t
.4,.::::1
. .ì:ìùgr,r;rl:"i$
. :,:,4:&
':;is$
-.r''
'.':liliLi:ìr:ì:iili
l ,::.::::::'.:t:i]*
'.:.,;::'*.
.,..:,:,.tt
i:r,::a:::l:.a,ar-:
. :a:.-t:i:.
: :::tr::l.ii
.:::,:a:'Ì.. .',.:ìi::ii.:t::,,itì,:.:l:l
:
.::at i.;.
-t
.;::;:,;,;i;.,1
Ss$*wctre-m
ll programma principale comunica normalmente con i vari procedrmenti
per lo scambio di parametri e risultatr.
tropartita, il programma scritto in
Assembler si traduce in tanteposizioni di memoria quante
sono le istruzioni utilizzate, nel
nostro caso nove (CICLO non è
un'istruzione). Nel programma
scritto in C invece, ogni istruzio-
ne scritta - quelle dell'esempio
riportato sono sette piu la strut-tura "while" - si tradurrà in una
o piu istruzioni macchina (posi-
zioni di memoria), a seconda del
compilatore che verrà utilizzato.
Questo perche in Assembler ogni
istruzione si traduce con un solo
codice macchina, al contrarìo dei
linguaggi di alto livello. Possiamo
^,,^.+1 ^rrticolaritàu))trr vdr tr quc)rd Pa
nella figura della pagina seguen-
te, dove la seconda colonna della
finestra del programma (Program
Memory Wrndow) riflette la posi-
zione in cui si trova ognì istruzio-
ne. Benche la programmazione
in Assembler sia piu faticosa perrhi l: o<onrre il rndiro nonorafrl
è ottimrzzato, con un constdere-
vole risparmio di spazio occupato
dal programma, cosa moltoimnnrtanlp considerando le
come la capacità di attendere un evento, facilitanol'uIil\zzo, a vantaggio della chiarezza.
restrizroni del PIC in quanto a
capacità di memoria, che nel caso del PlC16FB4 è solo
di 1024 posizioni. In ognì caso i compilatorì C di ultima
STATUS, RPO
a1OPTIOI{_REGTRISBSTATUS, RPO
PORTB
INTCON, GItrINTCON, TOItr
C]CLO
$_'essil*4ffi1trffiÈ il linguaggio denominato di basso
lrvello ed e il piu vicrno al compuLer.
Nella figura a lato e illustrato il prece-
dente programma redatto in
Assembler. ll programma scelto e
molto simile sia in un linguaggio che
nell'altro, e non presenta grandi com-plicazioni. Senza dubbio, per chi non
conosce nessuno der due lìnguaggi,
potrebbe risultare piu con,prensrbrle rl
linguaggio scritto in C, dato che non
necessita della conoscenza dell'archi-
tettura del PIC per: realizzare le lstrr-t-
zioni, ed è p u intr:itivo. Come con-
CICLO1-- €UD!
movlwmOf,'Wfclrfbcfclrf
1-^ r:UDL
bsf
goto
'o"@@
oooto
@
doto
rrumG-t#nFffi-EffiTmEreml5colcolore I'oreo
Convertire il doto in codice ASCII
Frammento di programma tn lrnguaggro Assembler.
Se€th*p*srym
ln Assembler ogni istruzione si traduce come un solo codice macchina
generazione producono un codjceCome abbiamo detto, una delle
fanno sì che il linguaggio C sia unodei piu ulilizzati, e l'uso delle fun-zioni. Nella figura a lato si mostranoalcune funzioni di un compilatoredel C per il PlC. La maggior partesono funzionì molto specifiche dellavoro col PlC, che non si incontra-no in compilatori di C standard.
Per rnciso, dato che sono moltospecifici non apportano vantaggirispetto all'Assembler, se non per il
fatto che utilizzano espressionimolto più chiare.
Dove realmente si nota la poten-za del C con i microprocessori, e
nella struttura di controllo, nei pro-
S.&6*ws#s*
ben ottimizzato.caratteristiche che
-PORT-APIN PORT A
cedimenti, e nelle funzioni proprie dei linguaggi di altolivello.
OUTPUT_HIGH-FOFIT_B
OUTPUT-LOLPORT_B
INPUT PORT-B
INPUT PIN PORT B
SET_OPTION
DELAY_MS
DISABLE INTERRUPT
CLEAR.BIT
GETCHAR
CHAR |O-BED
DELAY US
Alcune funzioni di uno dei tanti compilatori C per il PIC
Strumenti di lavoro:installazione e uso del CD
't
L
A destra il CD allegato al prrmo fascrcolo
I CD-ROM che com-menteremo, è quello
allegato ai primof,acrirnln di nrre<t'o-
pera. E formato da,,-";^ --.+^li^ ^ +i ^.VdJle Ldl telle e llre5 CO[ì
divorci rnn-pnr rli rl.p ver-.:n.Ò .lili, tat nol I lavO-
ro con rl nostro microro-
bot. Ora lo ana zzeremo;^ -^,-l^.1^+r-^1,-+^il | | rvuu uqLLcvlrc Lv.
Introducendo nel lettore il
CD e selezionandolo, s
tr-^A^ -lln r,,n n,,rdLLeue dile 5ue qudì.Lro car-
telle, e ai quattro files, così
come indicato nelia figura in
basso ll CD non è autoinstallante Le
informazioni che troviamo nel file
,flpnn mi rvr descrivono il modo''vv""di nstallazione e il contenuto-J ^,,^-+^ --.+^il^ -h^u que5re cd' .e're, rre sr posso-nn : nriro ann a r r: lr rn n ra on r-
tor dr testo. Gl' altri 3 files, per
ora, non I prenOeremo rn con-si derazr on e.
| - ^"i- - --"+^ll- .l - ^.La prmd caileild od esan"rnare
e la cartella "installa". Unavolt: ,anprt: s dorir: osocrriro il
file spr,ro exe cos si insraJlera il
prograrrma robot.exe, che ci
normot+ori nli vi<r r:lr / t 1.^ +r1Pg lrlgLLqro ur vr)uoil4Latct t a-
mite ìl PC, r video dimostrativrdoL rohnt N,4on-ir p lc diffefenttnrovo dei rn.rorqi di nicroro-bots.
Questa installazione, installa<nln : n:rro indi<nonq'hilo 'lol)vrv d Pqr Lc il rurJPcr rJdr,llr url
software, dato che il CD dovrà
$qp$Swwr*
'1'aqr la
"a-rslInco |La ",
:fl_J
annul 1a
ts (E:)
t/:Q]:aJJ:i.-. ,i
-"tgl:
ift.úa:!,J.il
-tlLlrr,,
+l:'L'i
t
j:
..,i
I'l
lI
I
1
1
1
r:a:::':
:i]:
oimensione
ill.:ts
| ,aF)
Contenuto del CD
Proseguendo nell'installazione, ci
verrà presentata la videata successiva,
nella quale dovremo decidere l'indi-rizzo dove installare il software. Si
nrrn l:<ri:ra l'indirizzn niì nrodicnn-
sto in nIipqtn rasn (- \{p6livi\RObOt\o cambiare indirizzo con un altro checi sembri piu adeguato.
fliqiitT"É:LL'q Vgffi##Nella cartella video troveremo i videodimostrativi, con prove di lotta e diricerca sui differenti tipi di microro-bots, tra questi anche Monty. Per
vederli non dovremo entrare diretta-m6n+ó nall: r:r+allr m: o<onttiro il| | lgl ILE I lEllO Lql LEIId/ ' I ru LJLyuil L tl
programma Robot.exe dalla cartellanrincinale rhe e oia stato corretta-montè inct:llatn qp6lranÀn i nrcciJLyuEl luv I pd))lspiegati precedentemente. Appariràla videata di inizro.
| : f r rnzinno di nnni +rc+a À ramLq rur r4rvr rs ur vyr il Ld)LU c )Eil t-
plice, e ci ricorda quelli che sono nor-malmente utilizzali negli apparecchimusicali o video. All'inizio si potrà
solo attivare il pulsante superiore, checi nermette di sreolie rp il video che si-, Y',,,
vuole visualizzare.
Una volta selezionato un videoall'interno del menù, bisognerà aprir-lo, questa operazione attiverà anche
essere nresente npl lettore al momen-to dell'esecuzione dei video; in que-
sto modo i video non verranno copia-îi srrl comnrrter nermettendoci diY',
risparmiare spazio.
Orresto nrooramma di visualizza-zinne dai vidon ò ntrreolsposto perlavorare con Windows 98.
Quando lo eseguiremo appariràla schermata iniziale del program-ma.
Se non si stanno eseguendo altriprogrammi, si clicchera sul pulsante"accetta", o al contrario si dovràuscrre dall'instarlazione e rientraredopo che si saranno chiusi gli altriprogrammi.
Sel*Sse*eecr*c
.:.'::.21
:l::.:E:,,,ta.t
,:,,t:,,,:::
'at'a,.'::a
.:ì
Videata iniziale del Programma di installazione di Robots
ScelLa della direclory di installazione
Schermata iniziale del video dimostrativo di Robots.
fl e$qYH *_$_e $:,$q#ffi ffi &ffi w g
Questa cartella contiene tre program-mi esempio. che in seguito verranno
caricati sul nostro robot Monty per
fargli eseguire diverse operazioni.
Queste operazioni, sono quelle tipi-che per iniziare la programmazione di
Robots: come seguire una traiettoria,evitare degli ostacoli o percorrere un
determinato tracciato, e servono dar.--^ ^^- r- .^-r'---zione di altreuc)tr PEr to IcorLLo2
applicazioni molto più complesse.La metodologia di esecuzione per
la programmazione del robot, sarà
tema dì studio in un fascicolo doprossima pubblicazione.
fr&ffiYfrts_e ffirL&*$Quest'ultima cartella contiene un
solo programma eseguibile per l'in-stallazione di un'applicazione, cheporta il medesimo nome della car-
gli altri tre tasti. Partendo dall'alto verso il basso le
icone indicano la messa in marcia, la pausa, la nuova
attivazione, e lo stop definitivo. La videata centrale sara
quella che ci mostra il video prescelto.
Per uscire dal programma divisualizzazione, bisognerà
tella: MPLAB. In realtà è formato da vari programmi,integrati in uno solo, che formano quello che viene
comunemente chiamato "ambiente di sviluooo".Questo programma è indispensabile per le applica-zioni con il PIC e dovrà essere studiato in modo la
cliccare sopra la parola Robots nell'an-golo in aìto a sinistra del monitor
Se ri fossero dei nroblemi con lavisualizzazione dei video, si dovrà rein-
stallare Windows Media Player, che èil <nftrnr:ro rho ri nérmotto rlro<to
visualizzazioni, lo faremo eseguendo il
programma mpfull.exe, che si trova
nella cartella "installa". Alla fine del-l'installazione, verrà attivata la proce-
dura di connessione alla pagina webdi Windows Media Player, che si puo
canceilare senza nessun pro0rema,
perché non provoca nessun errore di
installazione. Inoltre, se il software di
accesso a Internet non fosse già ìnstal-
lato sul PC, si attiverà una finestra in
cui ci verrà chiesto se vogliamo instal-
lare questo tipo di software; a questo
punto sarà quindi necessaria un'altracancellazione.
Scelta del video da visualizzare
Esempio di visualizzazione di un video.
Sry#ee*ce$rye
Le informazioni ci appariranno,^ I- r:^ r: dnnn :vorLUrtc |ltu)Ltd td il9ul-,
aperto il fiie PDF corrispondente. Gli
archivi in formato PDF si leggono con
il programma Adobe Acrobat Reader
3.0 o superiore. Nel caso non lo
avessimo sr puo scaricare dal sito di
Adobe. Queste nformazioni posso-
no essere lette direttamente a video,oppure stampate, come qualsiasi filedi lesto Nella nanina sinistra del
video troviamo un piccolo indice cheri normotte di cnnct:rri nalla r,:rioL pErrrrELLc ur JvvJLqtLt itcilc vqttE
sezioni del documento in modocomodo e raprdo.
Oltro :i mirrnnrnro<.nri l\,4irrnrhinvrLrL ur r.il!rvprvLLr)ul l, lvlrLluLl lll-/
fabbnca e commercializza anche altridispositivi:'nemorie, convertitori, kitAi .i.' 'r^ ,,1 rmnli{irrtnri nnorrzin-ur )rLUrczlo, orrPililLoruI uvctd/tu-
nali eccetera. Anche le informazionirol:+ir.,c : nrrccti rnmngpgp{i S trova-nn c, tl <itn rnreh e nn<<nnn accara lihavvLU L PvJJvrtu E))EtE tuc-
sua installazione sia per il suo ulilizzo. MPLAB e f or-nito direttamente da N/icrochip, che è la Casa pro-drrttrire dei mirrnnrocessori PlC. ll software lo tro-viamo. solamente sul CD, però se si accede allapa g i n a we b http ://www. m icroch i p. com/1 0 /lit/ pline/
rî"_^^+^ -^^-,,1+-+^tot I tct tLc LUI t)utLd Lc
Nelle prossime pagine utilizzeremo questo CD perinstallare sul nostro computer gli strumenti softwareche ci fornìsce Microchip per il iavoro con i micropro-cessori Plc
picmicro/index.htm si otterrannotutte le informazioni aggiornateriferite ai PIC e ai prodotti ad essi
relativi. I file saranno sia in formatoPDF che in forma compressa ZlP,
oppure come file di testo.Trovererno inoltre diverse utility per
lavorare con i microprocessori.Le informazioni piu complete
riguardo il PIC'l 6F84, protagonistadella nostra onera si trovano nella
sezione "PlCmicro MCUs" di questa
schermata.Da qui in poi troveremo i PIC clas-
sificati nelle diverse famiglie, e potre-mo selezionare le informazioni che ci
interessano a partire dal PIC'16X8X,
che ci porterà nella pagina dove tro-veremo il file che ci serve. Navigandoall'inîerno del sito notremo trovaretutte le informazioni di cui avremobisogno.
Sw$$wwrys
h{!: /llw.micrùchip coell0l1ítlplì{e/piwimlì'derhm
li*Gf&tu#* ' , ,
F1
J fúicrochis la{ebsite Seardr optiore 4' J Literature Text Search S
J Microchip Producl LinmÉ Plcmicrots DeviEs
About PlCmicro6 DevimMicrochip is a leaditr{ supplier ofB-bil micfùrontr0llers, wiìh 0ne ofthebrcadesl produci 0feinqs Products range fromSp,[, 1? bii instructionmrd to 66-pin, 16-bit instructi0n word deîices. Fa$t operation, lDw powÈf
and IDw qsst c0mbinÈ 1o make lhe hlicrùchip PlCmiEro familv one oflhemosl popular rrroducl lines n ìhe world
RefÈfeilce Manqals :
Fùllow ihls link ts dotrnload the latest teference msnuals. lhe manuals !
reliew architeÈl!re and peripiìeral múdules, bul does not cover thÈ sFecillcs
oi each CMúS device.
Plf,micro lltlClt Parametric SearchQuickly narrow lour search thf pi.mìcrù mictoÈontrollers wilh 0ut nÈ!v
Come ottenere la ptù completa tnformazione sui PIC
lfffiiliÉs/1 dftx/dalasirietl30430c
IS-pin FlashlEf?R{}\! &Bit HiÈrocorlrùllem
kbld*din6btuSH:
. EEÉJdÈtsrryÀ€:,Àah,prc:6F5x ft:6LCR*l
Hbi F*ffi@ f,ÉC SU Fsl!#
m.*c..*d:--q"b-*.*-qi .:D-r!
*-r-q i3:O*r-\.,i--q! 1* rpÈ.-
)-=- -q-
Èa . E*,-,-
-q- i :B_!
iÈ€q: :jEr+iaq-€Er ,.8-r..'
.1nb[se**ÈE . !@tq5È&lrpÉÈffnnfr]6Ét
. Èrt*e*sfi ó{ih#lùd;*#rtur
d =?
1 0 General Descrpfon
iai.'= ? 0 Plc l 6FBX DeYire vari
ts''B 3.0 Architectural Owfriesi!''A 4.0 lìfemory orqaiizalion
c'.ffi f .t uo Rorts
É-g 6.0 Timeú lvodule and T
*-$ t.o oata eeeRou tr,temo
E B 8.0 Epecial Features oftE E 9.0 Instruclion Set Summ
É-'€ I 0.0 Developmenl slppEi-A 1 1.0 Etectricat charaitelE-A 12 0 Electrical Charaîlel
@ t.o oc aec cnr
E €l40Packaqinqhffi tnoer
A 0n-Line 3!FFpol
;g Header Hesp0nsP
H Plcl 6F8X PrrrJuct ldE
g Worldwide gales and
Dati tecnici del PlCl6FB4 in formato PDF.
gli organigrammie persone nanno ta neces-
sità di esprimere il loropensiero sotto forma di co-mrrnirazione rnn nli altriAlcuni lo fanno attraverso
Programm azione:
la pittura, altri attraverso la musica, la
scultura, la scrittura e il ballo. Gli or-ganigrammi sono la forma di espres-<inno rho nirr ri :irrt: r nlrcmrrn l'irrvr rL !r rL Viu Lr uru LO O plO)llldltr | ,-inr rrtrr++r 'l; ' '^ ^.^Uecì dsLrdttd Ul Un progfamma, In Uîaserie di decrsioni e azioni che vengo-no riprodotte in forma logica e ordi-nata. Così come nell'arte, esistonomolti modi di esprimere un'idea me-diante un organigramma, è compitodell'analista, cioe colui che componel'organigramma, seguire una serie di"norme d'uso" per far sì che cio che
' <i rir rnlo oqnrimoro rienn: intornroi:in
da tutti nello stesso modo
&etrtrffi*5ilfltTÀf.:*N*il *g tf tÍf *:rfl,8\Tf?,'sj-i'4
Un organigramma e formato da rettangoli e rombi chesi uniscono tra di loro con le frecce. I rettangoli rappre-sentano azioni che vengono esegulte nel programma.Possono essere semplici, come visualizzare un dato, o
CODICE ISTRUZIONE(letterale)
MEMORIADEI DATI
rnmnloc<è rarno " C alrnl:ro l':ra: r'li rrna Íia".^ ..^l+--_.,,tr,___.- ,.-,,,_ *_,,urdrE rdtcd ut uild ilgutd :)LctLd
dall'utiìizzatore, e mostrarla nel video insieme ala suarannfesentazinnp " In nro<t^ .2<^ nrr^ óSsefe ne-
cessario un secondo organigramma, per realizzare me-glio le azioni. I rombi contengono domande che ven-gono poste in base ai dati variabili all'interno del pro-
t/
,/
t/
ROMBO
All'interno si descrivono le azionida eseguire nel programma
gramma: sensori che forniscono un
dato al sstema, opzioni dell'utilizza-tore scelte attraverso interruttori, ta-stiera, eccetera. A seconda della ri-sposta a una specifica domanda, bi-sognera prendere una decisione per
l'azione successiva, Le frecce indicanol'ordjne con cui sr devono eseguire le
azioni e le domande.
Dentro si inseriscono le domandeper scegliere fra due possibilità
FRECCEIndicano I'ordine con cuisi devono realizzare le azioni {,e*&-í?9.ffi3:tru{94fl
{}s*efdi,*&&i4fi;Dobbiamo tenere contocon i mrcronrocessori Der
#fl*i-?
che il lavorola soluzione
ffiControllo
8--. Segnalatore
Considerazioni al momento di costruire un oroanioramma
Sinboli di rappresentazione di un organigramma
S*Skesr*
,,s
,z
c
g
{B
I
dei proolemi e composto da varie fasi, che riguardano<,.: l: n:11 e SOftUlare -i- ^,,^ll- t--",.J,^,-"^ NOfmal_J.u ru purLL rvrrvvurL )lo 9uEllo lloluvvolg.
mente quando si realizza un progetto, soprattutto se
si lavora in un'equipe di sv luppo, la oersona che rea-
lizzal'analisi del sistema, non e la stessa che più tardistenderà il programma, né quella che veriftchera le
soluzroni, o{-"; t^ ^"^,,^tQta tE vrwvEdi funziona-mento. Cosìln nrn:ni-
gramma si
n r rn r rtilizz: ro|.uv
in molte di
^,,^-+^ {^.i9UE)Ls 1O)r, E
in nnnrrn: di
^--^ -,,"\ l^il^E))E dvtd uc|c
nÒrmo cnerifi-
che, comun-^,^.^-^.^-l ''r'' -l'interno di re-
gole base. Noi
utilrzzeremosolo organr-grammi che si
riferiscono allarî^^r^-^^+ardvprc)Errc-
zrone della
Meno cose si lasciano alla lrbera
interpretazione, meglto è.
ffi
lnizializzazione:Variabili di ingresso
Variabili di uscitaRegístri
Chiedereoperando I
Operandointfodotto?
riÉ
Chiedereoperando 2
Operandointrodotto?
tiI
iri
struttura di un
programma,^..J ^ ^^-^.-^fLl r ttELc))d-
rin rho nrrosti
siano moltonrari<i nerrhorhi nlr r t:rdrsarà incaricato
d Ì realtzzareorrol nrnnr:m-
"Y'-' ',
ma, non abbìa
difficoltà al momento di tradurre in istruzioni rl pen-
srero di un altro. Ecco alcune considerazioni impor-tanti al momento di costruire un organigramma.
Fissare un preciso punto d'intzio, è un buon modoper non dinrentcare nulla, inoltre e molto difficile, so-
prattutto neì programmi che si dividono in piu alterna-
trve, term,nare con Ln urrco pJt^Io. Ouesto si ottienequando alla fine diognialternativa, si arnva ad un pun-
to comune denominato come Fine.
L'uso di alternative con due uniche scelte, risponde
Sqe#**eswff*
Chiedereoperando I
Chiedereoperando 2
,:i,:'#ìîà +*tr
a
Mostrare risultato
Chiederedi nuovo operandi
E corretto?
arganigramma di un enuncrato,realizzato tn forma corretta e non corretta
^i' ' .ll^ -nra--,t. À^ll. 61666:mm,azinno 6nl pl- Aa+ar-f-j|U dlic 'CLC))'Ld Uclld Pr Lv, ,l!, uqLqr-
m nata dal tipo d istruzioni, che al trpo di organigram-ma n se. Quando qua cuno disegna il suo organigram-ma ha bene in mente la sequenza esatta che il pro-
gramra dovra eseguire, le allernative possib'li,re do-
mande importanti eccetera, quindi si tende a dare per
scontato il verso delle frecce, e a non disegnarle cor-
rettamente. Però bisogna pensare che chi dovrà tra-durre la "nostra" idea, si baserà unicamente sul dise-
gno, e meno dali lasce"e.no alla libera interpretazione,
-,^li^,^ --"- | ",-,,l+-+.il r9ilure >dtd rr5urLdL().
lr rertango o a, t\i/ialtzzaziore dei registrr e defini-zioni delle variabili servira da promemor a al momento
di mettere in pratica la stesura del programma.Senrrcndo nresttr rons Cerazioni abbiamo realizza-
to un organigramma che rappresenta ra richiesta dei
dati per l'esecuzione dt u'a so'nn-a, e la presentazione
del 'isultato. Nelle frgure in alto, vediamo ;r esempio
di come nor si deve rappresentare rl medesino pro-
gramrna.
Chiederedato C
Chiedffidato A
Toglieresalutg
Chiederédato B
Darerisultato
. .:,:.
.:::$lil::ìa::!
: .:.,a:a,t:
.ra
r.:r:a
. :.:,.),ta:a
::.::.
a.::a:,
Appti cazione pratica:pnmo programma
nche se rimane ancora molta teoria davodoro in nrr:ntn : <tfuttufa e UtiliZZO delDlî rnmtnrr:m^ a^n I,- .-,, Jn pflmo programma,
con il quale ci addentreremo a poco a poco
nella programmazione e nel linguaggio---^-t-r^" -h^ ^^^ ^ .n<t .rìmnlir:tn rnmo tutti cre_o))ct IutEt - lt tE ttutl q LUJI Lvt ttPilloLv Lvt ttE
dono -, e più concretamente nell'assembler dei PlC.
Cominceremo muovendo dati da un posto ad un altro.
Leggiamo con attenzione l'enunciato dell'esercizio.
Nel grafico che accompagna l'enunciato, irettan-golr sono I
reg istri entro i
nrr:li o<onrrire ì
movimenti dei
dati, le freccer:nnro<ont2nnil rrorcn di nrro-
sti movimenti;idatì all'inter-no appaiononol nn<tn rho
avranno dopo
Enunciato del programma da realizzare e
la sua rappresentaztone grafica.
iti$- #i€]{il# i;i i"Í-è*#gefg*Fitffi ffi&TgPer noter realizzare il srrn rnmnito il PIC h,a al suo inter-I L' l.JvLrl
no la struttura mostrata nella figura seguente. Nella
memoria dei dati a partire dall'indirizzo esadecìmale OC
possiamo immagazzinare i dati che ci interessano, per
lavorare con essi come meglio ci conviene.
La ALU (Unita Aritmetico Logica) e incaricata di rea-
lizzare le onerazioni aritmeîiche e looiche e all'internodi queste, le operazionr di movimento che sono quelle
che ci interessano. W è un regìstro chiamato di lavoro
perche interviene come appoggio alla memoria nella
maggior parte delle operazionì che interessano la ALU.
Quando un'operazione aritmetico-logica ufilizza
due operandi, uno di quest è sempre il registro W, l'al-trn nro essere sia rrn reoistro della memoria dei dati
sia un valore letterale dato insieme al codice dell'istru-zione.
La discriminazìone tra i due è fatta grazie ad un mul-tiplexor (MPX) la cui linea di controllo avrà un vaiore ol'altro a seconda dell'istruzione che sta eseguendo in
quel momento. ll risultato dell'operazione puo arrivare
al reqistro W o alla memoria deì dati. ll numero B che
LETTERALE
MEMORIADEI DATI
ffiCONTROLLO
8-..
ffi8:-
t/
t/
l'esecuzione del programma, indi---+^ ^^-l-.^,l-ll- ^,,^+. ^J^ll^ {"^-Lc|tu dllLllc udllc I,Jullld ucllc llcL-
ce. ll valore 03 esadecimale è un
valore letterale e la X rappresentaqualsiasi valore, visto che non
conosciamo il valore iniziale del
registro DATO2.
Abbiamo tre posizioni chechiameremo DATO1,DATO2, DATO3.ln DATOI si vuoleimmagazzinare il valoreesadecimale 03,e in DATO3 il valore cheabbiamo in DATO2.
Percorso che seguono i dati quando si esegue un'btru1one
Sw#sxs*rsxss*
l
,:.'la:'a:t:..:a.::,a:aL:,..:
::,..;ti::.:74l'irl:l:::: rlr:1.ì
. l::.:rr:,r:ì
a
a
movt tvt-y9-ve if yatore letterale k 1l resi$ro ditavoro,W
Muove il valore contenuto in W al registro f
zioni, la parte sinistradel quadro è quellache ci dice i tipo diistruzione che si sta
eseguendo, quella cheviene dopo e gli ope-randi che intervengo-nn in nrro<t: nnor:zin-ne; generaimente si
T--_o-..v.,y
movf f, Muove_il valore contenuto in f alla destinazione d,che può essere il medesimoregistro f (d=l) o registro di lavoro W (d=0)
Tavola con le possibili istruzionrdi movimento del PlCl 6F84.
appare nel grafico ha un suo signif i-
cato: indica che tutti idati con i
quali lavora il PIC 16F84 sono da Bbit, sarebbe a dire che sia i registriche i dati con quali opera la ALU,sia i risultati che genera, inclusr i datiche puo contenere il registro di lavo-ro W, sono a B bit.
Allo stesso modo, se al posto diun B appare un '1
, o qualunque altronumero, significa che il dato chepassa per quella linea, e compostoda quel numero di bit. La ALU, rea-lizzando alcune operazioni, oltre ad
un risultato, fornisce anche unasegnalazione, di cui parleremo in
seg u ito.
gsYffi#x5*F,{t*3 N#Vs$$ilNY*Nel PIC esistono tre istruzioni permuovere i dati. Tutte comincianonAr mn\/ e rnntonnnnO a COntinUa-
zione altre lettpre ner indicare dadove a dove si muovono i dati. Così
si puo muovere un valore letterale al
registro di lavoro W, o muovere unvalore dal registro di lavoro ad unregistro della memoria dei dati oviceversa, muovere un valore dalregistro della memoria al registro dilavoro W, o da W a se stesso.
Le tre istruzioni che appaiononella figura saranno trattate in unascheda individuale più avanti, perovi anticipiamo che per tutte le istru-
$wSsxwwww
LÉTTERALE
MEMORIA,DEI:,D.ATI
_oBoc
MOVIMENTODI UN VALORELETTERALEAW
LETTERALE
LETTERALE
MOVIMENTODI UN DATOQUALUNQUEAW
:ffi;MEMORIADEI DATI
CONTROLLO
MOVIMENTODI UN DATODAWAD UN ALTROREGISTRO ì
_o3oc
Percorso dei dati, con drfferenti istruzioni in esecuzione
LETTERALE
ffi'/,/
t/MEMORIADEI DATI
OB
_oc_oDOE
SEGNALAZIONE
t/
Blocco di elaborazione dati dopo aver eseguito il programma
rappresenta sempre con una lettera legata al tipo di
istruzione.Possiamo seouire il f lrrsso nercorso dai dati nellaì |v Jg:jv||
figura della pagina precedente. La prima rappresenta il
movimento di un valore letterale a un registro, che e laparte del nostro compito nell'enunciato numero 'l
,
muovere un valore letterale a W. Per portarlo poi da W
al registro DATO1, dobbiamo seguire il camminosegnato dalla terza figura. Nella seconda parte dell'e-nunciato del programma dobbiamo muovere un datoda un registro ad un altro.
Anche se non esiste alcuna istruzione per muovere
un dato all'interno dei registri, questo si puo fare con
la combinazione di due istruzioni: muovendo prima un
dato da un registro qualunque a W e dopo da W al
secondo registro. Questo viene illustrato nella seconda
e terza figura. Dobbiamo considerare che il registro dì
lavoro W è l'unico che non fa parte della memoria dei
dati, per cui non viene trattato come gli altri, e per uti-lizzarlo bisogna fare riferimento ad esso tramite il
nome dell'istruzione.
$}W*S K&914 &4& &SSfr W &$ g-fi ffi
ll programma assembler risultante è illustrato nella
pagina seguente. nella prima linea con la direttiva LlSl,
si indica il tipo di PIC che sì vuole ulilizzare, nel nostro
caso il 16F84. Nel caso in cui volessimo utilizzarne un
altro, cambieremo il parametro che segue P=. È obbli-gatorio usare questa direttiva, perche tutti i nostri pro-
grammi cominceranno neìla medesima formaNelle linee 2,3 e 4 si usa la direttiva EQU per defi-
nire le variabili. Nell'esercizio si chiede di muovere dati
nelle differenti posizioni di memoria, senza specificarequali, la prima posizione a disposizione dell'utilizzaloreè la posizione OC. Per questo si hanno codici a tre posi-
zioni consecutive, a partire da 0C, al posto di lavorare
direttamente con gli tndiizzi, la direttiva EQU ci per-
mette di dar loro un nome per far sì che l'uso sia più
sig n if icativo.La lrnea 5 è di nuovo un'istruzione, la ORG. Questa
direttiva dice all'assembler che l'istruzione che seguirà,(nel nostro caso la movlw 03) è messa nella posizione
di memoria che è indicata dal oarametro (nel nostro
Sw$*swws"m
o8
f
; Fine del programma
l'enunciato. Per .nuovere I
dato contenuto in DATO2 al
registro DATO3 si usa comeregrstro intermedio W (rstru-
zronr B e 9).
Nella linea 10 si termina il
programna con l'islruzroneEND.
Questa istruzione e sern-pre obbligatoria
Una volta eseguito il pro-gramma ii blocco di eiabora-zione dati del PIC restera
come segue, tenendo conto
LIST
EQUEQUEOU
I
2 DATO 1
3 DATO 24 DATO 3
5
678I10
ORG
movlwmovwfmovfmovwf
END
P='16F84
0cODOE
0
03DATO 1
DATO 2.0DATO 3
Programma assembler dell'enunctato proposto
caso 0). Questa istruzione, inoltre, e sempre obbligato-ria, dato che e la prima istruzione del programma (finoaila movlw non sono istruzioni) deve essere nella posi-zione 0 delìa memoria di programma, dato che e lt cheviene ndir zzalo il puntatore al reset del PlC.
Comincia così ii programma tn sé. Nella linea 6, si
muove jl valore letterale 03 a W per proseguire colva ore al regrsrr-o DATO I , cosr come abbiamo derro re,-
della posi,,ione d, re'noriache gl abbiarno asseg^ato
?:1"!1.,1:,1:1r: a: I :,: r,i :l l lri:lii:1.i lt flti.: f', rl :.i ; rÌ :::i,r:,r
N'4olti lettor s staranno chredendo perche alcune cosesono sul margine sinistro e altre sono tabulate, se i
cambi tra maruscole e minuscole hanno significatoeccetera. Ecco qui delle norme, alcune obbligatorie,altre solo come raccomandazioni, da seguire al
momento dì scrivere un programma per tl PIC
r Le etichette e i nomi divariabili {LIST, DAfOi) di solito si scrivono in maiuscolo. Non succede nientese vengono scritte in minuscolo, però così si distinguono meglio dalle istruzioni. Dobbiamo ricordarcidi scrivere le etichette in forma sempre uguale, dato che lnassembler è sensibile a maiuscole eminuscole.
' I nomi (mnemonici) delle istruzioni si scrivono in minuscolo. Non accade nulla nello scriverle inmaiuscolo, però si stanca di più la vista e sifa più fatica a leggerli.
' I programmi devono essere tabulati e ben allineati per vedere rapidamente la struttura del programmastesso' Le uniche cose che si scrivono nel margine sinistro sono le definizioni delle variabili {DATOI,EQU, OC) e le etichette (che vedremo in seguito). Aiutano nella presentazione di questa struttura glispazi bianchi che si lasciano tra le parti del programma.
' L'utilizzo di commenti per spiegare le istruzioni o parte di queste, aiuta nell'elaborazione e nellasuccessiva modifiea o riutilizzazione di un programma. Per questo si utilizza il punto e virgola (;) e inseguito il commento che si intende inserire {; Fine del programma).
Norme dl scrittura del programma rn assembler per il PIC
Sap$&rrmr'qr
Schede dette istruzioni:concetti generali
oco a poco vi mostreremo
le differenti istruzioni che
formano il repertorro del
PIC 16F84. Per questo e
^^-^--^",^-l^i-":"^^necessdilo Utdilre prlma
una serie di termini, che sarannoquelli che utilizzeremo d'ora in poinol rnr<n Àoll'nnor:vvLru.
wf f,d *addwf
MNEMONICO coDrcE oPDELL'ISTRUZIONE
Esempio di alcuni dei termini spiegati
Mnemonico:è il nome dell'istruzione che noi useremo per ordinare al microcontroller cosa deve fare. Dobbiamo scriverio tale quale
senza cambiarlo.
Parametri:operandi che necessita l'istruzione per essere eseguita. Per entrare nei dettagli di un'istruzione si specificano i
parametri che essa ammette che dovranno essere poi sostituiti da valori reali.
Parametro f: rappresenta un registro della memoria dei dati, operando originato da un'istruzione.
Parametro d: rappresenta un registro, operando destinatario di un'operazione, con due possibili valori.
Se si sostìtuisce con uno 0 significa che il registro di destinazione è il registro di lavoro W o accumulatore e se è
sostituito da un 1 significa che è il medesimo operando originato dall'istruzione.
Parametro b: rappresenta un valore (da 0 a 7) di un registro.
Parametro k rappresenta un valore letterale, sarebbe a dire, un valore riferito al mnemonico dell'istruzione.
Registro di lavoro o àccumslatore W:
registro speciale che non fa parte della memoria dei dati, e che si utilizza nella maggior pade delle operazioni aritmetico-logiche.
Giclo di istruzione:è il tempo base che impiega un'istruzione ad essere eseguita. Per il PlC16F84, funzionante a4MHz, questo ciclo vale 1
microsecondo (prs).
Unità Aritmètíco-Logicalè incaricata di realizzare Ie operazioni aritmetiche e logiche del PlC.
Blocco di elaborazione dati:insieme dei registri che eseguono le istruzioni.
Flage:bits contenuti in determinati registri che servono come segnalatori di eventi nell'esecuzione delle operazioni.
Codice OP:traduzione di un'istruzione realizzala dall'assembler, perché possa essere compresa dal PlC, che non lavora con codicimnemonici, ma con 1 e 0. La longitudine dei codici OP in un PlC16F84 è di 14 bits"
Termini utilizzati parlando di istruzioni
$*#*xwmry*
a
MNEMONICO
movlw
OPERAZIONE:
CICLI:
GODICE OP:
FLAGS:
OPERANDOFONTE
k
,d']-ffij
OPERANDO I
DESTINAZIONE
Movimento del valore letterale kal registro di lavoro W
1
1 1 00xx kkkkk kkkk
Nessuno
!*,**'-",****,.*"-Ca ratte ri stiche del I' i struzr o ne movl w.
Questa istruzione è stata ulilizzafa precedentemente
nella realizzazione di un programma, dove abbtamo
valore iniziale xxxxxxxx
movlw 5 00000 1 0 I
movlw 3: 000000 1 J
v,sto che la programmaz one n assembler e pi;'acile dr
nrrel rhp :nnàre C)r: r,pdrpmn nrrplln rho succede innra<tn o<omnin n:c<nY---- a passo.
Si n zia mrove^do il valore letterale 5 nel regi5tpe liavo.o W e si nroseorre muovendo il valo-re letterale 3 al medesimo registro W.
| : {inr'r: : l:+n r:q66p(ont: il y:lnroLO rr9UrO O rqLVrOFr-.-,-rhe rssrrme \A/ dono l'esecuzione dinnn rn: dollo i<trr rzinn
All' nizio il valore di W sara indeter-minato, e quindi si rappresenta median-te "x". Dopo la prima istruzione avremocaricato in W il valore 5, il cui codiceh.nalo si r:nnrpsent: con "'1 0'l " Datoche i registri del PIC hanno una dimen-sione di B unità (bits), le celle non diret-+16^n+^ '^+^.^--^+^ -..dilìerLe InreressdLe, 50no messe a zero,
iniziando da sinistra. Dopo la secondaistruzione il valore di W varia, cancellan-dn il nrimn v:lorp o nassando ad essere"0000001 1 "
Valore di W all'interno di ogni isLr,tzione movlw.
Schede dette istr uzioni:l'istruzione movlw
'isl.-rzione "mov" e tiptcair îutîi i nrocessorr datoche e sempre necessario I
movimento di dat da unposto ad un a rro, siano
o-esti de risultaLi, valori f ra registri o
vaiori immediati
Consta dr due operandi, dove il
drtn rnnionrrin nol nrimn o lrzcfar't.uorw LUrrrcrruLU rrqr Pril rlv q Lt o)tqtt_
to, o soostato al secondo. Con que-
sta istruzione si realizza una copra der
dati, poiche non sr cancella il datoorig inale.
Ci sono tre tipi di istruzioni" mov", le quali si differenziaro reiloro operandi di orrgine e deslinaz o-ne Nel caso della movlw, l'origine è
un val'ore letrerale e la destinazione e
il rpniqtrn di l:rinrn \A/
[5fr i4ilt il*# t'951",{{"3ríq:$ili**vì..it,
$sa*S$qryqsre*
Strumenti di lavoro:I'ambiente MPLAB
'MPLAB è un ambiente dr
sviluppo integrato per il
lavoro con la famigliaPlC16/17 di Microch p.
Fsspre inteorato sionifica
che dal suo interno si puo editare un
programma, compilarlo, tradurlo in
linguaggio per il microcontroller,simulare il suo funzionamento, emu-
larlo su un hardware, che abbia le
funzio'ti del sistema reale, e anche
scriverlo rel microcontroller, anche se
nar flrro<to dr.a rrltimo nnc<ihrlit: é
necessario disoorre dr t-,n hardware-r^^, , -+^ ^r+"^ -ll,-^îliCaZiOne.duf9uotv, urLrE oil oPP
gr'1is?&g_il,&at*ru # #g &4 r*-effif ambiente MPLAB si trova in una car-
tella con lo stesso nome nel CD di
Finestra di inizio dell'installazione diMPLAB.
Robots, che vi abbiamo fornito. Per
o<onr rira l'in<r:ll:zinnp rrraÀaramn :E)CVUil q I r rJLO ro-rVr rq d( l -uclcl l lu d
questa cartella, dove troveremo un
file che dovremo eseorlire.F:rondn n1a<tn qj 2nrir: , 'n: fina-r ulur ruv VULJLv rr oPl llo ul lo lll lE-
(tr: .nmo nrroll: doll: finttre 16,o ei
comunichera che stiamo per procede-
re all'installazione di N/PLAB.
Accettando (Next) apparirà una<.ornnd,a finecfr: îor '-^^tt^'^ ^ '-tlr' )LCVrlClC \-'luOll
componenti vogliamo rnstallare.I rnmnonenti che selezioneremo
corispondono ai programr.r,, ai files e
alle loro funzroni relative che utilizze-
remo:MPLAB IDE Files: sono i frles
relatrvi all'ambiente di sviluppo inFinestra di selezione dei componenti da installare
Sep##wwr*
sé, a cui si fa riferimento con la siglaIDE (lntegrated DevelopmentEnvironment).
MPASM/MPLINK/MPLIB Files:sono il compilatore, i linker e i files dilibreria accessibili tramite MPLAB. ll
compilatore sara necessario per tra-durre i programmi che editeremo in
linguaggio macchina, in questo casoquello del microcontroller. Se il pro-gramma è realizzato in diversi filestra loro relazionati, ed ognuno di essi
contiene vari sottoprogrammi, sarà
necessario il linker per renderli unasola unità coerente. I f iles di libreria,dal canto loro, facilitano il lavoro diprogrammazione fornendo "fram-menti" di programmi già elaborati e
molto utilizzati che potremo include-re all'interno del nostro codice.
MPLAB-SIM: è il simulatoresoftware che fornisce Microchio. Conesso si puo verificare il corretto fun-zionamento delle istruzioni del pro-gramma che si sta eseguendo, vederecome'risponde agli ingressi del siste-
ma, così come le uscite esterne chequesto genera.
MPLAB-ICD Debugger SupportFiles: come indica il suo nome non si
tratta di un'applicazione in sé, ma di
files di supporto necessari per la fun-zinna Ài "nlahrrn" n r'trarr- a,';e+'zrur rc ur utruu9 u rLcrLd 9ud>t-t.
Questa funzione permette, non solodi vedere i risultati finali di un oro-gramma, come farebbe l'utiltzzatore,ma di accedere ai registri del sistema
mentre si sta eseguendo l'applicazio-no ocanrondn Io i<tr uztont passo a
n:<<n aaaatar: Î rttn nro(fn ln rror{ro-
mo in maniera piu dettagliata trattan-do questi strumenti cosi importanti.
Help Files: sono i files che ci per-
metteranno di ottenere aiuto dallef unzioni, menu, finestre eccetera, che
inteqrano MPLAB. non disponiamo, per cui al momento non parleremo di
loro. La programmazione del PIC nei programmi che
realizzeremo si farà con il software e l'hardware speci-
fico in ouest'ooera.
I restanti componenti danno supporto software a
strumenti hardware per emulare e scrivere i programmicommercializzati dalla stessa ditta N/icrochip, dei quali
Ssflr*rsre
Finestra di selezione dell'ambiente dei componenti
Finestra di selezione dell'ubicazione del linker.
Una volta scelti i componenti,continuando (Next) apparirà unaspconda finestra ner selezionarel|||LJ!|9 F\
l'ambiente nel quale si eseguiranno i
programmi. Noi abbiamo sceltol'ambiente Windows perché in que-
sto momento è il più diffuso sul mer-
cato.In seorrito verra chiesto un indi-
rizzo per l'installazione. Si puo sce-
gliere quello proposto, oppure uno
che vi sembra più adeguato all'orga-nizzazione del nostro disco fisso,dato che oresto non influira in
seguito sull'esecuzione dell'applìca-zione Nplla seorrente f ineStra è
offerta l'opzione di fare una copia di<ictrezza dpi files oià esistenti sul
nostro computer che saranno sosti-
tuiti, e in seguito introdurre nel
Menù di Inizio di Windows l'accesso
rapido all'applicazione in modo che
non sìa necessario entrare nelle sot-
tocartelle o nei f iles per ricercarla.
Comunque per un utrlrzzatore nuovosi raccomanda di installare il linker in
MPLAB\Lkr.
In seguito dovremo scegliere dove
installare gli archivi di sistema. Se
lavoreremo in Rete le scelte verrannofatte di conseguenza.
l-lnnn tr rfia nr ro<to SCelte iniZia l'in-vvvv rv r!!
stallazione di MPLAB. Durante il pro-
cesso di installazione appariranno una
serie di caratteristiche nel video, oltrealla barra di stato dell'installazione.
Una volta terminata l'installazio-nó ci nntr:nnn l666,nrn i{il^. ÀiIrsr Jr pvLrorilrv rsygElE I lllc) Ul
testo associati ai componenti instal-lati, oppure lasciarli per la fase suc-
cessiva.
Tutti questi passi del programma
MPLAB si trovano nella cartella" C :\Archivio di programma\Mplab".
^',-^r^ r- finestra ner sreoliere I'indlrizzovudl luu oPvoltr lq r il rLrLr u vLr rLLyilLr!'del linker, dovremo selezionare una delle due possibili
opzioni. Se avremo installato una versione precedente
di MPLAB, la scelta sarà fatta di conseguenza, per ren-
dere compatibili i vecchi progetti con quelli nuovi.
FI"J NffiSNXsg f4pLAsPossiamo già eseguire un programma, aprendolo appa-
rirà una fìnestra come quella della figura riprodotta qui
In basso.
Come si puo osservare l'aspetto e come quello
Durante l'installazione sono mostrate una serie di caratteristiche dell'applicazrone
Finestra di inizìo di MPLAB alla sua esecuztone.
Sa**nrara
della maggior parte dei programmi che funzionanonell'ambiente Windows. Nella parte superiore dellafinestra appariranno diversi menù dentro iqualiincontreremo i tipici "Files", "Modifica", "Finestra",
"Aiuto" e altri che, invece, sono specifici di questaparticolare applicazione.
Sotto i menù le icone che raooresentano le fun-zioni oiù utilizzate. Se si seleziona l'icona di sinistra
il gruppo di icone varierà.All'interno di questo ambiente si
potra:
.,,a,:a,,:.&
'.'.Ìa:-':?&È'r...::-,:i*
.::::::1ffi
,,,,:::Liffi
;3.. .l:t
"s4,.-ffiffi1::€
ffiffi,:#-":'.Ea
-::::x--iffi
-:w"Èffi
"w
w'E€
ffie-l*I
:.:,,aa&:,;:1|ll&
iìè
:::lr:;:*
:.t:&
-,.}". &:
"E
,,,,ì1ffi,,'::a::#
.::-:..ixr:ìi::il::!A
ffi'::,::t:atffi
:ìa:::11i9;!
,:*$ffi
"qffiw4tr
.11,11:,::,74&&
ffi.
.iss
..*#:i
"*ffi'ffil*q':;t
:,à':#
...1#orX
wig'4
,::j!.?}*;::*' ,{4$fi*wffi':ts
:,.ff,ffi":ffi
'ffi
---é,9!i{gt3&
ln Assembler ogni istruzione si traduce come un solo codice macchina.
Grupfii di icone che rappresentano le funzioni più comuni
Finestra che mostra i differenti titti di tnformazioni fornite da MPLAB.
Tabella delle funzioni da realizzarenell'ambiente MPLAB.
Pnro : norn vod;911o come Si
realizzano queste opzioni. Per il
momento diamo un'occhiata alla(anronta finrrr: nor vorifir:ro il f inn
di informazione che ci permette di
vedere l'applicazione, e cominciamo- ^i^--"^ -^^idiversi menu.o gruLorE ur I PU LUr | |
la finestra srrnpriore a sinistramostra l'edizione del programma in
corso. Sopra di essa, in un'altrafinestra si nrro vedere il valore dioonrnn dci renrstri sDecifiCi del PIC
nel loro formato esadecimale, deci-male e brnario. Nelle finestre di
destra, cominciando dall'alto versoil basso, troveremo la finestra delloStack delle istruzioni del PlC, la
EEPRON,l dei dati e la memoria diprogramma.
Organizzare codici di unaapplicazione in progetto.
Editare i programmifonte per il PIC 16/17 cosìcome altri flles di testo di cuipotremo aver bisogno.
Compilare i codicifonte ottenendo i filesda memorizzaresul microcontroller.
Simulare icodiciuna volta compilati e primadi memorizzarlinel microcontroller,verificare che il lavororealizzatosia adeguato.
; ***rì******t**.$***r*r**dtt*Iq*r****i**rì.*r
i*r*ú******r**** r*r*r*È*r+**,;* Hlcr0chlp lechn0l0gg IncorForated* 16 0ecenber 1998* hssenùtÈrt ulth l4Pfisl'l u2,?8***it*it*t**t*iÈ*tr*r**t****i*i**t***$**r*H{;r lhls proqrafi conflgures the n,/ù ilúdulÈ t0 r
;i l/D channel 0 (the potentllneter) and dlspl;r rÈsúlts on thÉ LE0S on PoRTC. ìlak€ sure tlr sÍltch SSg has all ssltches ln tha 0H posll
Hex Dec 81n3f996 B BBSSBBBBOB B 588ÙBÙ68FF ?55 11111111'18 24 IrJù11888BS B BSBB6BOB6B B BB6ÙB8BB1F 3t ggg1t.i11B! & 86800080FF ?55 i111111169 B 6OB86O68a0 B 0086680006 0 0686066605 B 86068880
- :T: 0ú 01 02 03 64 05 06 07 08 09 0n !8 0C
- FtÉ F; cF Fr rE FF r_ tF !t tr FF;F rl illd.f6 FF FF FF FF rÈ L, rF tt t, FF EE tt 'lg&!.f fr fF FF FE ,! FF Ft rr Ft fF t, rfEgg! FF El lr Jf rl cf Fl fF F. FF FF l,-
' r
I +:000S SFFF
+ q!!-', litlB 0003 SFFF €ddlw orFfi oooq arrr eddtu oxff
-ù 0009 aFFF àddlu 0xff
9à'w&%*xww*
.
ìir':::ir1,
i?:,:,::':ìr.:.
..:-::iii
^..".'
*.::r:lll',,,,
:aìr.ìl:ìlì:ì : '''']iaa-
aaa::.::::: -:::
,1L1;1::l;1:,:,,,,
ì:ii:,:i::,'::ìiììì:r:ì:: l"
..
L,,t,,l;:L;',::,
at,:.:,, -
Schede dette istr uzioni :l'istruzione movwf
la seconda variante dell'i-struzione "mov" In essa
rl dato contenuto nel
registro di lavoro W è
I
OPERANDO OPERANDOFONTE DESTINAZIONE
ttrasferito a1 registro f, che qui
appare come parametro, in
modo che si cancelli da WDobbiamo solo indicare qual
è l'operando di destinazione,
visto che quello d'origine, W, e
implicito nel codice di istruzione.
;1$l1r!;;ìl ii1!il. tit,ii *i.ìì-; Î í:': ;ri :ji'i ijqi l;4,,^-+- ,,^l+- ,,^^li--^ -^.,-^"^ 'lvuc)Ld vulLd vu9llol I lv ( dl l\ dlú ll
valore de recistro rl crri indirizzo
e 0E (ricordramoci che a partire,'lr nf Ài.n^ni.mn doi ranictriud uL ur)purror rw uLr rLyrJrrl
MNEMONICO
m o.v
Operazione:
Cicli:Codice OP:Flags:
movimento del contenuto del
registro di lavoro W al registro fI
00 0000 1 fff ffffNESSUNO
Ca ratte risti c he de I l' i struzi o ne movwf
generali che possiamo utiìizzare come ci conviene), e :
chechiameremooPERANDo,conva|oredectma|eB'Per questo dovremo impiegare le due istruzioni che gia
conosciamo: movlw e movwf .
Nella figura si vedono i passi da realizzare. l
€t,rn
OV
ru
m
lregistri, all'inizio, si considerano con valore indetermr-
nato, X e Y. Notramo che al momento di utilizzare le
istruzroni il valore letterale non viene sempre rappre-
sentato nello stesso modo; dipenderà dalle situazioni o
dall'utilìzzatore, comunque al momento di memorizza-
OPERANDO:XXXXXXXX t
' . . '.
: . ... ì.]ì.ì:ì: ìì :...'.'.... :':.1 ::. '' : 1',. ].
arilfjt
a
xxxxxxxx :
wY.YYYYYYY . .'
'.--lriF;.,
ì.:i'
0000 r 000 :
re i dati nei registri e quando
lavora la ALU la base utilizzata
sara la binaria ll codice esade-
rimale e orrello che si usa nor-
malmente, in assenza di altresnec if iche e com nre n d e i
valori da 0 alla f . Per utilizzaregl altri codici dovremo espri-
mere rl numero entro "virgolesemnliri" e nrerpderlo da una
lettera che indichi il codice in
cui si trova. In questo modo,
avremo diversì codici moltoimpiegati, come ad esemp'o il
decimale e il brnario. Dopo le
nnor:zinni pntr:mhì i roni<tri'-v'-"'hanno il medesimo dato, vistorhA nt tA<ln nnn 17
jp6p r:nrol-\'rL 9ULJLV rL \ d lLcl-
l:rn noJ ronictrn nli nrir-, -,,Jrne.
'aÍ,
I
I
lwdi I
Passi da realizzare aer Cart(ÀrF il rpni<rro aPFRAIIDO COn il valore deCimale B
$s*$*sws*etr
Schede delte istruzioni:f istruzione movf%W la terza e ultima variante
ffi* dell'istruzione " mov". Inwffi questo caso rl contenutofu Oet registro f, che e l'ope-
rando fonte, si puo trasferire nel
registro di lavoro W, o al medesimorenistro f : sorond: del valore dr
"d" F necessario snecificare tantol'origine come la destinazione.
Muovere un dato da un registroal registro di lavoro W ha senso,d:rn rho l'nhioftirin nr rÀ nccnrn trrvo Lv Lr rq I uurqtLtvv vuv c))ctc Ltd-
sferirlo ad un secondo registro a
partire da W, o operare nel medesr-
mo registro di lavoro, pero muove-ro ttn d:tn d: ttn roni<+"n :lln cfacrs urr uqlv uo urr rEyr)trv qilu )Lc)-
so regrstro, sem0ra non averesenso. Tutto ha una ragione, ed e
che quando si realizza questa ope-razione resta coinvolto un segnala-
OPERANDO OPERANDO DIMNEMONICO FONTE DESTINAZIONE
m o v f d ^;
Operazione: movimento del contenutodel registro f alla destinazione d.Sed=0si muoveil registro di lavoro W e se d = 1 si muoveallo stesso registro f
Cicli: 1
Codice OP: 00 1000 dfff ffffFlags: Z
Caratteristiche dell' istruzione movf.
tore, o flag, chiamato Z. ll flagZè un bit del registro di
STATO che viene messo a I se il risultato di una opera-zione è 0. Così, muovendo un registro a sé medesimo e
verificando il valore del flag Z, possiamo sapere se que-sto registro ha valore 0, o no, visto che Z sarà messo a '1
nel caso che questo valga O. Cio e molto utile, e si vedra,parlando di cicli, che per ripetere un'azione un determi-
Valori dei registri nei differenti casi con esecuzione dell'istruzione movf
nato numero di volte, si puo caricare il valore in un regi-
stro e decrementarlo fino a che questo raggiunga 0.
frsfre4px il*** #xsgffià$trg#$€g &4#w$:
Nella f igura sono rappresentati i valori che prenderan-no i registri all'esecuzione dell'istruzione movf nei duediversi casi, dipendendo dal valore degli operandi di
Valore inizialetmovf openaruoo,l
si opeRlruoo= 0
si oprRnuoo+0tmovf openaruoo,O
si openaruoo= 0
si opeRnuoo+0
OPERANDO
"ìr:**Y,*i
yyyyyyyvvvvvvv
yyyyyyyyyyyyyyy
STATO
;- J?-:YI :
I
l- )z=1t . -lL _ _t*z=gt I
I
^-.12.=11 '*ltz=ol .J
vvyyyyyyvvvvyyv
destinazione. Questo ci daràdue combin azioni, però se
uniamo il valore del flag Z
otterremo quattro casi distin-ti. Nei primi due avremom.)qq.l il rpnictrn q1 qa\.+^..^v Ju Jú )LE))U
e Z si sara attivato, o no, a
seconda che il valore del regi-stro sia 0 nel momento del
movimento. Negli ultimi dueesemni oltre :ll',aftivazione!J!| | |H|,
del f lao 7 il rcnistrn dr ravoro
W ha alla fine dell'istruzione,il medesimo valore dell'ope-rando fonte.
Sw#sweqwwqp]dll@lì\]]ìiìWs'ì''ì]i]ìù]$ì]Wls'''''[W!]l!]l!.ìrìsW*]sl!l*lW\ll|wilìììììr]]{l*lf1ffi:è.ì:ì:ìììì]]]]l]\*:\wqfr,']|
it compitatore MPASM
Strumenti di lavoro:
MPASM è un compilato-ro npr PIC Delle l-rc ver-
sioni che esistono attual-mente, noi utiiizzeremoquella per Windows, che
-r^r-i--^ ^i- --"i--+^ installandoouuior rw 9ro LorLoLw
MPLAB. Questo offre il vantaggiodi noter romnil,arc senza uScire
dall'ambiente di sviluppo, cosa
che risulta molto comoda, oltre a
fornire un'interfaccia molto piu
nradpvnle risnetto alla versioneper MS-DOS.
f MPASM oeve iavorare con filecon estensione ASM, li compilerà
e, se non sono staîr cornmessl
errori, darà come risultato altrifiies orresta volta co. estensione
HEX. ll codice HEX e qL,ello chenntr: pqqorp nronr:rrmato nel PIC
per essere eseguito. Se I orog'am-
FileA5M
Compilozionecon MPASM
Errore disintossi? *ri.
FileERR
Files più importanti in relaziane all'MPASM
FileHEX
ma contrene error srnta'ttr-ci ,ad csomnio sp p Stata
scritta maie un'istruzione, onnn \/ennnnn riqnó++:r^ l^l,Ull vcl'VU ,U ITJPqLLoLC lC
nnrmp dpl rnmnil:lnro rl' '|./iluLvrE/
ql
nnqtn dol fila oq:dori*.loPUJLv vL rr'L LruuLL lldlr
riorrÀ nrnoolln irn tile d
e"ore FRR che sara nossi-Ait^ :^^^^.^ ^ ^^t ^,, -t^uiltr r199crc c rc \luartr
saranno contenuti i codicinlonl arrar't frnr,:1-i Chevrvl
dn\/rp'nn rnrrenctrrtr nr Tla
di oroseor,ire lo schema
della fiarira rinrodotl-o in"v-'- '
,altn rrnstr: i: sonrrg1173
segu ta e i files co nvohi,nrio(tn cr hom: :nrho <a h r9ULJLV iLr r! rrrU Ur rLr rL JE I lo
forma srmile non deve
essere confuso con un!à versione di MPASM per MS-DaS ha quesro òspa|7o
s--bq;}trYt";q*P*
organigramma, perché in questo nuovo schema sonomescolati differenti tipi di dati.
I f iles mostrati nella figura sono i più importan-ti, ma non gli unici, dato che vengono generatianche altri tipi di file che per il momento non men-zioneremo.
Ovviamente le finestre che ìllustrano questocapitolo di "Programmazione" non le troveretesul CD, ma servono unicamente come esempio dinrocpdttre d: sporriro ner rcalizzaro il vn(trn nrn-gerro.
il# gi;f *rg# # ffi &f.X* ru f ffi tr L n*-ffi tr&SÍv?
f MPASN/ che utilizzeremo è parte dell'ambiente di svi-
luppo di MPLAB, per cui parlando del primo dobbiamocontinuamente far riferimento a quest'ultimo. Così,
per esempio, in MPLAB tutto è basato sui progetti, i
files si chìamano nodi (nodes), e sono raggruppati performare il progetto, così MPASM si dovrà configurare inh:<o:llo o<inonzo di nr_, ,Jnt progeîto.
Per configurare MPASM per poterlo utilizzare in
MPLAB bisogna seguire i seguenti passi:
1. Si creerà un nuovo progetto (Project>New
,li*.ljE '*r :,.:,:.,:,,:lProiect File+ ['.pitf j
Sri1e*:r -"*l'#s
.$ c:\ *;l archiv*lffi mplab
If er*ample
I template
Finestra di dialogo che appare quando si crea un nuovo progetta
f,anfigurdbné.Tsol* 3
] EreaL tlptiun*H*r+:*:g
Project), dopo di che appa-rirà una finestra di dialogocome quella nella figura.
2. Si dovrà riempire il;^^;--+^ -^^,,Ldil rpu il rurLd ro Lor nome
file" (File Name)con il nomeche vogliamo assegnare al
progetto lad es. "prova") e
cliccare OK Apparirà una
seconda finestra con le
opzronr.
3. All'inizio il modo di
sviluppo (Development
Mode) sara di sola scrittura(Editor Only 16F84). Per il
momento e su'f iciente,pero possiamo ugualmenteprovare a cambiarlo, con il
pulsante "Change", sele-
zioniano il modo simulazio-ne (MPLAB-SIM Simulator),^.-^",,-^,1^ ^,,-^+i ^-,os5ervan0o quanlt parame-
tri dovremo tenere in consi-derazione al momento di
simulare il nostro program-ma.
4. Torniamo pero allafines'ra 11o11o n6zinr., d€lprogetLo nella parte infe-
riore dei a fineslra trov a"noattivo il pulsante per
aEgiungere un nodo (Add
Nocie), clrccandolo faràapparrre una f inestra che ci
i :"+wt+
:'"++ !t] rinu
I fu""r
: "--.'"-'"*"" -r.:llone [Editor Bnlyl :Proce*sor:
ilirlrF-flt!srl*lt} {{}::
f:tll:lffi,tli ì 1:.1:l Ii.++r:Ì+l+r
t q. î: f'Ì 1.
l'lPLAB-lCD Debugger
Ptc16Ffr{ ?
ot all peliphelal* have $uFFort forsimulation.
ial l/tl is nnt simulated"'Details' for additional
information an Flfl EF8{.
r--------------t{rper.metteràdi realizzare| 0K | f,ancel | $rply { l-l.elp Ir -- I I o'-lesta OggraTione.
ir:**iií:,t
F lestra
er 1i
carlbio rt .lmb,e .1i1oa
e,1:r:t:i, : ::ryla1tan1
:li 'l;:
f li ,,;,1 r* i, g,',
Una vclta selezicnato il
fil-., c rccare su "OK" llel
ia::::iiirr
l::ll:::':,
'.:,a,,::,::::
,,.:tt:a:t',:',
:a:a,:,.:,::::
:t:titìit:.:
'l'tllLli:ll:
t:.,,::.:::'
$l,,,,
t:,::.:a,::
;4,4,a,,,:
caso che nessuno dei files già editati faccia al casonnctro np nnsqiàmn creare Uno nUovo con l'onzionp
File>New.
5. Se si seleziona ìl nome del progetto,(prova.hex), del riquadro Project File, si attiveraanche il pulsante di proprietà del nodo (Node
PKidTudFi*asi;-*d"h*
*-------:---l
Properties), che, di conseguenza dovremo cliccare.6 ln nrroct: finoctr- l- -^-- ^:,, i-^^.+-n+a a calarilrLJ(ro lo Lv)o l.JlU llllPUl LolltC E )ElC-
zionare MPASM come linguaggio di programmazione/r -^^,,-^^ T^^r\ -rr,i^+prno dplle nossihili srelte. FattO\ LOt t9UO9E tUUt// Oil [ tLsr I rU UCilq pUJ)rUilr )Lr
questo, cliccheremo OK. Tornera la finestra dellennzinni dol nrnnotln
s
EE:F.ic*u:]ì
l-:---]-= È
lldp I ;
Il'
Ir *] rin*:
Dae@extrode: Fdibo'tt6F81 -___l qle4Ei...l
rure"4ol*j.5oìio |;;g" - ,*=
Plr4É{{ Éùer
tdd li6de--- 1
{l
la..a:.:':.,'::'-a tr
f ''ir,: r.ll:::: {
.:t.: t .- i
nn-ostra per inserire le opztoni del pragetto
i: :.* {snc . '
i
I :' gef f*r*P,F*+et Énah*e
:, .: f*qf 3r+* Etable
*FÈiffi"1*;6,16;1',
,IrritT'ri ff"#:
.St*rr.rr'.+nk+H,*r
Mk=+pr+r.'+,r++r
l:.yt *t+tktí Í* i+.'* +++rttr +Íì+;+
File Name:
e!.dmFle.ósm
List Files of Type
| 5 uur** f iles [". c;-. msml :i
f.qil cryrd I aar | 490 |' t:
Alcuni parametri da tenere rn constderaztone quando si símulera tl programma
, :$# + llll
Directories
";! c:\d archiv*lj mplahj e*ample
I template
c:lalchir*l lmplabOK
|.:IP I
-t-S:- ..- ,*1'"iEonfiq.ndion 3 ' '=-.i.....-......-.=.- -'.-.....-..-'.-.iq
hala.a+midasml E-asmidasml tr-asmmulSxfi-armteÉdme-asm
Buílrting El(AHPLE.HEX. - .
Co&piling EXfi HPLE.É$h:Conmafid line : "C :\*BCHtU*1U,lFLAS\l,lPf,5l,lltIt{-E,(Et'rarning[295] C:\f,FCHIU*1\l'lPLf,E\EX*],|FLE.frS]4 4irarning[267] C:\ÉECHIU-1\l4FLf,El EXf,l'IPLE-ASl,t óError['t131 C:\AnúHtU*1!]{PLnE\E$Él,lPLE-fi511 12ttarnlng [ 2 07 I C : \AECH I U-1 \l'lPLfi S\ EXfi f,lFLE. A$l't 1 6ErrrrÍ1191 È;\RRCHIU-1\l,lPLAS\El{Él4PLE.FSll 17Errúrf1227 C:\ftRCHI$-1\tlPLRB\Et(ÉllPLE.ASJ,I 2gErrúrf"1257 0:\ÉnCHIU-I\t'fFLAB\EI{*HPLE"frSrf 22
/e+ /L+ fx- ft+ lp16F84 /q C:\gFound rlireetiue iÍ co1ufin 1. {Found lahel after cúlunn 1. (L
: Sgmbúl not pr€uiouslg defined: Found label after column 1 - (: $gfibo1 not preuiouEly dÉfined: llLegal. opcode {stop}: Ill-egal condftiDn (E0F Éncoun
Ab'iamo quindi definitoMPASN/ come compilatore perflrpsto nrnnpttn All'interno dt
^,,^-+- -+^--- {i^^-+--quesra sressa Trnestra posstamo)na^r2 <ronlioro :lrr rnr,-r opztont,cnme il tino di e rrorp di cui vor-remmo essere avvisati dall'as-sembler, il sistema di numera-ziana arc a ttzrizro i n:r:mairiL vur rutL I POlOlllELl I
rhe rimannono Ie nnzioni scel-
te sono mostrate nella linea di
comando (Command Line).
il*ffitrxLexH*ru*f$Fg ilxr i:{M ks I À*nL --.
7. Una volta definite le pro-prieta del progetto e r suoi frles,
per compilarlo dovremo sceglterel'opzione Project>Make Project,
tr:mitp l: nrr:lp sp nOn SOnO
ci:ii rnmmoc<i donli orr 'or|, verracpneràlo il file HFX da caricare
^^il- -^-^"i- ..Jì ^"^^",Ilellcl Irle'rì(Jrld U litOg'Amî4.
R Drrr,rntp l,r noneraTjglg lgl{ile HFX il ro.nnil,atore N,lPASN,4
r, nrro .rrniiq,lrp dr t.p tint di even-
ti: errori (errors), awisr (warnings)
^ -^.craai rmnrc rnnc\ ^, -lic llc))d99r 'lllc)>d9c)// I L.lud'l
possono impedire che si crei il f ile
HEX. Nell'help in linea dì NIPLAB
sono descrittr ad uno ad unonrro<ii tini di arronir
Memoria di programrna con il fileHEX caricato.
l,lPLf,E is uÍablP tú fínd úutorrt
Bull-d fallÉó.
.,EI{f,HFLE"HEX",
81933008B09t881 C
1 6658C91.t8m
9792gc$2gctSgB94
289734C08J B3
3t15d6913MÙ909 0
2 6ù'f281bAFFFSFFF
3'FFSFFF
AB82Bg63ùg848065BB6ó
a6a780s8OEB9
60ca6úM666C6E5t66#B06f661 B
60rJg81'6413sB14cB196Bló8417s818E61C
3!e7
E
t51l+21A'14
191úî:î*-fq
?t
,btiz6
Finp<tra rlello nronricra dct 1166c
Suildíng EI(*HPLE.HEX... -t
Cùnpiling EXÉ|4PLE . fiSl'l:comnand linÉ: "c:\AR[HIU-'l\HplÉE\l'tFfiSl'lt,lH.Et(E le+ lL+ Íx- lt,+ tqlíFgtt /q 0:\f;
Euild completed successfullg.
Questa finestra indica che non sana stati commessi errori durante la comptlazione
alrf 8e12clrf gk11
úouls 6t8mu6f Brl4mvf 6x10,1bcf 6x3,888rrF gx1lbtfec 8x3,grgaódwÍ 6xlzf.f 6x12rrÍ Sx13dscfsz 8114gsto looPretlF gxB
clrsdsùls ErgSÉúosf gfJlaoúls E*20mvof ù<16call nplt_Sgoto minàddl$ 6rffaddlw hrffèdrt1( Bxffrddlw kff
Finestra chc >; genera se ci sono orrori di tomptlaZtaFa
3*fswwsm
Scheda delle istruzioni:l'istruzione bsf
i puo dire che insieme alla" bcf " e una delle istruzioni^i,, ,,+il;,--+^ ^^ll-plu uriltlòte rera pro-grammazione del PlC. ll suoohieltivo è di norre a'l un
bit di un registro. ll nome o la posi-zione del reoistro all'interno dellamemoria dei dati, sarà fornito comeprimo parametro di istruzione, e il
numero del bit come secondo para-metro. Sia uno che l'altro iniziano a
contare da 0.
ffissMpx# flseé$-'3$gffiiliXg#*l$ fi lìxs$
A differenza delle istruzioni di movi-mento ouesta istruzione non variarnmnlotempntc il rgplenutO di Un
registro, dato che serve per modifi-care bits individuali, lasciando ilresto così com'è.
Questo è molto utile nell'uso di
alcuni registri specifici, dove ogni bith: rrn sinnif ir:tn p deve essere trat-tato in modo singolo, al momentogiusto, senza che gli altri debbanovariare. Un esempio tipico e il cam-bio di banco; normalmente si lavoranel banco 0, pero nella maggiorparte dei programmi e necessarioaccedere al banco 1 per configurarerrn: <ario di ronictri ,, e oopo lornareal banco 0 per lavorare. ll cambio f raquesti banchi si realizza modif ican-do il bit 5 del registro STATO (regi-
stro che occupa la posizione 03 dellamemoria dei dati). ll bit è conoscru-to come RPO e, dato che la numera-
MNEMONICO
bsfOperozione:
Cicli:
Codice OP:
Flogs:
PARAMETRO
I
Ít **",
;;;;,,di un
t
0t 0t bb bfff ffff
Nessuno.
PARAMETRO
2
b
registro. f
Caratteristiche dell' istruzione bsf.
Uso dell'btruzbne bsf per il cambio di banco
zione dei bits inizia da 0 da destra verso sinistra,occupa la posizione del sesto bit. Nell'esempio si
vede questo cambio dibsf è stata evidenziata
banco; Ia linea dr istruzionein un altro colore.
$c$flwsxra
.rìtììì
Scheda delte istr uzioni :l'istruzione bcf
.ffi uesta istrrrzione realizza l'operazione con-ffiffi' ffi traria alla "bsf "; pone a 0 un bit di un regi-
ffi ffi stro. ll nome o la posizione del registroffig#
W ffi all'interno della memoria dei dati e anche'%.fornito come prim.o parametro
dell'istruZione, e il numero del bit all'internodol reniqtrn aaìmo (oaaìndn n:r:mptro l pvL|
' l:,IJL'
sue caratteristiche sono illustrate nella figu-ra a f ianco.
Cnmc ci nrn nqsorvare il mnemonico divuv vJJr'
ambedue le istruzioni si differenzia solo da
una lettera, la "s" della bsf è sostituita dalla"c" della bcf . Entrambe le lettere indicano il
cambio di comportamento delle istruzioni,dato che il loro significato è porre a uno
tset) e porre a zero (clear) rispettivamente,in questo caso un bit (b) del registro (f).
Questo modo dì nominare le istruzioni lo
troveremo molto spesso nelì'utilizzo del PlC.
zioni non sono solo utilizzate oer ouello e non è dettoche debbano essere utilizzate insieme. Per esempio un
altro uso molto importante che si puo fare con l'istru--i^^^ ^-+ ^ l.
-^... r A n rnrn+ -l^i .^^^.1.+^'; {1.^.zlulle uLl c ld llle>>d d u u lc>cL utrr )cgrdrdr-uil/ lldg)
PARAMETRO PARAMETRO
2
Caratteristiche dell' istruzione bcf
o bandiere, quando queste si attivano. Normalmentequesti segnalatori si attivano in modo singolo, quan-do si nrodLtce un evenln r^hc notrehhe pssere il ter-uv J, vl
mine di un'operazione, il salto ad un'interrupt, ecce-
tera. Questo viene detto attivazione via hardware,
^^.À t- t^"n ric.++i,,^-i^-^ !^.,^ ^^^^"^ fatta Viapelu ld lulu ul>dl-Llvdzruilc ucvc c>)clcsoftware, sarebbe a dire, noi dovremo mettere a 0
questi flags tramite un'istruzione.Per esempio, all'attivarsi del contatore
TMR0, avremo un bit all'interno del registro
INTCON che si pone a 1 per avvisarci di que-
sto fatto. Se vogliamo utilizzare il TMR0 più
volte all'interno di un programma, dobbia-mo rimettere a 0 questo segnalatore ognivolta che si attiva, in questo modo torneràad avvertirci della sua messa a '1 quando il
nrnaoq<n (t nnoté
Questo si fa con l'istruzione bcf, all'inter-no del programma, dove il registro INTCON
sarà il prrmo parametro e il bit di attivazio-ne TMR0 il secondo.
W%XWWX t"*w *X%YW*KK*WW. tu€x
Rtguardo l'istruzione bsf abbiamo già presentato un
esempio, in cui entrambe le istruzioni si utilizzano in
maniera congiunta, una per passare al banco 1 della
memoria dei dati e l'altra per tornare al banco 0.
Poro :nrho ctr nrpsta combinazione si trova nella
maggior parte dei programmi con il PlC, queste istru-
STATO
j*j'iY':.Y*l"-lffi bcf
bcf
bcfbcf
STATO, ZSTATO,2
INTCON, TOIFINTCON,2INTCON
EECONI bcf EECONI, EEIFbcf EECONI,4
Un uso molto comune dell'istruzione bcf è il reset dei seqnalatori
S*#*wessw
Appti cazione pratica:
compilazione det primo programma
na volta visto rl primo programma e l'usodel rnmnil:tnro N/lPA(l\,4 nalfo <ozinni nro-
rodonti ccnrrirpmn nra le faSi Che abbiamOJ!:rv,iL,,,v v,L
do<rrittn nor l'ol:hnr:zinno di rn nraìnottrì
a lr rnmnil:zinno nli 1n ^r^^rammr lrrc:n-E tq Lvrrrvilqzrvrrq ur urlPlU9ldllllrlo, uú)qll-
doci su un esempio concreto
f-inestra di propriela del nodo
flffifrsbHgq}ru# ffig aisé pffi*#ffiT?#1. Eseguire l'ambiente di sviluppo MPLAB, e creare un
progetto di nome primo.pjt
2. Selezionare il nome del progetto in modo che si atti-vi il pulsante di proprietà del nodo.
3. Entrare nella fìnestra di proprietà del nodo
Creazione di un progetto
Attivazione del pulsante di proprietà del nodo
SwSSwswww
Assicurarsi qui, che il linguaggio scelto(Language Tool) sia MPASN/. Dato che non abbiamo^-l;+-+^ il ^"^^"-,-,-e(lrrdio il programma non posstamo sommare nes-sun nodo da assemblare. Uscire dalla f inestra di EditProject.
${ffixYY$"3ffi& #tr$_ tr$A##ffieffi *4e4. Creare un nuovo file (File>New).
5. Scrivere nella finestra corrispondente il programmache diamo come esempio di primo programma in
assembler.
Finestra del nuovo file
Scrittura del programma.
Assegnazione di ,Ln nome al programma
Somma di un file al progetto
Sw$swesswurluìÌrtjÌtl;]j::1::]::]ffi:!t
Questo sarà il programma che più tardi sommere-
mo al progetto.
6. Salvatelo (File>Save As...) con il nome di primo.asm
nella directory dove avete installato MPLAB.
7. Ora che disponiamo di un file (nodo), possiamo apri-
re la finestra dr opzioni del progetto (Project>Edit
Project) per aggiungerlo.
emp4trxL-&Kx*rum ffi ffig Fg$-il#g $"$** pw**ffiYY*B. Ora manderemo a comporre il progetto (Pro-
ject>Make Project), mentre il software compila tutti i
f ile del progetto, nel nostro caso uno solo; apparirà una
finestra di comunicazione.9. Se non sono stati commessi errori nella scrittura del
Compilazione dei file
conpilinq FnIH0.nSí:comand line: "C:\AFCHIu"1\t4PLAB\flPnSfiilItl"ExE le+ l1+ /x- /c* lp1óF8|| /q c:\g
Fuild cospleted 5uccessfuI19.
Finestra di progetto compilato con successo.
SwW&Eeswww
nrnnr:mm: deve,ann36jpe una finestra como nrétt:della figura, che ci informa della compilazione conclu-sa con succesSo.
*ssgffiwex3#ru3 se"$L il*ffigfl il *à:ruf, ffiey*'10. Se si apre la memoria di programma (Win-dow>Program Memory), si puo osservare come verra
caricato ilfile nel PlC. Anche se le linee compilate nella
memoria di programma sono 17, vengono caricatesolo le istruzioni, sarebbe a dire quattro indirizzi di
memoria. A partire dalla linea 5 (indirizzo 0004 di
memoria) quello che appare ha un codice fisso, per
senn,rl,rre chp non r'e alCUn codice caricato.1 1 . All'interno del menù Window possono essere aper-te altre frnestre che forniscono diverse informazioni sul
progetto e sui file.
Finestra della memoia delle istruzioni con il arooramma caricato
Altre finestre che ci forniscono dati sul progetto
Sw$*wwrm
Schede di istruzioni:f istruzione addlw
ffi d istruzione "add" è una delleffi
ffi due istruzioni aritmeticheffi
ffi che puo eseguire un
ffi PIC'16F84: la somma. L'altra
ffi è la sottrazione. ll PIC'16F84
non sa moltiplicare, ne dividere, ne
tanto meno puo fare radici quadrate,
potenze; nulla di tutto questo. Questoe dovuto ad una delle caratteristiche
essenziali del suo insieme d'istruzioni:r- r^.^ -^*^r:-i+\ -^f fa Si Che SianOtd rutu )crrpILrLor Lr rt
molto raoide nell'esecuzione. Nono-<t:nta arro<tn qé <i do<idor: oqonrriro
alcune di queste istruzioni complesse,<i nn<<nnn rncirr riro : n:rf ira d:lla)r vv)Jvr ru Lv)rr uil E q Pqr Lrr E vollqi<trr rzinni <omnliri' La somma nel PIC ha due modalità:"addlw" e "addwf ". La "addlw"somma un valore letterale al contenu-to del registro di lavoro W, e lascia il
st'ultimo.risultato in que-
#%frF4Fg {*ru rs%€ffi€jtrg*ruil &ffiffiLwSupponiamo che il registro di lavoro W contenga I valo-re 05 prima di realizzare
OPERANDO OPERANDOMNEMONICO FONTE DESTINMIONE
oddlw i '.
Operozione: Sommo del volore letterole kol registro di lovoro W
Cicli: I
CodiceOP: I I I I lx kkkk kkkk
Flogs: C, DC, Z
Caratteristiche dell' istruzione addlw.
valore che puo contenere è FF (255). Quando dopoun'operazione come rn questo caso il risultato è mag-giore del suddetto numero, si genera quello che si
conosce come riporto o carry, e per avvisare di questo
fatto sr attiva un flag chiamato nel medesimo modo (C).
DECIMALEroperazione,esi vuoreÈ .ESADECIMAIE" BINARIO
trne dr tacilitarne Ia com- ;
prensrone L' -
vqlore finqle W 04 OOOOO t O0
sommare rl valore esadeci- ì r . lvqlore rnrzroleJVr |ilrrqrL il vurvrL LJUwLll :: | . I
meto FF \/odi:mn n'oiln vqlore lnlzlole u),,- -Jellu ;
che srrccedera dono l'ese- , ffi
cuzione dell'istruzione. i WNella seguente figura si
rappresentaqr.rtotuìto f; oddlwFF "+ FF i llllllll 255mostrando i valori in ildrversi codici numerici, al $ Yfine di facilitarne la com- l
vqlore finqle Wll registro di lavoro, così ?
come gti attrr regrstri dei A ffi
ffim$*e*remw*[email protected]&taaaaaltt l^)::::))::::::)):::|))::::t:
::....:,a:::,1
'a,::l
,::'l:.:l
:Wole, OI
1
:
REGISTRO- I(contiene il digit MSB)
0000 00r r
REGISTRO-2
oooo ol0l
REGISÎRO - 3(contiene il digit LSBI
0000 llllvolore inizi;E
t&
oddwf 3,1
fiv0l
ol
OPERANDO OPERANDOI MNEMoNlco - io-NrÈ DEsTtNAzór.rr i
qddwf , f d
5e DC è messoo I dovremocorreggere
i digits
I lrilizza rlal iltn f)î rJana I anars zìana di <amms1t|/y ur uvYv
Sommo del contenufo del registro fcon il contenuio del registro
di lovoro W. Se d=0 il risultqto
si loscio nel registro di lovoro W,
e se d=l si loscio nello stesso
registro fI
00 0t I I dfff ffffC, DC, Z
oooo o0rr ; oo0o olo! , oo@oooo+l+J DC=l
:
OOOO OOt I , OOOO Ol lO : OOOO OOOO
Y;% {,: {:tt'i:' i {i. \,',.i Yi 1.,,,"r"1::,'7" Y.l} 7-l * ?}'{.
{:,'1,.}1|j\g'rl i;:
I fl:nc I o 7 sono qtà+r +--++-+i ^^^ri- - --.Lr Lrdt LdLr I rfvrl
altri esempi, per cui rìmane solo da
spiegare il co"nooruamento del flagDC. Questo flag va a 1 quando si pro-
duce un riporto nel 4' bit, anziché
nell'8", come succede con i flag C
Viene utilizzato, se necessario, quan-
do bisogna tener conÌo in un regrstro,
il superamento del valore massimo di
un digit.Per esenpio, se un numero e
<rnmnnqtn in tro dinit< pc:dprim:li p
ogni drgit e nemorizzato rn un regi-
'rnÀn c; nrnrlrrro rrn rinnrtn :l)U U, LIUO| rUU ) PTVUULE Ur | | rPWr LW ql
superamento del valore F, ìl flag DC
verra messo a 1; it che sign rica che
dovremo mettere a 0 il registro e
sommare '1 al digìt seguente. Questoe mosTrato graficamerte nella figuraIn aito.Ca ratte r isti ch e d el I' i str u zr o ne a ddwf .
Schede di istruzioni:l'istruzione addwf
istruzione addwf e la secon-
da modalita di somma esi-
sîenfe nel renertorio delle
istruzioni del PlC16FB4. La
somma st realizza fra il con-lónrrln rli rrn ranici66 ^' 'rlci.ci ÀnllrLCt tu LU Ur Ur r rc9r)Lrw L.1udl)ld)l uúlld
memoria dei dati, e il registro di lavo-
ro W.ll ri<rrlt:fn doll'nr-,,, -Jerazrone puo
^.-^"^ l^.-,^+^ ^^l -^...loqimn roni<lrne>>ele ld>LldLU lìcl lllcuEJilrV rEgr)Lrv
o nel registro di lavoro W, secondo il
ri:lnro dol n:r:motrn d
Così corne con l'istruzione addlwsono interessati i flags C, DC e Z.
Operozione:
Cicli:
Codice OP:
Flogs:
';,?',1
Strumenti di lavoro:
ambiente di sviluppoMPLAB possiede tra i suoi
strumenti un srmulatore, il
N/PLAB-SIM. Un simulatorenprmettp di pspnrriro pgl
computer il programma che piu tardisarà registrato nel microcontroller. Si
nrrn rrpdpro rn<ì <o il,, programma sr
comporta come noi pensiamo, il
valore dei registri in ogni momento,p in npnor:lo tr rttn nlellO Che SUCCe-- ,,, y',
de dentro il microcontroller al
momento di eseguire il programma.
ll MPLAB-SIM, in part colare, è pro-oettato npr drp fr rnziont che sonoillustrate nel riquadro seguente. Differenze fondamentali tra i simulatori e qli emulatorì in circuito.
,,',' Nonostante questo, non dobbia-mo confondere un simulatore con un
emulatore in circuito. I simulatorirappresentano la situazione ideale e
non un'esecuzione reale al 100% diun programma, ed hanno delle limi-tazioni. Permettono di eseguire un
codrce, modrficarlo, ed eseguirlonuovamente, simulare gli input sulle
linee d'ingresso, seguire l'esecuzionelinea a linea del programma e i suoi
registri. . .., pero si differenziano dagliemulatori come il MPLAB-ICE in trecose fondamentali:
Assistere l'utente nella verifica dei programmi.
La velo<ità dei simulatori software è sempre minore rispetto a quella degli emulatori. Questo puòessere un vantaggio o uno svantaggio al momento di programmare, dipende dal programma e dall'utente.ln MPLAB-SIM si possono eseguire istruzioni ad una velocità dell'ordine del millisecondo per istruzione,mentre I'esecuzione reale di un'istruzione nel PIC è di un microsecondo.
I simulatori hanno il vantaggio di non necestitare di hardware esterno al PC per il loro utilizzo,per questo se non è necessaria un'esecuzione in tempo reale, di solito sono sufficienti per trovaree coneggere gli errori della maggioranza dei programmi.
il simulatore MPLAB-SIM
GIi stimoli esterni nel MPTAB-SIM sono elaborati una voha ogni ciclo d'istruzione, perciò i segnali di duratainferiore non possono essere captati, e pertanto simulati, cosa che è permessa dagli emulatori in circuito.
Opzioni per cambiare I'ambiente di sviluppo.Funzioni realizzabili con MPLAB-S|M
Sqw##wsmwq*
.:::4,.:,:,aa
:a;,,::*.,::,:::::.::::
:::4.:t
il**urg##*q&ffi*ru*#ng- ffiF$-&ffi trffiffi g-&v*$c&ffiffi
f,#ru ffipL&#-$sffi
Aprendo MPLAB, il modo di sviluppo
standard è di scrittura. Questo significa
che dobbiamo configurarlo prima di
fare una simulazione, altrimenti le
opzioni non saranno accessibiìi. La pro-
cedura per cambiare il modo di lavoro è
contenuta nel menù opzioni (Options>
Development Mode). Eseguendolo, a
seconda del programma installato,
deve apparire una finestra con ìn parte
opzioni accessìbili, così com'è mostrato
rrella figura della pagina precedente.
Permette solo la scrittura e la compilazione dei
programmi, e le funzioni di progetto.
Permette la simulazione dei programmi
oltre la s(rittura e la compilazione. Dobbiamo
scegliere il microcontrollore che si va a simulare
nella parte destra della medesima finestra.
CaraLteristiche dei modi disponibilr
In questo caso
possiamo sce-
gliere fra diffe-renti modi, se-
condo le neces-
sità.
L'N/PLAB-lCD Debugger si vede evidenziato, per-
ché è stato installato sul software come componente
di MPLAB (vedere fascicolo dedicato a MPLAB), se
proviamo a selezionarlo ci apparirà un errore dovuto
al fatto che non abbiamo hardware associato. Inoltre,
tra i microcontrollori che ammettono questa opzionenon appare il PlC16FB4.
Gli altri modi non sono sele-
zionabili, dato che non sono
stati installati nel software, e
nel caso lo fossero non potreb-hero essere scelli noiche non
disponiamo dell'hardware.Per realizzare delle simula-
zioni dobbiamo selezionare la
<arnnrl: nnzinno n-^^^-+-)LLvrruu vp.rvrrL HIUPU)Ld.Possiamo effettuare una prova
e verificare, per ognuna delle
opzioni, le possibilità che ci
off rono i menu di Debug e
Window.
YZ?LW%T W#" &:{{X%%KffiK*H34ffiL Wffiffiffi%KWWL{vTKZWWW
Durante la simulazione delprogramma puo essere inte-rnccrnin,/^À^r^ in rho nn<i-lc))dl lLc vcucrc il r Lr rE vw)l-
Finestra della memoria d'istruzioni con caricato il programma con il quale si sta lavorando
Messaggio d'errore che appare selezionando il MPLAB-ICD Debugger.
Sw$swwryetsffi::t:;;z::;:@stúll;frswaarlttwffiltwlllyl2t8:wllùuuktw, &r4t..n.,..rr:lllltL:,lrrt
Finestra di memoria EEPROM
tramite la quale si modifica un valore
zione si trovano le istruzioni che si stanno esequen-
do.C)rrestn e nossihile attraverso la Finestra diYVLJLV
Memoria del Programma (Program MemoryWindow).
Le informazioni disponibili si possono ottenere in
differenti formati, da scegliere cliccando nell'angolo
superiore sinistro della finestra.
Questi formati sono quelli che ci mostrano il codice
delle istruzioni in esadecimale oppure così com'e stato
scritto, facilitandone la verifica. lnoltre, appaiono infor-
mazioni addizionali sul numero d'ogni istruzione e sulla
posizione all'interno deìla memoria dr programma. Se il
nostro programma lavora con la memoria EEPRON/ dei
dati, possiamo vederne ivalori che contiene nella
EEPROM Window.
E+4 Ee 0à4 tudq Id
02.40 Rereased EJEilPLo.nsl 2-2-2861 22:4st51 PnGE
IC OBJECT CúDE LìNE SOURCE IEXTUNLUE
00004 ;r.**E***t*,r80005:0000ó ; The 1ó bit result is stored in 2 bltes00067 i00568 ; Before callinq the subroùtin€ " npy , the nult0!609 ; be loaded in location nulplr ", and the nulti09810 : nulDnd " The 1ó bit resurt is stored in 1oc06ú11;H,ÒJte&L_byte.
p=1ór84 ; PlClóf8!! is the tarqet000160ú017 Sinclude 'P1óF84.1flc ; Include header fi00!61 tlsf08602 ; P1óF84.lNC Stnndard Header Fi1e, Uersi0n 2-000013ó LISr8801800019 cblock 0110 i lenooraru storaae
lnformazioni addizionali del proqramma assemblato fornito.
Ssp$fuwwsw
liq:06lllq 33@c 0[.!ts$: sr..,f.:""
!1020t&090ó0710s613600S0ú -00 03 0g 00 s& 00 [{00 63 66 00 00 00 ù66A 6! !3 03 06 30 096ú 6ú 0A BC 00 ù0 0c
00 06 úù
3f
EOD OE
30
Nak Her Dèú 8inèr! clar1ó t93lt00ù
pcl 0B 3 00003000rPtioú r,aq Ft 255 11111111itètle 11 24 00011ú69 ,
5 ú000009slorta 36 0 03Ù0Ù066trisi 1F 31 000i1111óftb 06 | 06003s6sfisb ÉF 255 11111111
D0 0 g9Í0330300 0 00500s3c
e.on2 6! 6 90036000cìrth 31 6 30ù30Ù60ntcon 06 0 6000000ú
0s 0 !064300309re 60 C 3360306U
Finestre dei registricon un dato appena modificato.
Dall'opzione Window>Modify potremo modificare
il valore degli indirizzi della EEPROM che ci interessano,per fare la simulazione.
Nella figura corrispondente abbiamo modificato il
valore della posizione 0B rntroducendo il valore '12 esa-
decimale.rr^,-l+.- ^^..ihìli+- p dpridcrc sp il nrnnramma Che\Jll dltld PU))lulllLo E uEllvslc )E lr Prvyra
vogliamo simulare deve essere visualizzato così come lo
abbiamo scritto o con informazioni addizionali che for-nisce il simulatore alla compilazione, come gli indirizzi
d'ogni istruzione, le etichette definite. il numero d'in-dirizzì della memoria d'istruzione non utilizzati, ecc.
Questa informazione è disponibile nella finestra del
listato (Absolute Listing).
La finestra generale dei registrì (Fìle Register
Window) e quella dei registri speciali (Special Funtion
02.40 neleased EJtXPL0.eSh 2-2 2EC1 22145.51 PîGf 1
OBJEEI COOE LIffE SOUNCE IEXT
HCr: . | . i :
w3'i .'. .j , . tr " rrrr r.
'l.:.!l:lc9 0t6t t008 0008 0B!6 00
CB
0ù6&!0n0
--:; 00 61 82 03 94 05 & B7 08
16tr 08 10 00 lt 00 8! 0ú 60
asf !6 0t !6 0g 08 8B 00 00 08
E6?a 00 !8 00 Ù0 ú0 0Ù 0B 60 09
6&t B0 ú0 80 0ú 00 90 00 80 9ú
8C
c!00[600
Alcune finestre utili per realizzare la simulazione
Register Window) generalmente è
molto utile durante una simulaztone.La finestra dei registri speciali con-
tiene solo quelli specif ici, mentrequella generale riunisce sia r registrispecifici sia i generali. Un cambia-mento di valore all'interno di unafinestra, Window > Modify, influenzaambo le finestre se gli rndirizzi esisto-no rn entrambe.
Sono interessanti anche altreopzioni come lo stack delle istruzioni(Stack Window) o informazionr del
Finestra per la determinazione del tipodi oscillatore.
progetto (Project Window). Normal-mente si tengono aperte diverse fine-stre nello stesso tempo. Le utilizzere-mo, così come i diversi modi d'esecu-zione di un programma (menùDebug), a seconda di come procede-
remo con i concetti e la programma-zrone.
&rxr*wx m& wewT&&wy"&wLL& %KW**&XXffiy"&W
Prima di realizzare delle simulazioni,dobbiamo tornare alle finestre del
Sm$*swwre
Finestra per I'abilitazione del Watchdog
modo sviluppo, per vedere che tipod'oscillatore è stato utilizzato e per
determinare la velocità del processo-
re, l'abilitazione o no delWatchdog, oil modo di collocare i punti in cui
vogliamo fermare la simulazione(break points).
Differenti opzioni dei break points
fistruzione INCF
UCSTA ISTTUZIONC
può considerasi
un caso speciale
dell'istruzioneadd, dato che
somma I al
contenuto di un registro, cioè
incrementa di una unità il con-
tenuto del medesimo. ll risul-
tato puo essere portato nel
registro di ìavoro W al posto
del registro di origine, in
modo che quest'ultimo non
venga modificato. Questodinpndp anmp qemnrtr o:lvalore del parametro d.
Osserviamo che l'unicoflan interessato a ouesta
ilfiifi'[i',.j in.rcoNTAToRE,r :jj},StrruroRE,r i
-::s:*-19IH9Ti --* ...-. .-* *i . --, ..iIncremenlodi re in rre unirò i::[ ::li]î]:[:,1 "*k q1
_
lncremento di t
qer rer''* i ;[[33N]î13[E ] ' "JJ*r óóNrnronr,t
Comparazione dell'uso dell'istruzione di somma e incremento
istruzione è Z, per cui se ci interessa controllare i f lagC ola lC n^n n^trom-,,,o usare quesra ts{ruzrone.
$:SsffiPA fl#ru $js$"l|"ffiUtrX#rutr gN*rL'uso oiù comune di ouesta istruzione è nei contatori.
Normalmente i contatori si incre-mentano di una unità per volta, perrr ri nttoct'ictrr rzinno nermorro rnsostanzrale risparmio di tempo se la
compariamo con quella di somma,poiché ogni incremento comportasolo un'istruzione (un ciclo di istru-zione). Infatti per la stessa operazio-ne di incremento realizzata con ì'i-struzione di somma, è necessario
caricare un vaìore (un 1) nel registrodi lavoro W, e poi sommare il regi-stro utilizzato come contatore, al
registro di lavoro W. ll risultato sonodue istruzioni, per cui il tempo sarà
il doppio.Se rl contatore che vogliamo
imnlpmcnt:rp dpvp essere incre-mentato di piu di un'unita per
volta, è meglio impiegare istruzio-ni di somma.
MNEMONICOOPERANDO
FONTEOPERANDO
DESTINAZIONE
Cicli:
Codice OP:
Flog:
incf-*J------:r*--ir--*.*"g -*i
Operozione: incremento di uno unitòdel contenuto del registro f. Se d=Oil risultoto si loscio nel registrodi lovoro W e se d= | si loscionello stesso registro f.l00 I0t0dfff ffffZ
Ca ratteristi che del l' istru zio n e i ncf .
Sw$swwryw
fistruzione DECF
uesta istruzione è
quella opposta alla"incf". Con essa si
può decrementare ilvalore di un registroe portare il risultato
al ronictrn qto<<^ n:l roni<trn di
lavoro W. ll suo flag associato e
nuovamente Z, che andrà a 'l
nrr:ndn il roni<+rn in nrroctinno
arriva a O.
Anche qui, come con l'opera-zione di incremento, quando si
deve decrementare di più di un'u-nità un registro, è meglio farlo con
un'altra istruzione, in questo caso
la sottrazrone.
er$fle4Pg fl**\$AjgSYR{"*trX*ruffi *ffiflrL'uso di questa istruzione è simile
all'istruzione " tncf " , per cur non verrà ripetuta. In ognicaso, parleremo ancora dell'utilizzo di questi parame-
tri in altre istruzioni. Normalmente quando impieghia-mo un registro, faccramo riferimento a questo con un
nome, e non con l'indirizzo che occupa dentro la
memoria di programma. ln realtà e la stessa cosa,
dato che abbiamo dovuto "indicare" al compilatoreche sono uguali. Questo è possibile grazie alle diretti-
ve EQU, che fannorn rri< nn n doro I rn
nome o un'etrchettacon un valore numefl-co. Quindi, dovremo{--^ -++^^-i^^^ -11,,,tdtc d Ltút tztut tu dil u-
so che faremo in<anrritn .li nrro<ti
"nomi", dato che, a
seconda dell'ambien-te in cui li utilizzere-mo, cioè: il parametrodi istruzioni a cui fare-mo riferimento, signi-ficheranno una cosa
o l'altra.
OPERANDO OPERANDOMNEMONICO FONTE DESTINAZIONE
**.-:J***,i***--f*. -- l-r:-*-* :""*-- iOperozione: decremento di un'unitò
del contenuto del registro f.Se d=0 il risultoto si loscionel registro di lovoro W e se d=lsi loscio nello stesso registro f.
Cicli: 1
Codice OP: 00 00.| I dfff ffffFlog: Z
Caratteristiche dell' rstruzione decf.
0I0c
W EOUF EQUCONTATORE EQU
decf
decf
decf
decf
CONTATORE,W
CONTATORE.F
tCoNTATORE
WF
; Decremenlo del registro contotore portondo
; il risultoto ol registro di lovoro W; Decremenio del regisiro contotore portondo
; il risultoto ollo stesso regisiro F
; Coso erroto, doto che CONTATORE non
; corrisponde con 0 o con un l, che è il
; poromeho che serve oll'istruzione decf
; Decremento del registro che occupo lo; posizione 0 dello memorio dei doti (non W)
; portondo il risultoto ollo stesso registro 0
Differenti significati di etichetta a seconda del luogo dove si utilizzano.
ffie*S*www*
Appli cazione pratica: si m ulazionedel primo programma
opo aver vrsto In cosa con-siste il simulatore integra-to N/PLAB, è arrivato il
momento di simulare il
primo programma che
abbiamo fatto e che è stato compila-to con MPASN,4. Ora diamo un'oc-rhir+r : ^llò.+^ cazinni nor rirard,aroLllldLd c 9uc)ttr )EZlvril vsr rrLvruors
l'enunciato del programma, i passi egli aspetti di cui tenere conto. Fattoquesto saremo pronti per cominciarela simulazione.
fl&$axfleffi tr x$_ $3$c*sKTT*1 o Una volta dentro a MPLAB, la prima-^..
^a {ar^ ^ î^rìr^ il nrnnottn rhoL\J)d Ud ldlC C Opl ìlE il lJrvyL LLv !r rL
abbiamo realizzafo, primo.asm, cosa
che si fa mediante il menu di progetto( Project>Open Prolect).
Finestre utili per la simulazione.
2 . ln seguito, se non I'ha fattol'apertura del progetto, apriremo i
file o nodi associati al progetto tra-
mite il menù dei file (File>Open).
rxruffi$Y$q$; #Y3*-x pgKffiè,$ssYe $xMe$L&xx*ruKPpr onni nroncfto dovfemO SCe-
gliere quali finestre sono utili perlerri traÀara nrrolln rho-,,- il program-ma sta facendo e quali rappresen-
tano solo una distrazione, non for-nendo informazioni essenziali.
Alcune opzioni possono dipendered:llo nroforonTa nor<^^îli ^ carìuoils pr srqrsr r4E psrJul ldll, c )oldproprio l'utilizzatore che determi-nera ron l'cs,nerienza iì suo mododi lavorc.3 . Per prima cosa dovremo sce-
gliere come modo di sviluppo
Sw$&wwss'**
Limitazioni di MPLAB-SIM per tl PlCl 6FB4
5i deve fare un Reset ogni volta che si desidera iniziare una srmulazione
gramma. Potrebbe interes-sarci solamente il risultatofinale di un registro oppu-re vedere lo sviluppo di unpezzo del programma su
cui abbiamo dei dubbi sul
funzionamento, o vedere^a..^ +' '++î ^ ^ar+^pd))u d pd)>u LULLd u pdr Lc
dpll'pse r^r rzione dcl oro-I
grarnma. Vedremo alcunedi nrrpsfp onzioni rnn il
nostro prmo esempro.
5 o Prima di eseguire il
programma faremo un
Reset del sistema con l'op-zione Debug>Run>Reset.n^^i ,,^l+- -^^ +^.-i-\J9ilr VUrLd (-ile rdL(rdmo
una simulazione e voglia-mo reinizializzare il siste-
ma, dovremo eff ettuarequesto Reset.
6 . Iniziamo con la prima
simulazione. Selezioniamola simulazione, opzione inclusa dentro a
Options>Development N,4ode. All'interno della finestra
che ci appare selezionando Details, potremo vedere lelimitazioni che ha MPLAB-SIM per il PIC che vogliamo
Animate all'interno del menu Debug>Run. Come si
puo vedere, questa opzione non è di grande utilita,almeno in questo esempio, dato che le nostre tre istru-zinni <i oconrrn nn rrnid:monto a nni il ar rr(nro nr^<o-
..,,,Í. . ,.ì-'
':l.r::......1|.
' ..i::::i
.:....::..
r::*i:iil:-
:'.:a;
.,::1:;:
: , ..:::ara:.
: : t:'::lj,
,).::'.,,,1.::a::9
.:..,aaatÉ
: ,:,:a,tij
-.ú
-v
simulare, nel nostro caso ìl
PIC 16F84.
4 . Dopo aver scelto il modo,
sono già disponibili diversefino<tra fr: nrre<to <ronlioro-,,q YSLJLL JLLY"T'r
mn di lasriare anprte soloquella del programma, quellariai ronictri nonor:li o nrar;
dei registri specifici. Ora dob-biamo disporre le finestre sullocrhprmn So l,a disnnsizione si
effettua tram ite Wi ndows>Ti le
Horizontal dobbiamo ottene-re una serie di finestre dovenoler vprifirarp i dati fonda-mentali.
#PXg#8dg #gn-Léq%xp.$#Lexg*ru9Le opzioni della simulazione
scelta dipendono da cosa ci
interessa ottenere dal pro-
ffiwf:*wwww
Terminato il nostro programma, si prosegue eseguendo posizioni non valide
gue per il resto della
memoria di programma,
che non conttene valort
validi. Nella figura prece-
dente sono visibili le fine-stre rhe s nossono vedere
con questa simulazione.
7 o Utilizzare Debug>Run>Halt
npr fermare la simrrlazio-
ne. Ora possiamo verifica-
re che il valore dei registri
corrisponda con l'enuncia-to del programma: il regi-
stro OC contiene il dato 03
e i registri 0D e 0E conten-,^,,.t^"^,,^,,-t^9Ullu ull vdrurc uvudlc.
\/prifir:rp nr reqfe irrforma-
zioni spostandosi all'irter-no delle varie finestre.
$ o Ripetiamo la stessa
simulazione, prima pero
cambiamo il valore del-^^:-+.^ nn -^^ -,1 ^,regrslro u, con, ao esem-
Modifica del valore di un registro
pio,07. Così, eseguendo il programma, noteremomeglio che i registri 0D e 0E prendono lo stesso valore.
ll cambio del valore di un reqistro, si fa tramite la fine-
stra Window>Modify. Dovremo scrivere I'indtrizzo(Address)e il dato (Data)che si desiderano, e cliccare tl
pulsante di scrittura (Write) per far sì che la variazione
abbia effetto.9.ll seguente tipo di
simulazione lo troviamo ìn
Debug>Run>Run. Per no-
tare l'eff etto dobbiamotornare a mettere OO nei
registri 0C e 0E, seguendo
i passi del punto preceden-
te di modifica dei registri,poi eseguiremo il program-ma (Debug>Run>Run) e lofermeremo (Debug>Run>
Halt). Ci appariranno i regi-
stri secondo quanto predi-
sposto dal programma. La
differenza con il tipo di
sim u Iazione precedente,
Animate, sta nel fatto che
noi non vediamo come si
modif icano i registri,anche se internamente il
0rocesso e lo stesso. e il
PC, eseguito il nostro codi-Scelta del modo di simulazione passo a passo
ffiw#srurwww
::,:.:4,
:',,1,
,i*.:,)1.;,:rì:::tl:
ce continua con gìi indirizzi
successivi della memoria dì
programma.
10 o In ultimo eseguiamo il
programma istruzione per
istruzione. Questo modo viene
anche detto tracciare, dall'in-glese "to trace". lnizializ-Tcrpmo i renistri rome nel casonrorpdpntp oltro: ros,ettare il
sistema. Andiamo all'opzioneDebug>Run>Step. Notiamoche il tasto funzione è F7.
11 . Ogni volta che premiamo
F7 verrà eseguita una sola
tstruzrone e potremo o5servareil ri:lnra nroqn d:i rani<tri .li
volta in volta. Le variazioni
all'interno dei registri sono
segnaìate dal coìore rosso, cosl
come l'istruzione che sara ese-
guita in seguito. La figura
' 't'':
mostra il processo dopo l'esecuzione della seconda
istruzione; a DATOl è gia stato spostato il valore 03,
il PC (pcl) punta ancora la seconda posizione della
meùoria delle istruzioni, e appare evidenziata la terza
istruzione, che sara la prossima ad essere eseguita.
12 . Se in un determinato momento ci interessa vedere
solo quello che succede passo a passo in una parte del pro-
gramma, e non nel programma completo, si puo modifi-r,are il valorp dpl PC ner farlo
iniziare dal punto che ci inte-
ressa. Questo si fa con l'op-
zione Debug>Run>Change
Program Counter.l'rso di oilesta onzione
è tipico in programmi moltolunghi, dove la simulazione-^-^l^+-comprera pdsso d pa55O
risulterebbe molto noiosa.
l'onzione di simr rlazione
passo a passo, generalmen-
te e la piu usata quando si
intzta a programmare, per
collaudare le nuove funzionidelle istruzìoni Introducete
ora in questo stesso pro-
gramma le istruzioni appre-
se sinora, assemblatele e
realizzale la loro simulazio-no riodrota 6|16 15 566hicciI rc/ vLurL LL Lr rL il | vvll ll))l-
mo tempo dominerete il
loro funzionamento.
lnformazioni ottenute con I'esecuzione passo a passo
Moditica del PC per iniziare la stmulaziane da un òltro punla
F es$Fqe* {:* re
fistruzione G0T0
iamo arrivati all'istruzione tabù della mag-gior parte dei linguaggi di programmazioneche la possiedono. Molti libri di program-mazione strutturata, hanno naturalmentern r:nitnln rho cnion:: fnndn nro<ta
istruzione, alla f ine del quale si raccomanda di utiliz-zarla il meno possibile. Noi non abbiamo altra scelta
che utilrzzarla, dato che nel PIC è l'unico modo per
fare un salto incondizionato, cioè, andare ad un'altraparte del programma in modo incondizionato, inoltreè la base principale dei salti condizionati, come vedre-
mo piu avanti. Pertanto, vale la pena imparare l'usocorretto di questa istruzione, per non dover poi escla-
mare: "chiaro! quando si usa questa istruzione nessun
programma gira".ll ciclo di esecuzione di questa istruzione, sarebbe
a dire il tempo necessario ad essere eseguita, è | dop-pio di quello normale, questo signifìca che un PIC fun-zionante a 4 Mllz impiega 2 ms al posto di uno.
Questo perché l'architettura segmentata del PIC men-
tre esegue un'istruzione punta alla prossima da ese-nrrira rho q.i sr rnnonp <i: in spnupnTe Po'^ I- ^^+^J-"'' -"'-'--rr .,, ,,:--,,--. -lu ld 9uLU
salta da un'altra parte del programma, rompendo Ia
senlenza ner crri l'istrrzione senrrente non e cono-sciuta, e si impiega un altro ciclo per ottenere la nuova
rstruzrone.
ffiSffi *$ $3K fl#fd L*XSY${X.$Xg#N ffi ffi #K{3
Nella fìgura possiamo osservare due usi dell'istruzionegoto, il primo corretto e il secondo sbagliato. Come si
ouo vedere nel ouadro delle caratterrstiche dell'istru-zione, dopo il mnemonico della medesima si mette un
parametro, che è indicato come letterale, e che nor-malmente è un'etichetta che raporesenta I'indirizzo di
destinazione: dove si desidera andare. La programma-
zione strutturata, dice che se si salta da una subrouti-ne a un'altra, bisogna andare all'inizio di questa e non
a una parte interna della medesima, per non rompere
la struttura del programma rappresentato dall'organr-
golo
inizio-modulo I
metà-modulo I
inizio - modulo I
se*
islruzione Iistruzione 2islruzione 3
islruzione 4islruzione 5goto meto-modulo Iislrvzione 7istruzione 8
goto inizio-modulo I
golo
inizio-modulo I
metù-modulo I
mezzo-modulo i...........................-.-.-.-....-...-,,.. .J
,9ltS
is*ruzione Iistruzione 2islruzione 3
islruzione 4islruzione 5
soro i{:!g.:r-:*!-"-."1--=_iislruzione 7
soto !ni:i-"---n,9-d-U|-"'.!- .. I
soto '-'t":_ta:n..S{qJg. !-.. .. .ì
Utilizzo corretto ed errato dell'istruzione qoto
nr2mm: l- n<ì <a
si considera il
nrimn o<omntn
dove l'etichetta1è all'inizio di
una subroutinenon c e ne5sun
problema; il pro-kt^*- -,À -^ -^
me net seconOopcemnin l'oti--l^^++-'t ^ ^-.+^Lr rcLLd I g porLc
di un'altra sub-routine.
Sep$&ewwrq*
PARAMETRO PARAMETROMNEMONICO I 2
goto IOperozione; solto incondizionoto oll'indirizzo
segnoto come k, che potrebbeessere un'elichetto.
Cicli: 2
Codice OP: l0 I kkk kkkk kkkk
Flogs: nessuno
Caratteristiche dell' istruzione goto
fistruzione NOP
ffi d rstruzione nop e una delleffiW nir r qomnliri À.
' '+ili..-"^ ^ffiffi Pru JEr rvilLr uo uLilr41drc, c
ffi nello stesso tempo e quel-
ffi la meno ulilizzala E sem-ffiffilW plice perche non ha para-
metri, e quindi non puo essere impie-gata male, ed anche se fosse ulilizza-ta in modo indebito, l'unico inconve-nipntp r-hc notrphho nrovocare Sareb-
be una perdita di tempo equivalentead un ciclo di istruzione, dato che non
fa niente e non varia nessun f lag. Nel
suo codice OP le due x indicano chein orrella nosizione si oossono ave.e
zeri o uno indistintamente.
fi5fleqF$;
{*ru à.'gsYkr.jr3#Fi f, ru#sLa natura stessa dell'istruzione rendedifficile immaginare un caso in cuisianecessario il suo utilizzo. Alcuni pro-^"-,---+^.; l-,,+ili---granrmdtor ra uuilzzano In sosltlU-
MNEMONICO
Modi diversi di posizronare le rstruztoni nella memcria di programma
ORGgotoORGgoto
0rNrzro4INTER
ORGgoionopnopnopgoto
0tNtzto
INTER
MEMORIA DI PROGRAMMA MEMORIA DI PROGRAMMA
00
0l
02
03
04
05
00
0l
02
03
04
05
zione della direttiva ORG che, come ricordiamo, mandaal compilatore l'indicazione che la posizione de l'istru-zione successiva è all'indirizzo indicato dal suo para-
metro. Come abbiamo gra visto, in questo modo si
ottiene di mettere all'induizzo 0 la prima istruzione delprogramma, cosa necessaria, dato che quando ìnizierà
l'esecuzione dei proqramma, è lì che si deve
nop
PARAMETRO PARAMETRO
t2lrovare la nr,ma istrr rzigng. Abbiamo ancherrn altro indirizzo sneciale nella memoria dej
codici. l'induizzo 04. ln questa posizione, il
nrn.trqqrìrtr \/À À .o(.Are la rouiine di Serviziodall'iniarrr rnt nrr:ndn <o no nrnnlrr.a rrnAr! vrvuuLL urrv,
in mndn rho il srn nÒ<ln nón nnq(a o((oro
occupato da nessun'altra istruzione.Nell'esemnio si mostrano due modi di rea-' 'Y'" -'
lizzare questo, utilizzando l'istruzione nop e
con la direttiva ORG. Anche se il risultatonella memoria dei codici può apparirediverso, l'esecuzione del programma e la
stessa. In alcuni casi, inoltre, si utilizza que-
sta istruzione nei cicli, cone metodo per
costruire delle routine di temporizzazione.
Operozione:
Cicli:
CodiceFlogs:
Ca ratteri sti ch e del I' istruzi on e no p
è un'operozione che non
fo nullo.1I
OP: 00 0000 0xx0 0000nessuno
Sw$$wsww*
Programm azione:struttura di un programma
.:,zi$Èi*,, uando si affronta la realizzazione di un pro- :
.:granî"na, sia esso in assembler o in o.ra siasr
gd ahro linguaggro di orogranrmazione, molte.'""."-...À1+ volte non si sa bene da dove iniziare, soprat- :
-!t:::
essere molto ;tile creare una specie d' piantina che ci
faciiitii||avoro,perevitareerroriodomrssioniindeside-rate.
Orro<t: ni:ntin: ", Ottiene faCilmente, datO Che UnYriLJLu Y's' I r,, ,u
programma assembler, e composto da varie parti chìa-
P=tip di procesore
Sistemo di numerozione
volore Elichette
,,
,.
È
c
!l
i: ilsI:: RADIX
i ciclo
r0uflne-rnîera
,
L
ramente differenziate. La tabella mostra in modo sche-
mat co queste parti. Spregheremo per prima cosa alcu-
ne convenzioni utilizzate nella realizzazione di questeni.rntinp lrlpll.. rninnna di sinistra scriveremo le eti-chette delle rouiine e delie subroutine, nella colonnaranl-rrla c.r,\tòrò6^ la icl-r rzinni \/oró ó
^rAnrio nar nrn-lEt tLrorg )L j vgrgr ru rc r)Li uzrur il vqrs s PrwPr rs usr P' v
gramma, che devono rispet"tare l'esatta nomenclaturaprevista per il nostro microcontroller. Infine, neìla
colonna di destra, scriveremo i commenti ed i nomi
che vorremo dare alle varìe sezioni del oroqramma.
Configurozione
Progrommo principole
Rouline interrupt
ORG
goto
ORG
g0f0
ORG
eftheilo-inizio
0
etichetto inizio
4
rouline-inler
istruzioni
Configurozioni
Progrommo principole
Rouline di hotlomenfo dell'intenupt
Fine
obbligatorio opzìonale e mullrplo
{ì:.,:r. .:.i:- .:l.r.,I.r; q.
ìì-t, ìì,ì, t..,.,r,.,..u.,,t..i-'
parte di LulLo tl progrdm*2 ,s,-pilatore per il PIC
Direttivo di fine progrommo
,:',':'
:raìiìtì
':,ii.ì:ìììì
tl
ficlo infinilo
;INTERRUPI TMRO E RBO ABILIAN
;TMRO RA4;INTEFRONTE Dl SAUTA
;IMR0 SENZA PRESCATER
;Cl ASSlCURl/ritO CHE SIA SPENIO
;10 lMPUl.Sl PER lL I|MER
;ROUTINE Dl INTERRUPT. 5e chiomofq
;ATIIVIAM0 lt LAMPEGGIATORE
;CANCEttllrlvl0 lt ttAG Dl INTERRUPT
;AfTlVlhlv{O IL I.AMPEGGIATORE
;CANCEII|AMOlL FIAG Dl IMERRUPT
1;r{j lÌì:ii:i !,-il(i inizi: rnn dirottivo nor il nrnroc(^ra
in pratica, "ordini" che il comprlatoredovrà tenere conto ai momento di
"^-1,--^"^ llil^ ^.-'-l^-i'-.1^ . ^-.+;"^t(ót)LLdt c | |tc c)dueLil |dtc/ d iJdt Lrtc
dalle so"genti. Queste direttive non si
traducono in istruzioni, dato che non-r indirizzi dellavot il tu ou uLLuPctc
memoria di programma. Nello sche-
ma appajono due dirett;ve molto fre-nrrpnti :nrhp sp np esistono moltealtre: la prima informa del tipo di PlC,
e la seconda determina il codice stan-dard dei dati, cioe se i dati saranno in
esadecimale, decimale o in binario....Cone abbiamo visro in arcuni ese'npi,di sonrritn :rriri:nn ic definizronr delleotirhottp nor riforirei: roni<rri rho
sono valori, con un nome al posto di
un numero.Nella zora di configurazione si in,-
zializzano i renisîri cl-e si utilizzerannonel nrnnramma Orrc5f6 si fa nella
zona chiamata "etichetta inizio" e
quesra configurazrone si realizza con
istruzioni normali. Prima di questo,
considerata anche come conf ig urazio-ne, la direttiva ORG indica al compila-tore, con differenti parametri, dove
deve collocare ie d''ferenti parti delprogramma nella memoria dei codice.Nella posizione 0 e obbligatorio met-tere la nrima istrr rzione che dovra
,l+- ^^"--l-^^+^,,^/^+ic)>ctc c)cguttd, ltu||diltrcILc ut' cLt-
chetta come inizio, start, etc., o ia
-l^i-*-+- a ^,,^-+1Lr ilor rdLo o Liuc)Lc.
Nella posizione 4, come vedremo^i,, -.,-^+i t-i-^^^- ^^rre l,in,zio dellaPru cvol rLr, ur)w9r ro PUrorrtino rhp no<tir: l'intorrr rnt il vpttn-
re di interrupt.ll modo ideale per progettare un
r a ci+r nlnnn f rrtfnP,U9lOllllllO E )lLUClC uvvv LULLv
n, rln+^ monzinnrtn in nrarodanzr -vuqr rLU I I rcr r4rvr rqLv il | PrqLcuqr rzq -
un ciclo da cui si chiamano le routinesche realmente real,zzano il lavoro,
normalmente in modo ciclico.
*l
IED
IAMPEGGIAIORE
BUMPER
|MPUr.Sr
P=lót84
"Regx84.inc"
"Mocros.inc"
PORTB,I.ED
INTCON,INTT
PORTB,IAMPEGGIATORE
INTCON,TOIT
ctcto
STATUS,RPO
b'0000000t'
TRISB
b'10000'
TRISA
b't0t | 0000'
rN1CoN
b'01 I t000'
OPTION.REG
STAIUS,RPO
PORTB,IAMPEGGIAIORE
PORTB,IED
ró
TMRO
tNTCoN,T0tt
IMPUISI
INTCON,INTT
il5t
INCTUDE
INCI.UDE
I
6
0
rNrzt0
4
INTER
CONTIGU
EQU
EQU
0R0
g0î0
ORG
golo
tNtzto
crcL0
CONIIGU
coll
ovonti
GOTO
bsf
movlw
movw{
movw
movwf
movw
movwf
movlw
movwf
kfbcf
bcf
movlw
movwf
refurn
sl0p
btfsc
g0f0
btfsc
reilie
',::l:
t,,l,l,
INTER
bsf
kfretfie
bsf
kfre#ie
TND
Programma esempta che mostra diver>e parti Lipiche
6+*$*****1.*
Questo è cro che normalmente èotirhott:tn.^mo nr^r-Jramma pflncr-
a
LffiffilT- * ::#.':": "' -rórilesg,4;trtrllffi!;J!iriFè1É-H6&d.-r4-!ir-r:ea€3?q+l:?Éi;aISfEn stop ;RAUTINE Ol IilTEBnUZt0HE-Se p
Coúpilirg ESEIiFI0 -ÉSl,l:Connand line: "C:\ARCHIU^1\flPLCB\WASflUIH-EXE lp16îA4 lq C:\AfiCHIU-1\flPLAB\ESEHPIO-ASl"Uarninq[285] C:\CECHIU-1\HPLAB\ESEHPI0"ASil 4 : Found directiue in coluan 1- (LISI)Uarning[285] C:\CECHIU-1\HPLAB\ESEHPI0"ASil 4 : Found directiue in coluan 1- (LISI) lSarning[287] C:\0BCHI{r1\flPLAB\ESEf{PI0.ASl'l 6 : Found label after coluno 1. {LED)ErrBra113l C:\AECÍIU-1\ilPtgB\ESFHPI0-ASx 12 : îilnhnl not nrFuinr<lrr dFfinpd lTllFflìErrBrlll3l C:\AECflIU-1\HPLSB\ESEHPI0-ÉSX 12 : synbal not preuiouslg defined (IílEfl)tarniîg[267] C:\nÉCHIU-1\HPLîB\ESEhPI0,ASr l6 : Fsund 1abe1 after colunn 1- (auaoti]Error[113] C:\nBCHIU-1\ilPLAB\ESEHPI0.AS]l 17 : Sgnbol not preuiouqlg defined (8ucle]Errgrfl22l C:\AfiC$IU 1\HFLÉÉ\ESEHPIo,ASfl 2s : Ilfegal opcsde (stop)ErrorÍ125f C:\neCHIU-1\ilPLAE\ESEHPI0-ASf 22 I I lcgal condition (f0F encountprecl before EHD ol
I4PLAB is unable to find output file "ESEhPl0-HÉX"-
Build failed -
Uir;adl ' l1E :
Modo di awiso degli errori da pane dell'assembler.
pale; anche se e una buona forma di programmazione,
non è l'unica, e comunque, non è obbligatoria.ln seguito troveremo le differenti subroutines, da cui
si rientra con l'istruzione retlw o return, a seconda del
caso, e anche la routine di trattamento dell'interrupt. Si
termina con la direttiva di fine del orooramma END.
trffi #fr ffi eiljli Í4 e ;?i g tr€ g}1$#
Tuttavia, non tutte le parti sono obblìgatorie, per cuipuo succedere che qualcuna non ci sia. Aì limite pos-
siamo iniziare con la direttiva LIST, non definire etichet-te, lavorare con gli induizzi, mettere solo una ORG conparametro 0, che non configuri nulla e non utilizzaresubroutines. Obbligatoriamente dovremo terminarecon la direttiva END.
Comunque questo non e abituale, poiche lo sche-
ma in genere viene utilizzato al completo e molte diqueste parti si ripetono diverse volte. L'organigrammamostra oltre all'ordine delle differenti parti di un pro-gramma, quelle che possono essere saltatg g 6rrrollo rho
oossono essere rioetute.Se SentriamO le {1p6ra rrodiemn rho nr rallg 691{;6lj
indicano la sequenza delle diverse parti. Le f recce a sini-stra indicano la possibilita disaltare il quadro a cui gira-
no intorno, passando alla parte seguente. Le frecce di
destra, che puntano verso l'alto, indicano che la parte
ouò essere rioetuta tutte le volte necessarie. Così vedia-mo che sono obbligatorie alcune direttive, alcune con-
figurazioni, il programma principale e
la direttiva di fine programma. Le uni-che parti che devono essere uniche,sono: il programma principale, la rou-tine di trattamento dell'interrupt e la
fine del programma.
fl:trffiF{# ffffi&?}"il*ll programma compilatore mostrato.Ama a<amnin rnntiano tr rtti nli ola-LVr rrE sjs rrPrv lvr rLrgr rE Lu LLt vil Etc-
menti visti, anche se la sua strutturanon è perfettamente uguale alloschema iniziale - così come abbiamodetto - la soluzione ad un problema
non è unica. Si inizia con tre direttiveuna di queste ripetuta. In seguito ven-gono le definizioni delle due etichet-+^ tr--^^^l^ l- -^^{i^,,"--:^^^ -Al,-;-LE. I OLqr rUU rO LUr il ìVUrO4rUr rC, dUUrd-
mo una parte che non effettua diret-tamente fino a quando non si chiamauna routine per realizzarla (CONFI-
GU), nella quale si configurano 4 registri, e si inizializ--îh^ +r^ .,-"i-t-;li | ^ ^lrole ,,avanti,, e ,,StOn,,
SOnO UnaZOIIV LIC VOlloulll. LE PqrvrL L rLvV
specie di subroutine chiamate macro, che si studieran-no in sezioni successive. ll programma principale consi-ste unicamente in un ciclo infinito da cui si aspetta ad
uscire mediante interrupt.f interrupt inizia con l'etichetta INTER, dove, al con-
trario di cosa puo apparire, si lavora con una sola rou-
tine di trattamento dell'interrupt anche se e divrsa in
vari rami dovuti al fatto che possono esistere diverse
cause che la provocano. La fine del programma è
segnata dalla direttiva END.
Se siete stati canari di idpntilir:ro nnngnS lgllpn:rti :nche se ron oralcuna di esse non abbiamo mail-,.^--+^ -:^+^ ^:: i^ .,-À^ Ài r^ali??ar^ il ,,aqf 66 566_ldVUIdLU, >lete 9ld lll 9ldUU Ul ledllLLdle ll V(rJLrv prv
gramma, che sara sempre piu complesso, man manoche andremo avanti.
{rqJ' .'}i i**! *q#SffiiÀf-:i.l1I programmi sorgente possono essere scritti con qua-
lunque editor di testo a caratteri ASCll.
Guardando nella struttura che segue, vedremo le
divprcp n:rti rhp nÒqcono formarlo.rr PvJJv
Classificheremo ora il suo contenuto in altro modo,rinò rnmo finn nli d:ti rho n^((^nn.^nîonor ,-, e ognunadi queste parti. Così il compiìatore, durante I'esecuzio-ne, verificherà che idati ditutte le linee delfile siano di
uno di questi quattro tipi: etichette, mnemonici, ope-
SwS4*ealus*w*e
randì o commenti. Questi dati devo-no assecondare a norme di scrittura e
a norme di posizione relativa che
occupano gli uni rispetto agli altri.l-nma rannl: nonor:lo nor 1r rtli
ouesti la loro scrittura non deve^--^.J^-^ i 4trtr --"^++^.i -,,11- -+^---CLLCUCff I LJ) tót dLLCt| )Uild )LE))O
lrnea.
ilYgfrsil3"Yffi
Una etichetta deve iniziare nella
colonna 1 e puo essere seguita da
due punti (:), spazi, tabulazioni e salti
in linea. Possono contenere fino a 32
caratteri, che possono essere alfanu-merici, e includere un tratto basso e
tl segno di punto interrogativo. Però
il primo carattere non puo essere
movf STATO,W
etichetlol movf STATO,W
EiichetÌo2:movlw 9
movf STATO,W
STATO,W
eticheftoó movf ESTADOW
nrrmorirn no di connn
Come standard si differenziano le maiuscole e leminuscole, di modo che l'etichetta "ciclo" e "ClCLO"
siano differenti, a meno che non si affermi il contrariomediante un comando speciale. Se si utilizzano i duepunti per terminare una dichiarazione di una etichetta,nrro<f i nnn (nnn nrpci rnmp n:rtp doll'ofirhorr,a m:vuLJr, I
come un operatore. Nella figura le etichette definitealla sinistra sono corrette, e quelle a destra sono sba-nli:to | ^ <fo(<n <i nrrn diro dol roctn donli ocr-'r" --''ffiPl
li:$g:ffi##:{-iGli mnemonici delle istruzioni, le direttive del compila-tore e le chiamate alle macro devono inrziare a partire
dalla colonna 2. Se l'istruzione segue una etichettanella medesima linea, deve essere messa tra due punti,
spazi in bianco o tabulati. Si possono scrivere in minu-scolo o maiuscolo indistintamente.
*Fíf{i\ri *9Devono essere separati dai mnemonici da uno o piucn:zi n trhrrlrzinni (o rrn: icl-rr rzinno h: nirrdi rrn
^nó-)pdz I u tóuuloLlvl ll. Jc ul lo l)Ll uzlvl lg I lo Pru ul ul I vPq-
rrndn nrrocii dorinnn a<(aro qol12r:r n: rrn: v rnnl:
.... lltsi.'''lfs
Tr rttn nrrolln rhp ci nnno dnnO rjn nlnt6 p,,irnnl: / \- - r vll9wlo \r/
è trattato come un commento fino alla fine della
eiicheilo I
elichetto2:
_etichetto3?Etichetto 4
Iì1'."-..--..-* ,.*;.-*.. ,,*-.......,*.."*.,.",*'.,.,,,,,,J
Etichette formulate in maniera corretta e scorretta
Etichetto5
?etichettoó
Tetichetto
linea. Se il commento occupa più
di una linea dovremo mettere unpunto e virgola all'inizio di ognu-n: nli a<<o (eamo nncci:mn rrado-Itd ut c))E rLvI tq pu))ratrr(/ vcuc-ra nonli o<omni n ir:fi\rrLVil LJL',ry, i lLoLl/.
Quando il compiiatore incontraprrori di nrresto tinn ci avvisa e
non nonpre il filo che doveva^-^^,,i+^
eticheilol movf
Etichettq2:movlw
STATO,W ;movimenloI ;movimento di un
;volore letterole
STATO,W mnemonrco
etichettoó movf STATOW ;tutfosboglioto
Commenti formulati bene e formulati male
movfU5T
ovonlieticheito I movfEtichetto2:movf
_etichetto3? MovfEticheilo 4
movfU5T
ovontiEtichetto5movf
Mnemonici, direttive e chramate a macro corrette e sbagliate
Operandi formulati in maniera corretta e scorretta
Sw#*:sqr{:svaF