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'
A^t+t -^rarati | | ror rE. rvrvrLr ^,.-^tt vrLLUrr oPf
--.1^
À
elettronicr di uti_ lizzo comune, ad esempio un videoregistratrrrp 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 abbiamo intorno a noi, devono essere dotati di un programma per poter eseguire le loro funzioni. Programmare non è altro che indicare a un orocessore ouello che deve fare
rrnI lrl linnrr:nnin lln ul l9uo99lw
rho Ll lq nro<tn 9uLJLv
rnmnranrio rrprL. ruL. Lvr
nrr:nÀn l-ncì !v)l 9uol luu
premiamo il tasto play del video, le istruzioni che sono state 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 Y", .,, d::dpssn diventpremo rla semolici utiliz-l^ll--+^"i 4OtUt tuEilo
+^-^^l^^iLEL|tutuvto,
-L^.^-li--.^^ rcdil//drr(, a vrw9ro|iltroLv +^.i rLtrE
-^^r:--- Ur -r+.i O ner noi stessi Per orteStO dOb_ ^^iil ^^. ^ri OrLr oPPilLO4 Ptrr 9il biamo strutturare il nostro pensiero e tradurlo in uno I
dei molti linguaggi di programmazione esistenti. Un lin-
S*#*wwrs
da ' Chiedere chiave di
;--
accesso all'utente.
risolvere;
si
vede che fun-
'Girare la chiave.
Aona male e che non dà
. Se la chiave è
rr:lnri
.Leggere chiave.
giilsta
aprire la porta. .Se la chiave non è giusta. ..
Organigramma
i
<norrii
Stesura del programma principale
però non indica dove c'è l'erro-
Compìlazìone del pf0gramma
re. ll nostro caso
è aggravato dal fatto che si trat-
ta or un
pro-
gramma
che
Errore di sintassi?
#
deve funzionare
con un naroware, e non in un
Simulazione del pr0gramma
aÒmn||tér nor Le diverse fasi per la realizzazione
di un programma
cui
potrebbe
dinondorp del cattrvo f u nzio-
quello che viene chiamato pseudo-codice, che è la rappresentazione del linguaggio che noi utilizziamo - il Linguaggio Naturale - ìn forma strutturata. ll risultato finale è il programma.
programma, ma da problemi
*g
$*&S$:
namento
di sviluppo
Anrho <e l'a<no-
Problemi
rienza
hardware?
f
orn ita
;^ -^-ì ^,,^-+i Ld)t, il t vuc)U noi drsponiamo
migliore alleata
Monlaggio del
di strumenti che
ci
Problemi
facilitano
o semantico. Una volta scelto il linguaggio di programmazione,
nrra<tn
bisognerà conoscerlo per non commettere errori di tipo sintattico. La conoscenza del programma è facile, basta
sono rappresen-
ll primo caso e quello di un programma che funziona male, però non presenta errori sintattici, ed è difficile
Prova con il sistema
controllato.
sia il linguaggio di programmazione che utilizzeremo. Per questo, in questa prima fase del programma, dobbiamo avere un'idea chiara di quello che il programma stesso deve fare, per non generare errori di tipo logico
$?.R*S*Sîí *3 treài*ffi*
microprocessore
dell'hardware
J-ll- prdLrLd ^"-+:-- cÀ ludild rd
ta programmazione di Monty. ll nostro linguaggio sarà l'Assembler, e sfateremo il tipico mito che sia uno dei linguaggi di programmazione piu difficili.
# Scrittura del
del
Un programma scritto in pseudo-codice deve servire da base per la realizzazione del programma finale, quale
seguire le norme che lo regolano. Dovremo conoscere la struttura del programma nel suo linguaggio, i tipi di dati che si possono ulilizzare e i loro possibili valori, l'insieme di istruzioni, la struttura di controllo, e tutte le rnrrat rnse rhe snipnhoromn srrrroq<irrampnttr nor lz ru trt v I Jvrryr tq LUt tE(-
sintassi?
non
guaggio di programmazione è un insieme di regole, simboli e parole speciali per costruire un programma. Come passo intermedio bisogna trasformare l'idea in
Yflffifl4sru#L*#XÉs
Enore di
l'errore
hardware?
lrrrnrn
Nella
ffi
figura
+r+i ; Lq Lr I ^-.-i vo))t
Montaggio finale
,-Juc
segurre quando
un
progello,
come
la
pro-
Fs<i nar ._ ls raalízzszinna .- di ._-,r-, _, un progefto
grammazione del nostro microrobot, ha una parte software e una !p<rrizinno - ULJ!r ^-'+^ h-'!'^'-'^ di uyttUtru nnnrrnn di nrro<ti lldlUVVdlC. |Ld r.rvrrs ut PdILE passi verrà fatta nei fascrcoii seguenti. Osserviamo attentamente le differenze dei testi all'interno dei rettangoli, e all'interno dei rombi. Le etichette dei dati, la forma di rappresentazione delle azioni, sono tutti dati essenziali al momento di proqrammare e che meritano ,,^u ro
^-^;^Pogil
î ^-r+^ rd d pd r Lc.
$*S$e*es$w€P
:.:iili ì.:ìi::-:l
Strumenti di lavoro: i linguaggi di programm azione
La differenza fra il programmare con linguaggi di dlto livello o con uno dt basso livello, e analoga ad agg i u sta re u no stru me nto el ettro n rco cambiando i suoi pezzi o aggiustare i pezzi che compongono quello strumento.
ome gia abbiamo spiegato nelle pagire precedenti, un linguaggto di programmazione è rrn insieme di ir\Jv,L, rcnole simhnli c n:rnlo snprr:li ,,L v, per la costruzione di un programma, Esistono molti linguaggi di programmazione, di svariati 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 è direttamente accettato 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 pensare delle persone, mentre un linguaggio di basso livello e piu vicino al tipo di dati che accetta ìl micronr.ìro<qr'ìro Fntr,amhp lo r:teoorie h:nno ,- \/'^+-^^; ,drLov9rtr^ svantaggi.
1r{fl9{_ffie$:i I linguaggi di alto livello piu utilizzatr per programmare i microprocessorì, sono il C e il Basic. Entrambi sono linguaggi di impiego generale, croe si utilizzano per applicazioni molto diverse fra loro. Questi lìnguaggi sono nrodotti d: divprse C:sp e orrr màntenendo trna struttura 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. 'l|--',
S***wcisr* ì-tìtì:tì)r*r:
: .:.:r.
.:.ì
:
, .:
,.rr.
iiii,rrl
.Ì :: "-l
)$é
I
,1,,,'.i,$
:t
;.
:
r::iììi ir:tliij
.
.::.:ììià!
'',t}i1, ,',:l
main {
(
liÍi:
'..:ì
)
,ì,:.ì::ii;
'l
set_bit (
STATUS, RpO ) ; oPTroN-REG = l;
set_tris_b( 0 ); clear_bit ( STATUS, Rp0 ) ; oulput_porc_b( O );
/
/
Assegna un
divisore di L:256
:.::,.1€*
a.::',..,:t
.'ììì:ilt
:ìì:t:::
...:a:j:at ':.rr-:rìì
enable_ínterrupt ( Cfn ) ; enable_interrupt( T0IE ); //
r.ìi::t
Abilita interrupt de1
TMRO
'uruìi::
.ììÈ
::,4
while( 1 );
/
/
Ciclo infinito a:.:::'atta
r :::ììì
:-,,::t;&
".,a,:,'.tl*
Frammento di un programma scritto in linguaggio C
riì
:a,,:.:e
Nella frgura precedente è illustrato un esempio di frammento di programma scritto in linguaggio C per il plC In esso si configura nel banco 1, la Porta B come uscita, e si assegna un divisore per 256 alla frequenza di lavoro per il suo utilizzo con il timer TN/R0. Si continua togliendo gli zeri dalla Porta B e si abilita l'rnterrupt all'attivazione del TMR0. Proseguendo, si entra dentro ad un ciclo infinito che verrà forzalo solamente dal TMRO alla fine del suo conteggio. A prima vista si possono notare alcune caratteri-
stiche di questo programma, che sono quelle che hanno contribuito a renderlo uno dei linguaggi più utilizzati. Le istruzioni di controllo strutturate. come
Vantaggt dell'uso dei ltnguaggi di alto livello
Ss$*wctre-m
la "while" danno chiarezza al programma: in questo esempio è utilizzata per restare in un ciclo sino a che la condizione scritta all'interno delle parentesi e realizzata. In pratica si converte in un ciclo infinito sino a che un evento non modifichi la condizione scritta all'interno delle parentesi. Se si volessero ripetere diverse istruzioni per il tempo in cui resta valrda una determinata condizione, basterebbe inserire queste rstruzioni fra le parentesi. Trattandosi di un pezzo di programma non si puo apprezzare la seconda delle caratteristiche fondamentali: nonostante sia collegato al programma principale, e quindi s a stato abilitato da un evento di interrupt, all'interno di questo spezzone potremmo inserire un altro richiamo ad un ulteriore pezzo di programma - anche quest'ultimo sarà inserito all'interno di parentesi - e sara indipendente dal programma principale, comunicando con esso 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 possono considerare delle piccole funzioni di uso frequente: come il settaggio da'l a 0 di un registro specifico, o di un bit di un registro, o l'abilitazione di un interrupt. La differenza con iinguaggi come l'Assembler non sta neila complessità del codice, inteso come chiarezza, ma nel minimo numero di funzionr utilizzate per dire quello che si deve fare Altre funzioni
'-: :il
t. .::::t*
.l
;
'::
...1
.-,::l::',
j
:.:::a:.,i,:7,t
.4,.::::1
.ì:ìùg
.
r,r;rl:"i$ . :,:,4:&
':;is
$
-.r''
Li:ìr:ì:iili '.':lili
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
tropartita, il programma scritto in Assembler si traduce in tante posizioni di memoria quante
doto
t# nFffi 'o"@@ rrumG-
-EffiT m Ere
m l5
o
ooto
compilatore che verrà utilizzato.
@
colcolore I'oreo
sono le istruzioni utilizzate, nel nostro caso nove (CICLO non è un'istruzione). Nel programma scritto in C invece, ogni istruzione scritta - quelle dell'esempio riportato sono sette piu la struttura "while" - si tradurrà in una o piu istruzioni macchina (posizioni di memoria), a seconda del Questo perche in Assembler ogni
istruzione si traduce con un solo codice macchina, al contrarìo dei linguaggi di alto livello. Possiamo u))trr vdr tr quc)rd ^,,^.+1 Pa ^rrticolarità nella figura della pagina seguente, dove la seconda colonna della finestra del programma (Program
Memory Wrndow) riflette la posizione in cui si trova ognì istruzione. Benche la programmazione in Assembler sia piu faticosa per rhi l: o<onrre il rndiro nonorafrl è ottimrzzato, con un constderevole risparmio di spazio occupato
Convertire il doto in codice ASCII
dal programma, cosa molto
ll programma principale comunica normalmente con i vari procedrmenti per lo scambio di parametri e risultatr.
capacità di memoria, che nel caso del PlC16FB4 è solo di 1024 posizioni. In ognì caso i compilatorì C di ultima
come la capacità di attendere un evento, facilitano l'uIil\zzo, a vantaggio della chiarezza.
$_'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 complicazioni. 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'architettura del PIC per: realizzare le lstrr-t-
zioni, ed è p u intr:itivo. Come con-
imnnrtanlp considerando le restrizroni del PIC in quanto a
CICLO 1-€ UD!
movlw mOf,'Wf
clrf bcf clrf 1-^ r: UDL
STATUS, RPO a1 OPTIOI{_REG TRISB STATUS, RPO PORTB
bsf
INTCON, GItr INTCON, TOItr
goto
C]CLO
Frammento di programma tn lrnguaggro Assembler.
Se€th*p*srym
ln Assembler ogni istruzione si traduce come un solo codice macchina
generazione producono un codjce ben ottimizzato. Come abbiamo detto, una delle caratteristiche che fanno sì che il linguaggio C sia uno dei piu ulilizzati, e l'uso delle funzioni. Nella figura a lato si mostrano alcune funzioni di un compilatore del C per il PlC. La maggior parte sono funzionì molto specifiche del -PORT-A lavoro col PlC, che non si incontraPIN PORT no in compilatori di C standard. Per rnciso, dato che sono molto
specifici non apportano vantaggi rispetto all'Assembler, se non per il fatto che utilizzano espressioni molto più chiare. Dove realmente si nota la potenza del C con i microprocessori, e nella struttura di controllo, nei pro-
S.&6*ws#s*
cedimenti, e nelle funzioni proprie dei linguaggi di alto livello.
OUTPUT_HIGH-FOFIT_B
OUTPUT-LOLPORT_B INPUT PORT-B A
INPUT PIN PORT B SET_OPTION DELAY_MS
DISABLE INTERRUPT CLEAR.BIT GETCHAR
CHAR |O-BED
Alcune funzioni di uno dei tanti compilatori C per il PIC
DELAY US
Strumenti di lavoro: installazione e uso del
CD I CD-ROM che commenteremo, è quello allegato ai primo f,acrirnln di nrre<t'o-
pera. E formato
da
,,-";^ --.+^li^ ^ +i ^. CO[ì VdJle Ldl telle e llre5 divorci rnn-pnr rli rl.p ver-
.:n.Ò .lili, tat nol I lavOro con rl nostro microrobot. Ora lo ana zzeremo il;^|
| rvuu uqLLcvlrc Lv. -^,-l^.1^+r-^1,-+^
Introducendo nel lettore
il
CD e selezionandolo, s tr-^A^ r,,n -lln qudì.Lro cardLLeue dile 5ue n,,r telle, e ai quattro files, così come indicato nelia figura
't
basso ll CD non è autoinstallante
L
informazioni
A destra il CD allegato al prrmo fascrcolo
'1'aqr
la
Inco |La
:fl
u
-h^ sr -J ^,,^-+^ --.+^il^ que5re cd' .e're, rre
_J ",
file
lpnn ''vv"" mi rvr descrivono il modo di nstallazione e il contenuto
,f
"a -rsl
che troviamo nel
in Le
nn : nriro ann
annul 1a
a
r
r:
lr rn n
possora on r-
tor dr testo. Gl' altri 3 files, per ora, non I prenOeremo rn con-
ts (E:)
si
derazr on e.
oimensione
I t/: 'l Q]:a
| - prmd .l - esan"rnare --"+^ll^"i- - caileild ^. La od
.-. ,i
e la cartella "installa". Una
JJ:i
l -"t I gl: I 1
ill.:ts r:a:::':
|
:i]:
,aF)
i ft.ú a:!,J.il
-t
1 lLlrr,, 1 +l:'L
'i
t
volt: ,anprt: s dorir: osocrriro il file spr,ro exe cos si insraJlera il prograrrma robot.exe, che ci normot+ori nli ur Pg lrlgLLqro
vi<r r:lr / t vr)uoil4Latct
1.^
+r1 t a-
mite ìl PC, r video dimostrativr rohnt N,4on-ir p lc diffefentt nrovo dei rn.rorqi di nicroro-
doL
bots. j:
..,i Contenuto del CD
Questa installazione, installa <nln d : n:rro indi<nonq'hilo 'lol )vrv Pqr Lc il rurJPcr rJdr,llr url software, dato che il CD dovrà
$qp$Swwr*
Proseguendo nell'installazione,
ci
verrà presentata la videata successiva,
nella quale dovremo decidere l'indirizzo 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 che ci sembri piu adeguato. fliqiitT"É:LL'q Vgffi## Nella cartella video troveremo i video
dimostrativi, con prove di lotta e di ricerca sui differenti tipi di microro-
bots, tra questi anche Monty.
Per
vederli non dovremo entrare diretta-
Videata iniziale del Programma di installazione di Robots
m6n+ó r:r+allr lgl ILE nall: I lEllO Lql LEIId/ ||
m: I ru o<onttiro LJLyuil L '
tlil
programma Robot.exe dalla cartella
nrincinale rhe e oia stato correttamontè
inct:llatn
qp6lranÀn nrcci JLyuEl luv Ii pd))l
spiegati precedentemente. Apparirà la videata di inizro. |Lq : frur r rnzinno r4rvr rs di ur nnni vyr il +rc+a Ld)LU cÀ ram )Eil t-
plice, e ci ricorda quelli che sono normalmente utilizzali negli apparecchi musicali o video. All'inizio si potrà solo attivare il pulsante superiore, che ci di sreolie rp il video che si -, nermette Y',,,
vuole visualizzare.
ScelLa
Una volta selezionato un video all'interno del menù, bisognerà aprir-
della direclory di installazione
lo, questa operazione attiverà anche
essere nresente npl lettore al momen-
to dell'esecuzione dei video; in questo modo i video non verranno copia-
îi
srrl comnrrter nermettendoci Y',
di
risparmiare spazio.
Orresto nrooramma di visualizzazinne dai vidon ò ntrreolsposto per lavorare con Windows 98.
.:.'::.21
:l::.:E
Quando lo eseguiremo apparirà la schermata iniziale del program-
:,,,ta.t
,:,,t:,,,:::
'at'a,.'::a
.:ì
ma.
Se non si stanno eseguendo altri programmi, si clicchera sul pulsante
"accetta",
o al contrario si dovrà
uscrre dall'instarlazione e rientrare dopo che si saranno chiusi gli altri programmi.
Sel*Sse*eecr*c
Schermata iniziale del video dimostrativo
di
Robots.
fl e$qYH *_$_e $:,$q#ffi
ffi
&ffi w g
Questa cartella contiene tre programmi esempio. che in seguito verranno caricati sul nostro robot Monty per
fargli eseguire diverse operazioni. Queste operazioni, sono quelle tipiche per iniziare la programmazione di Robots: come seguire una traiettoria,
evitare degli ostacoli o percorrere un determinato tracciato, e servono da r.--^ ^^- rto .^-r'---zione IcorLLo2 uc)tr di altre PEr applicazioni molto più complesse. La metodologia di esecuzione per la programmazione del robot, sarà
tema dì studio in un fascicolo do prossima pubblicazione.
fr&ffiYfrts_e ffirL&*$ Quest'ultima cartella contiene Scelta del video da visualizzare
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à
un
solo programma eseguibile per l'installazione di un'applicazione, che porta il medesimo nome della cartella: 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 applicazioni con il PIC e dovrà essere studiato in modo la
cliccare sopra la parola Robots nell'angolo in aìto a sinistra del monitor
Se
ri
fossero dei nroblemi con
la
visualizzazione dei video, si dovrà reinstallare 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 dell'installazione, verrà attivata la proce-
dura di connessione alla pagina web di 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 installare questo tipo di software; a questo punto sarà quindi necessaria un'altra cancellazione.
Esempio di visualizzazione di un video.
Sry#ee*ce$rye
Le informazioni ci appariranno,
r: LUrtc |ltu)Ltd^ Itd r:^ il9ul-,
dnnn :vor
aperto il fiie PDF corrispondente. Gli archivi in formato PDF si leggono con h{!: /llw.micrùchip coell0l1ítlplì{e/piwimlì'derhm
il programma Adobe Acrobat Reader
3.0
' li*Gf&tu#* , F1
J fúicrochis la{ebsite ' J Literature J Microchip Producl Linm É Plcmicrots DeviEs
o
superiore. Nel caso non lo
avessimo sr puo scaricare dal sito di Adobe. Queste nformazioni posso-
,
Seardr optiore
no essere lette direttamente a video, oppure stampate, come qualsiasi file
4
S
Text Search
di lesto Nella nanina sinistra del video troviamo un piccolo indice che
About PlCmicro6 Devim Microchip is a leaditr{ supplier ofB-bil micfùrontr0llers, wiìh 0ne ofthe
ri L
RefÈfeilce Manqals Fùllow ihls link ts dotrnload the latest teference msnuals. lhe
,,1 Ai ur .i.' )rLUrczlo, 'r^
cessori Plc
picmicro/index.htm si otterranno tutte le informazioni aggiornate riferite ai PIC e ai prodotti ad essi relativi. I file saranno sia in formato PDF che in forma compressa ZlP,
oppure come file di
schermata. Da qui in poi troveremo i PIC classificati nelle diverse famiglie, e potremo selezionare le informazioni che ci
interessano a partire dal PIC'16X8X, che ci porterà nella pagina dove troveremo il file che ci serve. Navigando
all'inîerno del sito notremo trovare tutte le informazioni di cui avremo
Sw$$wwrys
lfffiiliÉs/1 dftx/dalasirietl30430c
testo.
della nostra onera si trovano nella sezione "PlCmicro MCUs" di questa
bisogno.
rmnli{irrtnri orrPililLoruI
d
1 0 General Descrpfon
=? iai.'=
? 0 Plc l 6FBX DeYire vari
ts''B
3.0 Architectural
i!''A
Owfries
4.0 lìfemory orqaiizalion
c'.ffi f .t uo Rorts
É-g
*-$
EB EE É-'€
Timeú lvodule and T t.o oata eeeRou tr,temo 6.0
8.0 Epecial Features
oft
IS-pin FlashlEf?R{}\! &Bit HiÈrocorlrùllem kbld*din6btuSH: m.*c
9.0 Instruclion Set Summ
slpp
I
0.0 Developmenl
Ei-A
1
1.0 Etectricat
E-A
12 0 Electrical Charaîlel
@
t.o
charaitel
oc aec cnr
. EEÉJdÈtsrryÀ€:,Àah ,prc:6F5x ft:6LCR*l F*ffi@ f,ÉC SU
Hbi
E €l40Packaqinqh ffi tnoer
A
0n-Line 3!FFpol
;g
Header Hesp0nsP
H Plcl 6F8X PrrrJuct
g
nnorrzinuvctd/tu-
liha accara E))EtE tuc-
Nelle prossime pagine utilizzeremo questo CD per installare sul nostro computer gli strumenti software che ci fornìsce Microchip per il iavoro con i micropro-
si accede alla icroch i p. com/1 0 /lit/ pline/
Trovererno inoltre diverse utility per lavorare con i microprocessori. Le informazioni piu complete riguardo il PIC'l 6F84, protagonista
l\,4irrnrhin l, lvlrLluLl lll-/
fabbnca e commercializza anche altri dispositivi:'nemorie, convertitori, kit
nn c, tl <itn rnreh vvLU e L nn<<nnn PvJJvrtu rî"_^^+^ -^^-,,1+-+^ tot I tct tLc LUI t)utLd Lc
viamo. solamente sul CD, però se m
modo
nali eccetera. Anche le informazioni rol:+ir.,c : nrrccti rnmngpgp{i S trova-
sua installazione sia per il suo ulilizzo. MPLAB e f ornito direttamente da N/icrochip, che è la Casa prodrrttrire dei mirrnnrocessori PlC. ll software lo troa we b http ://www.
in
!
Come ottenere la ptù completa tnformazione sui PIC
n
Oltro :iur mirrnnrnro<.nri r.il!rvprvLLr)ul vrLrL
:
manuals
Plf,micro lltlClt Parametric Search Quickly narrow lour search thf pi.mìcrù mictoÈontrollers wilh 0ut nÈ!v
i
nalla r,:rio itcilc vqttE
comodo e raprdo.
reliew architeÈl!re and peripiìeral múdules, bul does not cover thÈ sFecillcs oi each CMúS device.
pa g
normotte di ur cnnct:rri JvvJLqtLt pErrrrELLc
sezioni del documento
brcadesl produci 0feinqs Products range fromSp,[, 1? bii instruction mrd 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 oflhe mosl popular rrroducl lines n ìhe world
Fsl!#
..*d:--q"b-*. .:D-r! *-qi
*-r-q i--q! )-=-q-iÈ€q: -qq-€Er
i3:O*r-\., 1* rpÈ.Èa . E*,-, :B_! i :jEr+ia ,.8-r..'
ldE
Worldwide gales and .1nb[se**ÈE . Èrt*e*sfi
Dati tecnici del PlCl6FB4 in formato
PDF.
. !@tq5È&lrpÉÈffnnfr]6Ét ó{ih#lùd;*#rtur
Programm azione:
gli organigrammi e persone nanno ta neces-
sità di esprimere il
loro pensiero sotto forma di comrrnirazione rnn nli altri Alcuni lo fanno attraverso la pittura, altri attraverso la musica, la scultura, la scrittura e il ballo. Gli or-
CODICE ISTRUZIONE (letterale)
t/
ffi
ganigrammi sono la forma di espres<inno rho ri :irrt: r nlrcmrrn rrvr rL !r rL nirr Viu Lr uru LO O plO)llldltr inr dsLrdttd rrtrr++r Ul 'l; Un ' '^ progfamma, ^.^ Uecì In
l'i | ,-
Uîa serie di decrsioni e azioni che vengono riprodotte in forma logica e ordinata. Così come nell'arte, esistono molti modi di esprimere un'idea me-
t/ 8--.
l'organigramma, seguire una serie di "norme d'uso" per far sì che cio che rir
da
,/
Controllo
diante un organigramma, è compito dell'analista, cioe colui che compone
' <i
MEMORIA DEI DATI
Segnalatore
rnlo oqnrimoro rienn: intornroi:in
tutti nello stesso modo Considerazioni al momento di costruire un oroanioramma
*g tf tÍ *:rfl,8\Tf?,'sj-i'4 f&etrtrffi*5ilfltTÀf.:*N*il Un organigramma e formato da rettangoli e rombi che si uniscono tra di loro con le frecce. I rettangoli rappresentano azioni che vengono esegulte nel programma. Possono essere semplici, come visualizzare un dato, o
l':ra: rdtcd r'li ut rrna uild Íia".^ ilgutd ..^l+:)LctLd dall'utiìizzatore, e mostrarla nel video insieme ala sua rannfesentazinnp " In nro<t^ .2<^ nrr^ óSsefe nernmnloc<è rarno -_.,,tr,___.- ,.-,,,_
cessario un secondo organigramma, per realizzare meglio le azioni. I rombi contengono domande che vengono poste in base ai dati variabili all'interno del pro-
All'interno si descrivono le azioni da eseguire nel programma
ROMBO
Dentro si inseriscono le domande per scegliere fra due possibilità
FRECCE
Indicano I'ordine con cui si devono realizzare le azioni
Sinboli di rappresentazione di un organigramma
"C alrnl:ro *_,,urdrE
gramma: sensori che forniscono un dato al sstema, opzioni dell'utilizzatore scelte attraverso interruttori, tastiera, eccetera. A seconda della risposta a una specifica domanda, bisognera prendere una decisione per l'azione successiva, Le frecce indicano l'ordjne con cui sr devono eseguire le azioni e le domande.
{,e*&-í?9.ffi3:tru{94fl #fl*i-?
{}s*efdi,*&&i4fi;
Dobbiamo tenere conto che il lavoro con i mrcronrocessori Der la soluzione
S*Skesr*
dei proolemi e composto da varie fasi, che riguardano <,.: l: purLL n:11 e rvrrvvurL SOftUlare -i^,,^ll- t--",.J,^,-"^ lloluvvolg. NOfmal_ )lo ru J.u 9uEllo
Chiedere operando
mente quando si realizza un progetto, soprattutto se si lavora in un'equipe di sv luppo, la oersona che realizzal'analisi del sistema, non e la stessa che più tardi
stenderà
il
programma, né quella che veriftchera
le
soluzroni,
o
,:i,:'#ìîà
{-"; tQta t^ tE ^"^,,^ vrwvE
,,
di
s
, z
lnizializzazione: Variabili di ingresso Variabili di uscita Regístri
c g
{
ln rn |.uv
B
I
Chiedere
nrn:ni-
r
r
in molte di ^,,^-+^ {^.i 1O)r, E 9UE)Ls in nnnrrn: di l^il^ -,,"\ uc|c ^--^ dvtd E))E
intfodotto?
nÒrmo cnerifi-
Operando
che, Chiedere operando 2
Operando
Chiedere dato C
''r''
-
E corretto?
Chiedffi dato A
Togliere salutg
Chiederé dato B
l'interno di regole base. Noi
utilrzzeremo
solo introdotto?
Mostrare risultato
comun-
^,^.^-^.^-l
riÉ
si
rtilizz: ro
I
operando
ffi
Così
gramma n
Chiedere di nuovo operandi
+*tr
a
funziona-
mento.
Chiedere operando 2
I
Dare
risultato
organr-
grammi che
si
riferiscono alla rî^^r^-^^+a
rdvprc)Errcdella
zrone
arganigramma di un enuncrato, realizzato tn forma corretta e non corretta
.
struttura di un
programma, ^..J r^ ttELc))d^^-^.-^ fLl
rin rho nrrosti siano molto nrari<i nerrho rhi nlr r t:rdr
t
iI i r i Meno cose si lasciano alla lrbera interpretazione, meglto è.
sarà incaricato d realtzzare
Ì
orrol nrnnr:m"Y'-' ma, non abbìa difficoltà al momento di tradurre in istruzioni rl pensrero di un altro. Ecco alcune considerazioni importanti al momento di costruire un organigramma. Fissare un preciso punto d'intzio, è un buon modo per non dinrentcare nulla, inoltre e molto difficile, soprattutto neì programmi che si dividono in piu alternatrve, term,nare con Ln urrco pJt^Io. Ouesto si ottiene quando alla fine diognialternativa, si arnva ad un punto comune denominato come Fine. L'uso di alternative con due uniche scelte, risponde ',
Sqe#**eswff*
Aa+ar.ll^ -nra--,t. 6nl plLv, ,l!, uqLqrdlic Uclld 61666:mm,azinno 'CLC))'Ld À^ll. Pr m nata dal tipo d istruzioni, che al trpo di organigramma n se. Quando qua cuno disegna il suo organigramma ha bene in mente la sequenza esatta che il pro-
^i' ' f-j|U
gramra dovra eseguire, le allernative possib'li,re domande importanti eccetera, quindi si tende a dare per scontato il verso delle frecce, e a non disegnarle correttamente. Però bisogna pensare che chi dovrà tradurre la "nostra" idea, si baserà unicamente sul disegno, e meno dali lasce"e.no alla libera interpretazione, --"- |rr5urLdL(). r9ilure >dtd ",-,,l+-+. il-,^li^,^ lr rertango o a, t\i/ialtzzaziore dei registrr e definizioni 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 programrna.
.:,:.
.:::$li
l::ìa::!
: .:.,a:a,t:
.ra
r.:r:a . :.:,.),ta:a
::.::.
a.::a:,
Appti cazione pratica: it pnmo programma nche se rimane ancora molta teoria da : <tfuttufa e UtiliZZO del Dlî rnmtnrr:m^ ,- a^n .-,, Jn pflmo programma,
i$-
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 realizzare le onerazioni aritmeîiche e looiche e all'interno di 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.
con il quale ci addentreremo a poco a poco nella programmazione e nel linguaggio -h^ ^^^ q^ LUJI ---^-t-r^" .n<t Lvt .rìmnlir:tn rnmo ttPilloLv ttE tutti cre_ Lvt IutEt o))ct - lt tE ttutl 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, irettanreg
istri entro
Abbiamo tre posizioni che chiameremo DATO1,
nrr:li o<onrrire
DATO2, DATO3.
dati, le
ln DATOI si vuole immagazzinare il valore esadecimale 03, e in DATO3 il valore che abbiamo in DATO2.
I
i
Quando un'operazione aritmetico-logica ufilizza due operandi, uno di quest è sempre il registro W, l'altrn nro essere sia rrn reoistro della memoria dei dati sia un valore letterale dato insieme al codice dell'istru-
ì
movimenti dei frecce r:nnro<ont2nn il rrorcn di nrro-
zione.
sti movimenti; idatì all'inter-
no
i;i i"Í-è*#gefg*Fitffi ffi&Tg
Per noter realizzare il srrn I L' l.JvLrl
I
golr sono
#i€]{il#
rnmnito il PIC h,a al suo interno la struttura mostrata nella figura seguente. Nella
vodoro in nrr:ntn
La discriminazìone tra i due è fatta grazie ad un multiplexor (MPX) la cui linea di controllo avrà un vaiore o l'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
appaiono
nol nn<tn rho
avranno dopo
LETTERALE
t/
8-..
ffi 8:-
Enunciato del programma da realizzare e la sua rappresentaztone grafica.
ffi
t/
MEMORIA DEI DATI
CONTROLLO
l'esecuzione del programma, indi--+^ dllLllc ^^-l-.^,l-ll-udllc Lc|tu
^,,^+. I,Jullld
^J^ll^ {"^ucllc llcL-
ce. ll valore 03 esadecimale è un valore letterale e la X rappresenta qualsiasi valore, visto che non conosciamo il valore iniziale del registro DATO2.
Percorso che seguono i dati quando si esegue un'btru1one
Sw#sxs*rsxss*
l
,:.'la
:'a:t:..:a
.::,a:aL:,..:
::,..;ti
::.:74
l'irl:l:::
a a
movt
tvt-y9-ve
T--_o-..v.,y
Muove il valore contenuto in W al registro
movf
f,
letterale if yatore
k
1l
zioni, la parte sinistra del quadro è quella che ci dice i tipo di istruzione che si sta
resi$ro ditavoro,W
f
eseguendo, quella che
Muove_il valore contenuto in f alla destinazione d, che può essere il medesimo registro f (d=l) o registro di lavoro W (d=0)
Tavola con le possibili istruzionr di movimento del PlCl 6F84.
viene dopo e gli ope-
randi che intervengonn in nrro<t: nnor:zinne; generaimente si
LÉTTERALE MEMORIA
appare nel grafico ha un suo signif i-
,DEI:,D.ATI
cato: indica che tutti idati con quali lavora il PIC 16F84 sono da B bit, sarebbe a dire che sia i registri che i dati con quali opera la ALU, i
MOVIMENTO DI UN VALORE _oB
oc
LETTERALE
AW
sia i risultati che genera, inclusr i dati che puo contenere il registro di lavo-
ro W, sono a B bit. Allo stesso modo, se al posto di un B appare un '1 , o qualunque altro
numero, significa che il dato che passa per quella linea, e composto da quel numero di bit. La ALU, realizzando alcune operazioni, oltre ad
LETTERALE
MOVIMENTO DI UN DATO QUALUNQUE
un risultato, fornisce anche una segnalazione, di cui parleremo in
AW
seg u ito.
gsYffi#x5*F,{t *3 N#Vs$$ilNY* Nel PIC esistono tre istruzioni per muovere i dati. Tutte cominciano nAr mn\/ e rnntonnnnO a COntinUa-
zione altre lettpre ner indicare da
LETTERALE
dove a dove si muovono i dati. Così si puo muovere un valore letterale al
registro di lavoro W, o muovere un valore dal registro di lavoro ad un
registro della memoria dei dati o viceversa, muovere un valore dal registro della memoria al registro di lavoro W, o da W a se stesso. Le tre istruzioni che appaiono nella figura saranno trattate in una scheda individuale più avanti, pero vi anticipiamo che per tutte le istru-
$wSsxwwww
:ffi;
MEMORIA DEI DATI
CONTROLLO
MOVIMENTO DI UN DATO
DAW _o3
oc
Percorso dei dati, con drfferenti istruzioni in esecuzione
AD UN ALTRO
REGISTRO
ì
:
rlr:1.ì
.
l::.:
rr:,r:ì
LETTERALE
,/
ffi'/
t/
MEMORIA DEI DATI
OB
_oc SEGNALAZIONE
_oD OE
t/
Blocco di elaborazione dati dopo aver eseguito il programma
&4& &SSfr W &$ g-fi ffi programma assembler risultante
rappresenta sempre con una lettera legata al tipo di
$}W*S
istruzione. Possiamo seouire ì |v Jg:jv||
ll
il lrrsso nercorso dai dati nella figura della pagina precedente. La prima rappresenta il movimento di un valore letterale a un registro, che e la f
parte del nostro compito nell'enunciato numero
'l
,
muovere un valore letterale a W. Per portarlo poi da W
al registro DATO1, dobbiamo seguire il cammino segnato dalla terza figura. Nella seconda parte dell'enunciato del programma dobbiamo muovere un dato da 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 utilizzarlo bisogna fare riferimento ad esso tramite nome dell'istruzione.
il
K&914
è 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=. È obbligatorio usare questa direttiva, perche tutti i nostri programmi cominceranno neìla medesima forma Nelle linee 2,3 e 4 si usa la direttiva EQU per definire le variabili. Nell'esercizio si chiede di muovere dati nelle differenti posizioni di memoria, senza specificare quali, la prima posizione a disposizione dell'utilizzalore è la posizione OC. Per questo si hanno codici a tre posizioni consecutive, a partire da 0C, al posto di lavorare direttamente con gli tndiizzi, la direttiva EQU ci permette 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
l'enunciato. Per .nuovere dato contenuto in DATO2 al
f
I
I
LIST
P='16F84
EQU EQU EOU
0c
5
ORG
0
6
I
movlw movwf movf movwf
03 DATO 1 DATO 2.0 DATO 3
10
END
2 3 4
DATO 1 DATO 2 DATO 3
7
8
registro DATO3 si usa come regrstro intermedio W (rstru-
OD
zronr B e 9). Nella linea 10 si termina il programna con l'islruzrone
OE
END.
; Fine del programma
Questa istruzione e sernpre obbligatoria Una volta eseguito il programma ii blocco di eiabora-
zione dati del PIC restera come segue, tenendo conto della posi,,ione d, re'noria che gl abbiarno asseg^ato
Programma assembler dell'enunctato proposto
caso 0). Questa istruzione, inoltre, e sempre obbligato-
ria, dato che e la prima istruzione del programma (fino aila movlw non sono istruzioni) deve essere nella posizione 0 delìa memoria di programma, dato che e lt che viene ndir zzalo il puntatore al reset del PlC. Comincia così ii programma tn sé. Nella linea 6, si
?:1"!1.,1:,1:1r: a: 1.i
lt
N'4olti
flti.:
f',
I :,: r,i :l l lri:lii: rl
:.i ; rÌ :::i,r:,r
lettor s staranno chredendo perche alcune cose
muove jl valore letterale 03 a W per proseguire col
sono sul margine sinistro e altre sono tabulate, se cambi tra maruscole e minuscole hanno significato eccetera. Ecco qui delle norme, alcune obbligatorie, altre solo come raccomandazioni, da seguire al
va ore al regrsrr-o DATO I , cosr come abbiamo derro re,-
momento dì scrivere un programma per tl
r
i
PIC
Le etichette e i nomi divariabili {LIST, DAfOi) di solito si scrivono in maiuscolo. Non succede niente se vengono scritte in minuscolo, però così si distinguono meglio dalle istruzioni. Dobbiamo ricordarci di scrivere le etichette in forma sempre uguale, dato che lnassembler è sensibile a maiuscole e
minuscole.
' I nomi (mnemonici)
delle istruzioni si scrivono in minuscolo. Non accade nulla nello scriverle in
maiuscolo, 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 programma stesso' 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 gli spazi 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 nella successiva modifiea o riutilizzazione di un programma. Per questo si utilizza il punto e virgola (;) e in seguito 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
Utdilre
^^-^--^",^-l^i-":"^^ necessdilo
wf f,d *addwf
e
prlma
una serie di termini, che saranno quelli che utilizzeremo d'ora in poi
MNEMONICO
coDrcE oP DELL'ISTRUZIONE
nol rnr<n Àoll'nnor: vvLru. 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 aritmeticologiche.
Giclo di istruzione: è il tempo base che impiega un'istruzione ad essere eseguita. Per il PlC16F84, funzionante a4MHz, questo ciclo vale microsecondo (prs).
1
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 codici mnemonici, ma con 1 e 0. La longitudine dei codici OP in un PlC16F84 è di 14 bits"
Termini utilizzati parlando di istruzioni
$*#*xwmry*
a
Schede dette istr uzioni: l'istruzione movlw 'isl.-rzione "mov" e tiptca ir îutîi i nrocessorr dato che e sempre necessario movimento di dat da un
,d']-ffij
posto ad un
a
rro,
OPERANDO FONTE
MNEMONICO
I
siano
movlw
o-esti de risultaLi, valori f ra registri o
OPERANDO
I
DESTINAZIONE
k
vaiori immediati
Consta dr due operandi, dove
il
OPERAZIONE:
o lrzcfar't. nol nrimn rrqr Pril rlv q Lt o)tqtt_
drtn LUrrrcrruLU rnnionrrin uorw
to, o soostato al secondo. Con questa istruzione si realizza una copra der
dati, poiche non sr cancella il dato orig inale.
Ci sono tre tipi di "
istruzioni
mov", le quali si differenziaro rei
loro operandi di orrgine e deslinaz oNel caso della movlw, l'origine è
ne
un val'ore letrerale e la destinazione il rpniqtrn di l:rinrn \A/
[5fr
i4ilt il*#
e
Movimento del valore letterale k al registro di lavoro W
CICLI:
1
GODICE OP:
1
FLAGS:
Nessuno
1 00xx kkkkk kkkk
!*,**'-",****,.*"Ca
ratte ri stiche del I' i struzr
t'951",{{"3ríq:$il
o
ne movl
w.
pi;'acile dr :nnàre C)r: r,pdrpmn nrrplln rho succede in o<omnin n:c<n Y---- a passo.
v,sto che la programmaz one n assembler e
i**vì..it,
nrrel rhp
Questa istruzione è stata ulilizzafa precedentemente nella realizzazione di un programma, dove abbtamo
nra<tn
Si
n zia
mrove^do il valore letterale 5 nel regi5tpe
li
avo.o W e si nroseorre muovendo il valore letterale 3 al medesimo registro W. |LO : {inr'r: : l:+n r:q66p(ont: il y:lnro rr9UrO O rqLVrOFr-.-,-
valore iniziale
xxxxxxxx
rhe
rssrrme \A/ dono l'esecuzione
di
nnn rn: dollo i<trr rzinn
All' nizio il valore di W sara indeterminato, e quindi si rappresenta median-
movlw 5
movlw 3:
00000 1 0 I
000000
Valore di W all'interno di ogni isLr,tzione movlw.
$sa*S$qryqsre*
1
J
te "x". Dopo la prima istruzione avremo caricato in W il valore 5, il cui codice h.nalo si r:nnrpsent: con "'1 0'l " Dato che i registri del PIC hanno una dimensione di B unità (bits), le celle non diret+16^n+^ .dilìerLe '^+^.^--^+^ InreressdLe, -.50no messe a zero,
iniziando da sinistra. Dopo la seconda istruzione il valore di W varia, cancellandn il nrimn v:lorp o nassando ad essere "0000001
1
"
Strumenti di lavoro: I'ambiente MPLAB è un ambiente dr sviluppo integrato per il lavoro con la famiglia 'MPLAB
PlC16/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, emularlo 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^^, -+^ urLrE -ll,-^îliCaZiOne. ^r+"^ oil oPP duf9uotv, ,
gr'1is?&g_il,&at*ru
# #g
&4
r*-effi
f ambiente MPLAB si trova in una cartella con lo stesso nome nel CD di Finestra di inizio dell'installazione di MPLAB.
Robots, che
vi abbiamo fornito.
Per
rrraÀaramn o<onr q l'in<r:ll:zinnp l -uclcl l lu d: I r rJLO ro-rVr rq d( E)CVUil rira
questa cartella, dove troveremo un file che dovremo eseorlire. rF:rondn ulur ruv
qj n1a<tn rr 2nrir: oPl llo VULJLv
, 'n: lll lEul lo fina-
(tr: .nmo nrroll: doll: finttre
16,o ei
comunichera che stiamo per procedere all'installazione di N/PLAB.
Accettando (Next) apparirà una finecfr: r'îor '-^^tt^'^ ^ '-tl )LCVrlClC \-'luOll
<.ornnd,a
componenti vogliamo rnstallare.
I rnmnonenti che
selezioneremo programr.r,, ai files e corispondono ai alle loro funzroni relative che utilizzeremo: MPLAB IDE Files: sono i frles Finestra di selezione dei componenti da installare
relatrvi all'ambiente
di sviluppo
in
Sep##wwr*
sé, a cui si fa riferimento con la sigla
IDE (lntegrated
Development
Environment).
MPASM/MPLINK/MPLIB Files: sono il compilatore, i linker e i files di libreria accessibili tramite MPLAB. ll compilatore sara necessario per tradurre i programmi che editeremo in linguaggio macchina, in questo caso quello del microcontroller. Se il programma è realizzato in diversi files tra loro relazionati, ed ognuno di essi contiene vari sottoprogrammi, sarà necessario il linker per renderli una sola unità coerente. I f iles di libreria, dal canto loro, facilitano il lavoro di programmazione fornendo "frammenti" di programmi già elaborati e molto utilizzati che potremo includere all'interno del nostro codice.
MPLAB-SIM:
è il
simulatore software che fornisce Microchio. Con esso si puo verificare il corretto fun-
Finestra di selezione dell'ambiente dei componenti
zionamento delle istruzioni del programma che si sta eseguendo, vedere come'risponde agli ingressi del sistema, così come le uscite esterne che questo genera. MPLAB-ICD Debugger Support Files: come indica il suo nome non si tratta di un'applicazione in sé, ma di files di supporto necessari per la funa,';e+' Ài "nlahrrn" n r'trarrur utruu9 u rLcrLd 9ud>t-t. Questa funzione permette, non solo di vedere i risultati finali di un oro-
zinna zrur rc
gramma, come farebbe l'utiltzzatore, ma di accedere ai registri del sistema mentre si sta eseguendo l'applicaziono ocanrondn Io i<tr uztont passo a n:<<n aaaatar: Î rttn nro(fn ln rror{ro-
mo in maniera piu dettagliata trattando questi strumenti cosi importanti. Help Files: sono i files che ci per-
metteranno
di ottenere aiuto
dalle f unzioni, menu, finestre eccetera, che
Finestra di selezione dell'ubicazione del linker.
inteqrano MPLAB. I restanti componenti danno supporto software a strumenti hardware per emulare e scrivere i programmi commercializzati dalla stessa ditta N/icrochip, dei quali
Ssflr*rsre
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 specifico in ouest'ooera.
Una volta scelti i componenti, continuando (Next) apparirà una spconda finestra ner selezionare l|||LJ!|9
F\
l'ambiente nel quale si eseguiranno
i
programmi. Noi abbiamo scelto l'ambiente Windows perché in questo momento è il più diffuso sul mercato.
In seorrito verra chiesto un indirizzo per l'installazione. Si puo scegliere quello proposto, oppure uno che vi sembra più adeguato all'organizzazione 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 Durante l'installazione sono mostrate una serie di caratteristiche dell'applicazrone rapido all'applicazione in modo che non sìa necessario entrare nelle sotFI"J NffiSNX tocartelle o nei f iles per ricercarla. rfinestra ner sreoliere sg f4pLAs I'indlrizzo lq il rLrLr u rLLyilLr! luu oPvoltr vudl ^',-^r^ vLr 'del linker, dovremo selezionare una delle due possibili Possiamo già eseguire un programma, aprendolo apparirà una fìnestra come quella della figura riprodotta qui opzioni. Se avremo installato una versione precedente In basso. di MPLAB, la scelta sarà fatta di conseguenza, per renprogetti quelli Come si puo osservare l'aspetto e come quello nuovi. con dere compatibili i vecchi Comunque per un utrlrzzatore nuovo si raccomanda di installare il linker in r
MPLAB\Lkr.
In seguito dovremo scegliere dove
installare
gli archivi di
sistema.
Se
lavoreremo in Rete le scelte verranno
fatte di conseguenza. l-lnnn trrv rfia nr ro<to SCelte iniZia l'invvvv r!! stallazione di MPLAB. Durante il processo di installazione appariranno una serie di caratteristiche nel video, oltre alla barra di stato dell'installazione.
Una volta terminata l'installazionó Jr ci pvLrorilrv nntr:nnn Irsr
l666,nrn i{il^. I lllc) rsygElE
Ài Ul
testo associati ai componenti installati, oppure lasciarli per la fase successiva.
Tutti questi passi del programma MPLAB si trovano nella cartella " C :\Archivio di programma\Mplab".
Finestra di inizìo di MPLAB alla sua esecuztone.
Sa**nrara
.,,a,:a,,:.& '.'.Ìa:-':?&È
'r...::-,:i*
.::::::1ffi
,,,,:::Liff
;3.
. .l:t
"s4 ,.-ffi
ffi
1::€
"Aiuto" e altri che, invece, sono specifici di
della maggior parte dei programmi che funzionano nell'ambiente Windows. Nella parte superiore della finestra appariranno diversi menù dentro iquali incontreremo i tipici "Files", "Modifica", "Finestra",
questa
ffi
ffi
particolare applicazione.
,:#
i menù le icone che raooresentano le fun-
-":'.Ea
zioni oiù utilizzate. Se si seleziona l'icona di sinistra il gruppo di icone varierà. All'interno di questo ambiente si
-:w "Èffi
Sotto
potra:
-::::x --iffi
"w
w
'E€
ffi
Organizzare codici di una
e
applicazione in progetto.
I
-l*
Editare i programmi fonte per il PIC 16/17 così come altri flles di testo di cui potremo aver bisogno.
iìè :::lr:;:*
:.t:&
Compilare i codici fonte ottenendo i files da memorizzare sul microcontroller. ln Assembler ogni istruzione si traduce come un solo codice macchina.
:.:,,aa&
:,;:1|ll&
".-,.}
&:
Simulare icodici una volta compilati e prima di memorizzarli nel microcontroller, verificare che il lavoro realizzato sia adeguato.
"E
,,,,ì1ffi
,,'::a::# .::-:..ix r:ìi::il::!A
ffi
'::,::t:atffi
:ìa:::11i9;!
Grupfii di icone che rappresentano le funzioni più comuni Tabella delle funzioni da realizzare nell'ambiente MPLAB.
,:*$ffi
w
"qffi
4tr
.11,11:,::,74&&
;
Pnro : norn vod;911o come Si realizzano queste opzioni. Per il momento diamo un'occhiata alla
***rì******t**.$***r*r**dtt*Iq*r****i**rì.*r
r*r*r*È*r+**, i*r*ú******r**** ;* Hlcr0chlp lechn0l0gg IncorForated
* *
(anronta
;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 tl
di informazione che ci permette di
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 sÍltch
SSg has
all ssltches ln tha
0H posll
0ú 01 02 03 64 05 06 07 - :T: F; cF Fr rE FF r_ tF !t - FtÉ ld.f6 FF FF FF FF rÈ L, rF tt g&!.f fr fF FF FE ,! FF Ft Egg! FF El lr Jf rl cf Fl fF
Hex 96 OB FF '18 BS 6B 1F B! FF 69 a0 06 05
Dec B B ?55 24 B B 3t & ?55 B B 0 B
08 09 0n
81n3f9 BBSSBBBB
588ÙBÙ68
11111111 IrJù11888 BSBB6BOB BB6ÙB8BB
ggg1t.i11 86800080
i1111111 6OB86O68
00866800 06860666 86068880
I +:000S B 0003 i oooq q!!-', + 0009
-ù
SFFF SFFF arrr litl aFFF
Finestra che mostra i differenti titti di tnformazioni fornite da MPLAB.
!8
0C
tr FF;F rl il t, FF EE tt 'l rr Ft fF t, rf F. FF FF l,- r
€ddlw orFf
eddtu oxff àddlu 0xff
'
finrrr: nor vorifir:ro
il f inn
vedere l'applicazione, e cominciamo -^^idiversi ^i^--"^ur I PU LUr o- gruLorE | menu.
ffi .
.iss
..*# :i
"*ffi 'ffi l*q ':;t
|
la
finestra srrnpriore a sinistra mostra l'edizione del programma in corso. Sopra di essa, in un'altra finestra si nrro vedere il valore di oonrnn dci renrstri sDecifiCi del PIC nel loro formato esadecimale, decimale e brnario. Nelle finestre di destra, cominciando dall'alto verso il basso, troveremo la finestra dello Stack delle istruzioni del PlC, la EEPRON,l dei dati e la memoria di programma.
:,à ':#
...1# orX
w ig '4 ,::j!.?}*;
' ::* ,{4
$fi* w
ffi ':ts
:,.ff ,ffi
":ff 9à'w&%*xww*
'ffi ---é,9
!i{g
t3&
.
ìir':::ir1,
i?:,:,::':ìr.:.
.. :-::iii
^.. ".
'
Schede dette istr uzioni
:
*.::r:lll',,,,
'''
:aìr.ìl:ìlì:ì :
l'istruzione movwf
'
]iaa-
la seconda variante dell'iaaa::.:::::
-:::
struzione
OPERANDO OPERANDO
contenuto nel registro di lavoro W è trasferito a1 registro f, che qui appare come parametro, in
ì:ii:,:i::,':
l"
..
L,,t,, l;:L;',::,
at,:.:,,
I
In essa
rl dato
,1L1;1::l;1:,:,,,,
:ìiììì:r:ì::
"mov"
-
FONTE DESTINAZIONE
MNEMONICO
m o.v
modo che si cancelli da W Dobbiamo solo indicare qual
t movimento del contenuto del registro di lavoro W al registro f
è
l'operando di destinazione, visto che quello d'origine, W, e
Operazione:
implicito nel codice di istruzione.
Cicli: Codice OP:
00 0000 1 fff ffff
Flags:
NESSUNO
;1$l1r!;;ìl ii1!i l. tit,ii *i.ìì-; Î 4,,^-+vuc)Ld
í:': ;ri :ji'i
,,^l+vulLd ,,^^li--^ vu9llol
I
ijqi
l;
I
dl l\ dlú 'lll lv (-^.,-^"^
de recistro rl crri indirizzo (ricordramoci che a partire e 0E valore
Ca
ratte risti c he de I l' i struzi
,'lr rLyrJrrl uLr ranictri ud nf uL Ài.n^ni.mn ur)purror rw doi
generali che possiamo utiìizzare come ci conviene),
e
o
ne movwf
:
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
lregistri, all'inizio, si considerano con valore indetermrnato, X e Y. Notramo che al momento di utilizzare le istruzroni il valore letterale non viene sempre rappresentato nello stesso modo; dipenderà dalle situazioni o dall'utilìzzatore, comunque al momento di memorizzare i dati nei registri e quando 'a
Í,
I
w
OPERANDO XXXXXXXX ' . . '. : .
€t ,rn
m OV lwdi
...
ì.]ì.ì:ì:
ìì
:...'.'....
:':.1
: t
::. '' : 1',. ].
ari
Y.YYYYYYY .
snec if .'
'.--l
lfjt
I xxxxxxxx
I
riF;., ì.:i' a
:
0000
ru
r
000
lavora la ALU la base utilizzata sara la binaria ll codice esaderimale e orrello che si usa normalmente, in assenza di altre
:
iche e
com nre
nd
e
i
valori da 0 alla f . Per utilizzare gl altri codici dovremo esprimere rl numero entro "virgole semnliri" e nrerpderlo da una lettera che indichi il codice in
cui si trova. In questo modo, avremo diversì codici molto impiegati, come ad esemp'o il decimale e il brnario. Dopo le
nnor:zinni pntr:mhì i roni<tri '-v'-"' hanno il medesimo dato, visto jp6prL \r:nrolrhA tA<ln nnn d lLcl\'rL nt 9ULJLV l:rn noJ ronictrn nli nrir 17
Passi
da realizzare aer Cart(ÀrF il rpni<rro aPFRAIIDO COn il valore deCimale
B
-,
-,,Jrne.
$s*$*sws*etr
Schede delte istruzioni: f istruzione movf % W ffi* w ffi fu
la terza e ultima variante dell'istruzione " mov". In questo caso rl contenuto Oet registro f, che e l'operando fonte, si puo trasferire nel registro di lavoro W, o al medesimo
f :
sorond: del valore dr "d" F necessario snecificare tanto l'origine come la destinazione. renistro
OPERANDO
MNEMONICO FONTE
movf Sed=0si
muove il registro di lavoro W e se d = 1 si muove allo stesso registro f
trr nr rÀ nccnrn vuv c))ctc Ltda
partire da W, o operare nel medesrmo registro di lavoro, pero muovero rs ttn urr d:tn uqlv
:lln cfac d: uo ttn urr roni<+"n rEyr)trv qilu )Lc)-
so regrstro, sem0ra non
avere senso. Tutto ha una ragione, ed e che quando si realizza questa operazione resta coinvolto un segnala-
^;
del registro f alla destinazione d.
Muovere un dato da un registro
sferirlo ad un secondo registro
d
Operazione: movimento del contenuto
al registro di lavoro W ha senso, d:rn vo Lv rho Lr rq l'nhioftirin I uurqtLtvv
OPERANDO DI DESTINAZIONE
Cicli: Codice OP: 00 1000 dfff ffff Flags: Z 1
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 operazione è 0. Così, muovendo un registro a sé medesimo e verificando il valore del flag Z, possiamo sapere se questo registro ha valore 0, o no, visto che Z sarà messo a nel caso che questo valga O. Cio e molto utile, e si vedra, parlando di cicli, che per ripetere un'azione un determi-
nato numero di volte, si puo caricare il valore in un registro e decrementarlo fino a che questo raggiunga 0.
frsfre4px
il***
#xsgffià$trg#$€g &4#w$:
Nella f igura sono rappresentati i valori che prenderanno i registri all'esecuzione dell'istruzione movf nei due
'1
diversi casi, dipendendo dal valore degli operandi di
destinazione. Questo ci darà
t
Valore iniziale movf openaruoo,l si opeRlruoo= 0 si oprRnuoo+0
t
movf openaruoo,O si openaruoo= 0 si opeRnuoo+0
"ìr:**Y,*i
;-
yyyyyyy vvvvvvv
I
yyyyyyy yyyyyyyy
lL vvyyyyyy vvvvyyv
Valori dei registri nei differenti casi con esecuzione dell'istruzione movf
Sw#sweqwwqp
due
combin azioni, però se uniamo il valore del flag Z otterremo quattro casi distin-
STATO
OPERANDO
]dll@lì\]]ìiìWs'ì''ì]i]ìù]$ì]Wls'''''[W!]l!]l!.ìrìsW*]sl!l*lW\ll|wilìììììr]]{l*lf1ffi:è.ì:ì:ìììì]]]]l]\*:\wqfr,']|
J?-:YI
:
ti. Nei primi due avremo )z=1t _
. -l
_t*z=gt
I
qa\.+^..^ m.)qq.l il rpnictrnv q1 Ju Jú )LE))U
e Z si sara attivato, o no,
a
seconda che il valore del regiI
^-.12.=11 '*l tz=ol .J
stro sia 0 nel momento del movimento. Negli ultimi due esemni oltre :ll',aftivazione del f lao 7 il rcnistrn dr ravoro W ha alla fine dell'istruzione, !J!|
il
| |H|,
medesimo valore dell'ope-
rando fonte.
Strumenti di lavoro: it compitatore MPASM MPASM è un compilatoro npr PIC Delle l-rc versioni che esistono attualmente, noi utiiizzeremo quella per Windows, che
File
A5M
--"i--+^ installando -r^r-i--^ ^i- LorLoLw rw 9ro ouuior MPLAB. Questo offre il vantaggio
di noter romnil,arc senza
Compilozione con MPASM
uScire
dall'ambiente di sviluppo, cosa che risulta molto comoda, oltre a fornire un'interfaccia molto piu nradpvnle risnetto alla versione
Errore di
per MS-DOS.
sintossi?
f MPASM oeve iavorare con file con estensione ASM, li compilerà e, se non sono staîr cornmessl errori, darà come risultato altri fiies orresta volta co. estensione HEX. ll codice HEX e qL,ello che nntr: pqqorp nronr:rrmato nel PIC per essere eseguito. Se I orog'am-
Files
*ri.
File
File
ERR
HEX
più importanti in relaziane all'MPASM
ma contrene error srnta'ttr-
ci
,ad csomnio sp
p
Stata
scritta maie un'istruzione, o l^ nnn \/ennnnn riqnó++:r^ lC l,Ull vcl'VU ,U ITJPqLLoLC
nnrmp dpl rnmnil:lnro ' '|./iluLvrE/
rl
ql
nnqtn dol fila lldlr rr'L oq:dori*.lo LruuLL vL PUJLv
riorrÀ nrnoolln irn tile
d
e"ore FRR che sara nossiAit^ -t^ r199crc c^ rc ^^t ^,, \luartr uiltr :^^^^.^ saranno contenuti i codici nlonl vrvl
arrar't
frnr,:1-i
Che
dn\/rp'nn rnrrenctrrtr nr
di oroseor,ire lo
Tla
schema
rinrodotl-o in della fiarira "v-',altn rrnstr: i: sonrrg1173 segu ta e i files co nvohi, '
nrio(tn cr r! rrrU :nrho iLr hom: Ur rLr rL <a JE 9ULJLV
!à
versione di MPASM per MS-DaS ha quesro òspa|7o
forma srmile non essere confuso
deve
con
s--
h I lor
un
bq;}trYt";q*P*
f
organigramma, perché in questo nuovo schema sono mescolati differenti tipi di dati. I f iles mostrati nella figura sono i più importan-
il#
ti, ma non gli unici, dato che vengono generati anche altri tipi di file che per il momento non men-
continuamente far riferimento a quest'ultimo. Così, per esempio, in MPLAB tutto è basato sui progetti,
zioneremo.
files si chìamano nodi (nodes), e sono raggruppati per formare il progetto, così MPASM si dovrà configurare in h:<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
Ovviamente le finestre che ìllustrano questo capitolo di "Programmazione" non le troverete sul CD, ma servono unicamente come esempio di nrocpdttre d: sporriro ner rcalizzaro il vn(trn nrngerro.
f
gi;f
*rg# #
ffi
&f.X*
ru
ffi tr L n*-ffi
tr&SÍv?
MPASN/ che utilizzeremo è parte dell'ambiente di svi-
luppo di MPLAB, per cui parlando del primo dobbiamo i
Project), dopo di che appa-
rirà una finestra di dialogo come quella nella figura.
2. Si dovrà riempire il
.$ c:\
;l archiv*l ffi mplab If er*ample I template
-^^,, nome Ldil rpu ;^^;--+^ il rurLd ro Lor file" (File Name)con il nome
*
che vogliamo assegnare al progetto lad es. "prova") e cliccare OK Apparirà una seconda finestra con le opzronr.
3. All'inizio il modo
,li*.ljE '*r lProiect File+ Finestra
:,.:,:.,:,,:
['.pitf j
(Development Mode) sara di sola scrittura (Editor Only 16F84). Per il momento e su'f iciente, pero possiamo ugualmente provare a cambiarlo, con il
Sri1e*: r -"*
l'#s
di dialogo che appare quando si crea un nuovo progetta
f,anfigurdbn
Tsol*
é. 3
i
!t
llone [Editor Bnlyl
ilirlrF-flt! srl*lt} t q.
î:
f'Ì
1:.1:l
fu""r
I
]
EreaL tlptiun*
H*r+:*:g
"--.'"-'"*"" -r.: : :Proce*sor:
Ptc16Ffr{
ial
:li
'l;:
f li
er
,,;,1
1i
Ii.++r:Ì+l+r
1.
carlbio rt .lmb,e
r* i, g,',
ma.
4. Torniamo pero alla fines'ra 11o11o n6zinr., d€l progetLo nella parte infe-
l/tl
is nnt simulated" 'Details' for additional information an Flfl EF8{.
.1i1oa
riore dei a fineslra trov a"no
attivo il pulsante
e,1:r:t:i,
:
::ryla1tan1
un nodo
per (Add
Nocie), clrccandolo
farà
aEgiungere
ir:**iií:,t
r--------------t{rper.metteràdi | 0K | f,ancel |r $rply { lestra
?
simulation.
l'lPLAB-lCD Debugger
F
pulsante "Change", selezioniano il modo simulazione (MPLAB-SIM Simulator), ^.-^",,-^,1^ quanlt ^,,-^+i ^-, parameos5ervan0o tri dovremo tenere in considerazione al momento di simulare il nostro program-
ot all peliphelal* have $uFFort for
{{}::
f:tll:lffi,tli ì
] rinu
:"+wt+
:'"++
di
sviluppo
apparrre una f inestra che
l-l.elp
-- I
ci
realizzare
I I
o'-lesta OggraTione.
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 caso nnctro np nnsqiàmn creare Uno nUovo con l'onzionp
Properties), che, di conseguenza dovremo cliccare.
File>New.
zionare MPASM come linguaggio di programmazione /r -^^,,-^^ -rr,i^+prno \ LOt t9UO9E T^^r\ tUUt// Oil [ tLsr I rU dplle UCilq nossihili )Lr FattO pUJ)rUilr srelte.
l-^-6 ln nrroct: finoctrrilrLJ(ro lo Lv)o
5. Se si seleziona ìl nome del progetto, (prova.hex), del riquadro Project File, si attivera anche il pulsante di proprietà del nodo (Node PKid TudFi*as
i;-*d"h*
i-^^.+-n+a ^:,, LolltC l.JlU llllPUl
a )ElCcala E
questo, cliccheremo OK. Tornera la finestra delle nnzinni
dol nrnnotln
s
EE:F.i
*-------:---l
-t-S:- ..- ,*1'" iEonfiq.ndion 3 ' '=-.
c*u:]ì
l-:---]-= lldp
È
*FÈiffi"1*;6,16;1',
I
{snc . gef f*r*P,F*+et Énah*e I :' :, .: f*qf 3r+* Etable
l'
Dae@extrode: Fdibo'tt6F81 rure"4ol*j.5oìio
|;;g"
-
-___l
i: :.*
.St*rr.rr'.+nk+H,*r
'
i
qle4Ei...l
,*=
Plr4É{{ Éùer
tdd
]
i.....-......-.=.- -'.-.....-..-'.-.iq
I;
* Ir rin*:
li6de---
Mk=+pr+r.'+,r++r l:.yt
*t+tktí
Í*
i+.'*
+++rttr
+Íì+;+
,IrritT'ri ff"#:
1
, :$#
{
l
+ llll
la..a:.:':.,'::'-a tr f ''ir,:
r.ll::::
.:t.: t .-
{
f.qil
i
nn-ostra per inserire le opztoni del pragetto
cryrd '
I aar |
490
|
t:
Alcuni parametri da tenere rn constderaztone quando si símulera tl programma
File Name:
Directories c:lalchir*l lmplab
e!.dmFle.ósm
OK
";! c:\ d
hala.a+m idasml E-asm idasml tr-asm mulSxfi-arm teÉdme-asm
j j I
List Files of Type |
5
uur** f iles
[". c;-. msml
:i
archiv*l mplah
e*ample template
|.:IP
I
Ab'iamo quindi
definito
MPASN/ come compilatore per
flrpsto 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-
il sistema di numeraziana arc a L ttzrizro vur rutL iI n:r:mairi POlOlllELl
sembler,
I
rhe rimannono Ie nnzioni scelte sono mostrate nella linea di comando (Command Line).
il*ffitrxLexH*ru* f$Fg ilxr i:{ M ks I À*nL --.
Finp<tra rlello nronricra
dct
7. Una volta definite le proprieta del progetto e r suoi frles,
1166c
per compilarlo dovremo scegltere
Suildíng EI(*HPLE.HEX... Cùnpiling comnand
EXÉ|4PLE .
-t
fiSl'l:
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.
l'opzione Project>Make
Project,
tr:mitp l: nrr:lp sp nOn SOnO ci:ii rnmmoc<i donli
orr 'or|,
verra
cpneràlo il file HFX da caricare ..Jì ^^il- Irle'rì(Jrld Ilellcl ^"^^", U litOg'Amî4. -^-^"i-
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) rmnrc rnnc\ I L.lud'l ^, -li 'lllc)>d9c)// possono impedire che si crei il f ile
c^ -^.craai llc))d99r
HEX. Nell'help in linea dì NIPLAB
sono descrittr ad uno ad uno nrro<ii tini di arronir Questa finestra indica che non sana stati commessi errori durante la comptlazione
3 AB82
Buílrting
!
El(AHPLE.HEX. - .
Co&piling EXfi HPLE.É$h: Conmafid line : "C :\*BCHtU*1U,lFLAS\l,lPf,5l,lltIt{-E,(E
/e+ /L+ fx- ft+ lp16F84 /q C:\g Found rlireetiue iÍ co1ufin 1. { C:\ÉECHIU-1\l4FLf,El EXf,l'IPLE-ASl,t ó Found lahel after cúlunn 1. (L C:\AnúHtU*1!]{PLnE\E$Él,lPLE-fi511 12 : Sgmbúl not pr€uiouslg defined C : \AECH I U-1 \l'lPLfi S\ EXfi f,lFLE. A$l't 1 6 : Found label after column 1 - ( È;\RRCHIU-1\l,lPLAS\El{Él4PLE.FSll 17 : $gfibo1 not preuiouEly dÉfined C:\ftRCHI$-1\tlPLRB\Et(ÉllPLE.ASJ,I 2g : llLegal. opcode {stop} 0:\ÉnCHIU-I\t'fFLAB\EI{*HPLE"frSrf 22 : Ill-egal condftiDn (E0F Éncoun
t'rarning[295] C:\f,FCHIU*1\l'lPLf,E\EX*],|FLE.frS]4
irarning[267]
Error['t131 ttarnlng [ 2 07 I ErrrrÍ1191 Errúrf1227 Errúrf"1257 l,lPLf,E is uÍablP tú fínd úutorrt Bull-d fallÉó.
4
.,EI{f,HFLE"HEX",
Bg63
8193 3008
ùg84 e 8065
B09t
7 BB6ó
1
E a6a7
80s8
t5 1l
881
C
665 8C91
.t8m
60ca
9792 gc$2
+2 6úM
gctS
OEB9
1A 666C '14 6E5t
19 66# 1ú B06f
î:
î* -fq ?t
661 B
60rJ
g81'
gB94 2897 34C0 8J B3
3t15 d691
3MÙ
6413
909 0
sB14 cB19
2
6Bló
6ù'f
281b
ti
8417
AFFF SFFF
s818
3'FF
z6
E61C
SFFF
,b
alrf clrf úouls mu6f mvf bcf rrF btfec
8e12 gk11
6t8
Brl4
6x10,1 6x3,888 gx1l 8x3,grg aódwÍ 6xlz
f.f rrÍ
dscfsz
gsto retlF clrs dsùls
6x12 Sx13 8114
looP gxB
ErgS
Éúosf gfJl
aoúls E*20 mvof ù<16 call nplt_S goto min àddl$ 6rff addlw hrff èdrt1( Bxff
rddlw kff
Memoria di programrna con il file Finestra chc >; genera se ci sono orrori di tomptlaZtaFa
3*fswwsm
HEX caricato.
Scheda delle istruzioni:
l'istruzione bsf i puo dire che insieme alla " bcf " e una delle istruzioni plu ,,+il;,--+^ ^^llpro^i,, uriltlòte rera grammazione del PlC. ll suo
ohieltivo è di norre a'l un bit di un registro. ll nome o la posizione del reoistro all'interno della memoria dei dati, sarà fornito come primo parametro di istruzione, e il numero del bit come secondo parametro. Sia uno che l'altro iniziano a contare da 0.
PARAMETRO
I
MNEMONICO
bsf
Ít
Operozione: Cicli:
PARAMETRO
;;;;,,di
2 **",
b
un registro.
f
t
Codice OP:
0t 0t
Flogs:
Nessuno.
bb bfff ffff
ffissMpx# flseé
$-'3$gffiiliXg#*l$ fi lìxs$ A differenza delle istruzioni di movimento ouesta istruzione non varia rnmnlotempntc il rgplenutO di Un registro, dato che serve per modifi-
Caratteristiche dell' istruzione bsf.
care bits individuali, lasciando il resto così com'è.
Questo è molto utile nell'uso di alcuni registri specifici, dove ogni bit h: rrn sinnif ir:tn p deve essere trattato in modo singolo, al momento giusto, senza che gli altri debbano variare. Un esempio tipico e il cambio di banco; normalmente si lavora nel banco 0, pero nella maggior parte dei programmi e necessario accedere al banco 1 per configurare rrn: <ario di ronictri ,, e oopo lornare al banco 0 per lavorare. ll cambio f ra questi banchi si realizza modif icando il bit 5 del registro STATO (registro che occupa la posizione 03 della memoria dei dati). ll bit è conoscru- Uso dell'btruzbne to come RPO e, dato che la numerazione dei bits inizia da 0 da destra verso sinistra, occupa la posizione del sesto bit. Nell'esempio si
bsf per il cambio di banco
vede questo cambio di banco; Ia linea dr istruzione bsf è stata evidenziata in un altro colore.
$c$flwsxra
.rì
tììì
Scheda delte istr uzioni
:
l'istruzione bcf ffi.ffi
uesta istrrrzione realizza l'operazione contraria alla "bsf "; pone a 0 un bit di un regi-
zioni non sono solo utilizzate oer ouello e non è detto
ffi' ffi ffi ffi stro. ll nome o la posizione del registro
che debbano essere utilizzate insieme. Per esempio un altro uso molto importante che si puo fare con l'istru-
W ffi all'interno della memoria dei dati e anche '%.fornito come prim.o parametro
-i^^^ zlulle
ffig#
^-+ c^ l.ld llle>>d lc>cL -l^i utrr .^^^.1.+^'; )cgrdrdr-uil/ uLl dr A u n u rnrn+ -^...
PARAMETRO
dell'istruZione, e il numero del bit all'interno dol reniqtrn aaìmo (oaaìndn n:r:mptro l p vL|
{1.^. lldg)
PARAMETRO
2
l:,IJL'
'
sue caratteristiche sono illustrate nella figura a f ianco. Cnmc ci nrn nqsorvare il mnemonico di vJJr' vuv
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
Caratteristiche dell' istruzione bcf
troveremo molto spesso nelì'utilizzo del PlC.
o bandiere, quando queste si attivano. Normalmente
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 istruW%XWWX
questi segnalatori si attivano in modo singolo, quando J,si nrodLtce un evenln r^hc notrehhe pssere il teruv vl
mine di un'operazione, il salto ad un'interrupt, eccetera. Questo viene detto attivazione via hardware, !^.,^ c>)clc ^^^^"^ fatta Via pelu ^^.À tld t^"n lulu ric.++i,,^-i^-^ ul>dl-Llvdzruilc ucvc mettere a 0 noi dovremo sarebbe a dire, software, questi flags tramite un'istruzione.
j*j'iY':.Y*l"-l
ffi
bcf bcf
STATO, Z
INTCON
bcf bcf
INTCON, TOIF
EECONI
bcf EECONI, EEIF bcf EECONI,4
STATO
STATO,2
INTCON,2
Per esempio, all'attivarsi del contatore TMR0, avremo un bit all'interno del registro INTCON che si pone a 1 per avvisarci di questo fatto. Se vogliamo utilizzare il TMR0 più volte all'interno di un programma, dobbiamo rimettere a 0 questo segnalatore ogni volta che si attiva, in questo modo tornerà ad avvertirci della sua messa a '1 quando il nrnaoq<n (t nnoté
Un uso molto comune dell'istruzione bcf è il reset dei seqnalatori
S*#*wessw
Questo si fa con l'istruzione bcf, all'interno del programma, dove il registro INTCON sarà il prrmo parametro e il bit di attivazione TMR0 il secondo.
Appti cazione pratica: compilazione det primo programma
na volta visto rl primo programma e l'uso del rnmnil:tnro
N/lPA(l\,4 nalfo <ozinni nro-
rodonti J!:rv,iL,,,v ccnrrirpmn nra v,L le faSi Che do<rrittn nor l'ol:hnr:zinno di rn a tq lr Lvrrrvilqzrvrrq rnmnil:zinno E
doci su un esempio concreto
nli 1n ur urlPlU9ldllllrlo, ^r^^rammr
abbiamO nraìnottrì lrrc:nuú)qll-
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 attivi 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
f-inestra di propriela del nodo
SwSSwswww
Assicurarsi
qui, che il linguaggio
scelto
(Language Tool) sia MPASN/. Dato che non abbiamo ^-l;+-+^ ^"^^"-,-,e(lrrdio ilil programma non posstamo sommare nessun nodo da assemblare. Uscire dalla f inestra di Edit
${ffixYY$"3ffi& #tr$_ tr$A##ffieffi *4e 4. Creare un nuovo file (File>New). 5. Scrivere nella finestra corrispondente il programma che diamo come esempio di primo programma in
Project.
assembler.
Finestra del nuovo file
Scrittura del programma.
Assegnazione di ,Ln nome al programma
Somma di un file al progetto
Sw$swessw urluìÌrtjÌtl;]j::1::]::]ffi:!t
Questo sarà il programma che più tardi sommeremo 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) per aggiungerlo.
(Project>Edit
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 f
i
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 conclusa con succesSo.
se"$L il*ffigfl il *Ă :ruf, ffiey* si apre la memoria di programma (Win-
*ssgffiwex3#ru3 '10. Se
dow>Program Memory), si puo osservare come verra caricato ilfile nel PlC. Anche se le linee compilate nella
Finestra della
Altre finestre che ci forniscono dati sul progetto
Sw$*wwrm
memoria di programma sono 17, vengono caricate solo 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 aperte altre frnestre che forniscono diverse informazioni sul progetto e sui file.
memoia delle istruzioni con il arooramma caricato
Schede di istruzioni: f istruzione addlw ffi d
istruzione "add" è una delle
ffi
che puo
ffi
ffi
due istruzioni aritmetiche eseguire un
ffi ffi ffi
OPERANDO
MNEMONICO FONTE
PIC'16F84: la somma. L'altra
è la sottrazione. ll PIC'16F84 non sa moltiplicare, ne dividere, ne tanto meno puo fare radici quadrate, potenze; nulla di tutto questo. Questo e dovuto ad una delle caratteristiche
oddlw i Operozione:
essenziali del suo insieme d'istruzioni:
rr^.^ )crrpILrLor Lr -^frt fa Si Che SianO td rutu -^*^r:-i+\ molto raoide nell'esecuzione. Nono-
Cicli:
<t:nta arro<tn qé <i do<idor: oqonrriro
'
OPERANDO DESTINMIONE
'.
Sommo del volore letterole k ol registro di lovoro W I
alcune di queste istruzioni complesse,
CodiceOP: I I I I lx kkkk kkkk
ira d:lla <i nn<<nnn rncirr uilriro )r E q: n:rf vv)Jvr ru Lv)rr Pqr Lrr E vollq i<trr rzinni <omnliri
Flogs:
La
C, DC, Z
somma nel PIC ha due modalità:
"addlw"
e
"addwf
".
La "addlw"
Caratteristiche dell' istruzione addlw.
somma un valore letterale al contenuto del registro di lavoro W, e lascia il risultato in quest'ultimo. #%frF4Fg
{*ru
giore del suddetto numero, si genera quello che
rs%€ffi€jtrg*ruil &ffiffiLw
Supponiamo che il registro di lavoro W contenga I valo-
re 05 prima di
si
conosce come riporto o carry, e per avvisare di questo fatto sr attiva un flag chiamato nel medesimo modo (C).
realizzare
roperazione,esi
vuoreÈ
esadeci-
|ilrrqrL ilrl valore vurvrL sommare JVr LJUwLll
ì ::
meto FF \/odi:mn ,,- n'oiln ; -Jellu che srrccedera dono l'ese- , cuzione
è FF (255). Quando dopo questo caso il risultato è magun'operazione come rn
valore che puo contenere
dell'istruzione.
Nella seguente figura
si
rappresentaqr.rtotuìto mostrando i valori in drversi codici numerici,
-
ll registro di lavoro, così come gti attrr regrstri dei
.
.ESADECIMAIE"
I
?
DECIMALE
u)
W
f; oddlwFF "+ l;
BINARIO
ffi
i
FF
i llllllll
255
il Y
al $
trne di fine tacilitarne la Ia comdr facilitarne L'
prensrone
. l r vqlore lnlzlole vqlore rnrzrole |
vqlore finqle W W
A
04
OOOOO t O0
ffi
ffim$*e*remw* t@lb.rt&taaaaaltt l^)::::))::::::)):::|))::::t:
::....: ,a:::,1
'a,::l
,::'l:.:l
Schede di istruzioni:
l'istruzione addwf istruzione addwf e la secon-
:W
da modalita di somma esisîenfe nel renertorio delle istruzioni del PlC16FB4. La somma st realizza fra il conlónrrln ranici66 LCt tu LU rli Ur rrn Ur r rc9r)Lrw
volore inizi ole, OI
;
:
0l
oddwf 3,1
5e DC è messo
ol
OOOO OOt
OOOO OOOO
lrilizza rlal 1t|/y iltn urf)î uvYv rJana I anars zìana di <amms
Y;% {,: {:tt'i:'
OPERANDO
DEsTtNAzór.rr
Sommo del contenufo del registro
f
i
{i. \,',.i
Yi
1.,,,"r"1::,'7"
Y.l} 7-l
*
?}'{.
{:,'1,.}1|j\g'rl i;:
i
+--++-+i I rfvrl I fl:nc I o 7 sono- qtà+r - --.Lr Lrdt LdLr ^^^ri
altri esempi, per cui rìmane solo da spiegare il co"nooruamento del flag
d
con 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
';,?',1
I , OOOO Ol lO :
DC=l
:
correggere i digits
I MNEMoNlco io-NrÈ qddwf , f
u zr o
oo@oooo
o I dovremo
OPERANDO -
ratte r isti ch e d el I' i str
,
+l+J
v
I
Codice OP: Flogs:
o0rr ; oo0o olo!
oooo
fi
sono interessati i flags C, DC e Z.
Cicli:
0000 llll
ol0l
1
&
o nel registro di lavoro W, secondo il ri:lnro dol n:r:motrn d Così corne con l'istruzione addlw
registro
oooo
r
LSBI
t
ro W. ll ri<rrlt:fn doll'nr -,,, -Jerazrone puo l^.-,^+^ ^.-^"^ ^^l ld>LldLU lìcl lllcuEJilrV roni<lrn rEgr)Lrv e>>ele -^...loqimn
Ca
0000 00r
(contiene il digit
E
Ànllr ^' 'rlci.ci L.1udl)ld)l uúlld
memoria dei dati, e il registro di lavo-
Operozione:
REGISÎRO - 3
REGISTRO-2
REGISTRO- I (contiene il digit MSB)
f
DC. 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, quando 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-
I
rrn rinnrtn :l rUU c; ) nrnrlrrro )U U, LIUO| 'rnÀn PTVUULE Ur | | rPWr LW ql
00 0t I I dfff ffff
superamento del valore F, ìl flag DC verra messo a 1; it che sign rica che
C, DC, Z
dovremo mettere a
ne a ddwf
.
'1
0 il
registro
e
al digìt seguente. Questo e mosTrato graficamerte nella figura
sommare In aito.
Strumenti di lavoro: il simulatore MPLAB-SIM ambiente
di
MPLAB possiede
sviluppo
tra i
suoi
strumenti un srmulatore,
il
N/PLAB-SIM. Un simulatore
nprmettp di pspnrriro
pgl
computer il programma che piu tardi sarà registrato nel microcontroller. Si nrrn rrpdpro rn<ì <o il,, programma sr
comporta come noi pensiamo,
il
valore dei registri in ogni momento, p in tr rttn nlellO Che SUCCey', - ,,, npnor:lo
de dentro il
microcontroller
in part colare, è prooettato npr drp fr rnziont che sono
,,','
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.
al
momento di eseguire il programma.
ll
GIi stimoli esterni nel MPTAB-SIM sono elaborati una voha ogni ciclo d'istruzione, perciò i segnali di durata inferiore non possono essere captati, e pertanto simulati, cosa che è permessa dagli emulatori in circuito.
MPLAB-SIM,
illustrate nel riquadro seguente. Nonostante questo, non dobbiamo confondere un simulatore con un emulatore in circuito. I simulatori rappresentano la situazione ideale e non un'esecuzione reale al 100% di un programma, ed hanno delle limitazioni. Permettono di eseguire un codrce, modrficarlo, ed eseguirlo nuovamente, simulare gli input sulle linee d'ingresso, seguire l'esecuzione linea a linea del programma e i suoi registri. . .., pero si differenziano dagli
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 trovare
e coneggere gli errori della maggioranza dei programmi.
Differenze fondamentali tra i simulatori e qli emulatorì in circuito.
emulatori come il MPLAB-ICE in tre cose fondamentali:
Assistere l'utente nella verifica dei programmi.
Funzioni realizzabili con MPLAB-S|M
Opzioni per cambiare I'ambiente di sviluppo.
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 fare una simulazione, altrimenti
di le
opzioni non saranno accessibiìi. La procedura 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.
Finestra della memoria d'istruzioni con caricato il programma con il quale
possiamo sce-
L'N/PLAB-lCD Debugger si vede evidenziato, perché è stato installato sul software come componente
gliere fra diffe-
di MPLAB (vedere
In questo 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
si sta lavorando
caso
renti modi,
se-
condo le necessità.
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 opzione non appare il PlC16FB4. Gli altri modi non sono selezionabili, dato che non sono stati installati nel software, e nel caso lo fossero non potrebhero essere scelli noiche non
disponiamo dell'hardware. Per realizzare delle simulazioni dobbiamo selezionare la <arnnrl: nnzinno n-^^^-+vp.rvrrL )LLvrruu 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*H
34ffiL Wffiffiffi %KWWL{vTKZWWW
Durante la simulazione del programma puo essere inteMessaggio d'errore che appare selezionando il MPLAB-ICD Debugger.
Sw$swwrye
tsffi::t:;;z::;:@stúll;frswaarlttwffiltwlllyl2t8:wllùuuktw,
rnccrnin,/^À^r^ lLc vcucrc lc))dl
&r4t..n.,..rr:lllltL:,lrrt
rhorE nn<iilinr Lr vw)l-
!1020t&090ó07 liq:06 10s613600S0ú 00 03 0g 00 s& 00 [{ lllq 33 @c 0[ 00 63 66 00 00 00 ù6 .!ts$: sr 6A 6! !3 03 06 30 09
..,f.:""
EOD 00 06
Nak
Her Dèú 1ó
e.on2 cìrth
ntcon 09re
8inèr! t93lt00ù
3 00003000 255 11111111 24 00011ú69 5 ú000009s 0 03Ù0Ù066 31 000i1111 | 06003s6s 255 11111111 0 g9Í03303 0 00500s3c
6! 31
06 0s 60
6 6
0 0 C
30
3f
6ú 6ú 0A BC 00 ù0 0c
pcl 0B rPtioú r,aq Ft 11 itètle 36 lorta 1F trisi 06 óftb ÉF fisb D0 00
OE
úù
clar
,
90036000 30ù30Ù60
6000000ú !0643003 3360306U
Finestra di memoria EEPROM tramite la quale si modifica un valore
Finestre dei registri con un dato appena modificato.
zione si trovano le istruzioni che si stanno esequen-
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-
do.
C)rrestn YVLJLV
Memoria
e nossihile attraverso la Finestra di del Programma (Program Memory
Window). 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 informazioni 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.
decimale.
rr^,-l+.p uEllvslc sp )E il lr nrnnramma \Jll dltld ^^..ihìli+Prvyra PU))lulllLo E dpridcrc
Che
vogliamo simulare deve essere visualizzato così come lo abbiamo scritto o con informazioni addizionali che fornisce 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
E+4 Ee 0à4 tudq Id
02.40
IC
OBJECT UNLUE
EJEilPLo.nsl 2-2-2861 22:4st51
Rereased CúDE
LìNE
PnGE
02.40 OBJEEI
SOURCE IEXT
neleased COOE
LIffE
EJtXPL0.eSh 2-2 2EC1
22145.51
PîGf
1
SOUNCE IEXT
00004 ;r.**E***t*,r
80005:
0000ó ; The 1ó bit result is stored 00067 i 00568 ; Before callinq the subroùtin€
0!609
09810
in 2 bltes
" npy , the nult ; be loaded in location nulplr ", and the nulti : nulDnd " The 1ó bit resurt is stored in 1oc
06ú11;H,ÒJte&L_byte.
HCr: w3'i p=1ór84
. | .'. .j ,
: . i . tr " rrrr r.
; PlClóf8!! is the tarqet
00016
0ú017 Sinclude 'P1óF84.1flc ; Include header fi tlsf 00!61 08602 ; P1óF84.lNC Stnndard Header Fi1e, Uersi0n 2-00 0013ó LISr 88018
00019
cblock 0110 i lenooraru storaae
lnformazioni addizionali del proqramma assemblato fornito.
--:;
00 61 82 03 94 05
& B7
16tr 08 10 00 lt 00 8! 0ú
asf !6 0t !6 E6?a 00 !8 00 6&t B0 ú0 80
0g 08 8B 00 Ù0 ú0 0Ù 0B 0ú 00 90 00
00 60 80
'l.:.!l:l 08 60 08 09 9ú
c9 0t
6t 08 08
!6
CB
8C
0ù c! 00 6& 00 0B !0 [6 00 n0 00
t0
Alcune finestre utili per realizzare la simulazione
Ssp$fuwwsw
Register Window) generalmente è molto utile durante una simulaztone. La finestra dei registri speciali con-
tiene solo quelli
specif
ici,
mentre
quella generale riunisce sia r registri specifici sia i generali. Un cambiamento di valore all'interno di una finestra, Window > Modify, influenza ambo le finestre se gli rndirizzi esistono rn entrambe.
Sono interessanti anche altre opzioni come lo stack delle istruzioni (Stack Window) o informazionr del
Finestra per I'abilitazione del Watchdog
modo sviluppo, per vedere che tipo d'oscillatore è stato utilizzato e per determinare la velocità del processore, l'abilitazione o no delWatchdog, o il modo di collocare i punti in cui
vogliamo fermare (break points).
Finestra per la determinazione del tipo di oscillatore.
progetto (Project Window). Normalmente si tengono aperte diverse finestre nello stesso tempo. Le utilizzeremo, così come i diversi modi d'esecuzione di un programma (menù Debug), a seconda di come procederemo con i concetti e la programmazrone.
&rxr*wx
m& wewT&&w
y"&wLL& %KW**&XXffiy"&W
Prima di realizzare delle simulazioni, dobbiamo tornare alle finestre del
Sm$*swwre
Differenti opzioni dei break points
la simulazione
fistruzione
INCF
UCSTA ISTTUZIONC
può considerasi un caso speciale
dell'istruzione add, 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. Questo dinpndp anmp qemnrtr o:l
lncremento
di
ilfiifi'[i',.j -::s:*-19IH9Ti Incremenlo di re in rre qer
t
in.rcoNTAToRE,r
--*
...-.
.-*
*i
:jj},StrruroRE,r
i
. --, ..i
unirò i::[ ::li]î]:[:,1 "*k q1 _ óóNrnronr,t i ;[[33N]î13[E ] ' "JJ*r
rer''*
valore del parametro d.
Osserviamo che l'unico
flan interessato a
Comparazione dell'uso dell'istruzione di somma e incremento
ouesta
$:SsffiPA fl#ru $js$"l|"ffiUtrX#rutr gN*r L'uso oiù comune di ouesta istruzione è nei contatori. Normalmente i contatori si incrementano di una unità per volta, per rr ri nttoct'ictrr rzinno nermorro rn OPERANDO OPERANDO sostanzrale risparmio di tempo se la FONTE DESTINAZIONE MNEMONICO compariamo con quella di somma, poiché ogni incremento comporta solo un'istruzione (un ciclo di istruzione). Infatti per la stessa operazioOperozione: incremento di uno unitò ne di incremento realizzata con ì'idel contenuto del registro f. Se d=O struzione di somma, è necessario caricare un vaìore (un 1) nel registro il risultoto si loscio nel registro di lavoro W, e poi sommare il regidi lovoro W e se d= si loscio stro utilizzato come contatore, al nello stesso registro f. registro di lavoro W. ll risultato sono Cicli: l due istruzioni, per cui il tempo sarà
istruzione è Z, per cui se ci interessa controllare i f lag C ola lC n^n n^trom -,,,o usare quesra ts{ruzrone.
incf
-*J------:r*--ir--*.*"g -*i |
Codice OP: Flog:
Ca
00 I0t0dfff ffff
Z
ratteristi che del l' istru zio n e i ncf
.
il doppio.
Se rl contatore che vogliamo imnlpmcnt:rp dpvp essere incrementato di piu di un'unita per volta, è meglio impiegare istruzioni di somma.
Sw$swwryw
fistruzione DECF uesta istruzione è quella opposta alla "incf". Con essa si può decrementare il valore di un registro e portare il risultato al ronictrn qto<<^ n:l
lavoro W.
ll
roni<trn di
suo flag associato
nuovamente Z, che andrà nrr:ndn
a
e 'l
il roni<+rn in nrroctinno
arriva a
O.
Anche qui, come con l'opera-
di
incremento, quando si deve decrementare di più di un'unità un registro, è meglio farlo con un'altra istruzione, in questo caso
zione
la sottrazrone.
OPERANDO OPERANDO
MNEMONICO FONTE
DESTINAZIONE
**.-:J***,i***--f*. -- l-r:-*-* :""*-- i Operozione: decremento di un'unitò del contenuto del registro f. Se d=0 il risultoto si loscio nel registro di lovoro W e se d=l si loscio nello stesso registro f.
Cicli: Codice
1
OP: 00 00.| I
Flog:
dfff ffff
Z
er$fle4Pg fl**\$ AjgSYR{"*trX*ruffi *ffiflr Caratteristiche dell' rstruzione decf. L'uso di questa istruzione è simile all'istruzione " tncf " , per cur non verrà ripetuta. In ogni nome, e non con l'indirizzo che occupa dentro la memoria di programma. ln realtà e la stessa cosa, caso, parleremo ancora dell'utilizzo di questi parametri in altre istruzioni. Normalmente quando impieghiadato che abbiamo dovuto "indicare" al compilatore mo un registro, faccramo riferimento a questo con un che sono uguali. Questo è possibile grazie alle direttive EQU, che fanno
W F
EOU
0
EQU
I 0c
CONTATORE EQU decf
CONTATORE,W
decf
CONTATORE.F
decf
tCoNTATORE
decf
WF
rn rri< nn n doro
; ; ; ;
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*
I
rn
nome o un'etrchetta con un valore numeflco. Quindi, dovremo {--^ tdtc
-11,,,ud-++^^-i^^^ Ltút tztut tu dil
so che faremo <anrritn
.li
in
nrro<ti
"nomi", dato che,
a
seconda dell'ambien-
te in cui li
utilizzereparametro il mo, cioè: di istruzioni a cui fare-
mo riferimento, significheranno una cosa o l'altra.
Appli cazione pratica: si m ulazione del primo programma opo aver vrsto In cosa consiste il simulatore integrato N/PLAB, è arrivato il
momento di simulare il primo programma che abbiamo fatto e che è stato compilato con MPASN,4. Ora diamo un'ocrhir+r c: ^llò.+^ cazinni nor rrLvruors rirard,aro LllldLd 9uc)ttr )EZlvril vsr
l'enunciato del programma, i passi e gli aspetti di cui tenere conto. Fatto questo saremo pronti per cominciare la simulazione.
fl&$axfleffi tr x$_ $3$c*sKTT* 1 o Una volta dentro a MPLAB, la prima
-^.. L\J)d
Ud
^a
{ar^ î^rìr^ ìlE il il nrnnottn LLv rho ldlC !r rL ^C Opl lJrvyL
abbiamo realizzafo, primo.asm, cosa che si fa mediante il menu di progetto (
Finestre utili per la simulazione.
Project>Open Prolect).
2
.
ln seguito, se non I'ha fatto
l'apertura del progetto, apriremo i file o nodi associati al progetto tramite il menù dei file (File>Open).
pgK ffiè,$ssYe $xMe$L&xx*ruK Ppr onni nroncfto dovfemO SCerxruffi$Y$q$; #Y3*-x
gliere quali finestre sono utili per lerri traÀara nrrolln rho -,,- il programma sta facendo e quali rappresentano solo una distrazione, non fornendo informazioni essenziali. Alcune opzioni possono dipendere carì d:llo pr nroforonTa nor<^^îli srqrsr r4E psrJul ldll, c^ )old uoils
proprio l'utilizzatore che determinera ron l'cs,nerienza iì suo modo
Limitazioni di MPLAB-SIM per tl PlCl 6FB4
di lavorc. 3 . Per prima cosa dovremo sce-
gliere come modo di sviluppo
Sw$&wwss'**
gramma. Potrebbe interessarci solamente il risultato finale di un registro oppure vedere lo sviluppo di un
pezzo del programma su cui abbiamo dei dubbi sul funzionamento, o vedere +' '++î pd))u d pd)>u ^a..^ ^ pdr ^ar+^Lc LULLd u dpll'pse r^r rzione dcl oroI
grarnma. Vedremo alcune
di 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 -^^ +^.-i\J9ilr ,,^l+VUrLd (-ile rdL(rdmo una simulazione e vogliamo reinizializzare il sistema, dovremo eff ettuare 5i deve fare un Reset ogni volta che si desidera iniziare una srmulazione
la
simulazione, opzione inclusa dentro
a
Options>Development N,4ode. All'interno della finestra che ci appare selezionando Details, potremo vedere le limitazioni che ha MPLAB-SIM per il PIC che vogliamo
simulare, nel nostro caso
questo Reset. 6 . Iniziamo con la prima simulazione. Selezioniamo 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 istruzinni <i oconrrn nn rrnid:monto
a nni il
ar
rr(nro nr^<o-
..,,,Í
. . ,.ì-'
':l.r::
......1|.
' ..i::::i
ìl
PIC
16F84.
4.
Dopo aver scelto il modo,
sono già disponibili diverse fino<tra fr: nrre<to <ronlioro,,q JLLY"T'r YSLJLL
mn di lasriare anprte
solo quella del programma, quella riai ronictri nonor:li o nrar;
.:....::..
dei registri specifici. Ora dob-
r::* i:iil:-
biamo disporre le finestre sullo crhprmn So l,a disnnsizione si
:'.:a;
effettua tram ite Wi ndows>Ti
.,::1:;:
le
Horizontal dobbiamo ottenere una serie di finestre dove noler vprifirarp i dati fonda-
: , ..:::ara:.
mentali.
: :
#PXg#8dg #gn-Léq %xp.$#Lexg*ru9
,).::'.,,,1 .::a::9
Le opzioni della simulazione scelta dipendono da cosa ci
interessa ottenere
dal
t:'::lj,
pro-
.:..,aaatÉ
: ,:,:a,tij
Terminato il nostro programma, si prosegue eseguendo posizioni non valide
-.ú
ffiwf:*wwww
-v
gue per il resto della memoria
di
programma,
che non conttene valort validi. Nella figura precedente sono visibili le finestre rhe s nossono vedere con questa simulazione. 7 o Utilizzare Debug>Run>Halt
npr fermare la simrrlazione. Ora possiamo verificare che il valore dei registri corrisponda con l'enunciato del programma: il registro OC contiene il dato 03 e i registri 0D e 0E conten,^,,.t^"^,,^,,-t^ 9Ullu ull vdrurc uvudlc.
\/prifir:rp nr reqfe irrformazioni spostandosi all'irterno delle varie finestre.
$ o Ripetiamo la stessa simulazione, prima pero cambiamo il valore del -^^:-+.^ -,1 esem-^^ ao ^, u, con, regrslro nn pio,07. CosĂŹ, eseguendo
Modifica del valore di un registro
il programma, noteremo meglio 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 notare l'eff etto dobbiamo
tornare a mettere OO
nei
registri 0C e 0E, seguendo i passi del punto preceden-
te di modifica dei registri, poi eseguiremo il programma (Debug>Run>Run) e lo
fermeremo (Debug>Run> Halt). Ci appariranno i registri secondo quanto predi-
sposto dal programma.
differenza con
La
il tipo
di
sim u Iazione precedente, Animate, sta nel fatto che noi non vediamo come si modif icano i registri,
anche se internamente Scelta del modo di simulazione passo a passo
il
0rocesso e lo stesso. e il PC, eseguito il nostro codi-
ffiw#srurwww
::,:.:4,
:',,1,
,i*
,
.:,)1.;
ce continua con gìi indirizzi successivi della memoria dì
:rì::
:tl:
programma.
10 o In ultimo eseguiamo il programma istruzione per istruzione. Questo modo viene anche detto tracciare, dall'inglese "to trace". lnizializTcrpmo i renistri rome nel caso
nrorpdpntp
oltro:
ros,ettare il
sistema. Andiamo all'opzione Debug>Run>Step. Notiamo che il tasto funzione è F7. 11 . Ogni volta che premiamo
F7 verrà eseguita una
sola
'
tstruzrone e potremo o5servare il 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-
lnformazioni ottenute con I'esecuzione passo a passo
guita in seguito. La figura 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 programma, e non nel programma completo, si puo modifir,are il valorp dpl PC ner farlo iniziare dal punto che ci interessa. Questo si fa con l'op-
zione Debug>Run>Change Program Counter.
l'rso di oilesta onzione è tipico in programmi molto
lunghi, dove la simulazione -^-^l^+pdsso comprera
d
pa55O
risulterebbe molto noiosa.
l'onzione di
simr rlazione
passo a passo, generalmen-
te e la piu usata quando
si
a
programmare, per collaudare le nuove funzioni delle istruzìoni Introducete ora in questo stesso programma le istruzioni apprese sinora, assemblatele e realizzale la loro simulaziointzta
Ino rc/
per iniziare la stmulaziane da un òltro punla
Moditica del
PC
F es$Fqe*
re
{:*
riodrota 6|16 vLurL LL Lr rL il15| 566hicci vvll ll))l-
mo tempo dominerete loro funzionamento.
il
't'':
fistruzione
G0T0
iamo arrivati all'istruzione tabù della maggior parte dei linguaggi di programmazione che la possiedono. Molti libri di programmazione strutturata, hanno naturalmente
rn r:nitnln rho cnion:: fnndn nro<ta istruzione, alla f ine del quale si raccomanda di utilizzarla 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'altra parte del programma in modo incondizionato, inoltre è la base principale dei salti condizionati, come vedremo piu avanti. Pertanto, vale la pena imparare l'uso corretto di questa istruzione, per non dover poi esclamare: "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, è | doppio di quello normale, questo signifìca che un PIC funzionante a 4 Mllz impiega 2 ms al posto di uno. Questo perché l'architettura segmentata del PIC mentre esegue un'istruzione punta alla prossima da eseI- ^^+^ q.i nrrira rho in ,,:--,,--. spnupnTe Po'^ -lu ld 9uLU J-"'' -"'-'--rr sr rnnonp <i: .,, salta da un'altra parte del programma, rompendo Ia senlenza ner crri l'istrrzione senrrente non e conosciuta, e si impiega un altro ciclo per ottenere la nuova rstruzrone.
PARAMETRO PARAMETRO 2
MNEMONICO I goto I
Operozione; solto incondizionoto oll'indirizzo segnoto come k, che potrebbe essere un'elichetto.
2 Cicli: Codice OP: l0 I kkk kkkk kkkk Flogs: nessuno Caratteristiche dell' istruzione goto
ffiSffi *$ $3K
fl#fd
L*XSY${X.$Xg#N ffi ffi #K{3
Nella fìgura possiamo osservare due usi dell'istruzione
goto, il primo corretto e il secondo sbagliato. Come si ouo vedere nel ouadro delle caratterrstiche dell'istruzione, dopo il mnemonico della medesima si mette un parametro, che è indicato come letterale, e che normalmente è un'etichetta che raporesenta I'indirizzo di destinazione: dove si desidera andare. La programmazione strutturata, dice che se si salta da una subroutine 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'organrnr2mm:
golo
inizio - modulo I
golo
mezzo-modulo ...........................-.-.-.-....-...-,,..
se* inizio-modulo I
islruzione I
inizio-modulo I
istruzione 2 islruzione 3
metà-modulo I
islruzione 4 islruzione 5
goto
meto-modulo I
islrvzione 7 istruzione 8
goto
.J
si
i
inizio-modulo I
Utilizzo corretto ed errato dell'istruzione qoto
metù-modulo I
considera
nrimn
,9ltS
l- n<ì <a il
o<omntn
dove l'etichetta 1è all'inizio di
is*ruzione I istruzione 2 islruzione 3 islruzione 4
una subroutine non c e ne5sun
islruzione 5
problema; il pro-
soro
kt^*-
i{:!g.:r-:*!-"-."1--=_i
islruzione 7
soto soto
-,À -^
me net seconOo ..
I
pcemnin
'-'t":_ta:n..S{qJg. !-.. ..
.ì
-l^^++-'t rcLLd Lr
!ni:i-"---n,9-d-U|-"'.!-
-^
l'oti^ ^-.+^ I g porLc di un'altra subroutine.
Sep$&ewwrq*
fistruzione ffi d ffi W ffiffi
ffi ffi ffiffi
rstruzione nop e una delle qomnliri nir r JEr rvilLr À. uo uLilr41drc, ^ ' '+ili..-"^ c Pru nello stesso tempo e quel-
la meno ulilizzala E semplice perche non ha parametri, e quindi non puo essere impiegata male, ed anche se fosse ulilizzata in modo indebito, l'unico inconvenipntp r-hc notrphho nrovocare Sarebbe una perdita di tempo equivalente
lW
NOP
ORG
0 rNrzro 4
goto
INTER
ORG
goto
MEMORIA DI PROGRAMMA
ad un ciclo di istruzione, dato che non fa niente e non varia nessun f lag. Nel suo codice OP le due x indicano che
ORG
0
goio nop nop nop goto
tNtzto
INTER
MEMORIA DI PROGRAMMA
00
00
0l
0l
in orrella nosizione si oossono ave.e zeri o uno indistintamente.
02
02
03
03
fi5fleqF$;
04
04
05
05
{*ru
à.'gsYkr.jr3#Fi
f, ru#s
La natura stessa dell'istruzione rende
difficile immaginare un caso in cuisia necessario il suo utilizzo. Alcuni pro-
Modi diversi di posizronare le rstruztoni nella memcria di programma
l-,,+ili--granrmdtor ^"-,---+^.; ra uuilzzano In sosltlU-
zione della direttiva ORG che, come ricordiamo, manda al compilatore l'indicazione che la posizione de l'istru-
metro. Come abbiamo gra visto, in questo modo si ottiene di mettere all'induizzo 0 la prima istruzione del
zione successiva è all'indirizzo indicato dal suo para-
PARAMETRO
t2
MNEMONICO
nop
programma, cosa necessaria, dato che quando ìnizierà l'esecuzione dei proqramma, è lì che si deve lrovare la nr,ma istrr rzigng. Abbiamo anche PARAMETRO rrn altro indirizzo sneciale nella memoria dej codici. l'induizzo 04. ln questa posizione, il nrn.trqqrìrtr \/À À .o(.Are la rouiine di Servizio dall'iniarrr rnt nrr:ndn <o no rrnA r! nrnnlrr.a urrv, vrvuuLL
in mndn rho il srn nÒ<ln nón nnq(a o((oro
Operozione:
è un'operozione che non
fo nullo. Cicli: Codice Flogs: Ca
ratteri
sti ch
1 I
da nessun'altra istruzione. Nell'esemnio si -' mostrano due modi di rea' 'Y'" questo, lizzare utilizzando l'istruzione nop e con la direttiva ORG. Anche se il risultato occupato
OP: 00 0000 0xx0 0000
nella memoria dei codici può apparire
nessuno
diverso, l'esecuzione del programma e la stessa. In alcuni casi, inoltre, si utilizza que-
e del I' istruzi on e no p
sta istruzione nei cicli, cone metodo per costruire delle routine di temporizzazione.
Sw$$wsww*
Programm azione: struttura di un programma pro-
.:,zi$Èi*,, uando si affronta la realizzazione di un .: 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:::
;tile
d' piantina che ci faciiitii||avoro,perevitareerroriodomrssioniindesideessere molto
creare una specie
rate.
Orro<t: YriLJLu
ni:ntin: ", Ottiene faCilmente, datO Y's'
I r,,
,u
Che Un
programma assembler, e composto da varie parti chìai
ramente differenziate. La tabella mostra in modo schemat co queste parti. Spregheremo per prima cosa alcune convenzioni utilizzate nella realizzazione di queste ni.rntinp lrlpll.. rninnna di sinistra scriveremo le etichette delle rouiine e delie subroutine, nella colonna ranl-rrla rzinniil \/oró nar nrnrc icl-r r)Li uzrur vqrs ó s PrwPr lEt tLrorg c.r,\tòrò6^ )L j vgrgr ru la ^rAnriors usr P' v
gramma, che devono rispet"tare l'esatta nomenclatura prevista 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. ,,
:
ilsI
P=tip di procesore
::
RADIX
Sistemo di numerozione
,.
È
c
volore
Elichette !l
ORG
0
goto
etichetto inizio
ORG
4
g0f0
rouline-inler
Configurozioni
ORG
eftheilo-inizio
istruzioni Configurozione
i
Progrommo principole
ciclo
Progrommo principole
Rouline interrupt Rouline di hotlomenfo dell'intenupt
r0uflne-rnîer a
, Fine L
Direttivo di fine progrommo
parte
di
LulLo tl
progrdm*2 ,s,-pilatore per il
PIC
obbligatorio opzìonale e mullrplo
{ì:.,:r.
.:.i:-
.:l.r.,I.r;
q.
ìì-t, ìì,ì, t..,.,r,.,..u.,,t..i-'
,:',':' :raìiìtì
':,ii .ì:ìììì
*
tl
l
1;r{j lÌì:i
P=lót84
i:i !,-il
INCTUDE
"Regx84.inc"
(i inizi: rnn dirottivo nor il nrnroc(^ra
INCI.UDE
"Mocros.inc"
il5t
in pratica, "ordini" che il comprlatore dovrà tenere conto ai momento di
IED
EQU
I
IAMPEGGIAIORE
EQU
6
0R0
0
dalle so"genti. Queste direttive non
g0î0
rNrzt0
traducono in istruzioni, dato che non
ORG
4
vot il tu
golo
INTER
memoria
coll
CONTIGU
nrrpnti :nrhp sp np esistono molte
t(ót)LLdt "^-1,--^"^ c |llil^ |tc
uLLuPctc
d. ^-.+;"^ iJdt Lrtc
ovonti
indirizzi della
di programma. Nello sche-
GOTO
ctcto
bsf
STATUS,RPO
altre: la prima informa del tipo di PlC, e la seconda determina il codice standard dei dati, cioe se i dati saranno in esadecimale, decimale o in binario.... Cone abbiamo visro in arcuni ese'npi,
movlw
b'0000000t'
di sonrritn :rriri:nn ic definizronr delle
movw{
TRISB
crcL0
ficlo
infinilo
CONIIGU
movw
b'10000'
movwf
TRISA
movw
b't0t | 0000'
movwf
rN1CoN
movlw
b'01 I t000'
movwf
OPTION.REG
kf
STAIUS,RPO
bcf
PORTB,IAMPEGGIAIORE
bcf
PORTB,IED
movlw
ró
movwf
TMRO
',::l:
otirhottp nor riforirei: roni<rri rho sono valori, con un nome al posto di un numero. Nella zora di configurazione si in,-
;INTERRUPI TMRO E RBO ABILIAN
zializzano i renisîri cl-e si utilizzeranno ;TMRO RA4;INTEFRONTE
;IMR0 SENZA
Dl SAUTA
nel nrnnramma Orrc5f6 si fa nella zona chiamata "etichetta inizio" e
PRESCATER
quesra configurazrone si realizza con
istruzioni normali. Prima di questo, considerata anche come conf ig urazione, la direttiva ORG indica al compilatore, con differenti parametri, dove
;Cl ASSlCURl/ritO CHE SIA SPENIO
;10 lMPUl.Sl
PER lL I|MER
refurn
deve collocare ie d''ferenti parti del
sl0p
;ROUTINE Dl INTERRUPT. 5e chiomofq
btfsc
tNTCoN,T0tt
g0f0
IMPUISI
btfsc
INTCON,INTT
programma nella memoria dei codice. Nella posizione 0 e obbligatorio met-
tere la nrima
istrr rzione che dovra ,l+^^"--l-^^+^,,^/^+iut' cLtc)>ctc c)cguttd, ltu||diltrcILc
reilie
chetta come inizio, start, etc.,
o ia
a
-l^i-*-+^,,^-+1 Lr ilor rdLo o Liuc)Lc.
BUMPER
bsf
PORTB,I.ED
;ATIIVIAM0 lt LAMPEGGIATORE
kf
INTCON,INTT
;CANCEttllrlvl0 lt ttAG Dl INTERRUPT
Nella posizione 4, come vedremo
-.,-^+i ^^rre l,in,zio della ^i,, cvol rLr, t-i-^^^ur)w9r ro PU Pru rorrtino rhp no<tir: l'intorrr rnt il vpttn-
retfie
re di interrupt.
|MPUr.Sr
bsf
PORTB,IAMPEGGIATORE
;AfTlVlhlv{O IL I.AMPEGGIATORE
kf
INTCON,TOIT
;CANCEII|AMOlL FIAG Dl IMERRUPT
ll modo ideale per progettare
un ciclo da cui si chiamano le routines lavoro,
che realmente real,zzano il
TND
a
Programma esempta che mostra diver>e parti Lipiche
un
r a nlnnn fLULLv rrtfn E ci+r )lLUClC uvvv P,U9lOllllllO n, rln+^ in| nrarodanzr rzq Imonzinnrtn rqLv rLU I rcr r4rvr il vuqr PrqLcuqr -
re#ie
6+*$*****1.*
si
ma appajono due dirett;ve molto fre-
tNtzto
INTER
-r
ou
^.-'-l^-i'-.1^|dtc/ c)dueLil
normalmente in modo ciclico. Questo è cro che normalmente otirhott:tn.^mo
è
nr^r -Jramma pflncr-
t,,l,l,
LffiffilTISfEn
*
figurazioni, il programma principale e la direttiva di fine programma. Le uni-
::#.':":
esg,4;trtrllffi!;J!iriFè1É-H6&d.-r4-!ir-r:ea€3?q+l:?Éi;a
stop
"'
che parti che devono essere uniche,
-róril
;RAUTINE
Ol IilTEBnUZt0HE-Se
p
sono: il programma principale, la rou-
tine di trattamento dell'interrupt e fine del programma.
Coúpilirg ESEIiFI0 -ÉSl,l: Connand line: "C:\ARCHIU^1\flPLCB\WASflUIH-EXE lp16îA4 lq C:\AfiCHIU-1\flPLAB\ESEHPIO-ASl" (LISI) Uarninq[285] C:\CECHIU-1\HPLAB\ESEHPI0"ASil 4 Uarning[285] 4 : Found directiue directiue in in coluan coluan 11- (LISI) Sarning[287] ErrBra113l ErrBrlll3l
C:\0BCHI{r1\flPLAB\ESEf{PI0.ASl'l 6 : Found label after coluno 1. {LED) C:\AECÍIU-1\ilPtgB\ESFHPI0-ASx 12 : îilnhnl nrFuinr<lrr dFfinpd lTllFflì C:\AECflIU-1\HPLSB\ESEHPI0-ÉSX 12 synbal not not preuiouslg defined (IílEfl) C:\nÉCHIU-1\HPLîB\ESEhPI0,ASr l6 : Fsund 1abe1 after colunn 1- (auaoti] C:\nBCHIU-1\ilPLAB\ESEHPI0.AS]l 17 : Sgnbol not preuiouqlg defined (8ucle] C:\AfiC$IU 1\HFLÉÉ\ESEHPIo,ASfl 2s : Ilfegal opcsde (stop) (f0F encountprecl before EHD C:\neCHIU-1\ilPLAE\ESEHPI0-ASf 22 I I lcgal condition
tarniîg[267] Error[113] Errgrfl22l
ErrorÍ125f I4PLAB
is unable to find output file
Build failed
Uir;adl
'
l
fl:trffiF{# ffffi&?}"il* ll programma compilatore
menti visti, anche se la sua struttura
"ESEhPl0-HÉX"-
non è perfettamente uguale allo schema iniziale - così come abbiamo detto - la soluzione ad un problema non è unica. Si inizia con tre direttive una di queste ripetuta. In seguito vengono le definizioni delle due etichet-
:
+^ l- LUr il ìVUrO4rUr rC, dUUrd-Al,-;LE. tr--^^^l^ I OLqr rUU rO -^^{i^,,"--:^^^ mo una parte che non effettua direttamente fino a quando non si chiama
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
mostrato
.Ama olaLVr rrE a<amnin sjs rrPrv rnntiano lvr rLrgr rE trLurtti LLt nli vil Etc-
ol
-
l1E
la
e
;?i g
tr€
g}1$#
Tuttavia, non tutte le parti sono obblìgatorie, per cui puo succedere che qualcuna non ci sia. Aì limite possiamo iniziare con la direttiva LIST, non definire etichette, lavorare con gli induizzi, mettere solo una ORG con parametro 0, che non configuri nulla e non utilizzare subroutines. Obbligatoriamente dovremo terminare con la direttiva END. Comunque questo non e abituale, poiche lo schema in genere viene utilizzato al completo e molte di queste parti si ripetono diverse volte. L'organigramma mostra oltre all'ordine delle differenti parti di un programma, 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 sinistra indicano la possibilita disaltare il quadro a cui girano 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ì vediamo che sono obbligatorie alcune direttive, alcune con-
una routine per realizzarla (CONFIGU), nella quale si configurano 4 registri, e si inizializ,,StOn,, .,-"i-t-;li |LE^ ^lrole ,,avanti,, e -îh^ +r^ ZOIIV LIC VOlloulll. L rLvV SOnO Una PqrvrL specie di subroutine chiamate macro, che si studieranno in sezioni successive. ll programma principale consiste unicamente in un ciclo infinito da cui si aspetta ad uscire mediante interrupt. f interrupt inizia con l'etichetta INTER, dove, al contrario di cosa puo apparire, si lavora con una sola routine 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 lgllp n:rti :nche se ron oralcuna di esse non abbiamo mai l-,.^--+^ ldVUIdLU,
-:^+^ >lete
^:: 9ld
i^ lll
.,-À^ 9ldUU
Ài Ul
r^ali??ar^ ledllLLdle
llil ,,aqf V(rJLrv66
566_ prv
gramma, che sara sempre piu complesso, man mano che andremo avanti.
{rqJ' .'}i i**!
*q#SffiiÀf-:i.l1
I programmi sorgente possono essere scritti con qualunque editor di testo a caratteri ASCll. Guardando nella struttura che segue, vedremo le divprcp n:rti rhp nÒqcono rr formarlo. PvJJv Classificheremo ora il suo contenuto in altro modo, rinò rnmo finn nli d:ti rho n^((^nn.^nîonor ,-, e ognuna di queste parti. Così il compiìatore, durante I'esecuzione, 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 devono assecondare a norme di scrittura e
a
norme
di
movf
posizione relativa che
occupano gli uni rispetto agli altri.
U5T
ovonli
ovonti
eticheito I movf Etichetto2:movf
l-nma rannl: nonor:lo nor 1r rtli ouesti la loro scrittura non deve ^--^.J^-^ CLLCUCff
movf
U5T
Etichetto5movf
_etichetto3? Movf
iI LJ) 4trtr tót --"^++^.i dLLCt| -,,11)Uild -+^--)LE))O
Eticheilo 4
lrnea.
ilYgfrsil3"Yffi
Mnemonici, direttive e chramate a macro corrette e sbagliate
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 alfanumerici, e includere un tratto basso e tl segno di punto interrogativo. Però
movf STATO,W
etichetlol
movf
movf STATO,W
STATO,W
STATO,W
eticheftoó movf ESTADOW
EiichetÌo2:movlw 9
il
primo carattere non puo essere Operandi formulati in maniera corretta e scorretta nrrmorirn no di connn dalla colonna 2. Se l'istruzione segue una etichetta Come standard si differenziano le maiuscole e le "ciclo" "ClCLO" l'etichetta nella medesima linea, deve essere messa tra due punti, di modo che e minuscole, spazi in bianco o tabulati. Si possono scrivere in minusiano differenti, a meno che non si affermi il contrario scolo o maiuscolo indistintamente. mediante un comando speciale. Se si utilizzano i due punti per terminare una dichiarazione di una etichetta, nrro<f i nnn (nnn nrpci rnmp n:rtp doll'ofirhorr,a m: *Fíf{i\ri *9 vuLJr, Devono essere separati dai mnemonici da uno o piu come un operatore. Nella figura le etichette definite (o ul lo icl-rr rzinnolg h: cn:zi rrn I lo nirrdi l)Ll uzlvl )pdz I n u trhrrlrzinni tóuuloLlvl ll. Jc rrn: alla sinistra sono corrette, e quelle a destra sono sbaPru ul ul I vPq^nóqol12r:r rrndn nrrocii dorinnn a<(aro n: rrn: v rnnl: nli:to | <fo(<n <i nrrn diro dol roctn donli --''ffiPl -'r" ocr ^ I
....
li:$g:ffi##:{-i
p,,irnnl: rttn nrrolln rhp ci nnno dnnO- rjn nlnt6 vll9wlo /\r/\ r è trattato come un commento fino alla fine della linea. Se il commento occupa più di una linea dovremo mettere un Etichetto5 punto e virgola all'inizio di ognu?etichettoó n: ut nli c))E a<<o (eamo nncci:mn rradorLvI tq pu))ratrr(/ vcucItd ir:fi\ n ra nonli o<omni lLoLl/. rrLVil LJL',ry, Tetichetto i Quando il compiiatore incontra prrori di nrresto tinn ci avvisa e I ,,*-.......,*.."*.,.",*'.,.,,,,,,J non nonpre il filo che doveva
Gli mnemonici delle istruzioni, le direttive del compilatore e le chiamate alle macro devono inrziare a partire
eiicheilo I elichetto2: _etichetto3? Etichetto 4
,.*;.-*..
ì1'."-..--..-*
Etichette formulate in maniera corretta e scorretta
eticheilol movf Etichettq2:movlw
STATO,W ;movimenlo I ;movimento di un ;volore letterole
Commenti formulati bene e formulati male
Sw#*:sqr{:svaF
lltsi.
'''lfs
Tr
^-^^,,i+^
STATO,W
mnemonrco
etichettoó movf STATOW ;tutfo sboglioto