Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
principi generali
Per pater uttlizzare molli àppàròLi "intelligenti" e necessario che siano programmòti
per poter eseguire le loro funzioni. Programmare non è biamo strutturare il nostro pensiero e tradurlo in uno
altro che indicare a un orocessore ouello che deve fare dei molti linguaggi di programmazione esistenti. Un lin-
S*#*wwrs
da risolvere; si
' Chiedere chiave di vede che fun-
;-- accesso all'utente.
.Leggere chiave. Aona male e Organigramma
$*S$e*es$w€P
:.:iili
ì.:ìi::-:l
Strumenti di lavoro:
i linguaggi di programm azione
ome gia abbiamo spiegato nelle pagire pre- linguaggio di alto liveìlo è più vicino al modo di pen-
cedenti, un linguaggto di programmazione è sare delle persone, mentre un linguaggio di basso
rrn insieme,,L v, rcnole simhnli c n:rnlo snprr:li
di ir\Jv,L, livello e piu vicino al tipo di dati che accetta ìl micro-
per la costruzione di un programma, Esistono nr.ìro<qr'ìro Fntr,amhp lo r:teoorie h:nno
,- \/'^+-^^;
,drLov9rtr^
molti linguaggi di programmazione, di svaria- svantaggi.
ti trni con caratteristiche a volte srmili e a volte molto
diverse fra di loro. 1r{fl9{_ffie$:i
I linguaggi di alto livello piu utilizzatr per programmare
ilL;{5*î fít&X:* l; ;: * il: Li"ru* :-r,&{"r*: i microprocessorì, sono il C e il Basic. Entrambi sono lin-
Una delle molte classificazioni che si possono fare guaggi di impiego generale, croe si utilizzano per appli-
con ilinguaggi di programmazione, differenzia la cazioni molto diverse fra loro. Questi lìnguaggi sono
loro similitudine dal codìce che è direttamente nrodotti d: divprse C:sp e orrr màntenendo trna strut-
'l|--',
accettato dal computer, cioe jl "codice macchina". tura fondamentalmente simile, possono presentare
Quindi, si è soliti dividere il settore in linguaggi di alcune differenze, anche se, come qualsiasi linguaggio
alto livello e in linguaggi di basso livello. Anche nel di programmaztone,la ioro efficacia dipende dal modo
lavoro con il PIC seguiremo questa distinzione. Un con cui il programmatore Ii ulilizza.
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 liÍi:
'..:ì
main ( ) ,ì,:.ì::ii;
'l
{
set_bit (STATUS, RpO ) ;
oPTroN-REG = l; / / Assegna un divisore di L:256 :.::,.1€*
set_tris_b( 0 ); a.::',..,:t
oulput_porc_b( O ); ...:a:j:at
':.rr-:rìì
.ììÈ
::,4
r :::ììì
:-,,::t;&
".,a,:,'.tl*
Frammento di un programma scritto in linguaggio C riì
:a,,:.:e
Nella frgura precedente è illustrato un esempio di fram- la "while" danno chiarezza al programma: in que- '-:
:il
mento di programma scritto in linguaggio C per il plC sto esempio è utilizzata per restare in un ciclo sino t. .::::t*
In esso si configura nel banco 1, la Porta B come usci- a che la condizione scritta all'interno delle parente- .l
;
ta, e si assegna un divisore per 256 alla frequenza di si e realizzata. In pratica si converte in un ciclo infi-
lavoro per il suo utilizzo con il timer TN/R0. Si continua nito sino a che un evento non modifichi la condi-
togliendo gli zeri dalla Porta B e si abilita l'rnterrupt zione scritta all'interno delle parentesi. '::
...1
all'attivazione del TMR0. Proseguendo, si entra dentro Se si volessero ripetere diverse istruzioni per il .-,::l::', j
ad un ciclo infinito che verrà forzalo solamente dal tempo in cui resta valrda una determinata condizio- :.:::a:.,i,:7,t
.4,.::::1
TMRO alla fine del suo conteggio. ne, basterebbe inserire queste rstruzioni fra le . .ì:ìùg
r,r;rl:"i$
A prima vista si possono notare alcune caratteri- parentesi. Trattandosi di un pezzo di programma
. :,:,4:&
stiche di questo programma, che sono quelle che non si puo apprezzare la seconda delle caratteristi- ':;is
$
hanno contribuito a renderlo uno dei linguaggi più che fondamentali: nonostante sia collegato al pro- -.r''
utilizzati. Le istruzioni di controllo strutturate. come gramma principale, e quindi s a stato abilitato da
un evento di interrupt, all'interno di questo spezzo- '.':lili
Li:ìr:ì:iili
.:::,:a:'Ì.
specifico, o di un bit di un registro, o l'abilitazione . .',.:ìi::ii
.:t::,,itì
,:.:l:l
di un interrupt.
La differenza con iinguaggi come l'Assembler
non sta neila complessità del codice, inteso come :
Ss$*wctre-m -t
.;::;:,;,;i;.,1
tropartita, il programma scritto in
Assembler si traduce in tante
posizioni di memoria quante
sono le istruzioni utilizzate, nel
nostro caso nove (CICLO non è
doto
un'istruzione). Nel programma
scritto in C invece, ogni istruzio-
t#
rrumG-
nFffi 'o"@@
ne scritta - quelle dell'esempio
riportato sono sette piu la strut-
tura "while" - si tradurrà in una
-EffiT
m o piu istruzioni macchina (posi-
m
Ere
l5 ooto
o zioni di memoria), a seconda del
compilatore che verrà utilizzato.
colcolore I'oreo
@ Questo perche in Assembler ogni
istruzione si traduce con un solo
codice macchina, al contrarìo dei
linguaggi di alto livello. Possiamo
^,,^.+1 Pa
u))trr vdr tr quc)rd ^rrticolarità
nella figura della pagina seguen-
te, dove la seconda colonna della
finestra del programma (Program
Memory Wrndow) riflette la posi-
zione in cui si trova ognì istruzio-
ne. Benche la programmazione
in Assembler sia piu faticosa per
rhi l: o<onrre il rndiro nonorafrl
Convertire il doto in codice ASCII è ottimrzzato, con un constdere-
vole risparmio di spazio occupato
ll programma principale comunica normalmente con i vari procedrmenti dal programma, cosa molto
per lo scambio di parametri e risultatr. imnnrtanlp considerando le
restrizroni del PIC in quanto a
come la capacità di attendere un evento, facilitano capacità di memoria, che nel caso del PlC16FB4 è solo
l'uIil\zzo, a vantaggio della chiarezza. di 1024 posizioni. In ognì caso i compilatorì C di ultima
$_'essil*4ffi1trffi
CICLO
È il linguaggio denominato di basso 1-- €
UD! STATUS, RPO
lrvello ed e il piu vicrno al compuLer.
movlw a1
Nella figura a lato e illustrato il prece-
mOf,'Wf OPTIOI{_REG
dente programma redatto in
clrf TRISB
Assembler. ll programma scelto e
molto simile sia in un linguaggio che
bcf STATUS, RPO
nell'altro, e non presenta grandi com-
clrf PORTB
plicazioni. Senza dubbio, per chi non 1-^
UDL
r: INTCON, GItr
conosce nessuno der due lìnguaggi,
potrebbe risultare piu con,prensrbrle rl
bsf INTCON, TOItr
linguaggio scritto in C, dato che non
goto C]CLO
necessita della conoscenza dell'archi-
tettura del PIC per: realizzare le lstrr-t-
Frammento di programma tn lrnguaggro Assembler.
zioni, ed è p u intr:itivo. Come con-
Se€th*p*srym
ln Assembler ogni istruzione si traduce come un solo codice macchina
generazione producono un codjce ben ottimizzato. cedimenti, e nelle funzioni proprie dei linguaggi di alto
Come abbiamo detto, una delle caratteristiche che livello.
fanno sì che il linguaggio C sia uno
dei piu ulilizzati, e l'uso delle fun-
zioni. Nella figura a lato si mostrano
alcune funzioni di un compilatore
OUTPUT_HIGH-FOFIT_B
del C per il PlC. La maggior parte OUTPUT-LOLPORT_B
sono funzionì molto specifiche del INPUT PORT-B
-PORT-A
lavoro col PlC, che non si incontra- PIN PORT A INPUT PIN PORT B
no in compilatori di C standard. SET_OPTION
Per rnciso, dato che sono molto DELAY_MS DELAY US
specifici non apportano vantaggi DISABLE INTERRUPT
S.&6*ws#s*
Strumenti di lavoro:
installazione e uso del CD
I CD-ROM che com-
menteremo, è quello
allegato ai primo
f,acrirnln di nrre<t'o-
pera. E formato da
,,-";^ --.+^li^
VdJle Ldl ^ +i
telle e ^. CO[ì
llre5
divorci rnn-pnr rli rl.p ver-
.:n.Ò .lili, tat nol I lavO-
ro con rl nostro microro-
bot. Ora lo ana zzeremo
;^
il | -^,-l^.1^+r-^1,-+^
| rvuu uqLLcvlrc Lv.
CD e selezionandolo, s
tr-^A^ r,,n
dLLeue dile
-lln 5ue n,,r
qudì.Lro car-
telle, e ai quattro files, così
't
come indicato nelia figura in
L
basso ll CD non è autoinstallante Le
r:a:::':
ill.:ts -t
1 lLlrr,,
ur
$qp$Swwr*
Proseguendo nell'installazione, ci
verrà presentata la videata successiva,
nella quale dovremo decidere l'indi-
rizzo dove installare il software. Si
nrrn l:<ri:ra l'indirizzn niì nrodicnn-
sto in nIipqtn rasn (- \{p6livi\RObOt\
o cambiare indirizzo con un altro 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+ó
lgl ILE nall:
|| I lEllO r:r+allr
Lql LEIId/ m:
I ru o<onttiro
LJLyuil L iltl
'
programma Robot.exe dalla cartella
nrincinale rhe e oia stato corretta-
montè inct:llatn qp6lranÀn
JLyuEl luv Ii pd))l
nrcci
spiegati precedentemente. Apparirà
la videata di inizro.
: frur
|Lq r rnzinno nnni il +rc+a
di vyr
r4rvr rs ur Ld)LU cÀ ram
)Eil t-
plice, e ci ricorda quelli che sono nor-
malmente utilizzali negli apparecchi
musicali o video. All'inizio si potrà
solo attivare il pulsante superiore, che
ci
-, nermette
Y',,, di sreolie rp il video che si
vuole visualizzare.
Una volta selezionato un video
all'interno del menù, bisognerà aprir-
ScelLa della direclory di installazione
lo, questa operazione attiverà anche
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. Schermata iniziale del video dimostrativo di Robots.
Sel*Sse*eecr*c
fl e$qYH *_$_e $:,$q#ffi ffi &ffi w g
fr&ffiYfrts_e ffirL&*$
Quest'ultima cartella contiene un
solo programma eseguibile per l'in-
Scelta del video da visualizzare
stallazione di un'applicazione, che
porta il medesimo nome della car-
gli altri tre tasti. Partendo dall'alto verso il basso le tella: MPLAB. In realtà è formato da vari programmi,
icone indicano la messa in marcia, la pausa, la nuova integrati in uno solo, che formano quello che viene
attivazione, e lo stop definitivo. La videata centrale sara comunemente chiamato "ambiente di sviluooo".
quella che ci mostra il video prescelto. Questo programma è indispensabile per le applica-
Per uscire dal programma divisualizzazione, bisognerà zioni con il PIC e dovrà essere studiato in modo la
cliccare sopra la parola Robots nell'an-
golo in aìto a sinistra del monitor
Se ri fossero dei nroblemi con la
visualizzazione dei video, si dovrà rein-
stallare Windows Media Player, che è
il <nftrnr:ro rho ri nérmotto rlro<to
visualizzazioni, lo faremo eseguendo il
programma mpfull.exe, che si trova
nella cartella "installa". Alla fine del-
l'installazione, verrà attivata la proce-
dura di connessione alla pagina 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 instal-
lare questo tipo di software; a questo
punto sarà quindi necessaria un'altra
Esempio di visualizzazione di un video.
cancellazione.
Sry#ee*ce$rye
Le informazioni ci appariranno,
LUrtc |ltu)Ltd^ I-
td r:^ 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 o superiore. Nel caso non lo
' avessimo sr puo scaricare dal sito di
li*Gf&tu#* , F1
, Adobe. Queste nformazioni posso-
no essere lette direttamente a video,
J fúicrochis la{ebsite Seardr optiore 4
' J Literature Text Search S oppure stampate, come qualsiasi file
J Microchip Producl Linm
É Plcmicrots DeviEs
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 normotte
pErrrrELLc di
ur cnnct:rri
JvvJLqtLt nalla
itcilc r,:rio
vqttE
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 sezioni del documento in modo
and IDw qsst c0mbinÈ 1o make lhe hlicrùchip PlCmiEro familv one oflhe
mosl popular rrroducl lines n ìhe world
comodo e raprdo.
RefÈfeilce Manqals :
Oltro
vrLrL :iur mirrnnrnro<.nri
r.il!rvprvLLr)ul l, l\,4irrnrhin
lvlrLluLl lll-/
Fùllow ihls link ts dotrnload the latest teference msnuals. lhe manuals !
reliew architeÈl!re and peripiìeral múdules, bul does not cover thÈ sFecillcs fabbnca e commercializza anche altri
oi each CMúS device.
Plf,micro lltlClt Parametric Search
dispositivi:'nemorie, convertitori, kit
Quickly narrow lour search thf pi.mìcrù mictoÈontrollers wilh 0ut nÈ!v Ai .i.'
ur ,,1
)rLUrczlo, rmnli{irrtnri
orrPililLoruI nnorrzin-
uvctd/tu-
'r^
nali eccetera. Anche le informazioni
Come ottenere la ptù completa tnformazione sui PIC rol:+ir.,c : nrrccti rnmngpgp{i S trova-
nn c, tl <itn rnreh
vvLU e nn<<nnn
L PvJJvrtu accara liha
E))EtE tuc-
sua installazione sia per il suo ulilizzo. MPLAB e f or- rî"_^^+^ -^^-,,1+-+^
tot I tct tLc LUI t)utLd Lc
nito direttamente da N/icrochip, che è la Casa pro- Nelle prossime pagine utilizzeremo questo CD per
drrttrire dei mirrnnrocessori PlC. ll software lo tro- installare sul nostro computer gli strumenti software
viamo. solamente sul CD, però se si accede alla che ci fornìsce Microchip per il iavoro con i micropro-
pa g i n a we b http ://www. m icroch i p. com/1 0 /lit/ pline/ 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, lfffiiliÉs/1 dftx/dalasirietl30430c
Sw$$wwrys
Programm azione:
gli organigrammi
e persone nanno ta neces-
sità di esprimere il
loro CODICE ISTRUZIONE
pensiero sotto forma di co- (letterale)
mrrnirazione rnn nli altri
Alcuni lo fanno attraverso
la pittura, altri attraverso la musica, la
t/
MEMORIA
scultura, la scrittura e il ballo. Gli or- DEI DATI
ffi
ganigrammi sono la forma di espres-
ri :irrt: r nlrcmrrn
,/
<inno rho
rrvr rL !r rL nirr
Viu Lr uru LO O plO)llldltr |l'i,-
inr rrtrr++r
Uecì dsLrdttd Ul 'Un '^ progfamma, In
'l; ^.^ Uîa
serie di decrsioni e azioni che vengo-
no riprodotte in forma logica e ordi- Controllo
nata. Così come nell'arte, esistono
molti modi di esprimere un'idea me-
diante un organigramma, è compito
dell'analista, cioe colui che compone
t/
8--. Segnalatore
l'organigramma, seguire una serie di
"norme d'uso" per far sì che cio che
' <i rir rnlo oqnrimoro rienn: intornroi:in
da tutti nello stesso modo
Considerazioni al momento di costruire un oroanioramma
f&etrtrffi*5ilfltTÀf.:*N*il
*:rfl,8\Tf?,'sj-i'4 *g tf tÍ rnmnloc<è rarno
-_.,,tr,___.- ,.-,,,_ "C l':ra: ut
alrnl:ro
rdtcd
*_,,urdrE r'li rrna ilgutd ..^l+-
uild Íia".^ :)LctLd
dall'utiìizzatore, e mostrarla nel video insieme ala sua
Un organigramma e formato da rettangoli e rombi che rannfesentazinnp " In nro<t^ .2<^ nrr^ óSsefe ne-
si uniscono tra di loro con le frecce. I rettangoli rappre- cessario un secondo organigramma, per realizzare me-
sentano azioni che vengono esegulte nel programma. glio le azioni. I rombi contengono domande che ven-
Possono essere semplici, come visualizzare un dato, o gono poste in base ai dati variabili all'interno del pro-
gramma: sensori che forniscono un
dato al sstema, opzioni dell'utilizza-
tore scelte attraverso interruttori, ta-
All'interno si descrivono le azioni
stiera, eccetera. A seconda della ri-
da eseguire nel programma
sposta a una specifica domanda, bi-
sognera prendere una decisione per
Dentro si inseriscono le domande l'azione successiva, Le frecce indicano
ROMBO per scegliere fra due possibilità
l'ordjne con cui sr devono eseguire le
azioni e le domande.
Indicano I'ordine con cui
FRECCE si devono realizzare le azioni {,e*&-í?9.ffi3:tru{94fl #fl*i-?
{}s*efdi,*&&i4fi;
Dobbiamo tenere conto che il lavoro
Sinboli di rappresentazione di un organigramma
con i mrcronrocessori Der la soluzione
S*Skesr*
dei proolemi e composto da varie fasi, che riguardano
<,.: ru
J.u l: SOftUlare -i-
e rvrrvvurL
n:11
purLL )lo ^,,^ll- t--",.J,^,-"^
9uEllo lloluvvolg. NOfmal_ Chiedere Chiedere
operando I operando 2
mente quando si realizza un progetto, soprattutto se
si lavora in un'equipe di sv luppo, la oersona che rea-
lizzal'analisi del sistema, non e la stessa che più tardi
stenderà il programma, né quella che veriftchera le
soluzroni, o ,:i,:'#ìîà +*tr
Chiedere
di nuovo operandi
{-";
tQta t^
tE ^"^,,^
,, vrwvE
s
, di funziona- a
z
lnizializzazione: mento. Così
Variabili di ingresso ln nrn:ni-
c Variabili di uscita
g Regístri gramma si
{
B
n
|.uv
rn
r r rtilizz: ro
I
Chiedere
in molte di Mostrare risultato
operando I ^,,^-+^ {^.i
9UE)Ls 1O)r, E
in nnnrrn: di
^--^ dvtd
E))E
l^il^
-,,"\ uc|c
Operando
ffi intfodotto? nÒrmo cnerifi-
Chiedere
dato C
E corretto?
Chiedffi
dato A
Togliere
salutg
che, comun-
^,^.^-^.^-l ''r'' -
Chiederé
l'interno di re- dato B
Chiedere gole base. Noi
operando 2
utilrzzeremo Dare
solo organr-
risultato
riÉ
Operando grammi che si
introdotto?
riferiscono alla
rî^^r^-^^+a arganigramma di un enuncrato,
rdvprc)Errc-
realizzato tn forma corretta e non corretta
zrone della
. .:,:.
struttura di un .:::$li
programma, .ll^ 'CLC))'Ld À^ll.
f-j|U' dlic -nra--,t.
^i' Uclld 61666:mm,azinno
Pr 6nl pl-
Lv, Aa+ar-
,l!, uqLqr-
l::ìa::!
: .:.,a:a,t:
.ra
^..J r^ ttELc))d-
fLl ^^-^.-^ m nata dal tipo d istruzioni, che al trpo di organigram-
rin rho nrrosti ma n se. Quando qua cuno disegna il suo organigram- r.:r:a
t
iI
siano molto ma ha bene in mente la sequenza esatta che il pro- . :.:,.),ta:a
::.::.
nrari<i nerrho gramra dovra eseguire, le allernative possib'li,re do- a.::a:,
i
r rhi nlr r t:rdr mande importanti eccetera, quindi si tende a dare per
i
sarà incaricato scontato il verso delle frecce, e a non disegnarle cor-
Meno cose si lasciano alla lrbera d Ìrealtzzare rettamente. Però bisogna pensare che chi dovrà tra-
interpretazione, meglto è. orrol nrnnr:m-
"Y'-' ',
durre la "nostra" idea, si baserà unicamente sul dise-
ma, non abbìa gno, e meno dali lasce"e.no alla libera interpretazione,
difficoltà al momento di tradurre in istruzioni rl pen- il-,^li^,^ >dtd |rr5urLdL().
r9ilure --"- ",-,,l+-+.
srero di un altro. Ecco alcune considerazioni impor- lr rertango o a, t\i/ialtzzaziore dei registrr e defini-
tanti al momento di costruire un organigramma. zioni delle variabili servira da promemor a al momento
Fissare un preciso punto d'intzio, è un buon modo di mettere in pratica la stesura del programma.
per non dinrentcare nulla, inoltre e molto difficile, so- Senrrcndo nresttr rons Cerazioni abbiamo realizza-
prattutto neì programmi che si dividono in piu alterna- to un organigramma che rappresenta ra richiesta dei
trve, term,nare con Ln urrco pJt^Io. Ouesto si ottiene dati per l'esecuzione dt u'a so'nn-a, e la presentazione
quando alla fine diognialternativa, si arnva ad un pun- del 'isultato. Nelle frgure in alto, vediamo ;r esempio
to comune denominato come Fine. di come nor si deve rappresentare rl medesino pro-
L'uso di alternative con due uniche scelte, risponde gramrna.
Sqe#**eswff*
Appti cazione pratica:
it pnmo programma
nche se rimane ancora molta teoria da i$- #i€]{il# i;i i"Í-è*#gefg*Fitffi ffi&Tg
vodoro in nrr:ntn : <tfuttufa e UtiliZZO del Per noter
I L'l.JvLrl
rnmnito il PIC h,a al suo inter-
realizzare il srrn
.-,, Jn pflmo programma,
Dlî rnmtnrr:m^ ,- a^n I
no la struttura mostrata nella figura seguente. Nella
con il quale ci addentreremo a poco a poco memoria dei dati a partire dall'indirizzo esadecìmale OC
nella programmazione e nel linguaggio possiamo immagazzinare i dati che ci interessano, per
---^-t-r^"
o))ct IutEt -h^ ^^^ q^ LUJI
- lt tE ttutl
.rìmnlir:tn
.n<t Lvt ttPilloLv rnmo
Lvt ttE tutti cre_ lavorare con essi come meglio ci conviene.
dono -, e più concretamente nell'assembler dei PlC. La ALU (Unita Aritmetico Logica) e incaricata di rea-
Cominceremo muovendo dati da un posto ad un altro. lizzare le onerazioni aritmeîiche e looiche e all'interno
Leggiamo con attenzione l'enunciato dell'esercizio. di queste, le operazionr di movimento che sono quelle
Nel grafico che accompagna l'enunciato, irettan- che ci interessano. W è un regìstro chiamato di lavoro
golr sono I perche interviene come appoggio alla memoria nella
reg istri entro i maggior parte delle operazionì che interessano la ALU.
Abbiamo tre posizioni che nrr:li o<onrrire ì
Quando un'operazione aritmetico-logica ufilizza
chiameremo DATO1, movimenti dei due operandi, uno di quest è sempre il registro W, l'al-
DATO2, DATO3.
dati, le frecce trn nro essere sia rrn reoistro della memoria dei dati
ln DATOI si vuole
r:nnro<ont2nn sia un valore letterale dato insieme al codice dell'istru-
immagazzinare il valore
esadecimale 03, il rrorcn di nrro- zione.
e in DATO3 il valore che sti movimenti; La discriminazìone tra i due è fatta grazie ad un mul-
abbiamo in DATO2. idatì all'inter- tiplexor (MPX) la cui linea di controllo avrà un vaiore o
no appaiono l'altro a seconda dell'istruzione che sta eseguendo in
nol nn<tn rho quel momento. ll risultato dell'operazione puo arrivare
avranno dopo al reqistro W o alla memoria deì dati. ll numero B che
LETTERALE
8-.. t/
ffi 8:-
ffi t/
MEMORIA
DEI DATI
CONTROLLO
Enunciato del programma da realizzare e
la sua rappresentaztone grafica.
Sw#sxs*rsxss*
l
,:.'la
:'a:t:..:a
.::,a:aL:,..:
::,..;ti
::.:74
l'irl:l:::
: rlr:1.ì
MEMORIA
appare nel grafico ha un suo signif i- ,DEI:,D.ATI
cato: indica che tutti idati con i
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-
LETTERALE
zione altre lettpre ner indicare da
dove a dove si muovono i dati. Così
MEMORIA
:ffi;
si puo muovere un valore letterale al DEI DATI
registro di lavoro W, o muovere un
valore dal registro di lavoro ad un MOVIMENTO
DI UN DATO
registro della memoria dei dati o DAW
CONTROLLO _o3 AD UN ALTRO
viceversa, muovere un valore dal oc REGISTRO ì
$wSsxwwww
LETTERALE
,/
ffi'/ t/
MEMORIA
DEI DATI
OB
_oc
_oD
OE
SEGNALAZIONE
t/
rappresenta sempre con una lettera legata al tipo di $}W*S K&914 &4& &SSfr W &$
g-fi ffi
lavoro W è l'unico che non fa parte della memoria dei La lrnea 5 è di nuovo un'istruzione, la ORG. Questa
dati, per cui non viene trattato come gli altri, e per uti- direttiva dice all'assembler che l'istruzione che seguirà,
lizzarlo bisogna fare riferimento ad esso tramite il (nel nostro caso la movlw 03) è messa nella posizione
nome dell'istruzione. di memoria che è indicata dal oarametro (nel nostro
Sw$*swws"m
o8
caso 0). Questa istruzione, inoltre, e sempre obbligato- ?:1"!1.,1:,1:1r: a: I :,: r,i :l l lri:lii:
ria, dato che e la prima istruzione del programma (fino 1.i lt flti.: f', rl :.i ; rÌ :::i,r:,r
aila movlw non sono istruzioni) deve essere nella posi- N'4olti lettor s staranno chredendo perche alcune cose
zione 0 delìa memoria di programma, dato che e lt che sono sul margine sinistro e altre sono tabulate, se i
viene ndir zzalo il puntatore al reset del PlC. cambi tra maruscole e minuscole hanno significato
Comincia così ii programma tn sé. Nella linea 6, si eccetera. Ecco qui delle norme, alcune obbligatorie,
muove jl valore letterale 03 a W per proseguire col 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 PIC
r 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).
Sap$&rrmr'qr
Schede dette istruzioni:
concetti generali
oco a poco vi mostreremo
le differenti istruzioni che wf f,d *addwf
formano il repertorro del
PIC 16F84. Per questo e
necessdilo Utdilre
^^-^--^",^-l^i-":"^^ prlma
una serie di termini, che saranno MNEMONICO coDrcE oP
DELL'ISTRUZIONE
quelli che utilizzeremo d'ora in poi
nol rnr<n Àoll'nnor:
vvLru.
Mnemonico:
è il nome dell'istruzione che noi useremo per ordinare al microcontroller cosa deve fare. Dobbiamo scriverio tale quale
senza cambiarlo.
Parametri:
operandi che necessita l'istruzione per essere eseguita. Per entrare nei dettagli di un'istruzione si specificano i
parametri che essa ammette che dovranno essere poi sostituiti da valori reali.
Parametro f: rappresenta un registro della memoria dei dati, operando originato da un'istruzione.
Parametro d: rappresenta un registro, operando destinatario di un'operazione, con due possibili valori.
Se si sostìtuisce con uno 0 significa che il registro di destinazione è il registro di lavoro W o accumulatore e se è
sostituito da un 1 significa che è il medesimo operando originato dall'istruzione.
Parametro b: rappresenta un valore (da 0 a 7) di un registro.
Parametro k rappresenta un valore letterale, sarebbe a dire, un valore riferito al mnemonico dell'istruzione.
Registro di lavoro o àccumslatore W:
registro speciale che non fa parte della memoria dei dati, e che si utilizza nella maggior pade delle operazioni aritmetico-
logiche.
Giclo di istruzione:
è il tempo base che impiega un'istruzione ad essere eseguita. Per il PlC16F84, funzionante a4MHz, questo ciclo vale 1
microsecondo (prs).
Unità Aritmètíco-Logical
è incaricata di realizzare Ie operazioni aritmetiche e logiche del PlC.
Blocco di elaborazione dati:
insieme dei registri che eseguono le istruzioni.
Flage:
bits contenuti in determinati registri che servono come segnalatori di eventi nell'esecuzione delle operazioni.
Codice OP:
traduzione di un'istruzione realizzala dall'assembler, perché possa essere compresa dal PlC, che non lavora con codici
mnemonici, ma con 1 e 0. La longitudine dei codici OP in un PlC16F84 è di 14 bits"
$*#*xwmry*
a
FONTE DESTINAZIONE
movimento di dat da un
posto ad un a rro, siano
o-esti de risultaLi, valori f ra registri o movlw k
vaiori immediati
Consta dr due operandi, dove il
drtn LUrrrcrruLU
uorw rnnionrrin nol nrimn
rrqr o lrzcfar't.
Pril rlv q Lt o)tqtt_
OPERAZIONE: Movimento del valore letterale k
to, o soostato al secondo. Con que- al registro di lavoro W
sta istruzione si realizza una copra der CICLI: 1
dati, poiche non sr cancella il dato
orig inale. GODICE OP: 1 1 00xx kkkkk kkkk
Ci sono tre tipi di istruzioni FLAGS: Nessuno
" mov", le quali si differenziaro rei
loro operandi di orrgine e deslinaz o-
ne Nel caso della movlw, l'origine è !*,**'-",****,.*"-
un val'ore letrerale e la destinazione e Ca ratte ri stiche del I' i struzr o ne movl w.
il rpniqtrn di l:rinrn \A/
[5fr i4ilt il*# t'951",{{"3ríq:$il v,sto che la programmaz one n assembler e pi;'acile dr
i**vì..it, nrrel rhp :nnàre C)r: r,pdrpmn nrrplln rho succede in
Questa istruzione è stata ulilizzafa precedentemente nra<tn o<omnin n:c<n
Y---- a passo.
nella realizzazione di un programma, dove abbtamo Si n zia mrove^do il valore letterale 5 nel regi5tpe li
avo.o W e si nroseorre muovendo il valo-
re letterale 3 al medesimo registro W.
: {inr'r:
|LO rr9UrO O: l:+n r:q66p(ont:
rqLVrOFr-.-,- il y:lnro
rhe rssrrme \A/ dono l'esecuzione
valore iniziale xxxxxxxx nnn rn: dollo i<trr rzinn
di
$sa*S$qryqsre*
Strumenti di lavoro:
I'ambiente MPLAB
'MPLAB è un ambiente dr
sviluppo integrato per il
lavoro con la famiglia
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, emu-
larlo su un hardware, che abbia le
funzio'ti del sistema reale, e anche
scriverlo rel microcontroller, anche se
nar flrro<to dr.a rrltimo nnc<ihrlit: é
necessario disoorre dr t-,n hardware
-r^^, -+^ urLrE
,
duf9uotv, -ll,-^îliCaZiOne.
^r+"^ oil oPP
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 tra-
durre i programmi che editeremo in
linguaggio macchina, in questo caso
quello del microcontroller. Se il pro-
gramma è 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 "fram-
menti" di programmi già elaborati e
molto utilizzati che potremo include-
re all'interno del nostro codice.
Finestra di selezione dell'ambiente dei componenti
MPLAB-SIM: è il simulatore
software che fornisce Microchio. Con
esso si puo verificare il corretto fun-
zionamento delle istruzioni del pro-
gramma che si sta eseguendo, vedere
come'risponde agli ingressi del siste-
ma, 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 fun-
zinna
zrur Ài "nlahrrn"
rc
ur utruu9 n u r'trarr- a,';e+'
rLcrLd 9ud>t-t.
Questa funzione permette, non solo
di vedere i risultati finali di un oro-
gramma, come farebbe l'utiltzzatore,
ma di accedere ai registri del sistema
mentre si sta eseguendo l'applicazio-
no ocanrondn Io i<tr uztont passo a
n:<<n aaaatar: Î rttn nro(fn ln rror{ro-
mo in maniera piu dettagliata trattan-
do questi strumenti cosi importanti.
Help Files: sono i files che ci per- Finestra di selezione dell'ubicazione del linker.
metteranno di ottenere aiuto dalle
f unzioni, menu, finestre eccetera, che
Ssflr*rsre
Una volta scelti i componenti,
continuando (Next) apparirà una
spconda finestra ner selezionare
l|||LJ!|9
F\
Sa**nrara
.,,a,:a,,:.&
'.'.Ìa:-':?&È
'r...::-,:i*
.::::::1ffi
,,,,:::Liff
;3.
. .l:t
"s4
,.-ffi
ffi
1::€
della maggior parte dei programmi che funzionano "Aiuto" e altri che, invece, sono specifici di questa
ffi
nell'ambiente Windows. Nella parte superiore della particolare applicazione. ffi
finestra appariranno diversi menù dentro iquali Sotto i menù le icone che raooresentano le fun- ,:#
-":'.Ea
-::::x
incontreremo i tipici "Files", "Modifica", "Finestra", zioni oiù utilizzate. Se si seleziona l'icona di sinistra --iffi
-:w
il gruppo di icone varierà. "Èffi
All'interno di questo ambiente si
"w
potra:
w
'E€
ffi
Organizzare codici di una e
-l*
applicazione in progetto. I
Editare i programmi
:.:,,aa&
fonte per il PIC 16/17 così :,;:1|ll&
come altri flles di testo di cui iìè
potremo aver bisogno. :::lr:;:*
:.t:&
Compilare i codici
fonte ottenendo i files
da memorizzare
".-,.}
sul microcontroller. &:
ln Assembler ogni istruzione si traduce come un solo codice macchina. Simulare icodici "E
una volta compilati e prima ,,,,ì1ffi
di memorizzarli ,,'::a::#
nel microcontroller, .::-:..ix
r:ìi::il::!A
verificare che il lavoro
realizzato ffi
'::,::t:atffi
sia adeguato.
:ìa:::11i9;!
Grupfii di icone che rappresentano le funzioni più comuni
Tabella delle funzioni da realizzare ,:*$ffi
nell'ambiente MPLAB.
"qffiw
4tr
.11,11:,::,74&&
ffi
Pnro : norn vod;911o come Si .
***rì******t**.$***r*r**dtt*Iq*r****i**rì.*r .iss
;
realizzano queste opzioni. Per il
r*r*r*È*r+**,
i*r*ú******r****
;* Hlcr0chlp lechn0l0gg IncorForated momento diamo un'occhiata alla ..*#
* 16 0ecenber 1998 (anronta finrrr: nor vorifir:ro il f inn
* hssenùtÈrt ulth l4Pfisl'l u2,?8 :i
***it*it*t**t*iÈ*tr*r**t****i*i**t***$**r*H{
;r lhls proqrafi conflgures the n,/ù ilúdulÈ t0 r di informazione che ci permette di
;i l/D channel 0 (the potentllneter) and dlspl "*ffi
;r rÈsúlts on thÉ LE0S on PoRTC. ìlak€ sure tl vedere l'applicazione, e cominciamo 'ffi
r sÍltch SSg has all ssltches ln tha 0H posll l*q
':;t
- :T: F;0ú 01 02 03 64 05 06 07
cF Fr rE FF r_ tF !t
08 09 0n !8 0C ^i^--"^ur I PU LUr
o- gruLorE -^^idiversi
| | menu.
tr FF;F rl il
- FtÉ
ld.f6 FF FF FF FF rÈ L, rF tt
g&!.f
t, FF EE tt 'l la finestra srrnpriore a sinistra :,à
':#
fr fF FF FE ,! FF Ft rr Ft fF t, rf
Egg! FF El lr Jf rl cf Fl fF F. FF FF l,- r
'
mostra l'edizione del programma in ...1#
corso. Sopra di essa, in un'altra
Hex Dec 81n3f9 orX
96 B BBSSBBBB
OB B 588ÙBÙ68
finestra si nrro vedere il valore di
FF ?55 11111111
'18 24
BS B
IrJù11888
BSBB6BOB
oonrnn dci renrstri sDecifiCi del PIC
6B B BB6ÙB8BB
1F 3t ggg1t.i11 nel loro formato esadecimale, deci-
B! &
male e brnario. Nelle finestre di
86800080
FF ?55 i1111111 I +:000S
B 0003 SFFF
SFFF €ddlw orFf w
ig
69 B 6OB86O68 i oooq
+ q!!-', arrr
litl eddtu oxff
a0 B 00866800 -ù 0009 aFFF àddlu 0xff destra, cominciando dall'alto verso '4
06 0 06860666
05 B 86068880 il basso, troveremo la finestra dello ,::j!.?}*;
' ::*
Stack delle istruzioni del PlC, la ,{4
$fi*
EEPRON,l dei dati e la memoria di w
Finestra che mostra i differenti titti di tnformazioni fornite da MPLAB.
programma. ffi
':ts
:,.ff
,ffi
":ff
9à'w&%*xww* 'ffi
---é,9
!i{g
t3&
.
ìir':::ir1,
i?:,:,::':ìr.:.
..
:-::iii
^..
".
'
*.::r:lll',,,,
Schede dette istr uzioni :
'''
:aìr.ìl:ìlì:ì :
]iaa-
'
l'istruzione movwf
la seconda variante dell'i- I
aaa::.::::: -:::
struzione "mov" In essa
,1L1;1::l;1:,:,,,,
ì:ii:,:i::,':
l"
rl datocontenuto nel OPERANDO OPERANDO
FONTE DESTINAZIONE
:ìiììì:r:ì::
.'
' . . '. : .
... ì.]ì.ì:ì: ìì :...'.'.... :':.1 ::. '' : 1',. ]. valori da 0 alla f . Per utilizzare
ari '.--l
€t,rn
lfjt riF;.,
ì.:i'
gl altri codici dovremo espri-
a mere rl numero entro "virgole
m OV lwdi I xxxxxxxx : 0000 r 000 :
semnliri" e nrerpderlo da una
lettera che indichi il codice in
ru 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
rhA jp6prL r:nrol-
\'rL nt tA<ln nnn
9ULJLV 17 \ d lLcl-
Passi da realizzare aer Cart(ÀrF il rpni<rro aPFRAIIDO COn il valore deCimale B
l:rn noJ ronictrn nli nrir
-, -,,Jrne.
$s*$*sws*etr
Schede delte istruzioni:
f istruzione movf
%
W la terza e ultima variante
ffi*
w dell'istruzione " mov". In OPERANDO OPERANDO DI
ffi questo caso rl contenuto
fu Oet registro f, che e l'ope-
MNEMONICO FONTE DESTINAZIONE
rando fonte, si puo trasferire nel
movf d
registro di lavoro W, o al medesimo ^;
renistro f :
sorond: del valore dr
Operazione: movimento del contenuto
"d" F necessario snecificare tanto
l'origine come la destinazione. del registro f alla destinazione d.
Muovere un dato da un registro Sed=0si muove
al registro di lavoro W ha senso, il registro di lavoro W e se d = 1 si muove
d:rn
vo Lv rho
Lr rq l'nhioftirin
I uurqtLtvv nr rÀ nccnrn trr
vuv c))ctc Ltd-
sferirlo ad un secondo registro
allo stesso registro f
partire da W, o operare nel medesr-
a
Cicli: 1
Sw#sweqwwqp
]dll@lì\]]ìiìWs'ì''ì]i]ìù]$ì]Wls'''''[W!]l!]l!.ìrìsW*]sl!l*lW\ll|wilìììììr]]{l*lf1ffi:è.ì:ì:ìììì]]]]l]\*:\wqfr,']|
Strumenti di lavoro:
it compitatore MPASM
MPASM è un compilato-
ro npr PIC Delle l-rc ver-
sioni che esistono attual-
File
mente, noi utiiizzeremo A5M
quella per Windows, che
-r^r-i--^
ouuior --"i--+^ installando
^i- LorLoLw
rw 9ro
MPLAB. Questo offre il vantaggio
di noter romnil,arc senza uScire Compilozione
dall'ambiente di sviluppo, cosa con MPASM
che risulta molto comoda, oltre a
fornire un'interfaccia molto piu
nradpvnle risnetto alla versione Errore di
per MS-DOS. sintossi?
*ri.
f MPASM oeve iavorare con file
con estensione ASM, li compilerà
e, se non sono staîr cornmessl
errori, darà come risultato altri File File
fiies orresta volta co. estensione ERR HEX
HEX. ll codice HEX e qL,ello che
nntr: pqqorp nronr:rrmato nel PIC
per essere eseguito. Se I orog'am- Files più importanti in relaziane all'MPASM
nnqtn
PUJLv
dol
vL fila
rr'L oq:dori*.lo
LruuLL lldlr
s--
bq;}trYt";q*P*
organigramma, perché in questo nuovo schema sono il# gi;f
*rg# # ffi &f.X* ru f ffi tr L n*-ffi tr&SÍv?
mescolati differenti tipi di dati. f MPASN/ che utilizzeremo è parte dell'ambiente di svi-
I f iles mostrati nella figura sono i più importan- luppo di MPLAB, per cui parlando del primo dobbiamo
ti,ma non gli unici, dato che vengono generati continuamente far riferimento a quest'ultimo. Così,
anche altri tipi di file che per il momento non men- per esempio, in MPLAB tutto è basato sui progetti, i
l::ll:::':,
'.:,a,,::,::::
,,.:tt:a:t',:',
:a:a,:,.:,::::
:t:titìit:.:
'l'tllLli:ll:
t:.,,::.:::'
$l,,,,
t:,::.:a,::
caso che nessuno dei files già editati faccia al caso Properties), che, di conseguenza dovremo cliccare.
;4,4,a,,,:
PKid s
TudFi*as
i;-*d"h*
*-------:---l EE:F.i
c*u:]ì -t-S:- ..- ,*1'" Ir *
l-:---]-= È iEonfiq.ndion 3 ' '=-.
i.....-......-.=.- ] rin*:
lldp -'.-.....-..-'.-.iq
I;
I *FÈiffi"1*;6,16;1',
{snc .
l'
i: :.* '
.St*rr.rr'.+nk+H,*r
i
Dae@extrode: Fdibo'tt6F81 -___l qle4Ei...l
I :' gef f*r*P,F*+et Énah*e Mk=+pr+r.'+,r++r
-
rure"4ol*j.5oìio |;;g"
Plr4É{{ Éùer
,*= :, .: f*qf 3r+* Etable l:.yt *t+tktí Í* i+.'* +++rttr +Íì+;+
f ''ir,:
r.ll:::: {
nn-ostra per inserire le opztoni del pragetto Alcuni parametri da tenere rn constderaztone quando si símulera tl programma
|
5 uur** f iles [". c;-. msml :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-
sembler, il sistema di numera-
ziana arc a L ttzrizro
vur rutL iI n:r:mairi
POlOlllELl I
il*ffitrxLexH*ru*
f$Fg
M ks ilxr
I À*nL
i:{ --.
alrf 8e12
3 AB82 8193 clrf gk11
! Bg63 3008 úouls 6t8
Buílrting El(AHPLE.HEX. - . ùg84 B09t mu6f Brl4
e 8065 881 C mvf 6x10,1
Co&piling EXfi HPLE.É$h: 7 BB6ó 1665 bcf 6x3,888
rrF gx1l
Conmafidline : "C :\*BCHtU*1U,lFLAS\l,lPf,5l,lltIt{-E,(E /e+ /L+ fx- ft+ lp16F84 /q C:\g E a6a7
80s8
8C91
.t8m btfec 8x3,grg
t'rarning[295] C:\f,FCHIU*1\l'lPLf,E\EX*],|FLE.frS]4 4 Found rlireetiue iÍ co1ufin 1. { t5 OEB9 9792 aódwÍ 6xlz
irarning[267] C:\ÉECHIU-1\l4FLf,El EXf,l'IPLE-ASl,t ó Found lahel after cúlunn 1. (L 1l 60ca gc$2 f.f 6x12
Error['t131 C:\AnúHtU*1!]{PLnE\E$Él,lPLE-fi511 12 : Sgmbúl not pr€uiouslg defined +2 6úM gctS rrÍ Sx13
1A 666C gB94 dscfsz 8114
ttarnlng [ 2 07 I
C : \AECH I U-1 \l'lPLfi S\ EXfi f,lFLE. A$l't 1 6 : Found label after column 1 - ( '14 6E5t 2897 gsto looP
ErrrrÍ1191 È;\RRCHIU-1\l,lPLAS\El{Él4PLE.FSll 17 : $gfibo1 not preuiouEly dÉfined 19 66# 34C0 retlF gxB
Errúrf1227 C:\ftRCHI$-1\tlPLRB\Et(ÉllPLE.ASJ,I 2g : llLegal. opcode {stop} 1ú B06f
î:
8J B3 clrs
dsùls
Errúrf"1257 0:\ÉnCHIU-I\t'fFLAB\EI{*HPLE"frSrf 22 : Ill-egal condftiDn (E0F Éncoun î*
661 B
60rJ
3t15
d691
ErgS
Éúosf gfJl
-fq g81' 3MÙ aoúls E*20
l,lPLf,E is uÍablP tú fínd úutorrt .,EI{f,HFLE"HEX", ?t 6413 909 0 mvof ù<16
sB14 2 6ù'f call nplt_S
Bull-d fallÉó. cB19 281b goto min
6Bló AFFF àddl$ 6rff
,b 8417 SFFF addlw hrff
ti s818 3'FF èdrt1( Bxff
z6 E61C SFFF rddlw kff
3*fswwsm
Scheda delle istruzioni:
l'istruzione bsf
i puo dire che insieme alla
" bcf " e una delle istruzioni PARAMETRO PARAMETRO
plu ,,+il;,--+^
^i,, uriltlòte ^^ll-
rera pro-
grammazione del PlC. ll suo
MNEMONICO I 2
ohieltivo è di norre a'l un
bit di un registro. ll nome o la posi- bsf Ít
**",
b
zione del reoistro all'interno della
memoria dei dati, sarà fornito come Operozione: ;;;;,,di un registro. f
primo parametro di istruzione, e il
numero del bit come secondo para- Cicli: t
metro. Sia uno che l'altro iniziano a Codice OP: 0t 0t bb bfff ffff
contare da 0.
Flogs: Nessuno.
ffissMpx# flseé
$-'3$gffiiliXg#*l$ fi lìxs$
Caratteristiche dell' istruzione bsf.
A differenza delle istruzioni di movi-
mento ouesta istruzione non varia
rnmnlotempntc il rgplenutO di Un
registro, dato che serve per modifi-
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 trat-
tato in modo singolo, al momento
giusto, senza che gli altri debbano
variare. Un esempio tipico e il cam-
bio 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 ican-
do il bit 5 del registro STATO (regi-
stro che occupa la posizione 03 della
memoria dei dati). ll bit è conoscru- Uso dell'btruzbne bsf per il cambio di banco
to come RPO e, dato che la numera-
zione dei bits inizia da 0 da destra verso sinistra, vede questo cambio di banco; Ia linea dr istruzione
occupa la posizione del sesto bit. Nell'esempio si bsf è stata evidenziata in un altro colore.
$c$flwsxra
.rì
tììì
STATO
ffi bcf
bcf
STATO, Z
STATO,2
INTCON che si pone a 1 per avvisarci di que-
sto fatto. Se vogliamo utilizzare il TMR0 più
volte all'interno di un programma, dobbia-
mo rimettere a 0 questo segnalatore ogni
INTCON bcf INTCON, TOIF
bcf INTCON,2 volta che si attiva, in questo modo tornerà
ad avvertirci della sua messa a '1 quando il
nrnaoq<n (t nnoté
EECONI bcf EECONI, EEIF
bcf EECONI,4 Questo si fa con l'istruzione bcf, all'inter-
no del programma, dove il registro INTCON
sarà il prrmo parametro e il bit di attivazio-
Un uso molto comune dell'istruzione bcf è il reset dei seqnalatori
ne TMR0 il secondo.
S*#*wessw
Appti cazione pratica:
compilazione det primo programma
Creazione di un progetto
SwSSwswww
Assicurarsi qui, che il linguaggio scelto ${ffixYY$"3ffi& #tr$_ tr$A##ffieffi *4e
(Language Tool) sia MPASN/. Dato che non abbiamo 4. Creare un nuovo file (File>New).
e(lrrdio ilil programma
^-l;+-+^ ^"^^"-,-,- non posstamo sommare nes- 5. Scrivere nella finestra corrispondente il programma
sun nodo da assemblare. Uscire dalla f inestra di Edit che diamo come esempio di primo programma in
Project. assembler.
Sw$swessw
urluìÌrtjÌtl;]j::1::]::]ffi:!t
Questo sarà il programma che più tardi sommere- emp4trxL-&Kx*rum ffi ffig Fg$-il
mo al progetto. #g $"$** pw**ffiYY*
6. Salvatelo (File>Save As...) con il nome di primo.asm B. Ora manderemo a comporre progetto (Pro-il
nella directory dove avete installato MPLAB. ject>Make Project), mentre il software compila tutti i
7. Ora che disponiamo di un file (nodo), possiamo apri- f ile del progetto, nel nostro caso uno solo; apparirà una
re la finestra dr opzioni del progetto (Project>Edit finestra di comunicazione.
Project) per aggiungerlo. 9. Se non sono stati commessi errori nella scrittura del
conpilinq FnIH0.nSí:
comand line: "C:\AFCHIu"1\t4PLAB\flPnSfiilItl"ExE le+ l1+ /x- /c* lp1óF8|| /q c:\g
SwW&Eeswww
nrnnr:mm: deve,ann36jpe una finestra como nrétt: memoria di programma sono 17, vengono caricate
della figura, che ci informa della compilazione conclu- solo le istruzioni, sarebbe a dire quattro indirizzi di
sa con succesSo. memoria. A partire dalla linea 5 (indirizzo 0004 di
memoria) quello che appare ha un codice fisso, per
*ssgffiwex3#ru3 se"$L il*ffigfl il *à:ruf, ffiey* senn,rl,rre chp non r'e alCUn codice caricato.
'10. Se si apre la memoria di programma (Win- 1 1 . All'interno del menù Window possono essere aper-
dow>Program Memory), si puo osservare come verra te altre frnestre che forniscono diverse informazioni sul
caricato ilfile nel PlC. Anche se le linee compilate nella progetto e sui file.
Sw$*wwrm
Schede di istruzioni:
f istruzione addlw
ffi d
ffi
istruzione "add" è una delle
ffi
ffi
due istruzioni aritmetiche OPERANDO OPERANDO
ffi che puo eseguire un
ffi PIC'16F84: la somma. L'altra MNEMONICO FONTE DESTINMIONE
ffi è la sottrazione. ll PIC'16F84
non sa moltiplicare, ne dividere, ne
tanto meno puo fare radici quadrate,
oddlw i
potenze; nulla di tutto questo. Questo
'.
e dovuto ad una delle caratteristiche Operozione: Sommo del volore letterole k
essenziali del suo insieme d'istruzioni:
r- r^.^ )crrpILrLor Lr
ol registro di lovoro W
td rutu -^*^r:-i+\ -^frt fa Si Che SianO
molto raoide nell'esecuzione. Nono- Cicli: I
<t:nta arro<tn qé <i do<idor: oqonrriro
alcune di queste istruzioni complesse, CodiceOP: I I I I lx kkkk kkkk
<i nn<<nnn
)r vv)Jvr ru Lv)rr
i<trr rzinni <omnliri
E q: n:rf
rncirr uilriro ira d:lla
Pqr Lrr E vollq
Flogs: C, DC, Z
' La somma nel PIC ha due modalità:
"addlw" e "addwf ". La "addlw" Caratteristiche dell' istruzione addlw.
somma un valore letterale al contenu-
to del registro di lavoro W, e lascia il risultato in que- valore che puo contenere è FF (255). Quando dopo
st'ultimo. un'operazione come rn questo caso il risultato è mag-
giore del suddetto numero, si genera quello che si
#%frF4Fg {*ru rs%€ffi€jtrg*ruil &ffiffiLw conosce come riporto o carry, e per avvisare di questo
Supponiamo che il registro di lavoro W contenga I valo- fatto sr attiva un flag chiamato nel medesimo modo (C).
re 05 prima di realizzare
roperazione,esi vuoreÈ .ESADECIMAIE" BINARIO DECIMALE
sommare
JVr |ilrrqrL ilrl valore
vurvrL esadeci-
LJUwLll
:: |r ì Il .
.
meto FF \/odi:mn,,- n'oiln ;
vqlore lnlzlole
vqlore rnrzrole u)
-Jellu
che srrccedera dono l'ese- , ffi
cuzione dell'istruzione. i W
Nella seguente figura si
rappresentaqr.rtotuìto f; oddlwFF "+ FF i llllllll 255
mostrando i valori in il
drversi codici numerici, al $ Y
fine
trne di tacilitarne la
dr facilitarne L'
Ia com- - l;
prensrone W
vqlore finqle W 04 OOOOO t O0
ll registro di lavoro, così ?
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- REGISTRO- I REGISTRO-2 REGISÎRO - 3
da modalita di somma esi- :W (contiene il digit MSB) (contiene il digit LSBI
sîenfe nel renertorio delle volore inizi ole, OI 0000 00r r oooo ol0l 0000 llll
;
1
OOOO OOOO
ri:lnro dol n:r:motrn d 5e DC è messo
Così corne con l'istruzione addlw o I dovremo
sono interessati i flags C, DC e Z.
correggere
i digits
qddwf , f d
altri esempi, per cui rìmane solo da
spiegare il co"nooruamento del flag
DC. Questo flag va a 1 quando si pro-
Operozione: Sommo del contenufo del registro f duce un riporto nel 4' bit, anziché
nell'8", come succede con i flag C
con il contenuio del registro Viene utilizzato, se necessario, quan-
di lovoro W. Se d=0 il risultqto do bisogna tener conÌo in un regrstro,
il superamento del valore massimo di
si loscio nel registro di lovoro W, un digit.
e se d=l si loscio nello stesso Per esenpio, se un numero e
<rnmnnqtn in tro dinit< pc:dprim:li p
registro f ogni drgit e nemorizzato rn un regi-
Cicli: I )U U, LIUO| rUU c;
'rnÀn ) nrnrlrrro rrn rinnrtn :l
PTVUULE Ur | | rPWr LW ql
superamento del valore F, ìl flag DC
Codice OP: 00 0t I I dfff ffff verra messo a 1; it che sign rica che
Flogs: C, DC, Z dovremo mettere a 0 il registro e
'1
sommare al digìt seguente. Questo
e mosTrato graficamerte nella figura
Ca ratte r isti ch e d el I' i str u zr o ne a ddwf .
In aito.
';,?',1
Strumenti di lavoro:
il simulatore MPLAB-SIM
ambiente di sviluppo
MPLAB possiede tra i suoi
strumenti un srmulatore, il GIi stimoli esterni nel MPTAB-SIM sono elaborati una voha ogni ciclo d'istruzione, perciò i segnali di durata
N/PLAB-SIM. Un simulatore inferiore non possono essere captati, e pertanto simulati, cosa che è permessa dagli emulatori in circuito.
Sqw##wsmwq*
.:::4,.:,:,aa
:a;,,::*.
,::,:::::.::::
:::4.:t
il**urg##*q&ffi*ru*
#ng- ffiF$-&ffi trffiffi g-&v*$c&ffiffi
f,#ru ffipL&#-$sffi
Aprendo MPLAB, il modo di sviluppo
standard è di scrittura. Questo significa
che dobbiamo configurarlo prima di
fare una simulazione, altrimenti le
opzioni non saranno accessibiìi. La pro-
cedura per cambiare il modo di lavoro è
contenuta nel menù opzioni (Options>
Development Mode). Eseguendolo, a
seconda del programma installato,
deve apparire una finestra con ìn parte
opzioni accessìbili, così com'è mostrato
rrella figura della pagina precedente.
liq:06 10s613600S0ú -
lllq 33 00 03 0g 00 s& 00 [{ 00 06 úù 30
@c 0[ 00 63 66 00 00 00 ù6
.!ts$: sr 6A 6! !3 03 06 30 09
6ú 6ú 0A BC 00 ù0 0c 3f
..,f.:""
zione si trovano le istruzioni che si stanno esequen- Dall'opzione Window>Modify potremo modificare
do. il valore degli indirizzi della EEPROM che ci interessano,
C)rrestn
YVLJLV
e nossihile attraverso la Finestra di per fare la simulazione.
Memoria del Programma (Program Memory Nella figura corrispondente abbiamo modificato il
Window). valore della posizione 0B rntroducendo il valore '12 esa-
Le informazioni disponibili si possono ottenere in decimale.
differenti formati, da scegliere cliccando nell'angolo rr^,-l+.-
\Jll dltld ^^..ihìli+- p dpridcrc sp il nrnnramma
)E lr Che
PU))lulllLo E uEllvslc Prvyra
superiore sinistro della finestra. vogliamo simulare deve essere visualizzato così come lo
Questi formati sono quelli che ci mostrano il codice abbiamo scritto o con informazioni addizionali che for-
delle istruzioni in esadecimale oppure così com'e stato nisce il simulatore alla compilazione, come gli indirizzi
scritto, facilitandone la verifica. lnoltre, appaiono infor- d'ogni istruzione, le etichette definite. il numero d'in-
mazioni addizionali sul numero d'ogni istruzione e sulla dirizzì della memoria d'istruzione non utilizzati, ecc.
posizione all'interno deìla memoria dr programma. Se il Questa informazione è disponibile nella finestra del
nostro programma lavora con la memoria EEPRON/ dei listato (Absolute Listing).
dati, possiamo vederne ivalori che contiene nella La finestra generale dei registrì (Fìle Register
EEPROM Window. Window) e quella dei registri speciali (Special Funtion
00004 ;r.**E***t*,r
80005:
0000ó ; The 1ó bit result is stored in 2 bltes
00067 i
00568 ; Before callinq the subroùtin€ " npy , the nult
0!609 ; be loaded in location nulplr ", and the nulti
09810 : nulDnd " The 1ó bit resurt is stored in 1oc
06ú11;H,ÒJte&L_byte.
HCr: . | . i :
lnformazioni addizionali del proqramma assemblato fornito. 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 cambia-
mento di valore all'interno di una
finestra, Window > Modify, influenza
ambo le finestre se gli rndirizzi esisto-
no rn entrambe.
Sono interessanti anche altre
opzioni come lo stack delle istruzioni
(Stack Window) o informazionr del
Sm$*swwre
fistruzione INCF
UCSTA ISTTUZIONC
può considerasi
un caso speciale
dell'istruzione
add, dato che
somma I al
lncremento di
ilfiifi'[i',.j
t
contenuto di un registro, cioè
in.rcoNTAToRE,r :jj},StrruroRE,r
incrementa di una unità il con-
tenuto del medesimo. ll risul-
tato puo essere portato nel -::s:*-19IH9Ti
Incremenlo
--* ...-. .-* *i . --, ..i
i
Operozione:
-*J------:r*--ir--*.*"g zione). Infatti per la stessa operazio-
incremento di uno unitò ne di incremento realizzata con ì'i-
del contenuto del registro f. Se d=O struzione di somma, è necessario
il risultoto si loscio nel registro caricare un vaìore (un 1) nel registro
di lovoro W e se d= | si loscio di lavoro W, e poi sommare il regi-
nello stesso registro f. stro utilizzato come contatore, al
Sw$swwryw
fistruzione DECF
uesta istruzione è
quella opposta alla
"incf". Con essa si OPERANDO OPERANDO
può decrementare il MNEMONICO FONTE DESTINAZIONE
valore di un registro
e portare il risultato
al ronictrn qto<<^ n:l roni<trn di
**.-:J***,i***--f*. -- l-r:-*-* :""*-- i
ll suo flag associato
lavoro W. e Operozione: decremento di un'unitò
nuovamente Z, che andrà a 'l
del contenuto del registro f.
nrr:ndn il roni<+rn in nrroctinno
arriva a O.
Se d=0 il risultoto si loscio
Anche qui, come con l'opera- nel registro di lovoro W e se d=l
zione di
incremento, quando si si loscio nello stesso registro f.
deve decrementare di più di un'u-
nità un registro, è meglio farlo con
Cicli: 1
F EQU I nome o
un'etrchetta
CONTATORE EQU 0c con un valore numefl-
co. Quindi, dovremo
decf CONTATORE,W ; Decremenlo del registro contotore portondo {--^
tdtc d-++^^-i^^^ -11,,,u-
Ltút tztut tu dil
; il risultoto ol registro di lovoro W
decf Decremenio del regisiro contotore portondo
so che faremo in
CONTATORE.F ; <anrritn .li nrro<ti
; il risultoto ollo stesso regisiro F
"nomi", dato che, a
decf tCoNTATORE ; Coso erroto, doto che CONTATORE non
; corrisponde con 0 o con un l, che è il seconda dell'ambien-
; poromeho che serve oll'istruzione decf te in cui li utilizzere-
decf WF ; Decremento del registro che occupo lo mo, cioè: il parametro
; posizione 0 dello memorio dei doti (non W) di istruzioni a cui fare-
; portondo il risultoto ollo stesso registro 0 mo riferimento, signi-
ficheranno una cosa
Differenti significati di etichetta a seconda del luogo dove si utilizzano.
o l'altra.
ffie*S*www*
Appli cazione pratica: si m ulazione
del primo programma
opo aver vrsto In cosa con-
siste il simulatore integra-
to N/PLAB, è arrivato il
momento di simulare il
primo programma che
abbiamo fatto e che è stato compila-
to con MPASN,4. Ora diamo un'oc-
rhir+r c: ^llò.+^ cazinni
LllldLd nor rirard,aro
rrLvruors
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.
rxruffi$Y$q$; #Y3*-xpgK
ffiè,$ssYe $xMe$L&xx*ruK
Ppr onni nroncfto dovfemO SCe-
gliere quali finestre sono utili per
lerri traÀara nrrolln rho
-,,- il program-
ma sta facendo e quali rappresen-
tano solo una distrazione, non for-
nendo informazioni essenziali.
Alcune opzioni possono dipendere
d:llo
uoils nroforonTa psrJul ldll, ^c carì
pr srqrsr r4E nor<^^îli )old
proprio l'utilizzatore che determi-
nera ron l'cs,nerienza iì suo modo
di lavorc.
3 . Per prima cosa dovremo sce-
Limitazioni di MPLAB-SIM per tl PlCl 6FB4
gliere come modo di sviluppo
Sw$&wwss'**
gramma. Potrebbe interes-
sarci solamente il risultato
finale di un registro oppu-
re vedere lo sviluppo di un
pezzo del programma su
cui abbiamo dei dubbi sul
funzionamento, o vedere
+' '++î
pd))u d pd)>u
^a..^ LULLd u ^ pdr
^ar+^Lc
la simulazione, opzione inclusa dentro a Animate all'interno del menu Debug>Run. Come si
Options>Development N,4ode. All'interno della finestra puo vedere, questa opzione non è di grande utilita,
che ci appare selezionando Details, potremo vedere le almeno in questo esempio, dato che le nostre tre istru-
limitazioni che ha MPLAB-SIM per il PIC che vogliamo zinni <i oconrrn nn rrnid:monto a nni il ar rr(nro nr^<o-
' ..i::::i
simulare, nel nostro caso ìl
PIC 16F84.
4 . Dopo aver scelto il modo,
sono già disponibili diverse
fino<tra fr:
,,q nrre<to
YSLJLL
<ronlioro-
JLLY"T'r
%xp.$#Lexg*ru9
Le opzioni della simulazione
.:..,aaatÉ
-.ú
-v
ffiwf:*wwww
gue per il resto della
memoria di programma,
che non conttene valort
validi. Nella figura prece-
dente sono visibili le fine-
stre rhe s nossono vedere
con questa simulazione.
7 o Utilizzare Debug>Run>Halt
npr fermare la simrrlazio-
ne. Ora possiamo verifica-
re che il valore dei registri
corrisponda con l'enuncia-
to del programma: il regi-
stro OC contiene il dato 03
e i registri 0D e 0E conten-
,^,,.t^"^,,^,,-t^
9Ullu ull vdrurc uvudlc.
\/prifir:rp nr reqfe irrforma-
zioni spostandosi all'irter-
no delle varie finestre.
$ o Ripetiamo la stessa
simulazione, prima pero Modifica del valore di un registro
cambiamo il valore del
regrslro nn
-^^:-+.^ u, con, -,1 esem-
-^^ ao ^,
pio,07. Così, eseguendo il programma, noteremo stra Window>Modify. Dovremo scrivere I'indtrizzo
meglio che i registri 0D e 0E prendono lo stesso valore. (Address)e il dato (Data)che si desiderano, e cliccare tl
ll cambio del valore di un reqistro, si fa tramite la fine- pulsante di scrittura (Write) per far sì che la variazione
abbia effetto.
9.ll seguente tipo di
simulazione lo troviamo ìn
Debug>Run>Run. Per no-
tare l'eff etto dobbiamo
tornare a mettere OO nei
registri 0C e 0E, seguendo
i passi del punto preceden-
te di modifica dei registri,
poi eseguiremo il program-
ma (Debug>Run>Run) e lo
fermeremo (Debug>Run>
Halt). Ci appariranno i regi-
stri secondo quanto predi-
sposto dal programma. La
differenza con il tipo di
sim u Iazione precedente,
Animate, sta nel fatto che
noi non vediamo come si
modif icano i registri,
anche se internamente il
0rocesso e lo stesso. e il
Scelta del modo di simulazione passo a passo
PC, eseguito il nostro codi-
ffiw#srurwww
::,:.:4,
:',,1,
,i*
,
.:,)1.;
F es$Fqe* {:* re
fistruzione G0T0
Sep$&ewwrq*
fistruzione NOP
ffi
ffi d rstruzione nop e una delle
W qomnliri
nir r JEr
Pru rvilLr À.
uo uLilr41drc,
' '+ili..-"^ c
^ ORG 0 ORG 0
ffiffi
goto rNrzro goio tNtzto
ffi nello stesso tempo e quel-
ffi
ffiffi
la meno ulilizzala E sem- ORG 4 nop
lW plice perche non ha para- goto INTER nop
metri, e quindi non puo essere impie- nop
gata male, ed anche se fosse ulilizza- goto INTER
ta in modo indebito, l'unico inconve-
nipntp r-hc notrphho nrovocare Sareb- MEMORIA DI PROGRAMMA MEMORIA DI PROGRAMMA
be una perdita di tempo equivalente
00 00
ad un ciclo di istruzione, dato che non
fa niente e non varia nessun f lag. Nel 0l 0l
suo codice OP le due x indicano che
in orrella nosizione si oossono ave.e 02 02
zeri o uno indistintamente. 03 03
fi5fleqF$; 04 04
{*ru à.'gsYkr.jr3#Fi f, ru#s 05 05
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
granrmdtor
^"-,---+^.; l-,,+ili---
ra uuilzzano In sosltlU-
zione della direttiva ORG che, come ricordiamo, manda metro. Come abbiamo gra visto, in questo modo si
al compilatore l'indicazione che la posizione de l'istru-
ottiene di mettere all'induizzo 0 la prima istruzione del
zione successiva è all'indirizzo indicato dal suo para- programma, cosa necessaria, dato che quando ìnizierà
l'esecuzione dei proqramma, è lì che si deve
lrovare la nr,ma istrr rzigng. Abbiamo anche
PARAMETRO PARAMETRO rrn altro indirizzo sneciale nella memoria dej
MNEMONICO t2 codici. l'induizzo 04. ln questa posizione, il
nrn.trqqrìrtr \/À À .o(.Are la rouiine di Servizio
nop dall'iniarrr rnt nrr:ndn <o no
r! nrnnlrr.a
vrvuuLL
rrnA
urrv,
in mndn rho il srn nÒ<ln nón nnq(a o((oro
Operozione: è un'operozione che non occupato da nessun'altra istruzione.
Nell'esemnio si
-' mostrano due modi di rea-
fo nullo. ' 'Y'"
1
lizzare questo, utilizzando l'istruzione nop e
Cicli: I
con la direttiva ORG. Anche se il risultato
Codice OP: 00 0000 0xx0 0000 nella memoria dei codici può apparire
diverso, l'esecuzione del programma e la
Flogs: nessuno
stessa. In alcuni casi, inoltre, si utilizza que-
sta istruzione nei cicli, cone metodo per
Ca ratteri sti ch e del I' istruzi on e no p
costruire delle routine di temporizzazione.
Sw$$wsww*
Programm azione:
struttura di un programma
.:,zi$Èi*,, uando si affronta la realizzazione di un pro- :
ramente differenziate. La tabella mostra in modo sche-
.: granî"na, sia esso in assembler o in o.ra siasr mat co queste parti. Spregheremo per prima cosa alcu-
gd
.'""."-... ahro linguaggro di orogranrmazione, molte ne convenzioni utilizzate nella realizzazione di queste
À1+ volte non si sa bene da dove iniziare, soprat- :
ni.rntinp lrlpll.. rninnna di sinistra scriveremo le eti-
-!t:::
chette delle rouiine e delie subroutine, nella colonna
essere molto ;tile
d' piantina che ci
creare una specie ranl-rrla
lEt tLrorg c.r,\tòrò6^
)L j vgrgr ru la
rc icl-r rzinniil \/oró
r)Li uzrur vqrs ó nar nrn-
^rAnriors usr P' v
s PrwPr
faciiitii||avoro,perevitareerroriodomrssioniindeside- gramma, che devono rispet"tare l'esatta nomenclatura
rate. prevista per il nostro microcontroller. Infine, neìla
Orro<t:
YriLJLu
ni:ntin: ", Ottiene faCilmente, datO
Y's' I r,, ,u Che Un colonna di destra, scriveremo i commenti ed i nomi
programma assembler, e composto da varie parti chìa- che vorremo dare alle varìe sezioni del oroqramma.
,,
i
: ilsI P=tip di procesore
,.
c
volore Elichette
!l
ORG 0 Configurozioni
goto etichetto inizio
ORG 4
g0f0 rouline-inler
ORG
eftheilo-inizio istruzioni
Configurozione
Progrommo principole
Rouline interrupt
,
Fine
L
:raìiìtì
':,ii
.ì:ìììì
tl *
l 1;r{j lÌì:i
il5t P=lót84 i:i !,-il
INCTUDE "Regx84.inc" (i inizi: rnn dirottivo nor il nrnroc(^ra
INCI.UDE "Mocros.inc" in pratica, "ordini" che il comprlatore
dovrà tenere conto ai momento di
IED EQU I
"^-1,--^"^ c |llil^
t(ót)LLdt |tc ^.-'-l^-i'-.1^|dtc/
c)dueLil d. ^-.+;"^
iJdt Lrtc
IAMPEGGIAIORE EQU 6
0R0 0
dalle so"genti. Queste direttive non si
bsf STATUS,RPO
Cone abbiamo visro in arcuni ese'npi,
movlw b'0000000t' di sonrritn :rriri:nn ic definizronr delle
movw{ TRISB otirhottp nor riforirei: roni<rri rho
movw b'10000' sono valori, con un nome al posto di
movwf TRISA
un numero.
movw b't0t | 0000' ;INTERRUPI TMRO E RBO ABILIAN Nella zora di configurazione si in,-
movwf rN1CoN
zializzano i renisîri cl-e si utilizzeranno
movlw b'01 I t000' ;TMRO RA4;INTEFRONTE Dl SAUTA
nel nrnnramma Orrc5f6 si fa nella
;IMR0 SENZA PRESCATER
movwf OPTION.REG
zona chiamata "etichetta inizio" e
kf STAIUS,RPO
quesra configurazrone si realizza con
bcf PORTB,IAMPEGGIAIORE ;Cl ASSlCURl/ritO CHE SIA SPENIO
istruzioni normali. Prima di questo,
bcf PORTB,IED considerata anche come conf ig urazio-
movlw ró ;10 lMPUl.Sl PER lL I|MER ne, la direttiva ORG indica al compila-
movwf TMRO
tore, con differenti parametri, dove
refurn
deve collocare ie d''ferenti parti del
INTER sl0p ;ROUTINE Dl INTERRUPT. 5e chiomofq
programma nella memoria dei codice.
btfsc tNTCoN,T0tt
Nella posizione 0 e obbligatorio met-
g0f0 IMPUISI
btfsc INTCON,INTT
tere la nrima istrr rzione che dovra
t,,l,l,
,l+- ltu||diltrcILc
c)>ctc c)cguttd, ^^"--l-^^+^,,^/^+iut' cLt-
reilie
chetta come inizio, start, etc., o ia
BUMPER Lr ilor rdLo oa ^,,^-+1
-l^i-*-+- Liuc)Lc.
bsf PORTB,I.ED ;ATIIVIAM0 lt LAMPEGGIATORE Nella posizione 4, come vedremo
kf INTCON,INTT ;CANCEttllrlvl0 lt ttAG Dl INTERRUPT ^i,, -.,-^+i t-i-^^^- PU l,in,zio della
Pru cvol rLr, ur)w9r ro ^^rre
retfie
rorrtino rhp no<tir: l'intorrr rnt il vpttn-
re di interrupt.
|MPUr.Sr
bsf PORTB,IAMPEGGIATORE
ll modo ideale per progettare un
;AfTlVlhlv{O IL I.AMPEGGIATORE
r aE ci+r
)lLUClC nlnnn fLULLv
uvvv rrtfn
kf INTCON,TOIT ;CANCEII|AMOlL FIAG Dl IMERRUPT P,U9lOllllllO
n, rln+^
rLU Imonzinnrtn
I rcr r4rvr rqLv in| nrarodanzr rzq
il
re#ie vuqr PrqLcuqr -
un ciclo da cui si chiamano le routines
TND che realmente real,zzano il lavoro,
a
normalmente in modo ciclico.
Questo è cro che normalmente è
Programma esempta che mostra diver>e parti Lipiche
otirhott:tn.^mo nr^r
-Jramma pflncr-
6+*$*****1.*
figurazioni, il programma principale e
la direttiva di fine programma. Le uni-
LffiffilT- * ::#.':":
esg,4;trtrllffi!;J!iriFè1É-H6&d.-r4-!ir-r:ea€3?q+l:?Éi;a "' -róril che parti che devono essere uniche,
ISfEn stop ;RAUTINE Ol IilTEBnUZt0HE-Se p
sono: il programma principale, la rou-
tine di trattamento dell'interrupt e la
Comunque questo non e abituale, poiche lo sche- gramma, che sara sempre piu complesso, man mano
ma in genere viene utilizzato al completo e molte di che andremo avanti.
queste parti si ripetono diverse volte. L'organigramma
mostra oltre all'ordine delle differenti parti di un pro- {rqJ' .'}i i**! *q#SffiiÀf-:i.l1
gramma, quelle che possono essere saltatg g 6rrrollo rho I programmi sorgente possono essere scritti con qua-
oossono essere rioetute. lunque editor di testo a caratteri ASCll.
Se SentriamO le {1p6ra rrodiemn rho nr rallg 691{;6lj Guardando nella struttura che segue, vedremo le
indicano la sequenza delle diverse parti. Le f recce a sini- divprcp n:rti rhp
rr nÒqcono
PvJJv formarlo.
stra indicano la possibilita disaltare il quadro a cui gira- Classificheremo ora il suo contenuto in altro modo,
no intorno, passando alla parte seguente. Le frecce di rinò rnmo finn nli d:ti rho n^((^nn.^nîonor ,-, e ognuna
destra, che puntano verso l'alto, indicano che la parte di queste parti. Così il compiìatore, durante I'esecuzio-
ouò essere rioetuta tutte le volte necessarie. Così vedia- ne, verificherà che idati ditutte le linee delfile siano di
mo che sono obbligatorie alcune direttive, alcune con- uno di questi quattro tipi: etichette, mnemonici, ope-
SwS4*ealus*w*e
randì o commenti. Questi dati devo-
no assecondare a norme di scrittura e movf movf
a norme di posizione relativa che U5T U5T
ovonli ovonti
occupano gli uni rispetto agli altri.
l-nma rannl: nonor:lo nor 1r rtli eticheito I movf Etichetto5movf
Etichetto2:movf
ouesti la loro scrittura non deve
iI LJ)
4trtr tót _etichetto3? Movf
^--^.J^-^
CLLCUCff dLLCt| -,,11-
--"^++^.i )Uild -+^---
)LE))O
Eticheilo 4
lrnea.
Gli mnemonici delle istruzioni, le direttive del compila- rttn nrrolln rhp ci nnno dnnO- rjn
Tr nlnt6
r
p,,irnnl:
vll9wlo /\r/\
-
tore e le chiamate alle macro devono inrziare a partire è trattato come un commento fino alla fine della
linea. Se il commento occupa più
di una linea dovremo mettere un
eiicheilo I Etichetto5 punto e virgola all'inizio di ognu-
elichetto2: ?etichettoó n: nli
Itd ut a<<o (eamo
c))E rLvI nncci:mn rrado-
tq pu))ratrr(/ vcuc-
Tetichetto ra nonli o<omni n ir:fi\
_etichetto3? rrLVil LJL',ry, i lLoLl/.
Sw#*:sqr{:svaF
Scheda detle istruzioni :
f istruzione BTFSC
PARAMETRO PARAMETRO
MNEMONICO I 2 Schema del comportamento dell' istruzione btfsc
a seconda del valore di un bit.
.--l-.:l".:":"""--i""-r . ""!"-,-.-".-i
tr$*:ffi$3X il*ru fK-Y*tUXg#rufr #?$:Sfl
Operozione: nel coso che il bit segnoloto dol
registro obbio volore 0 l'istruzione Dobbiamo tenere conto che quando si
compie la condizione e si esegue il salto, si
seguente è ignoroto e nel coso
esegue un'unica istruzione, pero se la con-
confrorio no.
Cicli: 1-2
dizione non si compie, si eseguono
entrambe le istruzioni perche dopo la
OP:
Codice 0l lObb bfff ffff prina arriva la seconda. Questo e indicato
Flogs: nessuno
nello schema generaìe della frgura, dove le
lrareo r:nnro<ont:n, ta sequenza cne
, -rr, ---,,.-,,o
$w$*wwww
Sch eda delte istr uzioni :
f istruzione BTFSS
PARAMETRO PARAMETRO
Schema del comportamento dell' istruzione btfss,
btfss :j, -..- ..... - -,! ..:. *,.-. - i .-., .. .. ..-l- ---..-"i
a seconda del valore
di un bit, mostrato con un csempro.
goto.
nessuno Con questa istruzione, come abbiamo già
visto, si spezza il flusso sequenziale di un
programma e si salta lì dove indica l'etichet-
ta. Questo è il modo di utilizzo più comune
Ca ratte r i sti c h e d e I I' istru z i o n e btf ss
delle istruzioni btfsc e btfss.
Sw**q*wwrm
Programm azione:
strutture di control,lo
a programmazione modulare e strutturata
diminuisce il costo dt realizzazione e manteni-
mento dei programmi, e aumenta la sua affi-
Dcre mes:oggi di benvenuto
dabilita e leggibilita. Per questo si costruisco-
no moduli o pezzi di programmi seguendo
certe regole. I moduli a loro volta, sono formati da €hiedere N" degli olunni
quenza, ognuno
istruzione I dei quali e un'i- Vq qllq finestrcr
"ll voto medio dello clqsse èr"
struzione. vqfore del <onlotore di nedio
istruzione 2
Le frecce di
unione segnano
Ia sequenza logi- Dore mes:oggio di uscifo
islruzione.. ca di esecuzione,
nella quaìe non
istruzione n possiamo omet-
+^r^
LUtC ttc))utto Organigramma di un programma con tre tipi
[.]lì.r,ì x 6 i strutture di LUr
di 5LruLLuteut
ur controllo.
ìììrì,ììì.
:ììiìì l azlone. J -___,-*
P annra<Ònfa7i^na
fo lso vero
condizione
Ssp$$wwr**
cur dobbiamo evitare questo schema,
condizione e per questo la cosa migliore e tra-
sformarlo in una struttura condiziona-
bl*co di SE lo condizione è vero l le gia vista, pero in forma annidata.
istruzioni I
- ii'i,T:::':::l::.::' . .i Nella figura corrispondente viene
rndicato questo annidamento con un
blocco di esempio. Si vuole determinare qual e
islruzioni 2
il colore scelto fra tre possibili. ll
,_., ..-r_,-_
<olo ricnó<tp m: :d Jn nun'ero ptu
I
ALLORA eseguire blocco 2
ALÌRIMENT| eseguire blocco 3
alto, come succede nel CASE. In que- :
Ss#kwww
m,
F,:-,
W:iai..:
ì!::lìat:ia :,1
l11
d;:: -
&it. .
&F
íi.
m:
ffi*.'
F. FlSF annidate e nrran619 si vuole ana-
lizzare un blocco di istruzioni solo se
À1,* è giorno
Ng fo bello si compiono alcune condizioni nello
#H_:
stesso tempo. In questo caso, come
tr: nel precedente, dobbiamo evitare oi
Wb,' rímongo o coso vodo o posseggio
fare una domanda, e al posto di que-
ffi. sta, una volta verificata la veridicità di
R}:
ff.'
w; una condizione, formulare la doman-
!::{'-
fl: uc
-J - -^^, ,^^+^
)cgucrLc. ,^-+
rluc>rO
^, fappfeSenta
t l'implementazione di una AND logi-
.,: ca, Le altre operazioni logiche, inol-
a
T".,* NO e grorno tre, possono anche essere rappresen-
Í$..
k"' tate con strutture annidate.
s{,
*&{il,t:,:::. SYffi &JYYIJ ffi K ffiXPffiYXYXVg
;
irtrr.ion. n lstruzione 2
{..':. END FOR iriru.ion. n iitrurion" n lstruzione 3
&.: Decremenlo conlolore
:3:: Se il volore del contotore è 0
.
tsruztone n
ALLORA vo ollo Fine
ALTRIMENTI vo q Etichetio Andore o Chìedere
*{| Fi ne ENDWHILE Fine
ffi
ffi
$E*..
S*$&nrwre
&r":
ffii..
@'
Slrutlurq i Strutturo odqltqfq
Strulturo
in pseudocodice
: Strutturq odqllqtq
il compilorore del PIC r t"l::'
i
"". "-:::-t""d:-"
i:
REPFAT
i
i
T: :l ::-":1"::"
Eliche*o
DO I Eiichetto
i lstruzione I
lslruzione l lstruzìone I lstruzionef I lstruzione2
lslruzione 2 lstruzione 2 fslruzione2 i lstruzione3
lstruzione 3 lstruzione 3 lslruzione 3 ...
lstruzionen
irìr".i."" iiirr=io.". rstruzione. i
" Chiedere Se lo condizione è vers Ch;"d"." Se lo condizione è
'ero
WHILE condizione vero UNTIL condizione vero
ALLORA ondore o Etichefro ; ALLORA ondore o Eticheito
ALTRIMENTI ondore ollo Fine ; ALTRIMENTI ondore ollo Fine
F ine
: Fine
titive si ulllizza una condizione oer controllare la fine WHILE è che nella prima se non si compie la condizio-
del ciclo, ma non deve essere confusa con le strutture ne, le istruzioni non si eseguono. Nella DO-WHILE inve-
condizionali. Quando si deve compiere una condizione J-i^^i l-
ra qi oqonrrnnn lo iqtfl-ztonr pilmd ,,^l+-
ra ^.;-- vorrd, e^ se sl com-
per uscire dal ciclo si dice che è una WHILE-DO (men- pie la condizione, si continuano ad eseguire. La
tre si compie una condizione fare qualcosa), o una DO- REPEAT-UNTIL è simile alla DO-WHlLE, dato che il bloc-
WHILE (fare qualcosa mentre si compie una condizio- co di istruzioni si ripete almeno una volta, e continua a
ne) oppure una REPEAT-UNTIL (fare qualcosa fino a che ripetersi fino a che non si compie la condizione. Come
si compie la condizione). E infrequente che i linguaggi possiamo osservare, se si comparano gli schemi, le dif-
di programmazione abbiano le tre varianti allo stesso ferenze sono nella negazione della condizione, dato
tempo, dato che una si può trasformare in un'altra. I che nella DO-WHILE si suooone che sia vera e si esce
tre tipi di cicli possono tradursi facilmente nell'assem- quando si converte in falsa, e nella REPEAT-UNTIL si
bler deì PlC. La differenza fra la WHILE-DO e la DO- considera falsa e si esce 0uando dìventa vera
blocco blocco
di islruzioni di istruzioni
verq folso
condizione condizione
folso verq
Sw$*xwexws*
g,rrisuìììììtrtlluu:t1t1utl]Niliililililurl
Scheda detle istruzioni:
f istruzione DECFSZ
ncora una volta le lettere che compongono
il mnemonico di questa istruzione ci indica- z- decfsz Í, d
'
no la funzione che realizza. La decfsz \\-*
I '- ---
ictr rzìana" I
isiruzione 2
*-l s eseqr,r si; f i:0
€:%ffi$!qPg
il#ru $-'gsT$ail$Kx#rdffi #ffiilflsx
OPERANDO OPERANDO
MNEMONICO FONTE DESTINAZIONE Lo schema rappresentato ricorda
quello gia visto per l'istruzione btfsc,
decfsz anche se con sostanziali differenze. La
piu importante, per quanto ci riguar-
Operozione: decremenlo di uno unitò il
da, è che l'istruzione non solo verifica
contenuto del reqistro f. Nel coso
rrnI rr:lnro
ur nor uELtuEtE
vorvrq pgr ca )ctLdtc
r]oridoro )c .:l+..^ u
^
in cui il risultoto"di ouesto
oecremento sio 0 l'istruzione meno, ma realizza anche un'opera-
seguente è ignoroto, e nel coso zione, il decremento, e salta a secon-
controrio no. Se d= 0 il risultoto da dpl ricr rltato .ronor:tn JLSo VL'
npr l:
'u
del decremento si memorizzo nel funzionalità del programma, ci inte-
registro di lovoro W e se d-l si ressa solo l'operazione di salto, non è
memorizzo nello stesso registro f. necessario memorizzare il risultato,
Cicli: 1-2 quindi lo porteremo nel registro di
CodiceOP: 00 I0l I dfff ffff lavoro, senza eseguire ulteriori opera-
Flog: nessuno zioni su di esso. La stessa funzione
che compie questa operazione si può
realizzare mediante la combinazione
delle istruzioni decf e la successiva
Ca ratteristi che del I' istruzi on e decfsz.
verifir: dol flen 7 ron 16 [1f56
$$w#sxesclwxrw
Scheda detle istruzioni:
l'istruzione INCFSZ
ffi
ffi
d istruzione e simile alla
-;-
ffi Prece0enle, sld ^^l-
llelrd
ffi struttura che nell'uso,
Strutturo di
pseudocodice Strutturo utilizzondo decfsz i S*r*ro ufilizondo incfsz
ffi
ffi anche se al posto del FOR numero di volte DO movlw NUMERO I movìw C2 (NUMERO)
W decremento di un lstruzione'l ETICHETTA
mowf CONTATORE I
lstruzione 1 I
mowf
ETICHETTA lstruzione
CONTATORE
'l
$*S*xrwr*
Applicazion e pntica: visu aLizzazion e
dei dati det primo programma
questo purto abbiamo imparato a realtzza- mo dedurre che si
re una decisione in
l"'l'-; rj.*í{'.'t ', ' base a un dato.
mosfro DATOI
Quando parliamo dei passr per la realizzazione di un All'interno del-
progetto, abbiamo gia visto che la prima cosa da fa- l'organig ramma,
re e plasmare l'enunciato dell'esercizio in un organi- il modo di rappre-
grarnma, Quanto piu preciso e l'enunciato, tanto piu sentare la visualiz-
mostro DATO2
facile sara questa trasformazione, e meno ambigr,,ita zazione di un da-
esisteranno al momento di interpretarlo. 5e si vuole to si puo ridurre
fare un organigramma dell'enunciato precedente do- )Lt tvtrt tuu t-
--.1,,^^.t^ rd ^-.^
poru-
vrebbe risultare come quello della f igura a f ianco. ìa "DATO", senza mostro DATO3
,^-"-i-^ or r-
Nel fare un organigramma, il primo riquadro deve prfuLLUPdrLr
A, ^, ,.li rJLr
-^"^ Ut i.+",U-
corrispondere alla definizione e alla configurazione dei LUtO 9UOil
,
$w$#e*ewre
S{KXXY*JKE che occupa la stessa posizione. Questi registri si po-
SHL PRS&K&MPdX& S#Rffi mruYK trebbero chiamare rispettivamente PORTAB e TRISB,
Fatto l'organigramma, dobbiamo tradurlo in istruzioni oppure si possono chiamare entrambi nello stesso mo-
per rl PlC. do (PORTAB), così come abbiamo fatto noi, tenendo
Dopo la direttiva LIST si definiscono i registri che vo- conto però che significano cose diverse, a seconda del
gliamo usare. Nell'organigramma apparivano già i regi- banco in cui le stiamo utilizzando. DAfOl, DATO2 e
stri dei dati e la porta B. Nel realizzare il programma ve- DATO3 sono registr di utilizzo generale che possono
diamo che abbiamo bisogno anche del registro di STA- essere impiegati sia nel banco 0 che nel banco '1.
TO. ll bit 5 di questo registro ci permette di muoverci dal Dopo la definizione delle variabili, si deve posizio-
banco 0 al banco 'l . Nel banco 0 avremo la porta B, che nare una prima istruzione del programma alla posizio-
sitrova all'indirizzo 06 dì questo banco, e nel banco 1 il ne 0 della memoria di istruzioni. Questo si fa attraver-
registro di configurazione di questa porta B (TRISB) so la direttiva ORG con il parametro 0.
$w**wwrs
Normalmente, prima di cominciare il programma si c{3ffi pxL&xg#Nm mffi L $3ffiffi ffi R,eMM&
devono configurare i registri prima definiti. ll nostro pro- ll programma che abbiamo appena visto dovremo edi-
gramma non fa eccezione. I registri che dobbiamo confi- tarlo in MPLAB per poterlo poi in seguito compilare. Si
gurare sono quelli specifici, e questa configurazione de- può creare un progetto e un file nuovo o aprire quello
terminerà il comportamento successivo del PlC. Per uti- che avevamo già fatto con il nome "primo".
lizzarli correftamente dobbiamo conoscere bene le carat- Entrando in N/PLAB ci verrà chiesto se dobbiamo
teristiche di ognuno di questi registri.
La configurazione che dobbiamo fa-
re è quella di assegnare le otto linee
della porta B come linee di uscita per
mostrare i dati che vengono richiesti.
Per questo prima dobbiamo passare
al banco 1. L'assegnazione come li-
nea di uscita si fara ponendo a 0 il
registro TRISB o, come si e spiegato
precedentemente, in PORTAB sapen-
do che siamo nel banco 1. Dopo
questo si torna al banco O.
La visualizzazione dei dati e sem-
plice tanto come muovere il valore
che contiene ognuno dei registri alla
porta B. Dato che non abbiamo nes-
suna istruzione che permetta il movi-
mento dei datitra due registri diretta-
mente, si utilizza come punto di ap-
'poggio il registro di lavoro W. Si vede
rncì rho l: nnrt: R /a ln cfoqcn nor l: Apertura di un progetto che abbiamo già e che è stato l'ultimo utilizzato
nnrt: A) :nrhe <o o (peciale perche
nermette l'inorpsso e l'uscita dei dati
d: p nor l'o<fornn dol Pll- <i no<ti<ra
in eguale modo di tutti gli altri registri
ll hlorro strnrtrnttr di istruzioni e
gia stato spiegato nel primo pro-
gramma, ed è quello che realizza il
movimento dei dati.
Per ultimo ci viene richiesto di vi-
sualizzare i dati dei registri con dei
nuovi valori. La sequenza di istruzio-
ni e una ripetizione di quelle già vi-
ste ne' la nrima uisttalizzazione.
I a fine del oronr:mma si ha con
SwSkwsw
vvUvl ion srpflliprpmo
Onf il modo
simulazione e apriremo ìe fi-
nestre dei reg istri specif ici
(Special Function Register) e
dei registri generali (File Regi-
<tor\ nltro : nrrolìo dol nrn-
gramma che abbiamo già
:nórt^Lw.
qPql IPor
gr riodaro
vgugrL 1;tf
fLullc a la
lc {i-
ll-
bsf STnTus,5
nell'altro caso si puo ampliare noulu SB
nouuf
drrettamente I programma
P0RIAB
bcf STATUS,5
Sw#sesesxsw
1t:aa:a:ia..::::::!'Nt{..:::::.....ì:ì::::::.1:1.......ii:r,r1,rrì::ììrr,f-!ìì:rìrrììì.,ìììÌ,ììr;l:jr{1
Scheda detle istruzioni :
f istruzione CALL
si eseguono le istruzioni, non a causa del valore di una cialmente quando il lin-
,,+ili---+^ À l,-
condizione, ma per rendere la struttura del programma 9Ud99rO ULilZldr(-) e ras-
^,,-^^i^
piu chiara. Quando abbiamo visto le parti di cui si com- sembler, che necessita di rqccoltq-dqti
poneva questa struttura, abbiamo già parlato di sub- moltp islrr rzioni ner rea-
routines, anche se non le abbiamo trattate in profon- lizzaro nnprazioni cpm-
dità. Per realizzare questa subroutine si utilizza l'istru- plici. La bravura consiste wisuolizzo-doli
zione call. Questa istruzione fa sì che il puntatore salti nel pensare ad una strut-
ad un'altra parte del programma, etichettato col nome tura del programma cosl
che accompagna l'istruzione come parametro. Questa come se si trattasse di sommq-dqti
tomaticamente allo Stack del PIC il valore del PC, in mo- più complesso sarà il
do che, una volta conclusa la subroutine, si possa tor- modulo, e più frammen-
nare alla parte di programma da cuie stata fatta la chra- ti ripetuti contiene, tanto softrqzione-dati
mata, e continuare con l'esecuzione normale. Poiché più sarà necessario fare
non si conosce ilvalore del PC sino a che non si esegue uso di subroutine.
l'istruzione, non si è potuto calcolare in precedenza, per La trad uzione del- visuolizzo-doti
l'organrgramma, che
PARAMETRO PARAMETRO rannresenfa il flrrsso
MN EMONICO I principale del program- Sequenza dei passi durante Ia
chiamata a subroutine.
ma nrrò essere imme-
C
:,r.1-- -*L k
diata utilizzando le su-
Operozione: chiomoto od uno subroutine broutines. Se si ritiene necessario si possono fare al-
il cui nome oppore come porometro tri organigrammi indipendenti per ognuno dei mo-
dell'istruzione. duli. Trasoortando ouesto in codice assembler si con-
Cicli: 2
verte in una seouenza di istruzioni call che si ese-
Codice OP: I O Okkk kkkk kkkk
Flog: nessuno guono una dopo l'altra, e formano la parte principa-
le del programma. Al termine di questa parte
principale subentra lo sviluppo di ognuna deìle sub-
Caratteristiche dell'istruzione call
routines.
Smfrswssre
Sch eda delte istr uzioni :
l'istruzione RETURN
@
l'istruzione di complemento
alla call. Mentre la call si uti-
li--- ^^. l-
rzza per -l^;-*-+-
ra cnramala a su- ì
broutine, l'istruzione return 2
3
comanda il ritorno dalla su- 4
broutine, una volta terminata la sua ,.-"- 0 coll configurozione -.--' 5
$qrftultlre
Applicaúone pratica:
contando il tempo
uando abbiamo modtficato il primo pro- Così come succedeva eseguendo il primo program-
gramma per visualizzare i registri prima e ma in questo modo, al termine delle nostre istruzioni il
dopo il movimento dei dati, proponem- Program Counter (PC) continua ad incrementarsi, e
mo di fare una simulazione del tioo istru- dobbiamo fermarlo con Debug>Run>Halt. La velocità
ziano nor i<trrrzinno nor \/anora .^mo dipenderà dal computer su cui si sta eseguendo il pro-
veniva eseguita; avete provato a fare una simula- gramma, ma. quasi certamente, sarà troppo alta per
zione del programma in modo completo, per vede- poter vedere adeguatamente come variano i registri. La
re come cambiano i registri nel momento in cui stessa cosa succederà quando il programma invece di
avviene? Questo è proprio il momento. Apriamo il essere simulato, sarà eseguito nel microcontroller con
progetto e ci apparrranno le finestre così come le hardware reale: la visualizzazione dei dati che ci inte-
abbiamo Iasciate. Facciamo un reset del sistema e ressano sarà appena apprezzabile. Lunico dato che si
introduciamo il valore FA nella posizione 0D della potrà vedere chiaramente sarà I'ultimo che rimane nella
memoria dei dati. Quando saremo pronti per fare Porta B come neìla simulazione. Quindi sarà necessario
questo tipo di simulazione, dovremo selezionare introdurre alcuni tipi di ritardo, che ci permetteranno.
I'opzione Animate all'interno del menù quando saremo nei panni dell'utilizzatore, di interagire
Debuq>Run. Fatelo ora. con il sistema.
&KffiA$dX&K&ffiffi&
i;*é ffi èÉse. Xffi# r_{'
Qualsiasi cambio che faremo
nel programma dovrà essere
i,iiÉ***ss*i*iàffi
riportato anche all'inizio, cioè
4lll ts*l€**
j*g*4.*g* :* dovrà essere inserito nell'orga-
:rétrs* {ry+ *
$éÈ*dee.
-- fgt,* *# fl& nigramma.
:' f*F-*ii q& .*
:
*tFCt {E!x * L'idea è che i dati che dob-
iF.sfft ldEF* * biamo vedere mediante i diodi
I LED, siano visualrzzati per il
k:tuWfrx*, fid+&d? tempo sufficiente ad essere
WÈ*w 'b€e$:i{H
visti. Questo si ottiene introdu-
**lxri&&*dd. &5.e+Fq
cendo una routine di ritardo
*É- #+q*jgs
i** "rÍl;F.í€a dopo aver spostato ogni dato
sulla Porta B. Per fare in modo
che ogni dato sia visualizzato
per circa 1 secondo sarà suffi-
ciente per raggiungere il nostro
obiettivo. Modifichiamo anche
l'organigramma.
Quello che è stato intro-
dotto nell'organigramma che
già abbiamo, è una specie di
Uno dei possibili modi di simulazione
piccolo programma indipen-
S*S*'txrxre
dente all'interno che il PIC'l6FB4 ha solo una caoacità di 1024 istruzio-
oer programma ni. La seconda opzione è eseguire cicli all'interno di altri
Configurczione: nrinrinelo ad ò
DATOI, DATO2, DATO3 cicli, in modo che una ripetizione dietro l'altra fornisca
PB uscitq chiamato routine, il valore desiderato. Considerata la struttura di control-
o subroutine, e si lo dedicata alla programmazione del PlC, avremo biso-
ulilizza quando un gno di un contatore a cui far decrementare un valore,
moslro DATOI pezzo di program- e dato che i registri sono a B bit, il valore massimo che
ma deve essere si puo ottenere è 255, quindi il valore totale da conta-
ripetuto varie volte. re si divide in gruppi da 256 (da 0 a 255). I cicli propo-
ritordo lsg
In questo caso sti realizzano 256x256x15 = 983.040 istruzioni noo.
quesro pezzo al che si awicina al valore cercato.
moslro DATO2
programma si Questo modo di lavorare è valido, anche se non e il
ripete 6 volte, migliore. Quando ci serve contare il tempo, conviene
<pmnro nolln (to(- fare ricorso ad una risorsa del PIC che è il temporizza-
rifordo lsg so modo. L ultimo tore TimerO (TMR0) Questo temporizzatore, una volta
ritardo non sareb- configurato, è capace di contare un valore determina-
be necessario, dato to (256 x 256 come valore massimo), in modo indipen-
mosfrtr DATO3 che come abbia- dente da quello che si sta facendo con la CPU del PlC.
mo potuto verifi- Alla fine ci awiserà. Così, in questo caso dobbiamo fare
care nella simula- un unico ciclo in cui il TMRO conterà 15 volte il valore
ritcrdo I sg zione, il dato finale
narmano o ln <i
puo osservare senza
+-DATOI
o3 problemi.
FOR 256 DO
Xt YE$K* FOR 256 DO
DATO2-"+-DATO3. I metodi per otte- FOR 15 DO
nere un ritardo, Nop
" una perdita di
mostrc DAIOI ENDFOR
tempo", sono mol-
to vari. ll primo ENDIOR
che ci viene in ENDFOR
rirordo I sg montó À nnrro rrn:
f ila d i istruzion i
mostrq DATO2
n op na c relro
u Con un ciclo all'interno dell'altro
.- .--:,.--^ dild ,^*^--Utaztone
:ll':ltr: norn qp )l-: lJuu
^ alt tvdlc -il. Lcl t tlJvt
) desiderata.
\/nnlrlmn nttonoro
ritr:rdo lsg una temporizza- massimo. ll modo di configurare il TMR0 e il suo regi-
zione di un secon- slro
cir^ d55ocidt() per q-r-.-
rccari r+n n^r
^troqt: :nnirr:zinno ,l regl5lro i
Sw#*vrwwe
I
dobbramo inizializzare i contatori
associati; verificando il valore del bit
ì 2 del registro INTCON, si sa se il
contare, lo faccia utilizzando gli impulsi deì clock OPTION lo abbiamo definito come OPT perche la paro-
i nterno. la OPTION è una parola riservata dell'Assembler, e uti-
lizzata in nrtrqtn mndo ar,rohho npnoratn rln effofe.
*"'{
;. /'- .""
-'"; } ;.' Q.relìi che nell'organigramma erano rettangoli, di
| : rorrtinp di Iemnorizzazione f unzionerà come "rìtardo di 1 s", ora sono stati convertiti in chiamate
mostrato nella frgura. Inizia con il nome della routine, ad una routine di ritardo. Ouesta routine. di cui abbìa-
*^ : -+-+- -l +^.*i^^
che abbiamo chiamato "ritardo". Come abbiamo spie- mo gra paflaro, e
^i; ^-.1-+^ posia ar
sTaTa ^^-+- ^l^l program-
rermrne oer
n:tn in nrcredenz: il îemno desiderato si otterra con Itd,
-- -^-h^ tc -^
dILt )c ^^+^,,r
puLcvd ^..^"^
tr))crc -^ll^-.+.
LUiluLdLd ^l- L.ludr)rd)r
ud ^,,-l.i-.i .l+"-
dilrd
un ciclo all'interno di un altro, con quello rnterno che parte, tenendo sempre conto dell'ordine con cui si
realizza una temporizzaztone di 256x256 ms, grazie al eceorie il nronrammà notàte ehe donn l'rrltima chìa-
TN/R0, e un altro esterno che fa ripetere 15 volte quel- mata alla routine "ritardo" abbiamo un salto alla fine
lo interno. L introduzione del valore 15 fra virgolette de' nronr.1mrn.: ,al+rimenti tornerebbe ad escnrrrrsr
semplici, e con Lrna'd'davantr, fa sì che lvalore sia questa routine. li proqramma, come sempre, termina
considerato come decirirale. All'inizlo di ogn ciclo con la direttiva El'lD.
Sqp$*x*rw*exx
tlullNEn${l1fr1fssì
'.|l|...,.::.::.::|.'.|......1..1Nj1...::.j.:.jj.]]]i.lìN1,]i]]]]]]]:]]]]]]]::]lù!ì\|ì:::ìsi.*g
'l'&
,,,1:&:
.'.'.7
'ì'lìii:
..,u1ì:i
rr::iF
movlw b'00000f tl' ;Configurazione di OPTION per il TMR0 ,l::.,:3
movwf OPT
:::a:,,.,:&
,,a:a,a,a,a:a,i
Sofîwsre
Scheda detl,e istruzioni:
l'istruzione RETLW
Sw#*wwsw
Sch eda delle istr uzioni :
f istruzione RETFIE
$i$swPs
PARAMETRO PARAMETRO il*ru $i3SY$e#X3*S*il KffY$;Xfi
MNEMONICO 1 2 Nella figura abbiamo tre finestre aperte:
Cicli: 2
Nello Stack è rimasto l'indirizzo di ritor-
no, per quanto riguarda i registri specifi-
Codice oP: 00 0000 0000 I 001 ci, possiamo notare che nel registro INT-
Flog: nessuno coN, e più esattamente il bit 7 o bit GtE,
e appena stato messo a zerc, per non
permettere altri interrupt. Come ultima
istruzione nelle subroutine dedicate agli
Ca ratter i sti c h e del I' i stru z i o n e retf i e
interrupt, si trova la retfie.
$s$*xrywr*
Program m azione:subroutire,
macro e recursività
: npressità di nron16pl-131'g
in forma strutturata e modu-
l-"^
rcrc À
c .+-+-
)LoLd .^i^^-+.
)Prc9drd ^^ll-
rEild
sezione precedente, così
come le strutture che forma-
no parte di questi moduli. Ora trattere-
mo idifferenti moduli esistenti, e quali
sono le differenze fra di loro. In ogni ;Súbrùutlrt
5t$ffiffi*8"$TXF$il
La decisione di ulilizzare o meno le
subroutine dipende daltipo di programma
ll programma precedente, sciltto senza l'utilizzo dei moduli
che vogliamo realizzare. Quando un'azio-
Sw*fuswxw
.nmllnnlro
LvrrrurrVuu <A uLilr44dlc
tiiliTT-+^ in
lll
macto
modo coerente, i vantaggi Nome_macro
lstruzione-1
sono maggiori degli svan- lstruzione-2
tagg r. lstruzione-3
Normalmente una sub-
lstruzione-{n-l)
routrne comunrca con rl pro- lstruzione-n
gramma principale median- endm
te lo scambio di una sene di
valorr. Quando si chiama il Avanti macr0
movlw b'0000rî01'
subprogramma, questo rice- movwf PORTA
ve gli argomenti necessari endm
-ll- -,, ,-,^^^
ì,,ts ^ .^-+,
ts tu)U-
tuisce dei risultati. È consi- Struttura di una macro ed esempio del suo uttlizzo.
gliabile che le variabili a cui
accedono sia il programma che il subprogramma 9rorilro ^-i^-i^'r^
prrLrporE hasterà
L inserire iì nome della
siano indipendenti, cioè di ambito locale, di modo marro nel nrrnfo che ri interessa e lp istrrrzioni che la
|,L' Pvl
re un programma consrste
nell'utilizzare delle macro.
Una macro definisce un
insieme di istruzioni a cui si
Sezione dello stesso programma, pero con l'utrlizzo di subroutine e di macro nella stesura
assegna un nome. Nel pro-
Sw$*xeswrw
subroutine, pero rl tempo di ese-
cuzione sarà minore, perché non
ci saranno chiamate a subrouttne
durante l'esecuzione del pro-
gramma. Quando il codice da
includere in un modulo separato
dal programma principale è
molto grande, di solito si usano
le subroutine, quando detto
codice è molto piccolo, e meglio
utìlrzzare le macro.
PRffiffiLffiWX ru#LgJ#$*
ffi*L&_ffi ffiefrffi#
Non si può parlare di problemi
propriamente detti, ma di pre-
cauzioni e di norme dì buon
Lt-^^^-
uso, cne
-t^ -^"
orsogna conoscere e
applicare, perche questi non si
producano A causa della diffe-
renza che esiste al momento di
Generazione del codice nel proqramma scritto con subrouttne
assemblare, fra macro e subrou-
tine, l'inserimento dei cicli non si
ne, il numero di istruzioni generate, e che piu tardì saran- or,ò realizzare nello stesso modo. Nel secondo pro-
no scritte nella memoria del microcontroller, risulta lo stes- gramma di esempio, sono state sostituite le subroutine
'so di quelle scritte nel programma al momento dell'edita- con le macro, definendole in modo errato.
zione. Quando si utilizzano macro, invece, ogni apparizio- Dato che tutte le istruzioni delle macro si ripetono
ne di un nome di macro è sostituito dal compilatore, da tante volte quante sono le chiamate, si verificherà
tutte le istruzioni che formano la macro; questa operazio- anche la ripetizione delle etichette che formano parte
ne è chiamata espansione di una macro. ln questo modo di queste macro. Questo genera un problema, quando
la quantità di istruzioni che saranno scritte nella memoria un'istruzione, ad esempio una goto, fa riferimento ad
di programma sarà maggiore che nel caso di utilizzo di un'etichetta e questa etichetta appare duplicata nel
; Carlca il lB!
mwf PonTi
eúnpe_1 ùtass tflrcoff,f8lf i son. tefúlnati I Pasri?
goto l!f,Mt-1
bcf lxTcol,Toif ; Si- Dle.ttisa t1 lrÈg
ESlin
RÙgf TM!
mlls b 00!fi111'
mlqf Pú81î
o€SlRi_1 òtf5e lfllc0l,T0lf ; sóno tersinati i póssi?
goto tEslnf_l
bc, lNlc0N.lùlf ì Si, Disattfvó 1r Fì39
i Prograffi 9rincip3le
ÈlClO frllr oxFB ; ita8z. dl 25Ù M (7 pasli)
t0iff?n
Èlls ÙrfÙ ; 6ifa . destra di ió Pèssi
0lsrna
mvl{ gf1 ; llitz! dt 1à Pasti
a0htzi
ÉF
Generazione del codice nel proqramma scritto con macro Secondo programma esempio con le macro defintte in modo errato.
Sw#*wexre
sarà traslata in anticipo o in ritar-
do del valore che ha in quel
momento il PC. Visto che ogni
chramata a macro verrà sostitui-
ta -datutte le istruzioni che la
compongono, ogni istruzione
verrà collocata in indirizzi diversi
della memoria di programma.
per cui il PC al momento di ese-
guirle avrà un valore diverso, e
gli induizzi che ne risulteranno
per incremento o decremento
anche. Se isalti sono realizzati
"verso l'esterno" della macro, si
noqsono riilizzaro ptirhafto
dato che queste non saranno
considerate ripetute.
ef;e uesxvxTe
La recursività è definita come la
Errore che genera MPASM cercando di assemblare il secondo proqramma
capacità di un subprogramma
di auto-chramarsi. Al momento
di dichiararla, bisogna identifica-
re bene il caso base per cui il
proced imento terminerà.
mGro
mvwf llno
nov10 b'c88tll61.
; grrlca 11 tíAg Non tutti i problemi possono
[Òvef F0nla essere definiti in base alla recur-
Sl. Disattlua ll Flòg srvità, e
generalmente una è
11toila
delle cose più difficili da capire e
muuf îf{Fo eartca ll lín8
mvt.s
meef
b' 6BO6J11''
p08în
,
applicare nella programmazio-
btfss txtcoH,Totf Soro tarnlnitl I passl? ne. In ogni caso con il PIC potre-
goto $-'r tllt. Cortinut
bcf tNf0frfi,f8lf 31. tisótttca 11 Flag mo ulilizzarla poco, perche con
erdn Rlt6roó
; Ffo$raM pflnrlpale la recursività si generano indiriz-
*viozó dl 2gS w l7 Oasst, zi di ritorno ogni volta che la
dlra i destra dl tó paÉ51. subroutine si "auto-chiama", e
guanza úl It paesl nel PlC16F84 abbiamo solo 8
inditzzi di ritorno, tanti quanti
ne puo contenere lo Stack,
numero che è molto basso per la
Forma corretta di fare i salti nelle macro.
maggior parte dei programmi
recursrvr.
Ss**xrw**
Sch eda dette istr uzioni :
fistruzione SUBLW
tato rimane in quest'ultimo. I flag che vengo- oDtion req lF 254 l! ffiìÈ !O ; ltrtà a
istatuE- -
1
1F It Hr* 6
I rs. l2 htf *t,G : Ps$ al àaF
no attivati sono gli stessi che nel caso delìa somma, iporta
{lo
0€ l3
! trisr
t* elÈ S ; Si sp"4w i
però, dato che l'operazione si realizza med ante il : prrtb
B0
6t 15 Frs 6
trisb FF *É ú!f s,l ; le3{o li p&ta
metodo del complemento a due, il flag di carry, invece eedata go 7î
tl
ssùli
btfs
G
(É,2
; |lcro m cEi
€econJ St
di attivarsi quando c'è riporto, lo fa quando non c'è. €eèir
€econ2
3B
BS
tclath BB
intcsn 6B
$q*{i$wsxw*
::::::aa:a:tt:a::aaaaat*la,?taaa,lL,tl::::::i:;\i
Scheda delte istruzioni:
fistruzione SUBWF
la seconda istruzione
di sottrazione e sot- El*is :{€úÈ !Eà1es leb
lraa ad I rn ron i<trn
chramato "f " il valore
che contiene il regi-
LIST P=1éF8à ; Defini:i3ne d"t procass$ra
stro di lavoro W. ll risultato di
questa operazione rimane in f CR* O ; Posizionafiento dell.a pri$à istruaione
; all'indirj.zzo B della sì*ncria {ti pro$raRfla
o in W a seconda del valore
del parametro d.
;Cst arazion* con i ualori letterali
Così come I'istruzione pre-
rcdpnto \/onnnnn rninvOlti i muf AC,O ; Sl mtte in S iL uetorg d1 rÈgistro gC
subl's 94 ; ffurmro con cui si uuole far"e La conparazitne
flag C, DC e Z nella forma già
fioulù, g{ ; NUR€ro con cui si vusl"e fars la canparazione
descritta. subsf 6t,S : Sl ps"gue la sattrazione ccn il registro da
ffi$ffie$trx fl#ru
;Carvàrazione Sra registri
$-*XSTffi WtrX# $q ]l: S t* **W $:
|'uso di nreqta istrr r7i61'19 g na'Jf Bs,a ; Si &ettè in !, il ual3re d"l registra BC
subnf S',€ : Regi.stro con cui si uùol* far€ La coaparazi
simile ,a nrrelln dpll'istruzione
sublw, che abbiamo appena
Esempio di comparazrone con le istruzioni sublw e subwf
visto. Entrambe servono per
Sw6*ses*wss*
Appli cazione pratica:
un altro programma con it TMR0
poco a poco stiamo conoscendo l'uso delle
varie risorse del PlC. Abbiamo studiato i
RAO=I?
Abbiomo un nostro trosportotore sul quole
siqnno possondo i pe:ni che vogliomo conlqre.
Per contore il numero dei pzzi posizioneremo
un pulsonle che sorà oftivoto dol possoggio
di ogni singolo pezzo. Per ogni
gruppo di lO pezzi otliveremo un diodo IED
che ci owiserà, od esempio,
che i pezzi possono essere impocchettoti. RAO=O?
CONTATORE = CONTATORE +I
r{qx{\$# #KseN$sffi&&4ffi&
La prima idea ootrebbe essere I'utilizzo di un contatore
da incrementare tramite il programma, ogni volta che
rileveremo un impulso (passaggio da 0 a 1 e nuova- CONTATORE = lO?
mente a 0, oppure il contrario) sul piedino a cui abbia-
mo collegato il pulsante.
Ogni volta che aumenta il registro contatore, dovre-
mo comparare al numero a cui vogliamo arrivare, in
questo caso al '10. ll programma potrebbe essere risol-
occendere il LED
to in modo soddisfacente già con il primo organigram-
ma esposto. Dato che il nostro programma deve solo
svolgere una funzione, non importa se impiega tutto il
tomn^ nol foqt:ro rrn i;16;pqq6 increment:re Un COnta-
Primo organigramma dell'esercizio proposto.
tore, e compararlo con un valore dato; però se oltre a
sl:èì::Wrrrrrrrrlu,url
Sw#*wwvw
€onfigurozione:
RAA ingresso
RBI usrito
TIARO
OPTION
spegnere LED
iniziqlizore TMRO
*ffi*&ruXffiffi&Mffi&
VATORE DELTMRO
MffiTXruXTX\g#
tl pur5anTe
ll ^,,1--^+^ aluvaro
-++i,,-+^ -l-
oòt pezzt, sl puo
o00000r r Volore che si vuole contore
collegare al piedino RA4, il quale si
puo configurare per introdurre impul- III!tIO0 Complemenf,o o I del volore do conlore
si nel TN/R0. Ogni volta che arriva un
fronte di salita o di discesa, il TMRO si lIIltI0l Complemenfo o 2 del volore dq conlore,
auroincreme^ra senza la necessita di che è quello che si deve metlere nel TMR0
eseguire alcuna ist'-z one. 'r- Pi-,
confÌgurando ll TNIR0 Ln modo ade- lllllll0 Volore che si incremento nel TMRO,
con il primo impulso o istruzione
guato, potremo essere avvisati del
termine del contegg o delie 10 unità.
illiltìl Vqlore che si incremento nel TMRO
A^che se o-trsto qccordo rodo d con il secondo impulso o istruzione
procedere e rnigliore del primo, non e
ancora quello ott ma e, pero non 00000000 Volore che si incremento nel TMRO
potremo migliorare ulteriormente il con il ferzo impulso o istruzione.
programma senza l'ulilizzo degli A questo punlo owiene l'overflow e si oftivo
un flog per owisorci di questo
interru pt.
Come vedremo, abbiamo elimina-
to tutti i riferimenti al conreggio -
Esempio del valore che dobbiamo introdurre nel TMR0
che e controllato dìrettamente dal-
Sw#Swwrs*
necessario il divisore di frequenza, e dobbìamo confi- Con i valori dei bit 5 e 4 impostiamo rispettivamen-
gurare il contatore in modo che gli incrementi siano te l'incremento del TMR0 mediante impulsi, ed il fron-
prodotti con gli impulsi che arrivano dall'esterno e non te di discesa per questi impulsi. Le X riflettono valori
con gli impulsi interni del clock. che non hanno alcuna influenza sul risultato di questo
I primi tre bit (0-2) rappresentano il valore del dìvi- esercizro.
sore. Come abbiamo già detto, per questo esercizio
non è richiesto nessun divisore di frequenza, però asse- bóe$-#$qg: ffiffi&- Ytu$ffi#
gnando il valore "000" al divisore per il TMRO, risulte- Un altro importante dato da considerare quando si
rebbe di 1:2. Pertanto dobbiamo combinare questo lavora con iì TN/R0, è il valore con cui viene carìcato.
dato insieme al bit 3, che avendo valore 'l assegna il Per non creare equivoci è necessario conoscere come
divisore al Watchdog in modo 1:1. lavora il TMR0; ouesto contatore si autoincrementa ad
ogni istruzione o impulso esterno,
oppure ogni due o tre istruzioni o
imnrrlsi estprni sino ad arrivare al
H
suo valore massimo, che vale FF,
E'ù.i dato che sì tratta di un registro a B
H,'rJ
E,ú,:
bit, per poi passare dal valore massi-
C14l mo al valore minimo, a 00.
q,sr-r
A, ,^-+^ ----^^i^ e conosciuto
vuc)rv ^Pd))d99ru
H E'I
con il nome di overflow, e ci awisa
fccl HsI
CEE che il conteggio è terminato, anche
REù
I'EÉ H Eil se in realtà il conteggio non si ferma
EB?
*uo ma prosegue. rmparato queslo, se
UBt' HE1
-{
E ETIIHT vogliamo che il TMRO conti fino a
Nl^ll-
l\Clld {in,
ll9uld rllnnr+rLo/ o
'rr dllc9d L rinnrt:fn
I rpvl rrn
Sw$*wwsw
ta internamente con il TMR0, per fare in modo che si pR*we ffitr1 pR{3&K&M$4&
incrementi. ll LED è stato collegato al piedino RB1, La simulazione del programma precedente ci pone una
ma potrebbe essere collegato a qualsiasi altro piedi- nuova sfida, dobbiamo introdurre impulsi tramite RA4
no di l/O. in modo che il TMR0 si incrementi.
Se proviamo a farlo con I'opzione Window>Modify,
Pffi##ffi&f-$fv$e vedremo che è imoossibile.
ll programma, dopo aver considerato tutti i passi pre- Lo dobbiamo fare con l'opzione Debug>Simulator
cedenti, apparirà come mostrato nella figura. Come Stimulus>Asynchronous Stimulus. Da qui si aprirà una
novità, è possibile notare il nome assegnato ai registri finestra in cui fare la scelta dei pin da utilizzare per
e ai bit. introdurre tutti i dati necessari, e la forma di questi dati:
Anche se potremmo chiamarli come vogliamo, impulso, livello basso, livello alto, o zero e uno alterna-
ferma restando la funzione di ognuno e il modo di tivamente.
utilizzarli, normalmente hanno nomi che si possono Nel nostro caso sceglieremo gli impulsitramite RA4.
consrderare universali, in modo che tutti quelli che In seguito mostreremo lo stato della simulazione, subi-
utilizzano l'assembler del PIC abbiano un linguaggio to prima che il TMRO vada in overflow, e poi dopo l'o-
comune. verflow, al momento dell'accensione del LED
10 1ó C5flÉCgo
qFe a7 7 09F4fi11 òcf PoRts,LED
btfE5 ixlcoff,t0tF
qOtO ACCEilDERE
$EAE bsf PoRlB,lEo bsf P0BIB,LEo
hcf IilTCoN,l0IF h.f lNtc0NtT0tF
goto UCLonI
€m €xD
S*SSweglwm
rrlrlÍ1ff]írìrìììììì::*w*j;ir]:rrrrrrt1tilr11ii1111ftfì*:rra,ìii!€i:?;1í$i|ruiìììììilf*gtirflÍ:f'r)t*trùìmi:::::&{@
Scheda detle istruzioni :
f istruzione CLRW
uesta è un'altra istruzione
..- dai
nor l: no<tinno --, rr,Jgt- PARAMETRO PARAMETRO
stri, anche se questa volta
si tr:tfa del renistro fli
MNEMONICO I 2
lavoro W. L'operazione
che comnip non e altro
clrw
che la cancellazione (clear) del conte- Operozione: il registro di lqvoro W viene
nuto del registro, ossia la sostituzione
del valore del registro con 0. Come coricoto con il volore 00.
per molte altre istruzioni, producendo Cicli: I
questo risultato si attiva il flag Z. Codice OP: 00 0001 0000 00] 1
Dato che sì agisce sul registro W
non sono necessari ulteriori parametri
Flog: Z
addìzionali.
Valore dei registri STATUS e W dopo I'esecuzrone Valore dei regisrri STATUS e W dopo I'e>ecuzione
dell'istruzione movlw 00 dell'istruzione clrw.
Sw#&e*ewwep
Scheda delte istruzioni:
f istruzione CLRF
Mru ome l'istruzione precedente,
anche questa realizza la cancel- OPERANDO OPERANDO
ffi lazione di un registro, in questo
MNEMONICO FONTE DESTINMIONE
caso della memoria RAM dei
WM
-^^-tÍt
dati. L'indirizzo del registro si
-^ come parametro. ll suo flag
>pcLil rLd
clrf f
assoctato è nuovamente Z, che verrà
messo a 1 dato che il risultato sarà 0. Operozione: il registro f viene coricoto con
il volore 00.
K$*&q PK fi #ru L*gSYffiWXg#
CL&P
gd
ffi
Cicli: I
Lavorando con le porte di ingresso e usci- Codice oP: 00 000.| I fff ffff
ta. sovente è stato necessario inizializzare
k* Caratteristiche dell' istruzione clrf.
qrP
delle due
iFln. del p.ogr.h istruzioni, nel
seconOo caso
si modif ica
con la terza
istruzione,
Valore dei registri STATUS Valore dei registri STATUS così come nel
e TRISB dopo I'esecuzione della seconda opzione e TRISB dopo I'esecuzione della terza opzione
terzo blocco.
$c#!wsre
Appli cazione pratica:
rappresentazione dei dati
suldisplayaTsegmenti
rrtti i <ìqtomi o il rnmn
,,ruter ne e un esempro,
si possono differenziare in tre parti: l'ingres-
so dei dati, ì'elaborazione dei medesimi e la
rappresentazione del risultato. I dispositivi di
innresso c la rannresentazione dei risultati
sono chiamati interfaccia utente, e stanno assumendo
sempre maggiore importanza, rendendo le interfacce
sempre piu comode e facili da utilizzare. Un program-
me nro psserp molto buono e fare molte cose!vJr/ nerò Jrse
v!,v
COfiIPUIER
INGRESSI usctrt
It t | .--
1+lì\tt
rtlrll.l
$*#*wwm*w
Volore Volore
dP b;
i
ql i \loloe
i"crt"n"ti a".irol" S f eqdeimte
i
o
l
0 1-*: 1: 3F
n I ri0Ì0 0 1 1j 0l 0ó
n I 2 i o i1 0 I I 0 l! I 5B
0 I 1 3:Ot] 0 n I 1 rÌ I 4F
I 0 0 4a0tr l rì 0 I l; 0 oo
I 0 I 5:Oil I 0 1 I oi I óD
I 1 0 ójorl I l I I 0i l 7D
1 I I 710:0 0 0 tì I 07
Tabella di trasformazione dei valori binari al codrce per i 7 seqmenti a catodo comune
di forma allungata, dìsposti in modo da formare il ri degli interruttori potranno variare da 000 a 111.
numero 8. Questi segmenti sono numerati, come Prima di fare la tabella corrispondente dobbiamo cono-
mostra la figura, con lettere consecutive dalla 'a' alla scere un dato in piu sul display. Tutti sappìamo che un
'g' iniziando dal segmento superiore e continuando in diodo LED ha due terminali, conosciuti come anodo e
senso orario per terminare con il segmento centrale. catodo, e che se colleghramo il catodo a terra e l'ano-
Oltre ai 7 segmenti c'e un punto decimale nella parte do a un PIC dobbiamo far uscire dal piedino del PIC un
inferiore destra, indicato come dp, che a volte si ripete 1 logico per accenderlo, al contrario se l'anodo è colle-
anche nella oarte sinistra. gato a 5 V e il catodo al PlC, dobbiamo fornire uno 0
logico per accenderlo. Con i display succede la stessa
ffi ru# ruflg&Yffi *KLei"g$mKflXXX* cosa, solo che tutti i segmenti (LED interni) sono uniti
Lesercizio che ora vr proponiamo non ha grandi prete- fra loro per l'anodo o per il catodo, dando quindi il
se, vuole solo aiutare a comprendere il funzionamento nome al display che potrà essere di anodo comune o di
del display a 7 segmenti per il suo uso in progetti più catodo comune rispettivamente. In un display di anodo
ambiziosi. Leggiamo pertanto l'enunciato e mettiamo- comune, si dovranno mandare degli zero per accende-
ci al lavoro. re i differenti segmenti, e in un display a catodo comu-
Quello che si richiede è di trasformare ilvalore bina- ne ogni segmento si accenderà con il suo 1 corrispon-
rio che un utente introduce tramite gli interruttori in un dente. In questo esercizio simulramo il display che si
codice nuovo, in modo che si illuminino i differenti accende con uscita a 'l , cioè un display a catodo comu-
display a seconda del numero che si vuole rappresen- ne. Vedr tabella in alto
tare. I numeri possibili sono dallo 0 al 7, dato che i valo- Alcuni digit possono essere rappresentati in più di
una forma, per cui dovremo scegliere.
D:tn rho in nrro<fn e<o
___mpto non 5t uSa
Si vuole roppresenfore per mezzo di un disploy o Z segmenti il punto decimale, questo rimarra
il volore introdotto tromite
(non+^ ., nor
ll mntivn r-. cur 5r pa55a al
lre interrutlori, in modo che il volore binorio di questi ultimi valori esadecimali e che si possono
sio visuqlizzoto in decimole. maneggiare più efficacemente i dati,
Questo può essere uno piccolo porte di un progetto più gronde, mpnfrp nnfrohhpro eSSere confusi
in cui un fottore importonte sio facilmente con tanti 1 e 0.
lo roppresenlozione dei numeri - doto che non tutti gli utenti
potrebbero non essere o conoscenzo *ffi#eruxffiR&ffiffi&
del sistemq binorio, come succederebbe se si visuolizzossero L'organigramma per questo esercizio
le informozioni tromite i diodi LED. è molto semplice, visto il modo con
cui utilizzeremo il display a 7 segmen-
tì. Forse qualcuno starà pensando che
En u nciato del I' eserci zio proposto
bisognerà testare il valore degli inter-
$e$trnrsre
Configurozione:
RAO-2 ingressi
RBO-ó uscite
Fo+
i:o+
>o+
Roccogli volore
ConYeÉi
vqlore in
codice 7 segmenfi
Visuolizzo numero
CICLO
uisuèriz.iah il !.lorè sùl distìag
st rtpètq aD tnflntto
nel sìmulatore un
linee meno significative della porta Si srN il ualorÈ dell'indlcè
display a 7 segmen-
sl rèstitùls.e il ùrÌ.ru úi a tr.sforÈtò
A nor rondoro niir comnliro l: rnn- 50
31 restltùis.e i1 uèhre dt 1 trasrorÈto
si rèstltùis.e iÌ oèlora di 2 trasforDto
ti, su cui vedere i
versione.
si rcstitùl5ce il u.l.r. dì 3 trasrorsto
si restitúiscè il !ùlore dì | tràsFùrEto
sì .èstltúlscè ll ùaÌù.e di 5 tiast.rDt.
sl r.stitúisc. lì calorè dt 6 trèscèrÈt.
valori convertiti.
si restltùisc. ù !òÌo.è di I trasforÉt. Dovremo accon-
ED
PM*GRAMM& tentarci di vedere i
Sw$*wr*xse
valore degli interruttori, e al registro PORTB che contie-
ne il valore convertito. I valori devono coincidere con la
tabella che abbiamo visto.
!'ifirnfi8 ! €Qu 0
rcsÍocro F EQù
*
1
!lrs!8to PCt EQù Ax@
pà_xfl
úúÍ11111
3!í!Ífr0íìr
STaTUS
P0ITA
EQù
EQU
6xB
0x6
fl #ffi F$ s&$w $Jffi ru
q"$ pé
fl.l{&?*
1r11i111 PoATS EQU &ù
Íiíj!90tr0
$Í0$!0t0
RP!
IRISA
EQù
Equ
0xs
*45 Che cosa ne dite se vi oroooniamo di ulilizzare non un
3flrqî3ii6 lFlss Equ oxaé
solo display, ma diversi, per rappresentare numeri con
più di un digit? Di sicuro starete pensando: impossibi-
IflIZlo bsf Slnl0S,tP! : Pasllah al I
le, il PIC 'l6FB4 ha solo 13 Iinee di ingresso/uscita e
bancò
Fvlr Ea!s40000 :P.rt.Bdsrit.
xu* TnISB
ruttofl.
Ogni impulso che introdurremo
tramrte una linea fara in modo che RAO
n ^---^.- - II c)ced
\JPd))Crdd ^-^ À - II pd))crddv.
^--.^"ì - n RA2
Sm#sqerwrm
Sch eda detle istr uzioni :
l'istruzione ANDLW
uesta e la prima istruzione logica che trovia- E considerato falso il vaìore 0, e vero tutto cio che
mo. ll suo compito e realizzare la moltiplica- non è falso, cioè tutto cio che ha valore diverso da 0. In
zione logica dei due valori: un valore lettera- alcuni linguaggi di programmazione, questa istruzione
le e il contenuto del registro di lavoro W. ll puo avere più di due operandi. Se tutti isuoi operandi
risuitato rimane sul registro di lavoro W. sono veri darà come risultato un valore vero, e se uno di
Se il risultato delì'operazione è zero, si attiva il flagZ. essi è falso, anche il risultato sarà falso. Nella figura è
mostrato come funzionerebbe questa istruzione se lavo-
rasse sui registri, cosa che succede in alcuni linguaggi, e
OPERANDO OPERANDO come lo fa nel PlC, dove lavora sui bìt di un registro. La
MNEMONICO FONTE DESTINAZIONE prima tabella mostra il funzionamento generale e la
i
t
seconda un esemoio oarticoìare. Partendo da due valori
: per un registro e per un letterale, se si lavora con il regi-
Operazione: reslizzo l'operozione logico AND stro al completo, il risultato finale sarà 0 (falso) sola-
fro un volore lefierqle mente se uno dei due valori, o entrambi. sono 0. In tutti
gr
^li ---i ilr,)urrqLv
-l+.i
rLo)r "i-,,1+-+^ sarà vero, però non ha nessun
e un volore del reoistro di lovoro W. drLr
ffisffiffig3x
{*F* tjg$Y$4#x,K#ruffi Tabelh generule
&Fdffi$_w
**n"i-M* "ii*:dn*-i
Mentre un'istruzione arit- **Js:*--*
metica uÍtlizza come unità
base un registro completo,
-.---L--i
un'istruzione logica opera "-*.t**l -""-".Y-.i "--.,'".-t.---"i
con ognuno dei bit di que-
VFF
**J_".i
sto reoistro in modo indi- y"."".i
nanÀania \/arlirmn
-"--x*i " -""-"Y,-*.-i
pcllucllLc. vcuror ru nr'^.+1
l]tlr)ld
differenza con l'istrrzione Lsrcro con rcgistrÍ lsvlttmnbit i i
At Lut -l -+:--^
-,.1 Lr ^--,,^^ndO.
)Lrdr ru uLLuPo
ut
fistruzione and, chiamata
anche moltiplicazione,
,ssx:k#ffi#--rti*s!t*"F."i "Hi*r";rj!Mt
-gl-qi-$3,:-llqjg$rs--.".--y*-*-:3l"qlq1srr,!sg!-q.!* -9ffio"-{nii
."".-fi
#q*##ews*ww
Scheda di istruzioni:
l'istruzione ANDWF
ino a questo momento la maggior parte delle
istruzioni viste hanno due modalità, per quanto Fi F
riguarda gli operandi con cui lavorano; in que-
sto caso, anche l'istruzione and ha questa
l*1,
seconda forma: la andwf. Come si può immaginare, Circuito con interruttori per rappresentare I'istruzione and
per comparazione con le altre istruzioni, la differenza
sta nel fatto che le operazionr si realizzano fra il valore
del registro di lavoro W e il valore del registro f, lascian- yvlJLvÀ rriilo nrrrnn{n
Orroctn ,-- rrn ranic+rn 5t
un regr5rro ci uI'|tzza
"+ili--- per
" otverse
do il risuitato in uno o nell'altro, a seconda del valore rnco:lln <ttr(q^ tomn^
I rvv. PcrLl
pqpmnin noi nrnnr3pprylj 163{-
'
del secondo parametro. lnoitre verra coinvolto il flaq Z. lali finn.ì orestÒ mompnlo lp norte A p R si ulllizzava-
no come ingressi o come uscite, pero mai con le due fun-
I
f zioni allo stesso tempo; non perche non sia possibile, ma
OPERANDO OPERANDO
MNEMONICO FONTE DESTINAZIONE per maggior comodità. lmmaginiamo ora che la porta B
sia collegata a quattro interruttori e quattro diodi LED: si
ondwf tratta di conoscere il valore di questa porta per realizzare
Operozione: reolizza l'operozione logico AND nrpqt: n nrroll: nnor:zionp o di :nire sr ri LED Senza
fro il volore del registro f e il interferire con il valore degli ingressi. Per non falsare i
per questa istruzione. Così l'esempio che vedremo ora, Anche se l'operazione sembra la stessa del caso precedente,
sara simile per enrrambe le istruzionr. Queste, e tutte le nel primo caso awiene in W. per cui la Porta B non viene modificata, mentre
logiche in generale, si utilizzano per fare quelle che ven- nel secondo caso si realizza direttamente sulla porta, cambiandone il valore.
Ssw#swwyqx
r,rrrfrrlrrrr{ìrìsÌr11:i:.::::.rl3ry(lÌl!l{i:ffiffi ,!trrl
Applicazione pratica:
scrivere chiavi netl,a EEPR0M
-re- n numerose applicazioni è
ffi
ffi necessario scrivere una serie
g&EEI
Sqp$&wwrsp
*-ilYYài Ke ffi tr*-L& 14 sM*ffig&
ffiffipffi*$r4 gSKX ffi&YX
ll nrocesso di lettrrra della memoria ilmff , ,JEt4l.tS
EEPROM dei dati richiede solo di HaF
SFS H€x llec
==.r:..::.1 Binaru ^i
tnr0 B0 6 ssos8i8o F
lrisÉ 1F 31 6:{ 68
ll nrimo nàqsn p snecificare l'indi- psrtb B8 I BX 69
eeclnl gB 0 6X8ó
EEPROM dei dati nel PlC16FB4 ha 64 eèadr 63 3 6X88
porta g0 0 B6ffS08gB
fatto altre volte, anche i registri della trisa 1F 31 06011111
porta EEPROM dei dati. Inoltre se p*ril BS i31) 1tÉài$nf Ílouf EEADn_Uf,ft, S
l:f::i !41 È 8$il8$5f3 muuf EEAllfi
vogliamo che neìla porta B si veda il .rc;t: ti i.2í 1S8È-r*BS bsf STeruS,fiP6
ercBil1 ÈS S BA60SB06 bsf EEcoH-l,BD
valore dell'in dvizzo della EEPROM, Éeadr Bg 3 B6úBBII 1 bcf STATUS,fiFg
$w#*wwsw
sf,ffi33Y#ffi&
Ed
ff#.1*;' Mffif,q#Pf,i Etu Prottrt 0.en"S lptore ]oois Wìndou Eeh
implementati fisicanente e si
ulilizzano solo in questo proces-
so di scrittura.
Subroutine e programma per la scrittura della EEPROM dei dati.
Oltre a questi, si utilizzano glì
stessi registri che servono per la
lettura; infatti sono stati inclusi
ldit lebuq lploro lock Windw leb
in una subroutine chiamata Ede fuotwt
03. Cambiando il valore dei regi- rption_r?g FF 255 111 111 11 EECON2 EQU OXSC
ststus 38 !ó 681 1 008
1
Sw#swwryw
sa Íettieno f indlrizzo ln cui scrluere
EEÉDB-UfiB su di una uariabire àusiliarte Vogliomo ufilizzore
27 Eettlàmo il dato da scriuere
EEDÉTÉ-UÉg
SCBIUI.EEPROI
su dl una uartàbire ausiliarta
chlamata alla routine
lo EEPROM
FIHE
per scrivere un codice di un
SCB I U I-EEPAOH EE nD
EEfiDfi
R_!fÉ ,U sDostiano L'indírizzo
sul suo registro
da scriuere solo digit che può essere
EEDÉfÉ-U6n,0 SDostiano il data da scriuere
EEO9fA sul súo registro letto, visuolizzoto o combioto.
bsf slfiTUS,8PO PeEsagglo al banco 1
bsf EECOill,#REH Pernesso di scrittura lJopzione dipenderù dol
gt55 Inlzfo della seouenza
EECOH2 obblígatoria di
ax A6
EECON2
volore di un segnole
d'ingresso, e ilvolore do
modificore si introdurrà
tromite quottro piedini del PlC.
Subroutine di scrittura della EEPROM dei dati modificata. En u n ciato del l' esercizio proposto.
tempo che impiega la EEPROM per scriversi, per cui, tura che la lettura della EEPROM. Leggete l'enunciato
se si uscisse dalla subroutine immediatamente dopo che vi proponiamo. Utilizzeremo i quattro bit meno
l'ordine di scrittura, questo tempo non sarebbe anco- significativi della porta A per introdurre i valori da scri-
ra trascorso. Se dopo aver chiamato questa subrouti- vere nella EEPROM e la porta B per mostrare questo
ne si proseguisse con il resto del programma, dopo un valore. La quinta linea della porta A sarà quella che
certo numero di cicli riusciremmo a realizzare la scrit- determina se si legge la EEPROM o se si scrive in essa
tura, però se subito dopo ilciclo discrittura siva a leg- un nuovo valore, a seconda che abbia valore 1 o 0
oere o si nretende di scrivere consecutivamente diver- rispettivamente. Seguite le istruzioni del programma
si dati in differenti indirizzi, il programma non funzio- principale. Le chiamate alle subroutines le abbiamo grà
nerà, dato che non ha avuto tempo sufficiente per viste e commentate.
realizzare la scrittura. Dovremo quin-
di modificare la subroutine di scrittu- !Bì@r Edìt géus qdbF lmb
1
SCELIg btfss P0nTÉ,4 opzione da scegliere
dovremo resettare via software que- goto SCRIUEfiE Se 884=B si scriue
goto LEGGEBE Se BA4=l si leqge
.+^ {lrn
>LU lld9. Inr
Iulld h' rnnrld f666i62
UUUI LL!ril!u di nrn-
vr prv SCRIUERE froulu 93 Hettiano 1'ínrtirizzo in cui scriuere
nouuf EEADÉ_UÎB su di una uarirbile alsíliaria
grammazione consiste nel verificare nouf PoBTA, l,f íettiano il dato da scriuere
froquf 5u di una uariabile ausiliaria
che il dato scritto sia veramente il
EEDNIÉ,UAÉ
caII SCNIUI_EEFNOil Chianata alla routine
goto SCELIB si torna a scegliere
dato che volevamo scrivere, leggen- LEGGESE noulu 03 Scriuiano f indiri?zo da leggere
dolo e comparandolo con l'originale. Íouuf EEnDR_UÉR in una uariabile aùsiliaria
caIl LEGEI_EEFRO}4 Dhianata aIIa routine di letturi
ll bit 3 del registro WERR verrà messo múuf EEDf,Tn_USR,t, Si uiEualizza il risultato
nou$f POBTB sul1a Porta B
qoto SCELTA si torna a scegliere
a 1 in caso di errore.
LEGGI_EEPSOH nouf EEDNTh_UfiR,14 spostíamo l'indirizzo da leggere
nouuf EEDf,fn su di un registro
h<t qTÉtil( epf P:<<i:nn rl h:nrn I
e_ffiYT#ffi& m sflffi]i?Y*ffie
fl*î4ffi3qJruYil
fìi
ut <onrriin I r rv)LtEtEr I tv r'n:
)E9utLv mncfrorom^ ur to nirrnl:
PtLlwto
Terminato il nostro programma, si prosegue eseguendo posizioni non valide
applicazione dove si ulilizza sia la scrit-
Sw$swwrm
Sch eda dell,e istr uzioni :
l'istruzione CLRWDT
istruzione clrwdt (clear wat-
rhnlnn\ r:nrall:
il ton
,, .-,,rporzza-
tore chiamato Watchdog, evi-
;Tlpo di processore
tando In questo modo cne List
include
P=1óFBl.
"P1óF84-IHC" ;Definizione dei registri interni
mo (FF) e vada in overflow, cosa che org 6xB5 ;salqa i1 uector di interrupt
farebbe resettare il sistema. Non ha THIZIO ClTf POBTS ;Cancelta I latch di uscita
bsf Slnf[S,ÈP0 ;seleziona il banco I
nessun parametro, quindi il suo uso è clrf
noulu
IRISB
b' 06011 1-ll'
;configure ta porta E cone uscitè
mouuf lnlSA ;Configura la Porta fi cúnè ingresso
semolice
'-"'r"-- come scrivere il suo nome. bcf sTnTUs,BP0 ;Sele?iona il banco 0
Nello stesso momento in cui viene btfsc P0Rln,B ;festa Io stato di RÍa
messo a zero il Watchdog (WDT) si mette goto Rno-uala-1 ;RAB uale 1
btfsc PORTn,f ;RÉ6 uele 0' lesta 10 stato di RÉ1
goto Sono_a-1 6
a zero anche il suo prescaler, o divisore di nouls b'181fifi4'
p0FlB
ncusf ;Sono a 60- Esci dalla sequenza
Íroatonza
,,rYvLl rhe e rna risorsa utiltzzata dal goto cIclo
\^/-+-1.!^^
vvd LLI ruu9 ^^" -fe UltefiOfmente il Sono a lB nouls b'00091111'
Ptrr "i+-"-l
I rLotuo nouuf PofiTB ;Sono a 18- EsGi dalta sequenza
goto clcl0
tempo di overflow, come avevamo già
visto per il TN/R0. I bit #TO e #PD, situati
nel registro di STATO, prenderanno valore
1. Verificando questi bit all'inizio del pro- Esempio di un programma che controlla il Watchdog
gramma; si potra sapere quale sia stata la
causa dell'ultimo reset, tipo RC, e si incrementa sino ad arrivare al valore FF,
per poi andare ìn overflow e resettare il sistema.
ts{FrÈi}i {{:s L"ISì$,{*HE*};il {. t$qW*T Questo non succede se fra le istruzioni del program-
ll Watchdog e una risorsa propria dei PIC per vigilare ma se ne trova qualcuna in grado di cancellare ìl
che le istruzioni di un programma siano eseguite in Watchdog: la clrwdt, con cui il contatore ripartirà da
:donrrato Frrnziona con Un clock interno di
mndn uu!:,
|||vuv zero. Puo succedere che a causa del rumore esterno
al sistema, il Program Counter vada
x I puntare su un indirizzo memoria di
a
Cicli: 1
pio nel quale si controlla l'uso del
00 0000 0r r 0 0l 00 Watchdog. Quando il programma è
Codice OP:
eseguito in modo corretto, il WDT
Flog: #TO, #PD
viene messo a zero all'esecuzione
"_*J dell'apposita istruzione, altrimenti si
Caratteristiche dell' istruzrone clrwdt produrrà un reset.
$*SSq#ssws$
Scheda detle istruzioni:
f istruzione COMF
dnvp si nrpndp il v:lo1s iniziale Se il '11 clrÍ P0ftlfiE ; Iúposto la Porta B cone uscitd
parametro d ha valore 1, o nel regi- 12 bcf STAT0,5 ; Passaggio dl bdnco 6
t3
14 noulu b'01 ' ; Houinento deÌ uilore iniziale
stro di lavoro W se il parametro d ha nosuf PoBIAB
61 81 01
; sulla porta I
16
valore 0. Inoltre nel caso che l'opera- 17 8ICL0 conf PBBTg8,l ; Conplenento a I del ualore della porta B
1f goto
zione dia come risultato 0, il flag Z t9
CICL0
ffiw$$*xerwsr**
Appti cazione pratica:
atte nzion e a I Watch dog !
e ri vpnisse snieoato che il
Watchdog è un temporizzalore
a B bit che causa un Reset
quando va in overJlow senza
:nnirrnnpro altro ri notfebbe
sembrare una risorsa inutile. Senza dub-
bio non è così, tuttavia il suo uso risulta
scomodo per alcuni utenti, che decidono
di disattivarlo.
*x$s3TT1f$"Xg*FúL:
*flî_ w.&í{"}"$m{.}#
ll primo passo, parlando di Watchdog,
sarà decidere se utilizzarlo o meno. Nel
caso ìa risposta sia negatìva, al
momento dì scrrvere un programma sul
'microcontroller dovremo indicare al
software di scrittura questa scelta.
Finestra di configuraztone del Watchdog in MPLAB
La zona cerchiata in rosso è l'opzione
rhe dovremo
.,,'" nrendere
Y, in conside-
razione in questo caso: impostar-
do NO il Watchdog rimarra disabr-
litato, al contrario, ìmpostando Sl
lo abiliteremo Se in seguito desi-
derassimo utrlizzarlo, dovremo
riprogrammare il microcontroller
con questa opzione cambiata.
Se invece di lavorare direttamen-
te con il microcontroller utilizzeremo
il simulatore, potremo attivare o
disattrvare ugualmente il Watchdog,
lo faremo tramite Options>Develop-
ment lVode, e una volta qui, sce-
nliorcmn l,a crhpde rhe si chiama
Configuration per ca'nbtare le carat-
teristiche del Watchdog.
All'interno di questa scheda, se
t,^^-;^^^ -^^l+^ ---ì,,None,,
I upztut rc )LcrLd )drd il
La disattivazione del Watchdog si fa tramite il software di scrittura
Watchdog rimarrà disabiliiato.
Sss#*qwwwres
Si vuole visualizzare sulla porta B
ìii.:::
(WDT Chip Reset Enable), e l'altra consiste nella possibi- I
,: ,.il
opzioni relative. La selezione del Prescale per il
Watchdog, in modo che ritardi il momento dell'overflow .,,liltj
va fatta via software.
. :aa,
O rgan i g ra m ma del l' en u nci ato p roposto. :l:1i
3L L&V#K* {#ru KL WeTfl*{ ffi#ffi
Se avete scelto di ::,:,:î,L,:.
lavorare con il
cnraramenle come
.:,4
funziona ilWatchdog. .a:.,.:aaaa
:,1,,,.t.,.
Come dichiarato nel- .:1,:;.11
-:1ì!ì
remo un'azione
.r I
in
,.:$
modo ripetitivo, owe- ':'::'*
ro un ciclo infinito, :.;.:,:.:.al
A
n, -h^iE
Lr ^^+"ì
Lr o ^--^.^ c
E))ct
.
..: ì.li
.::,
Pv
::::,i
variato dall'utente
esterno, complemen- :,:.'.',:,1..::!
:t:l:.::i
porta B.
':,a:,:a!&
Come sempre,
Organigramma tradotto in programma ':.:.:::"t{t)
per prima cosa fa-
Sw#sEwcxww
remo l'organigramma dell'enunciato proposto. Dato che stiamo eseguendo una simulazione, se sce-
Come possiamo osservare si prevede l'uso del glieremo le l'opzioni Animate, potrebbe passare diver-
Watchdog, anche se non del suo controllo, dato che so tempo prima che si verifichi l'overflow , quindi apri-
l'unico riferimento fatto al Watchdog è la sua confi- remo alcune finestre per farlo in un altro modo, senza
gurazione nel registro OPTION. Inoltre possiamo perdere dettagli.
vedere che il nostro organigramma si avvicina molto Da un lato attiveremo una finestra che ci indichi
a. queilo cne SarannL
^"^ll^ .h^ ..r-^^a lo i<trr rzinni,, dol nrr
--, r,Jgramma, in ogni momento il tempo trascorso: è la finestra
d,atn rhp i tro rinrradri :rrrchhcrn nntrto contenefe Window>Stopwatch. Ad una f requenza di 4 MHz, il
affermazioni del tipo: "inizializzare porta B a zero" , tempo che deve passare prima che il Watchdog vada
" Complementare porta A" e " Passare complemento in overflow sara di '1 B ms, pero saremo capaci di fer-
della oorta A sulla oorta 8". mare la simulazione in quel momento, per vedere in
Nel listato del programma si possono vedere che modo il programma inizia nuovamente?
chiaramente ognuna delle parti riflesse in preceden- Sicuramente no. Per questo utilizzeremo anche la
za nell'organigramma. Nella configurazione del finestra per tracciare il programma; in altre parole,
registro OPTION, gli unici valori che sono significati- questa finestra ci permette di vedere quando il pro-
vi sono ibit da 0 a 2, che pongono il prescale a 0, e 9rdililro po))o ptrr |
Iistruzione che ci interessa. Per
|
il bit 3 che assegna questo predivisore al Watchdog. fare questo utilizzeremo Window>Trace Memory e
ln conseguenza di questo, il Watchdog impiegherà Window>Program Memory. Nella finestra di memoria
circa'l B ms ad andare in overflow e a resettare il del programma dovremo selezionare il codice che
sistema. Dopo aver editato e assemblato il pro- vogliamo mettere sotto controllo, ad esempio la prima
gramma, faremo una prima simulazione, con il istruzione del programma "bsf STATO,5".
\^/-+-L,l^^ ur>or'uato (Options>Development
vv6LLruwg -ll--++i,, Cliccheremo poi con il pulsante destro del muose,
Mode>Configuration>None) per vedere meglio la ^^' {^'^
pcr -^^-'i'^ ur
rorc opvorrc "^ rlrenù contestuale. All'interno di
d iff erenza. questo menù sceglieremo la funzione di tracciatura
sge$ài$_&gx#*$*
*ffiL pffi*&$4&ffiM& l;l {=
Utilizzare l'opzione
Debug>Run>Animate per rry
simrrlarlo e senTa nreoccu- 2 0001 01só clrf gxó
3 CgsZ SqfF nouls 0xiF
parci dei valori che assume- b 8093 8985
:,r,r:.:*::gg$l 3ss
moesf ft5
nouls $rS
ranno i renistri osservare ,:,:,+..:lgg Smf
7 900ó 1283
Kvof 0!.1
bcf fr3,&(5
come vengono eseguite le I C007 S18ó clrf Bxó
ictrr rzinniil. 61656 616 9 0008 0905 cIcL0 coBf &(5,11
r)tr u4lvr uuvv Lr rE an+rr
cl lt l o 10 00Bq 088ó muqlf t*ó
nel cìclo, il programma con- 11 000n 2808 goto ClCt0
tZ g00S SFFF addlB 9:{ff
tinua a girare lì all'infinito.
,1:
Configureremo ora il -i
,l
simulatore per lavorare con
il Watchdog. Per il momen- =.:
to simuleremo solo la scel- .
te il software di scrirtura,
rinp rlirrheremo l'onzione ,:-:i'.i*
".:.
'.":
Options>Development :
Mode>Configuration>
WDT Chip Reset Enable. In
questo modo il programma
si resetterà quando andrà
Finestre da utrlizzare per la simulazione
in overflow il Watchdog.
$w$ffwwre
il#pég$q#il1#
ffiffiL W&Yflffi**ffi
Ora controlleremo il
Watchdog, in modo che non
provochi questi reset del
prog ra î ma. Per fa re
ouesto rtilizzeremo
l'istruzione "clrwdt": essa
cdrceild il \^/-+-l-J^^
--^-^ll- il
vvdrLnoog ognl
,,nl+r
vurLo -h^
Lr rE ',;^^^
vrcrE ^.^^' 'i+-
E)cvutLd/
evitando che arrivi al limite e
vada in overflow, menoa
che il programma sfugga dal
controllo in orresîo .aso il
%w#@wwww
Scheda dell,e istruzioni:
l'istruzione SLEEP
Dato che il ritmo, o velocità delle noulu 6xFF ; llovinento .lel ualúre iniziale
istruzioni, è scandito dall'oscillatore, n0!uf PoETAB : sulla Forta I
e nresto p fermo le istruzioni si fer- fICLB sleep ; I1 ricrocontroller entrà in stato di riposo
conf PoEfnB,l ; Si canbia il salore della Porta B
qoto CICLo
mano anch'esse, cioè non sono piu
EllD ; Fine del progranBa
eseg u ite.
Dato che le uscite del sistema
variano con ìe istruzioni, e queste
non vengono eseguite, le linee confi-
gurate come uscrte non cambreranno
,,.1^"^. r I rnc+nrrnnn r Programma che permane in stato di riposo
^i,,
Ptu votwiE, )E Etqttv o I rcJrcrorilr\/ d
S*#swswwe
Scheda detle istruzioni:
f istruzione SWAPF
ffiw#*wwww
Appli cazione pratica:
I'interrupt arriva dall'esterno
uando si impara a programmare bene con di due registri
i microcontroller, è normale utilizzare una molto impor- RSI
struttura in cui il programma principale tantr In questo
compia solo l'inizializzazione delle risorse, caso: INTCON
mentre nella routine di servizio all'inter- e OPTION. ùb RBt=l O
rupt si realizzi solo cio che si desidera dal pro-
(RSl) Nlal ronictrn
gramma. ll difficile non è utilizzare gli interrupt, ma sa- INTCON si ese- (X)-w lF-w
pere cosa fare quando sono generati. Pero e meglio guono le abili-
procedere a poco a poco, per il momento è sufficien- tazioni ai di-
w
te vedere un primo esempio di routine applicato ad un versr InferrupL -PA
orooramma. Noi lavorere- INTF=O
mo soto con
g*dYffiffim&ipY ffi& ffiffi*lxruY RB0/lNT. quin-
Torno
tultlizzo dell'interruot evita di dover testare continua- di dovremo
mente se si è verificato un determinato evento. Così il nrnihira irrtf i
Abbiamo un dispositivo
che permane in stato di
riposo sino a che un INTCON
utente non lo risveglia
premendo RB0/|NT.
Al risveglio, a seconda OPTION
del valore di RB1, si pone
laportaAa0oppureal.
Enunciato per I'uso di un interrupt Registri coinvolti nell' interrupt RB)/INT
$s#*wwr*
I
ORG 0
goro lNtzto
ORG 4 lndirizzo del Vector di interrupt
goto tNr
ORG 5
Programma princlpale
END
Programma proposto
$ep$Swrwryes
porta B come ingressi, dato che ab-
biamo bisogno di RBO e RB1, la por-
ta A come uscite per visualizzare il ri-
sultato delle operazioni da realizzare,
e i registri INTCON e OPTION (OPT)
per configurare l'abilitazione degli
interrupt e selezionare il fronte con
cui si produrranno. ll microcontroller
viene poi messo in stato di riposo
dall'istruzione sleep, e rimane lì, sen-
za eseguire l'istruzione successiva, si-
no a che si sveglia, al verificarsi di un
rnterrupt.
Un interrupt e un avvenimento
asincrono, quindi non si conosce il
momento in cui awerrà. Nel nostro
caso l'interrupt si produce grazie al-
l'attivazione del piedino RB0/lNI,
quindi sarà provocato dall'utente
lndirizzi delle istruzioni nella memoria di oroqramma esterno premendo un pulsante. ll PC
punterà all'indirizzo 4 e inizierà la
La novità è nel modo in cui il programma è orga- routine dedicata all'interruot. In essa si verifica rl valore
nizzalo, anche se di questo abbiamo già parlato nella del bit 'l della porta B, configurata come ingresso, e a
parte dedicata alla struttura generale di un program- seconda del suo valore, carica nel registro di lavoro W
ma. Per prima cosa, come sempre, bisogna decidere il dato 00 oppure 'l F, per poi passarlo alla porta A e vi-
che microcontroller vogliamo usare, e definirne le va- sualizzarlo. Prima di uscire dalla routine con I'istruzione
riabili. La prima istruzione del programma si posiziona retfie bisogna resettare il flag di questo interrupt a 0.
all'induizzo 0 della memoria di programma grazie alla Ouesto bit è stato messo a 1 nel momento in cui si è
direttiva ORG. Come elemento nuo-
vo però, abbiamo introdotto gli in-
terrupt e ìl vector di interrupt si trova
all'indirizzo 4 di questa memoria,
questo significa che quando si pro-
drrro rrn intorrr rni il Pl- nr rnf l : nr ra-
sto indirizzo snerando di trovare
un'istruzione della Routine di Servi-
zio all'lnterrupt (RSl). Per questo mo-
tivo dobbiamo mettere la prima r
c
sÈta08c6
ctBattcù
Ltsl P=1óF8{ ; oeFlnizlone del proce
ooatù0tt
assemblato. Notate che negli indiriz- ca*t9ù&o
súaú009&
zi da 1a 3 si trova il valore 3FFF, cio r S.fF i lorta B co* lngres
l:: : ::::'.. ::.,:. :: ..: :.,ìir.rl
significa che non ci sono istruzioni.
ll programma principale realizza
Finestre necessarie per la simulazione.
solo le configurazioni: imposta la
Swf*wmre
dati al sistema: Debug>Simulator Sti-
mulus>Asynchronous Stimulus. ln que-
st'ultima programmeremo due linee: la
RBO che introdurrà impulsi (Pulse) e la
RB1, che simulerà un interruttore (Tog-
sr-rsfr sr-rrft gle).
Simuleremo ora il programma in for-
ma di animazione. ll programma avan-
SFB NaR llex Dec 8ifiaru Ghùr - ; Porta î con
tÉ€ 3: 1 G€AgggS mulr È'fit8t!6€' ; Configorazioo zerà sino ad arrivare all'istruzione sleep,
prt s 15 6{àS111-l mqrf OPT
ùStisn_rÈg 1€ 54 *tèè8È45 & bcf STfiT0,s la eseguirà e si fermerà aspettando che
ciètus 1à :ú Agft*1€C
6g € &cca$€t úulr b'16a1cat€' ; Attiuazionr d si produca l'interrupt, mentre punta al-
ga € e€€488È6 *erf ll{fcol| ; trarite nBtal
s€ g a8àaa6€6
€à E €ASAAAEC l'istruzione successiva.
aF 259 lltl11:l
ledatè ÈA S EEtntq€C Prima di premere qualsiasi pulsante
eeccql Èg g egg$eg8e i Proqramma di lraltamento della interruzione ; sind al Fross
€eadr Èe € C565C€8C guardate il valore della linea RB1, e del-
€ecaF? *! 3 CggCg€A€
Sclath
idtcar
*g
9è lqà
à eSeàCS*€
16È1AA&€
la porta A, entrambi nella finestra dei
E
t{Ère
*3
5g
lqÀ
S
1g*lggeg
8ùSSCgg€ Z€É0 s{Iu t€ ; Si sposta 10
roni<tri qnorif iri Prpmotp il nrrlc:nfo
goto C{lt{fltltf
RB1 della finestra Stimulus e verificate
che ilvalore cambi. Se ha valore 1, pre-
mendo RBO, la porta A assumerà valo-
ll microcontrollore permane in stato di riposo in attesa di un interrupt
re 1 e se ha valore 0, premendo RB0,
assumerà valore zero.
verificato l'interrupt, così nel caso fossero previsti Premete ancora RBO. Vedrete che nella finestra di
anche interrupt di diverso tipo, consultando i f lag si programma verranno eseguite rapidamente le altre
saprà quale di questi si è verificato, dato che solo un istruzroni, pero non potremo verificare quali, comun-
flag sarà a 1. Inoltre quando si verifica un interrupt, orre vedremo che nella norta A si carirheranno va- Fv'
!v
'
l'abilitazione generale (bit 7 di INTCON) viene messa lori diversi. Per verificare isalti all'interrupt ferma-
a 0 automaticamente, e sino a che stiamo esequen- te la simulazione ed eseguitela passo a passo
do la subroutine del primo, non se ne potranno ge- (Debug>Ru n>Step). l
Sm$&wsxpm
tttttttl t:- ::t :t tt tttttt:tttttttttttl
fistruzione IORLW
;;
ilú
t istruzione "ior" o "or inclu-
ffi Srva realtzza la somma OPERANDO OPERANDO
m
ffi logica deoli ooerandi: il let- MNEMONICO FONTE DES1N44ONE
nU terale che sr accompagna al
ffi codrce deil'rstruzrone e rl
contenuto del registro di lavoro W. io, r'l* l ; ..'.,1(
Come nelle altre istruzioni dello stes-
so formato. il risultato si lascia nel Operozione: reolizzo l'operozione logico OR
registro di lavoro W.
Se il risultato dell'ooerazione è 0. fro un volore letterole e il volore
si attiva ll flag 7.
del registro di lovoro W
xsxwqx
e#ru rIs?RilAX$Ns ISnLW
Cicli: I
L"XSTRIJXS$MH X&KWT
L'istruzione iorwf è il secondo modo
di realizzare istruzioni di somma logi-
ca. Come mostra la figura, e secondo
il formato visto fino ad ora, l'opera-
zione si fa con i valori contenuti nei
registri della memoria RAM e quello
Funzionamento dell' istruzione iorlw del registro dr lavoro W. A seconda
Sw#*wrwre
',1:2
.r..irì:ì::ìli
,,.$
. iì:ìi.iì
i a r'w.f
,
r rìì:ì:
.'i:a
. :l::ì:ìl
delvalore delrisultato puo essere influenzato ilflag Z. Se fare con l'istruzione "bsf ", pero quando il numero dei .:
rappresentiamo graficamenle la tabella della verità delle bit aumenta, come nell'esempio dove vogliamo modi- a:.::.',:ÍÍj
istruzioni ior vedremo che e sufficiente che uno solo fir^aro J dpnli
vL:,|| R
v hit
v|1, cL nirr
|JIv
rnnvenicnle l'rrtilizzo delle '::lir::}!
.:
degli'interruttori sia chiuso (valore vero) per fare in modo maschere. ln questo esempio modifichiamo uno dei
che la corrente passi da un lato all'altro del circuito. bit a 1 e il resto si lascia uguale. t:l
:: a:,:c
Nel caso si desideri porre dei bit a 1 e altri a 0
ffiStrffiffig fl#8!$ $i'g$Yffi#gg*ruffi K*RW$ dovremo fare delle maschere successive con le istru-
Parlando delle istruzioni andwf e andlw, abbiamo qtà zioni "ior" e "and". '..,,:.tt
,::i.t
introdotto il concet- i:,ìF
-'vt::j5ll:li
to di maschere, e
abbiamo visto due
lmpostozionea-l dei 7 bit più..significElivi.di un registro
esempi. Però, a se- senzq influenzore quelli meno significotivi. ., ..:a:,:
lìl"sg$
Sw6*wwww
Appli cazione pratica:
quattro interrupt come uno solo
bbiamo già visto il primo dei quattro inter- Anrho nro<+:
rupt che si possono verificare in un volta il program-
PlC16FB4, quindi ne rimangono altri tre. ma principale è RSI
B,
vale a dire R84-R87. mo tutte le altre
operazioni nella
routine di inter- Attivo cicolino
wx %YW* mx &&4*Rffi3 rupt.
Quando uno di questi piedini cambia stato, cioè pas- l-nmo nnfoto
sa da 0 a'1 o viceversa, si attiva il flag RBIF, e il PC osservare, que-
punta il Vector di lnterrupt. Nella Routine di Servizio sta volta nell'or- Resetto ilflog
dell'lnterrupt, se l'applicazione lo richiede, si dovrà ganigramma
verificare quale delle quattro linee è quella che ha non siamo scesi
cambiato di stato, e se il nuovo valore è 1 oppure 0. a basso livello,
Questo sarà ancora più complicato se le periferiche )ut tu -+-+^LE l-
)Lo tó- Ritornq ,,
#&w&*wwx*
P=16F84 ; Definizione del processore
EQU 06
EQU OB
EQU 0
EQU 0
ORG 0
goto tNtzt0
ORG 4 ; Posizione del vector di interrupt
g0r0 INT
bcf 5TATO,5
;alla P0RTAA
retfie
Programma proposto
ììììiì:ì:
..,:: a:,:
,:,:,:::i
ì,:::*
Sw$*x*r*xww t:at t
iììì:ll
:ì:ìì
x*" pffi*ffiw&MM&
fl*fl$$3*_ffiY#
Come potrete verificare, il pro-
gramma è simile a quello già vi-
sto per l'interrupt RBO/INT. Nel-
l- ^-"+^
ra pdrre pflncrpate,
^":^-i^-l^ oopo aver
..J
ffi
Per 8Bll-RÉ7
1 J Je sfeep ; ttlcrocontrollore 1l
simulare un interruttore (Toggle)
goto HIEHTE ; nl rlentro dall'ln
-- _l | ; rltorna ln stato d, come nella figura, o un pulsante
.l tî. (Pulse).
Dopo aver attivato la simu-
Finestre necessarie per Ia simulazione
lazione, potremo, ad esempio,
$w#sxxswww
attivare la linea RB4. Vedremo
che si produrrà un rapido
cambìamento nelle linee dì
esecuzione del programma, e
che la linea che evidenzia le
istruzioni in corso tornerà nel-
la sua posizione di stato di ri-
poso dopo aver eseguito la
Routine di Servizio all'lnter-
-,,^+
rupr. -^-,,
comunque e
QUarcosa
^,,-l-^--
cambiato: nella porta A sono
ora indicati i valori della porta
B, e si e attivata la linea RA4,
il cicalino.
Anche se torneremo a clìc-
càre str R84 ne. rinorlarla alla
sua situazione iniziale, il cicali-
no non si disattiverà, anche se
il nuovo valore della porta B si
potrà vedere sulla porta A.
#YXA"ggX*
ffiKtil'3NYmgffiqiru
pffiK ffis&-*s3 TASTIERA
$w$sxwwww
*
Fj .,,
il
#*
ry
r- fistruzione XORLW
ffi
ry
F
u
sistono due istruzìo-
r:' "
ni di somma logica:
iì€ I la inclusiva "ior" , di
-,,i -t-Aì-,-^ ru ^;\ ^-.
LUr CUUrdr
*atttt: 9rc Por-
l-+^
tdLU c^ l- ^--1,,-i,,-
td ú)Ltu)tvd
::'-" , "xor", a cui dedichiamo que-
ste pagrne.
;' ,
I l^-
)uil il |d t^^t-^
u||d -^--1 ^.-t' '.1
tu9tLd c)Ltu)t-
;Sír va f ra due operandi significa
che uno e solo uno di essi puo
:. I{-.^ ilr'^ modo
E))CtC O I ^^-
pEr rdrc
che lo sia anche il risultato.
1., ,
r-
w....
ffi
Funzionamento
dell'istruzione xorlw
;' gsffi&,eFg
ffi e*$'* L'í5?HL$r-g#ru ffi K# ffi *-W
ffi
T.
L'operazione di somma logica esclusi-
a :::
:'::'- vd >tr9uc,^ ld
l. +.k^ll.
Lduclld -l^ll-,,^"i+ì
urild vcr ild ^l^ll-
uEild
-.. figura.
,,
':."" ' Nel caso di linguaggi che permet-
àr. tano piu di due operandr, il risultato
; sarà vero se esiste un numero dispari
di valori veri e sarà falso per un nume-
ffii ro uguale a zero oppure pari di valori
:'' veri.
E come se si realizzassero opera-
Sgi_!g$ìliìtlì:ì. zioni concatenate di istruzioni xor fra
Y.:l|LZ,,:,:., Caratteristiche dell' istruzione xorlw.
?ì.:i;2::,:: due operandi.
::-:-:
:: :
;
S*,p$l$wwry*
I
fistruzione XORWF
:!
'i*
iì:ì:
i
dendo valori da locazioni movf REG1,W
registro oppure in W, attivando il flag 5e REGI = REG2 il risultato sarà 0 e il flag Z passerà a I
Z in caso che sia zero.
Compara I'uguaglianza di un registro con un valore determinato
ilsfrwpt {fl}ru
t:3s?tr#tr,g*rutr H*ft
OPERANDO OPERANDO
MNEMONICO FONTE DESTINAZIONE Nell'esempio si mostrano
due tipi di comparazioni,
xorwf f d una fra registri e l'altra
il;;; ;;;;;l;*";; i;;;;;""' esclusivo fro un volore de,
f ra un registro e un valo-
re letterale.
Per entrambi si utiliz-
registro f e il volore del registro
za il registro di lavoro W
di lovoro W. Se d=0 il risultoto si .i porta
- cur
d -,,i sr ^^"+- ilil varore
,,-l^"^ Oel
loscio nel registro
nrimo rpoistro e in soqg j-
di lovoro W e se d=l loscio
to dopo averlo compara-
nello stesso registro f.
to con il valore letterale o
aon lrn :ltrn rpnistrn si
Cicli: 1
salta nelcaso che tlflagZ
Codice OP: 00 0t t 0 dfff ffff si sia attivato, cioe nel
Flog: Z caso in cui il risultato
valga zero, il che significa
#e+$i'&w,g*r*q*
Appli cazione pratica: [a EEPROM
'
avusa a[ termine delta scrittura
ome abbiamo visto nelle appli-
cazìonì mostrate sino ad ora, gli LIST P=16I84 ; Utilizziamo il PlC16t84
RADIX HEX ; 5istema di numerazione esadecimale
interrupt ulilizzaÍi bene evitano
dal ruvvrv
wLr l:rinrn:l ur nrnro<.^'^ l-
ld-
WR EQU I
VrvlLJJUIC, WREN EQU
t
sciandolo in stato di riposo o li- EEIT EQU 4
RPO EQU 5
bero di dedicarsi ad altre cose. Questo e GIE EQU
Sqp$Ew*xs*
se. Inoltre saranno molto utili la fi-
nestra dello stack e il clock di siste-
tttd.
le specifiche del costruttore, durante la quale si deve piu rapida (Debug>Run>Run) e fermarla quando il clock
inibire l'accettazione di interrupt, cosa che si ottiene di sistema segna un po'più di 10 ms, in quel momento
mettendo a 0 il bit GIE di INTCON. Terminata questa all'induizzo 03 della EEPROM dei dati deve aooarire il
prima scrittura si può tornare ad accettare gli interrupt valore 27.
riportando a 1 questo stesso bit, e dare I'ordine discrit-
tura. Quando termina la scrittura della EEPROM si &rF g_tf,éx:i*ru # pffi,eYxt&
uscirà dallo stato di riposo grazie ad un interrupt, e si Una volta visto come f unziona l'interruot oer fine scrit-
passerà ad eseguire la corrispondente Routine di Servi- tura della EEPRON/. integriamolo in un programma ri-
zro dell'interrupt. In essa eseguiremo solamente il reset ferito ad un'applicazione concreta Come si puo vede-
dpl fl:n di fina <rrittr rr: o dal hit rho normatro
vrrrrrLLLL
flro<r2
9vuJru re tutto si complica poco a poco. Guardate l'organi-
scrittura, prima di rientrare. Usciti dalla routine di inter- gramma nella pagina successiva.
rr rnt si eseore l'istrrrzione successiva alla "sleeo". la Dopo la configurazione della porta B come uscita
"return" con cui si esce anche dalla subroutine e si va nor mn<tr2ro il v:lnro della EEPROM, della pOrta A CO-
alla fine del programma. Nello schema sono riportati i me ingresso per inizializzare la EEPROM, quindi con la
salti che si producono lungo ìl programma. Al momen- somma di nuovivalori, e con l'abilitazione dell'interrupt
to della simulazione dobbiamo aprire le finestre dei re- per fine della scrittura, si arriva al blocco principale del
gistri speciali, quella della EEPROVI e il programma in programma. ll passo seguente sarà mostrare il valore
Preparazione delle finestre per la simulazione del programma Finestre dopo la simulazione del programma
Se*SÈwq*rcf
della EEPROM. A
5i vuole utilizzare la memoria EEPROM -^-^^,1-
)cLU|Ud -^ .;
)C )t À -l
C Cr-
dei dati per memorizzare la raccolta
settimanale di un autobus. l'inizio della setti-
All'inizio della settimana l'utente comanda mana o no, si ini-
con un intenuttore l'inizializzazione
della memoria, A partire da questo
zializzerà il valore
momento ogni impulso introdotto della EEPROM, il
da un pulsante indicherà il pagamento rho <innifir: crri-
di un nuovo biglietto che si memorizzerà
nella EEPROM. Ad ogni inizio giornata vere in essa un va-
all'accensione del sistema venà mostrato lnra zarn ln qonrrì-
per un periodo di tempo il valore
to si entrerà in un
memorizzato all'interno della ElPROM,
famite deidiodi LED, ciclo infinito che
incrementerà il va-
Enunciato del programma proposto lore della EE-
PRON/ ad ogni
nuovo passeggero, sarebbe a dire ad ognr impulso su
.,^-
Ulld llllcd
r^il- pul
r;^^- UCIIO ^^.+- ^
Si rrscirà da yuLJtv
Lo n. Jr orresto !r\
ciclo con un
reset di sistema, o quando si toglie alimentazione al
medesimo. Dato che ogni nuovo valore è scritto nella
EEPRON/, i dati non andranno persi togliendo alimen-
tazione.
Passando al programma in assembler bisogna fare Organigramma del programma proposto
W EQU 0
F EQU 1
RD EQU 0
WR EqU 1
WREN EQU 2
EEIF EQU 4
RPO EQU 5
EEIE EQU 5
GIE EQU 7
STATUS EQU 0x03
PORTA EQU 0x05
PORTB EQU 0x06
EEDATA EQU 0x08
EEADR EQU 0x09
INTCON EQU OXOB
EEADR_VAR EQU 0x0c
EEDATA_VAR EQU OXOD
TRISA EQU 0x85
TRISB EQU 0x86
EECONl EQU 0x88
EECON2 EQU 0x89
ORG 0 ; ll programma inizia all'indirizzo 0
goto tNtzt0
ORG 4 ; Vector di interrupt
g0r0 INTER
ORG 5
lNtzr0 bsf STATUS,RPO ; Banco I
clrf TRISB ; Porta B usrita
Sw$sx*sw**vm
r--rrl>
movlw 1F ; Porta A ingresso
movwf TRISA
bcf STATUS,RP(} ; Banco 0
m0vtw b'11000000' ; Abilito gli interrupt
movwf INTCON
SCRIVI EEPROM
movf EEADR_VAR,W ; Porto l'indirizzo sul registro
movwl EEADR
movf EEDATA_VAR,W ; Porto il dato sul registro
movwf EEDATA
bsf STATUS,RPO ; Passo al banco I
bcf INTCON,GIE ; Disabilito gli intenupt
bsf EECONl,WREN ; Abilito la scrittura
movlw 0x55 ; Inizio la sequenza obbligatoria
movwf EECON2 ;di s*ittura
movlw OXM
movwf EECON2
bsf EECONl,WR ;Ordine di scrittura
bsf INTCON,GIE ;Abilito gli intenupt
sleep ; Entro in stato di riposo
; da cui uscirò con un interrupt
return
END
Sw#*wwrx*
Àil"
w-
;*
#,,
-.".'
iffi
ffi1Lì:rl
3''-
a:-
1_i;
J-.
ffi&
*:l{.
fistruzione RLF
trI.
q,r;
il..
tr:'
ffi*"
w
ì
F.,
ffiffi. ,
K1--' :
ffià.. ,
m:"
ì\---.,
l
ffi,- OP:
€odice 00 I 101 dfff ffff stra, frno ad l'esempio seguente: moltiplicare per due un numero e
Ki" Flogs: C
una progres- la stessa cosa che sommare questo numero a se stesso,
a& r-:
3t+:"-""
sione di luci oppure ruotare a sinistra di un bit il registro introdu-
ffiE"ì,,
Caratteristiche del l' istruzione rlf LI
-^^ -t
IC )I OLLEII-
^--^^ cendo uno zero da destra. Provate ad implementare gli
dono
ffi
ffi:::: pre
sem-
da
esempi in MPLAB, e verificate come funzionano con la
loro simulazione.
W+
:RA:::
REGISTROf .J^-+.-
uc)Ud d- -i^i
)ilil-
ffi. stra. Pero
F.-... "
ffi.:,
ff,::: oltre a tutto reql=OOtOlllO r 0OIOlllO
;'". Volore inizidle registro e
l0t I I101
questo, la rlf x2 - oolottlo
{r-t-:
P;. """ I Volore inizioleC:
rt nórmó++ó
vL, ,ì,r Lrr otol I too
tg'-: r
*:-'l 0 di imple-
tl
#, Volore iniziole dopo I'istruzione rlf f, menlare ra
tr:
:L 1:
0l I I 10r0 rlf reg I ,F otor r 100
moltiplica-
:
ffi',
ffir::
ffit.
r
Volore di C dopo I'istruzione rlf f,
I
1:
zione dei
ff:' numeri bina-
#:, Fu nzi ona mento del l' istru zio ne rlf .
ri. Guardate
Moltiplicazione a base di rotazioni
ff:'
ffi
ffi{, -
Sw$*wwwm
ffi
fistruzione RRF
i
nove volte la rrf si torna all'istruzione iniziale. I
Sw#&wsxlwse
Appli cazione pratica: sim ulazione
del primo programma
upponiamo, a questo punto, di non avere lampeggia. Le linee di alimentazione, del quarzo e del
dubbi sull'utilità del TMR0, sia per il modo reset, non sono riportate perche si danno per scontate.
temporizzatore che per il modo contatore, ne
sull'uso di interrupt; vediamo quindi i vantag- rffigFg# **q#erugffiffiÉqffi&3&
gi derivanti dall'utilizzo contemporaneo di Nell'enunciato dell'esercizio non si dice nulla sull'obbli-
entrambe queste due risorse. Qui sotto proponiamo un gatorietà di lavorare con l'interrupt del TMR0, pero
esercizio in cui, fra le altre cose, il TIVR0 provoca un nelle figure seguenti ne dimostreremo la convenienza,
rnterrupt quando termina la temporizzazione che avre- confrontando lo stesso esempio senza interrupt.
mo programmato per esso.
*ó. RAO=l?
Sqp$#www*
Come si può vedere, le azioni sono prodotte in
modo sequenziale. Un lampeggio corrisponde ad
accendere un LED, attendere un certo tempo, spegne- RSI
re il LED, attendere nuovamente lo stesso tempo, tor-
nare ad accendere il LED e così via. Se il programma
dovesse solo far lampeggiare un LED, questa sarebbe la
sequenza infinita da realizzare. I ritardi sarebbero chta- Cqmbio il
mate ad una subroutine realizzata dal TMR0, poì biso- vqlore del LED
gnerebbe aspettare che termini il conteggio per conti-
nuare con ilprogramma. Nel programma pero, si
richiede anche dr riflettere lo stato di un interruttore
mediante l'accensrone o lo spegnimento di un LED, e lniziolizzo TMRO
questo va fatto prima o dopo il lampeggio, ma in ogni
caso in un momento diverso. Se decidìamo di utìlizza-
re il TMR0 con interrupt, il prìmo organigramma si divi-
de in due: uno con le azioni che riguardano il pro- Resettq il flog
gramma principale, e l'altro con le azioni da compiere
nella routine di interrupt, quando il TMR0 va in over-
flow. Secondo questo organigramma si verifica conti-
nuamente il valore dell'interrupt per accendere o spe-
RifornE
gnere il LED corrispondente, e nello stesso tempo il
TMRO conta, per far lampeggiare l'altro LED ogni 50
ms. Le azioni quindi non sono sequenziali, ma simulta-
Organigramma della routine di interrupt.
nee. e solo ouando ilTN/R0 termina di contare siferma
flse$$:Ks&"$w&KK*NH
sffis $qffisKsYffix
Dopo aver analizzato i vantaggi di
Secondo organtgramma dell'esercizio proposto
lavorare con interrupt, concentriamoct
$wSSw*wvw
-*''"'l
UST P=16F84 ; Utilizziamo il PlC16F84
RADIX HEX; ; Sistema di numerazione esadecimale
movf PORTB,O
goto ctcL0
goto ctcL0
END
$*$swrssww
dello stato dì RAO; il programma
rimane all'interno di un ciclo infinito.
INTCON
5g$4iliLSaH$*ruffi
OPTION
*flL Fà$q##ffi&$,tSiB&
Per la simulazione ricorreremo ad un
CATCOLO DEt VALORE DEt TMRO
nirrnlo tnÍ'co' ,anrite le finestre del
listato del programma, dei registri
99",n:=*l-9","Q9.".o,ui*"*..*."",,-.-..-"-".- Jrg:fgln-q:-ig"ls,J-n!sr"g-lg*d!,-.-..--.--..-. specif ici, del clock e quella per l'intro-
50.000/25ó= I 95,3 I 25= I 95 Volore che si vuole contqre. duzione di stimoli asincroni, quindi
l_L0"99".qu* _ Volore che si vuole conlore in binorio. configurate la linea RBO come inter-
rr rrfnra (imrrl:to l'nnu i611g di anima-
00t I r r00 Complemento o 2 del volore do coniore,
001I I l0l do inserire nel TMRO. zione e verificate che al variare del
valore di RAO, lo faccia anche il bit 0
delìa porta B.
La verifica dell'interrupt nvece è
Registri necessari nel programma, con i relativi valori piu complicata: dopo un po'di
tempo la finestra del clock indica
sulla realizzazione del programma. Nella figura sono appena qualche m llisecondo, e come ricordiamo il
riportati i registri necessari e il valore che assumono. TMR0 è stato impostato per far variare RB'1 ogni 50 ms,
Sarà necessario configurare l'rnterrupt del TMR0, abi- che a noi paiono pochissimi, ma per ìl simulatore signi-
litando il bit GIE e ilT0lE del registro INTCON. Se le tem- ficano diversi minuti. Fermate quindi la simulazione e
porizzazioni saranno di 50 ms, potremo caricare il divi- utilizzate la finestra di "modify" per cambiare il valore
sore di frequenza con un valore di 1'.256 e giocare con il di TMR0, impostandolo vicino a l'overflow" Tornate a
valore che deve contare il TN/R0, che sarà 195. Ricordate simulare iì programma, e verificate che di lì a poco RB'1
che una cosa e quello che il TMRO conta, e un'altra e il cambi di valore.
valore con cui bisogna caricarlo per farlo così contare. Tornate a modifrcare il TN/lR0 nello stesso modo se
Bisogna prestare attenzione agli altri parametri del regi- volete far commutare nuovamente RB1, oppure arma-
stro OPTION. oer fare in modo che il TMR0 conti come +^,,, ^--i^^-- E^ r-.-iltelO
^ri VOZtCtt4O
LCVt Ut rO)Lr( evOlvere da SOlo.
voglramo
ffffi#ffiffieffiffi& ffifi'.=jF]=
SFB Ndme
::.'..,:...,' ::.=ltrJnJ
Hex Dec Bitrary :
:,
n
lFl
t tiuo
Dopo aver visto i preliminari, passia- tm-$
ù41
1g
13
1ó
2?
€861 8{69
g6E"l-r911
per Tt'll
Se#sw"*swrw ttat,all:aa,aaaaarallrNrAij';',f:::::::::;::;:ì:ì;:;llllllttatai,é&&atirflllllrrrlìììi11111r!1ììììììd;1irrrrril$lllrllììììrrìrì
,4.: ) .:::
:.;,:.:
,::a:.:.:.:...
'::::.,:"': '
opo aver visto tutte le istruzioni, il loro funziona- utile al "nornento dr prograrnmare, dato che raccogle
::,,:'::',
r::i,:. :. mento e il modo di utilizzarle correttamente, gli aspetti fondamentali di cui bisogna tenere assoluta-
l'.i'.:..
:.-' .:..
nrespntramo rrn riassrlnto che risulterà molto menle conro.
ATTIVAZIONE
:ì:i:
::ì1.::a:: ì
MNEMONICO: PARAMETRO SPIEGAZIONE
DEf
,FLAGS
i::,,,.ì,Ul
lstruzioni che gestiscono regisiri
oddwf t.l ì SOMMA W con f (- f\t^ -7
ì OOh INDF
, 0rh TMRO
a2h PCL
FSR
:
07h
08h EEDATA
09h EEADR
0Ah PCLATH
B0h INDF
Blh OPTION
ótn PCL
B4h FSR
B5h TRISA
Bóh TRISB
87h
_1
l^rh
8Bh EECONI VVK KU
:l
B9h EECON2 ;
BAh PCLATH
sori delle porte: RAO mostrerà quello di RB4, RA1 quel- azioni corrispondenti
lo di RB5 e cosìvia. Questa scelta, anche se non è obbli- ad ogni interrupt, a
,-l-
ud ,,^/r^
gatoria, facilitera la programmazione. Collegando il ---ki-"^
LdI tutdtc urr ov- Organigramma del programma
cicalino su RA4, potremo configurare la porta A come ^li---;^^^
pilLdztu|c -,1 ,,^,-l
du ur or- pri n cì pa I e d el l' esercizi o p roposto.
uscita, e la porta B come ingresso, facilitano così ulte- tra. Vediamo l'or-
riormente le cose. Dovranno essere collegate anche le ganigramma corrispondente ad ogni interrupt per il
Sw6*wwryw
stato lui a provocare
lnverti volore cicolino l'allarme, quindi spe-
gnerà il cicalino. Non
o "iTl- É dobbiamo dimenticare
Per84-ù7 lniziolìzzo TMRO
che, se non facciamo
a '-l;! ÈÉ
nulla, il TMR0 conti-
nueraacontareead
'."T11,ff*' o ,ilià, ffi Organigramma per il andare in overflow,
trattamento
pt per
producendo interrupt e
del l' interru TM R0
Troft l'inÈnuÉ
per TMRO
trofro l?i.tèrrupr
pèr EIPNOM tornando ad accendere
e spegnere il cicalino.
Dovreno quindi disattivare gli interrupt per TMR0,
per fare in modo che non se ne producano più.
Faremo la stessa cosa
per glr interrupt su
Sw#*wwww
Lt5 | P=16F84 ; Si utilizza il PlC16t84
RADIX HEX ; Sistema di numerazione esade(imale
WR EQU
WRTN IQU
EEIF EQU
UIE EQU
RBIF EQU
INTF EQU
TOIF EQU
RBIE EQU
TOIE EQU
W EQU
I EQU
RPO EQU
INT
-
;Programma di trattamento dell'inten-upt
btfsc INTCON,RBIF
q0Io T_RB4_RB7
6tfsc INTCON,INTF
00t0 T_RBO
6tfsc rNTC0N,T0tt
goto T_TMRO
g0r0 T_EEPROM
Sw$*qesqxvw
$3U Lr i""èAt*f1i il t3il g_ í?fr*sHe,&l.Ì.À
Nella simulazione, come sempre, dovremo aprire una
serie di f inestre per vedere come viene eseguito il pro-
gramma. Utilizzeremo l'opzione di animazione per
poter simulare l'apertura di una porta e vedere come
viene mostrata l'informazrone istantaneamente sulla
porta A, oltre all'attivazione del cicalino
Per verificare la scrìttura dell'informazione nerra
EEPROM, dovremo attendere piu tempo, cost come per
vedere cambiare valore al cicalino. Quando vorremo,
ootremo Oremere RBO e osservare come l'allarme cessi
di essere oneralivo anche se continueremo ad :nrire p
Un momento della simulazone
a chiudere le oorte.
movf INTCON,W
andlw b'11f10000'
movwf INTCON
hsf STATUS,RPO ; Passo al banco 1
bcf EECONI,EEIT ; Resetto il flaq
bcf STATU5,RPO ; Passo al banó 0
retfie
btfss 5CRrVr,0
g0r0 ctcL0
g0r0 SATVARE
movlw 00
movwf EEADR_VAR
swapf PORTB,W
movwf EEDATA_VAR
call SCRIVI_EEPROM
g0r0 crcL0
END
Sw$*wwrsp
Gti organigrammi delle
subroutines e degti interrupt
gni volta che si pianifica un nuovo program- che abbiamo l'esperienza di diversi esempi, conosciamo
ma, la prima cosa da fare è realizzare un tutte le istruzioni e Ia struttura della programmazione
nuovo programma. Alcune volte è stato con rl PlC, possiamo arrivare sino rn fondo a questo utile
fatto quello generale, in modo piu o meno strumento che sono gli organigrammi.
dettagliato, altre volte quello delle routines
di servizio all'interrupt. Pero non è mai stato specificato fl*se f4&sfl*$i,g {3ffi t$ ru #ry#eeé3#ffi&r4ffie
nulla per quanto riguarda la realizzazione congiunta, né Nella sua presentazione abbiamo già visto che un orga-
sono stati fatti gli organigrammi delle subroutines. Ora nigramma è formato da rettangoli e rombi uniti da frec-
ce, e che queste devono seguire delle norme perche il
tutto risulti sintatticamente corretto.
Questo pero non basta, perché a partire dall'organi-
€onfigurozione gramma principale, da quello delle subroutines e da
PA ingresso quello degli interrupt si dovrà poter passare al codice
PBO ingresso
RBI -RB7 uscite
assembler quasi automaticamente. Questo tipo di cor-
interrupt rezione sarà la semantica.
Ogni rettangolo si trasformerà in diverse istruzioni
assembler o in una sola istruzione "call", da cui deriverà
una subroutine.
La scelta fra una cosa e l'altra dipenderà dal livello di
blli RAO=l? NO goio complessità del programma, e dalla ripetitività o meno
delle azioni da realizzare. Nel nostro esempio, mostrare
un numero su un display o realizzare un ritardo sono
qtrnrltrn7p mnltn r iilizzale nlindi l'rrsn di sr tbroutine e
adeguato per presentare il programma in modo leggi-
bile, e per risparmiare codice, evitando la ripetizione
Mostro O su PB ccll disploy delle istruzioni.
I rombi a loro volta si trasformano in istruzioni di
salto condizionale: btfss, btfsc, incfsz, ecc. dopo le quali
Ritordo coll ritordo si posizioneranno due istruzioni "goto", una per ogni
ramo del rombo. La presenza degli interrupt è dichiara-
ta nel primo rettangolo, pero in nessuna parte dell'or-
btfss ganigramma troveremo la chiamata alla routine di ser-
vizio dell'interrupt: ricordate che un interrupt non si
RAI =l? NO chrama.
s_919
ti#$q#r g
&wet&{'& & #f €_1f s{.$ f ge#{.}Tgr f s
A prima vista, l'organigramma principale e quello della
subroutine sono simili.
Traduzione automattca
Si differenziano solo nel primo e nell'ultimo rettan-
di un organigramma in codice assembler.
golo.
S,ep#&e*e'www
medesime dell'organigramma principale. Possono
essere utilizzati sia gli organigrammi che le subroutines,
€ONT- I5
anche se non sempre sono necessarie.
INTQON(2) *O
RSI
CONI + CONT-I
Scrivere registro
dq modificEre
CONT=O?
o Determinqre ls cousq
e risolvere
Tornq
$w$s'*wwtrw
Applicazione pratica:
uscita dal modo di riposo
ffi bbiamo gia dovuto
,w.
WW flcorrere a questa pre-
ffi ffi ziosa risorsa (il modo di
riposo) quando abbia-
ffi
W %m mo lavorato con gli
interrupt, come modo miglrore per
lavorare con essi. Bastava porre l'i-
struzìone "sleen" ner entrarci e ave-
vamo diverse forme per uscirne. Si
ulilizzava nei casi in cui il processore
doveva rimanere inattivo durante un
periodo indeterminato di tempo. In
questo caso ci occuperemo dei due
bit situati nel registro di stato che
serviranno per determinare qual è
stata la causa che ha portato il pro-
Schema elettrico dell'esercizio Droaosto
cessore rn questo letargo.
SaS*wsr*
che saranno rivelate quando il
Configurozione
Watchdog andrà in overfìow. Se all'i-
RA4 ingresso nizio del programma si verificherà il
RBO ingresso valore del bit TO#, ed esso corrispon-
RBTuscilo de a 1. sapremo che si è arrivati a que-
TMRO
inferrupt RBO
qtÒ nrrnto ner rn overf low del
WDT Watchdog e non per l'evoluzione nor-
male del programma. Nel nostro caso
capiterà quando si tarda troppo
tempo a contare il gruppo di 10 pezzi,
oppure quando si tarda troppo a pre-
mere il pulsante dopo aver terminato
TO#=O? Accendere con tale gruppo. Una volta attivato, il
cicqlino
cicalìno non si fermerà sino a che non
si inizializzera il sistema, e questo farà
cambiare il bit TO#. Per quanto riguar-
da l'interrupt di RB0, serve unicamente
per fare in modo che il sistema esca
dallo stato di riposo. quindi il suo orga-
Spegnere cicolino nigramma contiene solo le istruzioni
iniziolizzore TMR0
principali. Visto che configuriamo solo
questo interrupt. quando si produce.
non dobbiamo ricercarne la causa.
ffi$q#ffiffiSe&4ffie
TOIF#=l? ll programma si risoìverà come ripor-
tato nella figura. La configurazione
rappresentata nel primo quadro del-
l'organigramma si risolve con i corri-
spondenti valori in TRISA e TRISB per
,--- -f usctra, e con
lo nnrio rli innroccn I
Sw#swwws
LIST P=1 6t84 ; 5i utilizza il PlCl6t84
RADIX HEX ; Sistema dì numerazione esadecimale
goto ALTARME
END
terminato di passare davanti al sensore. L'interrupt passaggio der pezzi e il pulsante di messa in marcia del
ner RB0 si confrorrra a sua volta con il fronte di sistema; notate che abbiamo aggiunto anche la linea
discesa, e si disattiveranno le resistenze di pull-up. ll di reset del microcontroller, per poter osservare una
resto del programma e una traduzione quasi imme- cosa molto particolare che commenteremo più avanti.
^l; -+- -l^^li
urdrd ueqil orqdf
^"^-^;^".ìrqrdmml. Tramite la finestra dei registri faremo attenzione al
vaìore che prenderanno i bit TO# e PD#, oltre all'evo-
SgSli Lè;.:** g ilsil1 F**Sffi&$j$ H& luzione del TMR0 e all'atiivazione del cicalino. Non
Per realizzare la simulazione in questo caso dobbiamo dimenticate di assicurarvi che il Watchdog sia attivato.
aprire le finestre degli stimoli asincroni, per simulare il Eseguite il programma con l'opzione di animazio-
li*$È:ars*r*
dovremo, come gia altre volte, aspettare
troppo tempo, trattandosi di una simulazio-
ne. Per questo utilizzeremo un trucco: cam-
bieremo il valore del divisore di frequenza,
mettendo in OPTION il valore ''l 1 1 1 1 000'.
Dovremo nuovamente assemblare il pro-
gramma. Eseguire un'altra volta I'applicazio-
ne, però in modo rapido (Run) e questa volta
non cìiccare il pulsante RA4. ll Watchdog tar-
derà l'aoorezzabile cifra di 1B ms ad andare
rn overflow. Prenderemo la finestra di clock e
fermeremo la simulazione, nuovamente, per
vedere i risultati. ll programma deve rimane-
re nel primo ciclo, e se si manda di nuovo in
esecuzione con l'animazione vedremo che di
Preparazione delle finestre per la simulazione
lì non esce. fO# (bìt 4 del registro di STATO)
ciclo fino a quando non faremo 10 doppi clic qEh_q € ?s rirrth nd$ ùFa i q*ia. È
stE € a ffin d rna i èl sals
a m
sul pulsante RA4. Se si configura la linea Fr.-affi
hlr.
Fs
il
àa i*
rù
tm
bEs
St.
kf
lFl$,talf
Èaclo
t*tq.tala
ituE.
ì h" -+tt:
ì s, Fs.tt
H$-tffirl -lfi ::
aq
come pulsante, invece di interruttore, baste- *trtam::
@i a a m ùlÈ
Ft.
a *
ranno la metà delle oulsazioni. Osservate che N
Ffl
shF
-
-É
ra
a
r* '
ffi
ffi
tù.È
#:
ogni volta che si realizza una doppia pulsa- *
thrÈ
9a
s
l*
5
rFE
ffi
zione si incrementa di 1 il fMR0. Si arriva così
i*d::-.-..:... ,. .:. : d.€
allo stato di riposo, momento in cui cambia il
valore del bit PD# (bit 3 del registro di STATO)
passando a 0. All'inizio del programma era a
1. Dopo breve tempo, cliccate RBO, vedrete
che il programma inizia di nuovo. Se ora
Programma in stato di allarme, dopo che è andato in over-flow il Watchdog.
vogliamo verificare l'overflow del Watchdog,
$of*rrr:re
File di intestazione
eLfl#rux rg*_fr
ffig Xà*Ytr$Y&Xg#f'*tr
Nel p'l6F84.inc, così come è
mostrato nella figura, appaiono le
definizioni sia dei registn specifici,
che dei bit particolari di questi regi- Un frammento del {ile di intestazione del p16FB4.tnc
stri. Si può vedere il contenuto
completo aprendo il registro trami-
te MPLAB, come qualsiasi altro file.
L'uso dei file di intestazione ha il
vantaggio di risparmiarci il Iavoro
per definire le variabili più comuni ; Bloócr d€l1s €tl,6h€tte
^^^i ,,^l+^
ognr vorra cne sr +-
-A^ -; ìd ,,,
un pro9ramma, : c$Locx KEY-lrÈ& ; IrLzlo delle qariètllt
TÉS1g
ìnoltre migliora la chiarezza neìla :
:
kEY_1
REVz
, t{Év_sE|.*9_1
lettura. Con l'uso di file di intesta- :
:
xev-aEL*Y_2
IEMP,I
zione standard, si facilita ìa com- Elsc
ffiw#&wwv*
j,iiÈ3$
. .: .: i:i.tr,,:i
..'
I
"::
: .:.:.:i3
.,:::i:*S
. :.:.,ì:
conto, comunque, che nei file utilizzati nello stesso caso dei file di intestazione che definiscono i registri del ...;,;ali*
:ara:ta
programma, non devono coincidere def inizione e microcontroller, prima di INCLUDE bisogna definire il
.a.:a'.:..#
,.'.:.:::.:ì
subroutine. proprio PlC. Per fare in modo che il file venga trovato ': r :::ìl*
:.::::i#
al momento di assemblare il programma, deve essere
g-'#S* #il3 ilXL$r *X Xf*Yffi$Y&Xg*r4*i nella stessa directory. Se osserviamo come si carica il
:.:,t:r,è
:iì:]:!li!i
':iNÈ
L'uso dei file di intestazione è semplice: dobbiamo solo file nella memoria di programma, vedremo che si ottie- , ,:,::ì*
porre una drrettiva INCLUDE nel programma principale ne lo stesso risultato copiando direttamente il fìle al
.:.;
::
e, in seguito, il nome del file fra virgolette doppie Nel oosto della direttiva INCLUDE. ;=]
:' :i:iil**
::.a.aa:,,+?l
'':"'r::"':
:t;i&
:,.a,
::::a
LISI e-l6Ft+* ; Eefinlziotre del procFÉssre i::i
__ .iì:iìtl
caxt €{u ge ':iì:rr:iìri:ia:
...ti:ìÈ
ffv_qnR EQr, 6s ; Uàriablli detli tègtiera
o*f 6
gote llJIZI0
:
:::::::
; Ptsoqraffia prlilcipale -'l
'I 't.i:nì
...:ì:iìr*
i::ii:
.::€:
'.
:. ...:.,:ttaa
.'::::.:*
.ììt,,]rt::::it
,.:::::::,::,,,:*
.,-a
.:a:aa
: l
':a:aa:,4
I :,:ì;ii:
::t.:t:u:::
:
'':ii:l$
''. ìitììi.tiì
. a::::::
..:.4.:a:a*i
. :.4..1:aia
..,
: .i::i3f
:::::5F
. trit:sl
' 'lrl:::i:É:
Esemoio di come si carica un INCLUDE
'.,'.:,,:.tt:
nella memoria di programma.
' :ììììììiìir:tt
' . ìììì:ìrìri:iul
Sqw$$*lw*swsw .:*$i*
-':'':l- :
Apptica zione pratica: raccolta
dei dati tramite la tastiera
e finora avete trovato nteressanti i
------J
plici. COTONNE FITE
{uscrTA (rNGREsso
DEI TASTI) DEI TASTIì
Se*S*n*sesr*
tltr(lNc*Ess0 subroutine, per attendere che il tasto venga rilascia-
TAsTo RM Rmcot*?)Nt$ìt*[o CODICE HEX
RB7
"-ì'-ì-'l-" ..l- - 0-- *î..: *'""7D--..' to. Nel nostro esempio non importa quale sia stato il
i---0..: ò-'--i -".-í
tl0 1 I 0: EE
tasto premuto, dato che il procedimento sarà sempre
lt0 I 0'l li ED lo stesso: si attiverà il cicalino, per un periodo di
ri0 0 t:
temno p noi si inizierà nuovamente con la stessa
EB
ì0 I I 0; DE
ì0 I 0 t: DD
ì0 DB
seq uenza.
0 BE
0 BD
0 I BB s{_ rx$_fr ffix €ffi&YY&rusruT#
0 I 0
0 I
7E
7B
$3fr&-L& €&Sggft:$Cs
0
I
I
0
0
0
77
87
ll codice presentato nella figura, potrebbe apparire
l I 0 0 D7 strano se confrontato con i programmi visti fino a que-
I I I 0 E7
sto momento: non ha direttive, né inizio, né fine.
Codice associato ad ogni tasto di una tastiera esadecimale. Questo perche nor si tratta di un programma comple-
to, ma di una serie di routines, nel nostro caso due, che
saranno memorizzate come un file a parte, e saranno
tasto. Nel programma di gestione della tastiera si avrà incluse nel programma principale.
un'esplorazione della tastiera approssi- Queste routines avranno bisogno
mativamente ogni 20 ms anche se, sia di variabili ausiliarìe, Ia cui definizione
CONFIGURAZIONE
il tempo sia i codici, possono variare a PB Tosliero si fa all'inizio del file. Dato che si trat-
seconda del modello e della posizione Po Cicalino ta di un file di carattere generale utiliz-
dei tasti. zabile in qualsiasi programma che
impieghi una tastiera, non sl conosce
p$a#ve ffix F{_$
g\$x$ffi fq&ffi ffi $\*Y* la prima posizione libera del program-
Esploro tostiero
L'uso della tastiera in un programma, ma principale in cui collocare le varia-
sebbene non comporti complicazioni hili
uilr, norriÀ
prrrrv <i
Jr tiilìzzo".
uLilr44clq l:Io nliratfirr:
ullgLtlvo
senta l'enunciato proposto, si possono rorr> Ai rrn f îctn nrómr ri^ nor
|/s,
rr ri ìLla
!u,
Attivo cicolino
differenziare due parti: l'esplorazione attiva una ad una e raccoglie il risulta-
della tastiera e le azionr dopo la rileva- to delle colonne. Se il risultato di quan-
zione di un tasto. ll tasto si configurerà Ritordo di I secondo to inviato e ricevuto è diverso, significa
come e stato spiegato in precedenza, che è stato premuto un pulsante, e la
inoltre si abiliterà una linea di uscita per Disottivo cicolino routine fornirà il codice del pulsante
un cicalino. La scansione della tastiera premuto. Se testando le quattro file
verrà inserita in una subroutine. Nel non si rileva nessun pulsante premuto,
caso che questa fornisca una risposta la routrne fornisce il codice OxBO.
Organigramma
affermativa, e cioè che è stato premuto u nciato proposto
del l' en
L'altra routrne si assicura che sia
un tasto, si fara una chiamata a un'altra stato premuto solamente un pulsante.
Questo e necessario perche nel tempo
in cui noi premramo una volta il pulsan-
tratta di verificare il corretto collegamento della tastiera.
Si
Per questo ogni volta che si preme un pulsante si genera un bip tramite un cicalino piezoelettilco.
te, il programma riesce ad esplorare
diverse volte la tastiera, rilevando quin-
di diverse volte il pulsante premuto, e
Enunciato per la orova della tastiera.
questo potrebbe generare degli errori.
Swff*wswerw
; Blocco delle etichette
90î0 KEY_SCAN-4
decfsz KEY_DELAY_1,F
g0r0 KEY_5CAN,3
movf TASTO,W ; Dopo la temporizzazlone si legge nuovamente
movwf PORTAB ; se il tasto è lo stesso. Così si
n0p ; evitano i rimbalzi
movf PORfAB,W
subv'rf KEY_2,W
la,
Sw${*x*rm:;re*
LIST P--16F844 ; Definizione del processore
ORG 0
g0r0 tNtzt0
; Programma principale
rl
Programma completo dell'enunciato proposto :)
$****wssser
Direttive
lcune le abbiamo già viste, dato che ne versioni precedenti dei compilatori di Microchip, e per
abbiamo avuto bisogno nei programmi che rendere compatibili i programmi realizzati da diversi
abbramo realizzalo, però ora le tratteremo utenti.
in modo approfondito, vedendo sino a che ll compilatore MPASM fornisce cinque tipi di direttive:
punto oossono essere utili. . Direttive di Controllo, che permettono l'assembla-
mento di frammenti di codice secondo determinate
fl#rdeffiYYs ffis mxffisTYxw& condizioni.
Una direttiva è un comando assembler che si inserisce . Direttive di Dati, che controllano il posizionamen-
nel codice sorgente del programma, però non viene tra- to dei dati nella memoria e danno la possibilità di rife-
dotto in codice macchina dal compilatore. Si utilizza per rirsi ad essi con nomi significativi.
diversi scopi, in relazione al posizionamento delle varia- . Direttive di Listato, che servono per configurare la
bili, e al controllo degli ingressi e delle uscite nell'as- forma in cui si presenterà il file assembler: titoli, impa-
semblato. La maggioranza delle direttive ha diversi grnazrone, ecc.
nomi e formati, per preservare la compatibilità con Ie r Direttive di Macro, che controllano l'esecuzione e
Le direttive
non vengono
tradotte in
codice macchina
quando si
assemDE
un programma.
Sw#*wwsw
ii posizionamento dei dati quando si utilizzano macro
nella programmazione.
o Direttive di File Object, che si utilizzano quando si
CODE
CONFIG
unl
rUn
.DW
ruq0
!itìeevuote._
un sottotitolo di un Ulqgfarn0l
un titolo di un programma
di sostituzione
se la condizione è vera
$m#*wwrm :rrla:
aaara
Applicazione pratica:
visualizzanone dei dati tramite LCD
l- +--+ì^.- I- ^i,
orTre rd rdsrera e^ ra ptu co- gliamo lavorare riceve I'informa-
,
^*^
m I rna ir)
rrrurru rru lo noriforirho
rL Ài
tg ut zione tramile 14 pin, otto dei
PLtilLttLt
inoresso nei nrooelti con qr:ali ricevono i dati o i codici di
microcontrollel il display a controllo (D0/D7), a seconda del
crsrailr ilqurot LLt-J e il ptu momento, tre sono incaricati di
comune tra le periferiche di uscita. controllare il funzronamento del
Come utenti lo potremo trovare modulo (RS, R/W#. E), e i tre ri-
sempre piu spesso sui dispositivi manenti sono per l'alimentazione
commerciali, come ad esempio, (Vss, Vdd) e il contrasto (V0).
macchine distributrici di prodotti. Quando il display LCD e collegato
Quindi, non vi piacerebbe imparare a un PIC 16t84,le linee dei dati di
Collegamenti di un LCD da 2xl 6 caratteri
a programmarli per fornire messaggi solito corrispondono con la porta
del tipo " introdurre l'importo", B e le tre di controllo con le linee
"puo passare", ecc.? Questa e la nostra proposta. meno sionificative dell,e nnrt: A R^n-R47. Le linee
dei dati dovranno essere bidirezionali, cioè a votre tn-
- ;.. r ':,3h.
/ a d'd *,qf' S'9f-F*?f f fi?1
Hhffi{}kHÀ;",\ .H . ?<*, " e!
" :!?
u}L;...ì nressi p a volle rrsrile dato rhpIL nlestn tr neCeSSaf iO
L
YULJLV I
Un LCD e un dispositivo molto potente, flessibile e faci- per passare dati all'LCD o per ricevere informazioni
le da gestire. E capace di rappresertare lettere, numeri sul suo stato interno. Le linee di controllo si confiqu-
e altri caratteri ASCll, o simboli specifici programmati rano come uscite.
OlDLNFXX
'I INDIRIZZI DELLA CGRAM
Sw$*'E*swryry
|r|NÌNrl|''ffiHll::.:.:.)):..........tt t \\iùrraj,
A seconda della combinazione dei dati delle linee dì che, oltre alla dichiarazione delle variabili, abbiamo in-
controllo, l'LCD capira se deve rappresentare un caratte- trodotto le dichiarazioni di etichetta mediante ìa diret-
re, cambiare la posizione del cursore (che gli si doman- tiva " #def ine " .
Sw#*weww*
UP_LCD: Configurazione delle linee del PIC per LCD
ICD,BUSY Lettura del Flag Busy e indirizzo
LCD_E: lmpuho di tnable. Nei nuovi LCD questo segnale deve stare a "0",45 m5 prima di tornare ad essere attivato a "1"
LCD_DATO: Soittura dei dati in DDRAM o CGRAM. lnvia dato presente in W
LCD.RIG: Scrittura dei comandi dell'LCD. Invia il comando presente in W
LCD_INI: lnizializzazione dell'LCD inviando il tomando "Function Set" 3 volte consecutive con un intervallo di 5 m5. ICD rimane
cancellato e il cursore nella prima posizione
tCD DEIAY Routine di temporizzazione di 5 m5. 5i utilizzano le variabili Lcd_Temp_1 e LCD_Temp_2 al posto del TMR0.
Questo rimane libero per le applicazioni dell'utente.
Ogni volta che si utilizza, si fa corrispondere all'e- prendere una frase completa, invece di dare ordini per
tichetta che segue il valore successivo. Così ad esem- il posizionamento del cursore per ogni lettera in modo
pio, dopo questo #define, ogni volta che nel pro- individuale, abbiamo realizzalo un ciclo che percorre la
gramma si scrive "ENABLE", è come se si ponesse tabella dei dati e ce li mostra.
"bsf PORTA,2". Questo avvicina un po' di piu l'as- Questo ciclo e implementato come routine (MENS)
sembler ai linguaggi di alto livello. Nella tabella alle- e necessita, come parametro, dell'indirrzzo della catena
gata troviamo diverse routines implementate e le loro che si vuole visualizzare.
funzioni. insieme al modo di utilizzarle. Le più impor-
tanti sono: UP_LCD, LCD,lNl, LCD_REG, e LCD_DA- Fffi#V&
TO. Queste si richiamano alle altre per il loro funzio- ll montaggio per la verifica di questo esercizio e mo-
namento, pero non e piu necessario che lo faccia an- strato in figura, e segue la configurazione tipica usa-
che l'utente nelle sue aoolicazioni. ta per la maggior parte da ditte che utilizzano modu-
li che integrano un display tCD. N/PLAB non dispone
pffi*#ffie$4 f4& FffigFd fl atr&E_fr di risorse per simulare rl funzionamento di questo tipo
Nel programma, per prima cosa bisogna configurare il di periferiche.
PIC per l'uso della tastiera: e questo
va fatto ognivolta che lavoriamo con
il disnlav dato che e
,, v,JY'vlt normale che
condivida le linee con le altre perife-
riche e chp orresfe le rttilizzino in un
altro modo. In seguito dovremo ini-
zializzare l'LCD. Questo processo è
necessario solo la prima volta che si
ulilizza un LCD nel programma. Do-
po aver iniziato a mandare ordini o
À1+i
uCtl îll'l LLUr
Oll r'-n lr ^r^.^4trr:
ld PlULCtru'u L
qomnro
ò JLrrrprL
uguale. Quando si tratta di un ordi-
ne, si deve introdurre il codice di
controllo in W e chiamare la routine
LCD_REG, mentre se si tratta di un '^ t lfll--
dato si mefterà nrrest'gl{jppo in W e '5
fr+sv +I'u'l +
si chiamerà LCD_DATO. I comandi
piu utilizzati, come ad esempio can- -2rÈL?,EL
cella LCD e porta il cursore alla prima
posizione, saranno introdotti a loro
volta in una subroutine, pero inter-
namente faranno la stessa cosa. Nel
Sch ema co m p eto d el l' esercizt o
nostro caso, dato che vogliamo I
$w$*.wwy*
LIST p=l5F84A ; Tipo di processore
INCLUDE P16F84A.|NC ; Definizione dei registri interni
. ,.,::::::.1
var
Lcd EQU 0x20 ; Inizio delle variabili delle routine LCD .:.t
Delay-var EQU 0x22 ; Variabili temporali per la temporizzazione
:.:.::'':
',2
ORG 0x00 ; Vectot di Reset . r::ì::l::
goto lnizio :.,.::::ì
INCLUDI
a
;;;,::t::1
return
..:.t::,.1
: a: .':l::
':;11,.:.
MOVIW b'0000r001' ": a'::t:a
mowvf REG
OPTION ; Prescaler di 2 al WDT
::i::
bcf STATUS,RP0 ; Seleziona il banco 0
.
movlw .28
movwf Delay,var
call Delay ;Temporizza '1"
movlw b'00000001'
call LCD_REG ; Cancella il display
movlw ,zo
movwf Delay var
call Delay ; Temporizza 1"
g0r0 Ioop
Sg*Ssss.-wryw ,,:iì
..:'::j:
&
Strumenti di lavoro:
M
caratteristi ch e avanzate
ffi
ffi di MPLAB (r)
m'
uando abbiamo presenta-
ffi to MPLAB, accennammo
al fatto che era un
ffii ambiente di sviluppo per il
ffi
ffi: - Per lavorare con l'emulatore dovremo
;: cambiare I'ambiente di sviluppo.
fud--
r
tempo reale. MPLAB dispone di stru-
menti software per poter ulilizzare,fra
gli altri, l'emulatore PICMASTER. Un
ry
ffiw$#wmss*
,:taetlít gtfr$rtt:|1|l:at,'\1,:tai:*tì\ìììjìì!s!]ì!ij:ii:rilffitlutìu
t.
:r:::::::::
. La velocità di esecuzione dell'emulatore e la risoo-
sta aglistimoli esterni, o eventi interni, è in tempo reale.
PICSTART ptus r ll vantaggio di utilizzare un emulatore rispetto al
Fffi.ffiffif r grtG*re
circuito reale, e che il primo puo mostrare cio cle acca-
de all'interno del microcontroller in tempo reale; serve
per mettere a punto il programma, potendo inoltre
attivare dispositivi come un oscilloscopio a tale scopo.
r I a "testa di nrova" dell'emulatore è intercambia-
bile a seconda del PIC da emulare, e si introduce nello
zoccolo destinato al microcontroller come si farebbe
con un PIC normale. Le linee addizionali che l'emulato-
re porta all'esterno, si possono collegare alle periferi-
che, per vedere il valore di determinate linee, o per l'in-
troduzione di eventi esterni. Sarà necessario configura-
re il PIC-N/ASTER seguendo le specifiche del fabbrican-
te, che dipendono dal microcontroller da emulare.
Bisognerà cambiare anche l'ambiente di sviluppo come
già abbiamo fatto iniziando a simulare i programmi,
configurare le porte, il clock, ecc. Per sapere se I'emu-
latore funziona in modo adeguato, possiamo fare una
prova nell'opzione Tools>Verify PICMASTER.
Sw$#effiwww
Appti cazione pratica:
un programma completo
giunto il momento di
mettere in pratica in un
unico programma tutto
cio che abbiamo impara-
to. Uniremo l'introduzio-
ne dei dati tramite la tastiera, con
la visualtzzazione deg i stessi trami-
te LCD e con le altre semPlici Pert-
feriche che saranno necessarie. Per
quanto riguarda le subroutines ab-
biamo cercato un'applicazione in
cui ìa loro utilizzazione non solo ab-
bia senso, ma sia indispensabile per
un buon funzionamento.
ffiw$wwsexres
pgq#s$q&P"'gÍ1,?-q
ConliguÉrione ICD M3, U4
* oxl
tabella movwf P{l ;Spostamento Messag_l_l equ $
89
oK 4.
digil?
retlw
:!;
retlw 'i'
fetlw retlw
o retlw reflw
ffdorirro nqovo (di.e retlw
:i retlw 'C'
retlw
:ia
retlw 'l'
retlì/v retlw 'a'
retlw 0x00 retlw
retlw 'e'
O rg an ig ra m m a del l' eserci zio p ro posto retlw 0x00
diiem 1
calì KEY_oFF ; Genera Beep e aspetta che s! liberi
di tem z catl 0x0C
di,tem_3 subwf N tasto,W
di_tem 4 ; Variabili temporaìi per i digit btfsc z ; controlla se è il tasto c (Cancellare)
cont err ; Contatore di errori goto Si canc
(ont tasti ; Contatore tasti premuti g0t0 No canc
temp_1
temporali
Si_canc bsf temp 1,1 ; Attiva flag dì cancellazione
temp,2 ; Variabilì return
Delay_1
Delay_2
Delay_3 ; Variabili per la temporizzazione No can( bcf temp 1,1 ; Disattiva il Flag di cancelìazione
movf N_tasto,W
movwf INDF ; Scrivi il tasto nel buffer
INCLUDE "P16F84A.|NC" ; Definizione dei registri interni incf FSR,Í ; Posizione successiva del buffer
decfsz cont tasti,f ; Aggiorna contatore dei tasti
#DEFINE _z 5TATUS,2
STATUS,5
golo N_tasto ; Ripete il processo
#DEFINE return
#DEFINE rd EECONl,O
#DEFINE ,wr EECON,I,,I
:0kev: Verifica se il codice introdotto nel buffer coincide con quello della
#DEFINE wfen Etc0N'1,2
#DETINE ,eeif EECON,I,4 ; EEPROIM. In caso atfermativo il flag del cany va a 0 altrìmenti va a 1
4
DT "Nuovo Codice", 0x00
incf tsR,f ; Digit successivo
lvlessag equ
DT "Confermare", 0x00 decfsz (ont_tasti,f ; Ripete la verifìca
Messag 5 equ goto 0key-1
DT "Può Dassare", 0x00 return
Messaq 6
-Di equ
"Accesso negato", 0x00 ; EE .Read: Legge un byte della EEPROIV
feturn
No_ultimo call LCD_DATo ; Visualizza sull'LCD movlw b'00011000'
incf temp 1,f ; Carattere seguentÉ movwf PORTA ; Scollega relè e cicalino
goto l\4essaggio.1 ; Ripete (on il carattere su((essivo
clrf EEADR ; Posizione iniziale della EEPROM
; Controllo: Attende che siano p,emuti i quattro digit del codice, li memorizza
EE Read
talo permette di cancellare call ; Legge byte dalla EEPRoM
; in digit_1 .. diqit 4 e visualizza sulI'LCD. ll C
movlw 0xff
-4 subwf EEDATA,W
Controllo movlw
movwf cont tastì ; Inìzializza contatore btfss z ; Verifica se è utilizzato
m0vtw digit-1 goto 5i usata
movwf F5R ; Punta all'inizio del buffer della tastiera
N tasto call KEY SCAN ; Esplora Ia tastiera : Carica nella EEPROM il codice 1234 per default
movlw 0x80
Programma r60lto
;:li.:,
ffiw$*ewwr*
Strumenti di lavoro:
caratteristiche avanzate di MPLAB (il)
er concludere questa sezione dedicata a
MPLAB, approfondiremo alcuni strumenti con Codice assoluto:
cui abbiamo già lavorato e vedremo così altre
possibilità previste in questo ambiente che cmw
OPTION
facilitano la oroqrammazione dei mtcrocon- :
trolìer PlC.
mx p4sm{jg-x CODE
ferente.
lnputGain, 0utputGain ; Controllo di citlo
HistoryVector ; 5i deve inizializzare a 0
ffiSMtjLX ffig il#Sxflfr
Tempf, Temp2, Temp3 ; Variabili temporali
Possiamo definire come moduli diver-
ENDC
se cose. Quando sono istruzioni della
memoria di codice dovranno essere
precedute dalla dichiarazione di una Dati in sezioni:
sezione di codice come mostrato nella
figura. In aìcuni casi, è necessario spe- IDATA ; Dati inizializati
Sw$sawwvw
siamo abituati e nelle differenti sezio-
ni, a seconda dell'uso che vogliamo
fare di ognuno, in modo che il pro-
gramma li gestisca in modo differen-
îe. Per oontrnà delle sezioni si usa un
tino di direttiva nor e<cmnin noli:
IDATA sono permesse le direttive DB,
DW e DATA.
KSff#RY&KX***ffi $:
gffip#RYexg*$* g ffig tr&#*fi"3 {_g
Quando vogliamo che un'etichetta
definita in un modulo o routine si uti-
lizzi in un altro, la si deve esportare
utilizzando la direttiva GLOBAL, per
ciò è necessario averla dichiarata in
precedenza. A loro volta, i moduli che
utilizzano etichette dichiarate in altri
moduli dovranno essere importati con
Per poter utilizzare moduli in un progetto dobbiamo indicarlo in MPLAB
la direttiva EXTERN. Dato che si lavora
con differenti banchi di dati, dobbia-
mo tenere presente in quale banco si alloggia ognuna lizzando la direttiva BANKSEL seguita dal nome della
delle variabili prima di fare riferimento ad esse. Questo variabile prima di fare qualcosa con essa, perche sia
compito pero può essere demandato all'assembler uti- l'assembler ad occuparsi di cambrare banco.
Sw$$wresse
tffstrfttÌìÙrrR*i
Strumenti di lavoro: caratteristiche
avanzate detfM PLAB-SIM I
l'imPonanza che riveste
ffiWM ata
il
ffi W provare un programma
il W
ffi
ffi
ffi dopo
w
la sua compilazrone e
ffi prima di programmarlo
$W'-,,.--,,-.---.-,
w dtrettamente sul mrcrocon-
troller; anche se abbiamo gia fatto i
considerare differenti opzioni, per fare in modo che Nel caso del PlC16F84 il simulatore supporta tutti gli
la simulazione non risulti ne troppo rapida, né trop- interrupt overflow del TMR0, cambio di 4 linee di mag-
po lenta. gior peso della porta B, interrupt esterno per RB0/lNT e
Sw#sw*xww
tu tt tttttttt ::
sw&Til*-$ffi*#
Anch'esso e simulato nell'MPLAB-SlM, sempre e
quando sia stato attivato in Options>Development
Mode.
RffiSgS?eA Sptrflg&g"g
Lavorando con i PIC ci sono alcune risorse che, anche
se devono essere prese in considerazione, non dispon-
gono di una posizione all'interno della finestra dei regi-
slri noirhe non sono recristri di ner se hensì bit all'in-
tornn doi ionictri
Si dispone di questi tramite la finestra di registro di
funzioni speciali, come il T0PRE, per rappresentare il
prescaler del TMR0.
ll reoistro di lavoro \A/ e rrn r:cn cnpri:lo rhe si trova
in questa finestra.
Sono contemplate diverse cause di reset
KffiSgY
llsrmulatore inoltre supporta tutte le condiztoni di
reset.
ll'reset tramite la linea MCLR si puo simulare con
l'introduzione di un livello basso. seguito da uno alto,
nell'opzione di stimoli esterni, o direttamente nell'op-
zione del reset dentro l'opzione Debug>Run. Inoltre
abbiamo il reset del sistpma e il reset npr connessione
dell'alimentazione. Ci sono alcune risorse
che si possono solo osservare all'interno della finestra
rlei rcni<tri di fi tn-ioni <nprtdlt.
#F*g
i hi\Àq ffig: # 3c'èd $:
tuF!&Lqàtu
Oltre alle linee di ingresso/uscita, all'interno del simula-
tore sono disponibili le seguenti periferiche:
. TimerO.
Questa periferica, insieme agli interrupt che provo-
ca, e completamente implementata nel simulatore,
potendosi incrementare con il clock interno o median-
fo imnrrl<i octorni ln nrro<t'rrltimn r:<n il +on,lpo In cul
l- li^^-
td il|ed .i,--^^
|iltd|e d- 1I e^ a- n,l^,,^
u, oeve essere
^--^.^ .J; almeno
ol - un
ciclo, per essere tenuta in conto.
. Memoria dei dati EEPROM.
Anche questa risorsa e simulata, insieme ai suoi cicli
di lettura e scrittura. E approssimativamente di 10 ms.
il Watchdog
Per utilizzare Le funzioni dei bit di controllo WRERR e WREN sono
dobbiamo attivarlo come si farebbe per la scrittura del PIC
cttLtI q))E -i-,,l-+^
^^-r^t^--^ )[ ttutoLE.
Scp#&eetrw*"w
uiutltmlmtm@ffi
FS.
t';
ffi
p'
:c::::
w
:-:'
r.'
;
tu Strumenti di lavoro: caratteristiche
ffi
ffi
tr.
È.i'
avanzAte del MPLAB.SIM II
tu"
&
e avete letto la scheda precedente, sapete
il; già cosa potete o non potete aspetlarvi dal
simulatore MPLAB-SlM. Vediamo ora come
ff'
iU;:: sfruttarlo al meglio, a seconda delle nostre
ll":''
F^i esigenze e in ogni occasione. Ricordate che
* per avere accesso agli strumenti di simulazione, e
Fr' necessario cambiare l'ambiente di sviluppo.
hr a,,aa+r -+^---
L-/d LlUC)Ld >LC>>d {i^^-+"-
||C)U d -i p\JLtdt il tU i^^l+"^
)r ^^+.-^^^ il rUil rC ,,^"i
Vúr r-
$;
ficare se esistono delle limitazioni nella simulazione
ffi'
del disposltivo scelto, oltre ad ottenere "dettagli" sul
medesrmo.
Se non si cambia l'ambiente di sviluppo, le opzio-
ffi. ni di simulazione appariranno disattivate.
ffi
ffi
Sw#*ewwwm
ffi'
:',::l.l:
.:i:':,lt
)l:11&
l. l:r:aÌ::
..1::ì::.::
::::li:i*
.);:;,.
..::L:.):
.:rì:ir.:t
:.:'.1:.1;*
,,,1i'*
:::::lll;
.:.ì::il
:,:aZ
.:aa,:a::;).
,;,f4
'.:,,tt)!*
.::a:a.::.ffi
:..'::.a,a,i:l
:'aa:,1::
.......4:a
':::::::ri
.a:a,aaa
'.::.: ::,1
:ìIìÈ4
:.i,:ìi:.}
:,::i*:L4
--a:al*
Opzioni del menu Run 5i possono scegliere i valori dei regrstri dopo un reset , I t:,.:tj:
r. t:r
#Pffig*ruffi ffiKffiflLJYffi ad esempio un treno di impulsi, si utilizzerà l'opzione
Al momento di eseguire il programma, potrebbe esse- Clock Stimulus.
re interessante non farlo girare completamente, ma
verificarlo fino ad una particolare istruzione (Execute an ffiffiffiAK P*K€4Y $: €W&{tr a3*gF*3 :ì$
:r,::,:
Opcode), o eseguirlo fino al verificarsi di una determi- lpunti di rottura (Break Point)e ipunti di traccia (Trace .'::,:::7
nata condizione (Conditional Break). Point) sono due elementi fondamentali per mettere a
:':,aL
punto un programma. La definizione di un punto di .....::a:t
t ,,:::=
{.}pK€#*{ ffi sgr4 {_&Y#ffi sYge4 # L{Js
{,$ roîtrrra nermette di rombinare i diversi modi di esecu- 'i :l::::
,'t:ì
Oltre a generare stimoli per il simulatore in modo inte- zione, in modo che, ad esempio, il programma venga ,::ì
,.:.,:.1)
rattivo (Asynchronous Stimulus), si possono descrivere eseguito in modo rapido (Run) sino ad un certo punto ::::'
i .: i+
segnali che arrivano ai pin di ingresso come file ditesto di rottura, in cui il programma si ferma e si può simu- ...:::-,?
:r::i:ì
(Pin Stimulus), o ulilizzare i file di testo per introdurre lare passo a passo. Se inoltre si definisce un range di rlì.ì:ì
rì::
valori da B bit direttamente sui registrr (Register indirizzi di programma, si puo sapere in ogni momento i'ì
Stimulus). Se gli impulsi devono essere periodici, come che valori hanno i registri quando sono eseguite quelle
istruzìoni. Entrambe le oozioni 0ermettono di visualiz-
zare lo stato del nrrìrpssore. ouando si stanno cercan-
do possibili cause di un mal funzionamento del pro-
gramma. Queste funzioni si possono annullare facil-
mente con Clear All Points.
&LgRil *trX3#r,jg
Esistono altre opzioni che possono essere utili in deter-
minati momenti; ad esempio simulare la cancellazione
del microcontroller con Clear Program Memory, reset-
tare il sistema completo come se iniziassimo in quel
momento a lavorare con MPLAB (System Reset), o
generare un reset che ponga tutti iregistri con un valo-
re determinato o casuale, a seconda di cosa si sceglie.
l'onziono Confor f)ohrrn I nr:tinn normatta dr csonrrrro
un salto nella simulazione del programma, collocando
il contatore di programma alla metà del codice che si
Può essere interessante eseguire una sola rstruztone
sta verificando
Scs*Éwwril,