Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

54
Scheda detle istruzioni : f istruzione BTFSC M$%, uesta e una delle istruzioni chiamate "istru- ffi ffi 'ffi zioni di salto condizionato" che ha il PlC. ffi ffi Anche se tante consonanti di seguito W ffi appaiono difficili da ricordare dato che non qffieei#W&b hanno significato, in realtà rispondono alle sigle di quello che fa: testa (t) un bit (b) di registro (f e la denominazione che stiamo dando ai registri in gene- rale. prima di sostituirla con il vaìore corretto caso per ---^\ ^ --r+- /-\ -^ : -.ro (c) Ouesto salto e niuttosto un Ld)U,/ C )dlLd \)/ )U C ZCrv \!/. \<ULJLv JurLv L V passo in avanti, dato che ignora solo un'istruzione che, pertanto, non viene eseguita. Questa è la prima istruzione fra quelle viste finora, il cui ciclo di esecuzione puo essere 1 o 2. Così se il saito non si realizza il PC conosce I'induizzo dell'istru- zione da eseguire in successione, che è quello seguen- te alla btfsc; pero, se deve effettuare il salto, dato che il valore del bit e uguale azero, il PC dovra calcoìare il nuovo indirizzo, per cui sarà necessario un ciclo addi- zionale. scit* s+ fu:* s! csegu* s* b= I PARAMETRO PARAMETRO MNEMONICO I 2 .--l-.:l".:":"""--i""-r . ""!"-,-.-".-i Operozione: nel coso che il bit segnoloto dol registro obbio volore 0 l'istruzione seguente è ignoroto e nel coso confrorio no. Cicli: 1-2 Codice OP: 0l lObb bfff ffff Flogs: nessuno Schema del comportamento dell' istruzione btfsc a seconda del valore di un bit. tr$*:ffi$3X il*ru fK-Y*tUXg#rufr #?$:Sfl Dobbiamo tenere conto che quando si compie la condizione e si esegue il salto, si esegue un'unica istruzione, pero se la con- dizione non si compie, si eseguono entrambe le istruzioni perche dopo la prina arriva la seconda. Questo e indicato nello schema generaìe della frgura, dove le lrareo r:nnro<ont:n, , -rr, ---,,.-,,o ta sequenza cne senronÒ le ìsf rr rzioni in entrambi i casi. ì due grafici mostrano la stessa cosa, il prìmo nella forma che avrà il programma e il secondo in forma grafica. Caratteristiche dell' istruzione btfsc $w$*wwww

description

Tutta la raccolta in versione torrent al link: http://www.tntvillage.scambioetico.org/index.php?act=showrelease&id=192104 Su Issuu c&#39;è la raccolta completa. Cerca "Monty Peruzzo Editore".

Transcript of Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Page 1: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni :

f istruzione BTFSC

M$%, uesta e una delle istruzioni chiamate "istru-ffi

ffi 'ffi zioni di salto condizionato" che ha il PlC.

ffi ffi Anche se tante consonanti di seguito

W ffi appaiono difficili da ricordare dato che nonqffieei#W&b hanno significato, in realtà rispondono alle

sigle di quello che fa: testa (t) un bit (b) di registro (f ela denominazione che stiamo dando ai registri in gene-

rale. prima di sostituirla con il vaìore corretto caso per---^\ ^ --r+- /-\ -^ : -.ro (c) Ouesto salto e niuttosto unLd)U,/ C )dlLd \)/ )U C ZCrv \!/. \<ULJLv JurLv L V

passo in avanti, dato che ignora solo un'istruzione che,

pertanto, non viene eseguita.

Questa è la prima istruzione fra quelle viste finora,il cui ciclo di esecuzione puo essere 1 o 2. Così se il

saito non si realizza il PC conosce I'induizzo dell'istru-zione da eseguire in successione, che è quello seguen-

te alla btfsc; pero, se deve effettuare il salto, dato che

il valore del bit e uguale azero, il PC dovra calcoìare il

nuovo indirizzo, per cui sarà necessario un ciclo addi-zionale.

scit* s+ fu:*s! csegu* s* b= I

PARAMETRO PARAMETROMNEMONICO I 2

.--l-.:l".:":"""--i""-r . ""!"-,-.-".-iOperozione: nel coso che il bit segnoloto dol

registro obbio volore 0 l'istruzioneseguente è ignoroto e nel cosoconfrorio no.

Cicli: 1-2Codice OP: 0l lObb bfff ffffFlogs: nessuno

Schema del comportamento dell' istruzione btfsca seconda del valore di un bit.

tr$*:ffi$3X il*ru fK-Y*tUXg#rufr #?$:SflDobbiamo tenere conto che quando si

compie la condizione e si esegue il salto, si

esegue un'unica istruzione, pero se la con-dizione non si compie, si eseguonoentrambe le istruzioni perche dopo la

prina arriva la seconda. Questo e indicatonello schema generaìe della frgura, dove lelrareo r:nnro<ont:n,, -rr, ---,,.-,,o ta sequenza cnesenronÒ le ìsf rr rzioni in entrambi i casi. ì

due grafici mostrano la stessa cosa, il

prìmo nella forma che avrà il programma e

il secondo in forma grafica.Caratteristiche dell' istruzione btfsc

$w$*wwww

Page 2: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Sch eda delte istr uzioni :f istruzione BTFSS

$ analoga alla precedente. Seguendo dì

nuovo la sua sigla vediamo che cambia solol'ultima lettera, questa istruzione testa (t) un

bit (b) di un registro (f) e salta (s) se è un uno(s e l'iniziale in inoìese della narola "set" o

mettere a uno).

Per quanto riguarda i cicli di istruzione si comportacome l'istruzione orecedente.

fl5*iffi pg **r* ilxsY$cqixg{:*h$ffi $3sFss

In questa occasione sono stati sostituiti i dati generali

per ottenere un esempio reale. In esso, a seconda del

valore del flag Z del registro di Stato, si indirizza l'ese-

cuzione del programma ad una parte oppure ad un'al-tra. Listruzìone fa la stessa cosa della btfsc, però salta

nelcaso che ilvalore sia a uno e ilsalto riguarda solo l'i-struzione immediatamente successiva. Nonostante que-

sto, come possiamo vedere, l'organigramma e variatoin modo sostanziale risoetto al caso orecedente.

-- brlss STATUS Zsolto se b='t (

"oto ETICHETIA |

- si esegue se b-o

\- goro ETICHETIA 2

ETICHETTAI decf CONTATORE,Fgoto ETICHETTA 3

ETICHETTA 2 incf CONTATORE,Fgoto ETICHETTA 3

ETICHETTA 3

:

PARAMETRO PARAMETRO

btfss:j, -..- ..... - -,! ..:. *,.-. - i .-., .. .. ..-l- ---..-"i

nel cqso che il bit segnololodol registro obbio volore ll'istruzione seguente è ignorotoe nel coso controrio no.1-2ot 1 l bb bfff ffffnessuno

Ca ratte r i sti c h e d e I I' istru z i o n e btf ss

Schema del comportamento dell' istruzione btfss,

a seconda del valoredi un bit, mostrato con un csempro.

Questo non è dovuto alla funzione cherealizza l'istruzione btfss tpotrebbe essere

così anche per la btfsc), ma dal fatto che

f ra tutte le istruzioni che si potevano utiliz-zaro dana l: htf<< lo htf<r) o qtat: qrclt; la4q,r uvyv

goto.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

delle istruzioni btfsc e btfss.

Sw**q*wwrm

Page 3: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Programm azione:strutture di control,lo

a programmazione modulare e strutturatadiminuisce il costo dt realizzazione e manteni-mento dei programmi, e aumenta la sua affi-dabilita e leggibilita. Per questo si costruisco-

no moduli o pezzi di programmi seguendo

certe regole. I moduli a loro volta, sono formati da

strutture, le quali possono essere di tre tipi: sequenzia-

li, condizionali e ripetitive. L'organigramma della figuraa lato, rappresenta un programma con tre tipi di strut-ture, che sono quelle abituali.

$Yffi #YT9J ffi €: Sil*tj ile*HX&Lg

Le strutture sequenziali, o concatenate, si costruiscono

scrivendo le istruzioni nell'ordine in cui piu tardi saran-

no eseguite, sarebbe a dire una dietro l'altra.

Graficamente si puo rappresentare come una serier{i nrr:dri in <o-

quenza, ognunodei quali e un'i-struzione.

Le frecce di

unione segnanoIa sequenza logi-ca di esecuzione,nella quaìe nonpossiamo omet-+^r^LUtC ttc))utto Organigramma di un programma con tre tipi

di strutture di controllo.

Dcre mes:oggi di benvenuto

€hiedere N" degli olunni

O ff"18'L No

Vo ollo finerlro"Non si DUò fore lo medio"

Prende il N' degli olunni

Chiede il voto medio del corsoln(rmenlq il (onl,otore delle medie

Contq*ore delle medie = Confqtoredelle medie / N' degli olurni

Vq qllq finestrcr"ll voto medio dello clqsse èr"vqfore del <onlotore di nedio

Dore mes:oggio di uscifo

istruzione I

istruzione 2

islruzione..

istruzione n

[.]lì.r,ì x 6 i ur 5LruLLuteut LUrìììrì,ììì. azlone. J -___,-*:ììiìì lP annra<Ònfa7i^na

delle strutture sequenziali in forma grafica

$€$q ilJY-r'à$ w$i fl # ru ffi xxx* rueLs

Normalmente non e sufficiente porre

le istruzioni una dietro l'altra, nel caso

in cui esse dipendano da eventi ester-ni hisnnna notpr nrendere una deci-sione e sceoliere un nercorso fra due- -" tr'

nossibili F orrello che viene denomi-nato struttura condizionale o alterna-

fo lso

blocco diistruzioni 2

condizionevero

blxco diistruzioni I

Se lo condizione è vero

A,LLORA eseguire il blocco I iiALTRIMENTI eseguire il blocco 2

1

blocco diisiruzioni 3

Ra a a resentazio ne del le struttu re co nd izi o n a l i I F-TH EN- ELS E.

Ssp$$wwr**

Page 4: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

condizione

bl*co diistruzioni I

SE lo condizione è vero l

- ii'i,T:::':::l::.::' . . i

blocco diislruzioni 2

cur dobbiamo evitare questo schema,

e per questo la cosa migliore e tra-sformarlo in una struttura condiziona-le gia vista, pero in forma annidata.

Nella figura corrispondente vienerndicato questo annidamento con un

esempio. Si vuole determinare qual e

il colore scelto fra tre possibili. ll

primo impulso è chiedere direttamen-te qual è il colore, restando alla prima

figura.

Rappresentazione della struttura condizionale IF-THEN-ELSE con un solo ramo

tiva. che in pseudocodice si conosce come lF-THEN-

ELSE se la condizione ha solo due ramificazioni, oCASE, se la scelta è multipla. La decisione puo essere

determinata dal valore di una variabile, per una chia-mata di un evento esterno, ecc.

ll grafico indica i due cammini possibili di una lF-

THEN-ELSE. Come possiamo vedereall' nterno di una struttura condizio-nale puo esistere, a sua volta, una

struttura sequenziale, che possiamo

sostituirla con il suo schema.A seconda del valore della condi-

zione, si eseguirà il blocco di istruzio-ni 1 o 2, però mai entrambe. Anchese l'esecuzione del blocco di istruzio-ni 3 non e pertinente alla strutturacondizionale in sé, è stato introdottonel grafico perche dopo una biforca-zrone si ritorna sempre ad ;n pro-gramma comune, anche se alla fine,per termínare in un unico punto.

Potrebbe succedere che manchiuno dei blocchi di istruzioni, in que-

sto caso, a seconda della condizione,si escnrrir: rrn hlorro di istruzioni o

non si farà nulla. Nella figura in alto,e stata rappresentata la mancanzadel blocco di istruzione, nel caso di"condizione falsa", pero potrebbeverificarsi anche il caso contrario: nonfare nulla se si compie tale condizio-ne.

Potrebbe succedere che la decisio-no ri: nrondoro nnn <i: lan r+r r Àr rnrrL uu vrLrruLrL rrvr rrro lcgcto d uuc<olo ricnó<tp m: :d I,_., ..-r_,-_ Jn nun'ero ptu

alto, come succede nel CASE. In que-

sto caso non abbiamo una traduzioneimmediata nell'assembler del PlC, per

Ss#kwww

Se al posto di questo immaginiamo il gioco del"vero o falso", dove Ie sole risposte alle domande pos-

sono essere "si" o "no" , andiamo alla seconda strut-tura, in cui il risultatofinale è lo stesso. Anche se abbia-mo fatto due domande, l'annidamento puo essere

largo quanto vogliamc.

gngro

blocco diisiruzioni I

nero

blocco diisfruzioni 2

blqco diistrszioni 4

blocco diistruzioni 3

colore bisnco Ir.b

colore nero

blocco diistruzioni I

Hg colore grigio

blocco diistruzioni 2

blocco diisiruzioni 3

blcco diÍstruzioni 4

Se lo condizione I è veroALLORA eseguire blocco 'i

ALTRIMENTI

Se lo condizìone 2 è vero

ALLORA eseguire blocco 2ALÌRIMENT| eseguire blocco 3

:

Esempio di trasformazione di una struttura CASE in varie IF-THEN-ELSE annidate

Page 5: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

m,F,:-,

W:iai..:

ì!::lìat:ia :,1

l11d;:: -

&it. .

&F

íi.m:ffi*.'

F.

À1,*

#H_:tr:Wb,'

ffi.R}:ff.'w;!::{'-fl:t.,:

a

T".,*Í$..k"'

s{,*&{il,t:,:::.

;

w""w\lss!*i:: .

$95:l::ì:l

*tìrì'::.À!ùì:::irìì :.'

ffilì,.',

#ffii:'.,

ffi}li:,.r,ffiq{li:::-::t:- - :

::

;Hw{

.1*.,aa:a:::,,:

ilà:ì:ì,',:

ffii;l;i'ttt.:.:a:,-,

*iìa,.,..

ffif:'.4glifl.w-...w:ffi.i...

ffi;àli'''rì:::l:.'?ìl!$iì::l&:ri:::'à.6t:

dàl;i:F"-

{..':.&.::3:: .

*{|

w{91"ffi&€i, '

ffiffi$E*..

&r":ffii..@'

Fl SF annidate e nrran619 si vuole ana-lizzare un blocco di istruzioni solo se

si compiono alcune condizioni nellostesso tempo. In questo caso, comenel precedente, dobbiamo evitare oifare una domanda, e al posto di que-sta, una volta verificata la veridicità di

una condizione, formulare la doman--J - -^^, ,^^+^

^, ,^-+uc )cgucrLc. rluc>rO fappfeSenta

l'implementazione di una AND logi-ca, Le altre operazioni logiche, inol-tre, possono anche essere rappresen-tate con strutture annidate.

SYffi &JYYIJ ffi K ffiXPffiYXYXVg

Come indica il nome stesso, le strut-ture ripetitive servono per ripetere un

determinato numero di volte un bloc-co di istruzioni. Nuovamente, quindi,all'interno di esse devono essere con-tenute le strutture sequenziali. ll

numero di volte che si ripete il bloccopuo essere noto, o dipendente da

una variabile o da un evento. Aseconda dell'autore consultato, o del

linguaggio di programmazione che si

prende come riferimento, il nome di

questo trpo di struttura varia, di

modo che conviene f issarci sull'essen-za di ouello che fa niuttosto che sul

nome che riceve. Se il numero di

volte che deve essere eseguita un'i-Osserviamo che in questa occasione le alternative

vere si trovano alla sinistra della figura, perche lo sche-ma ristrltarte e nirrrnrpglo da vedere e da realizzare.

L'altro caso in cui sono necessarie le strutture lF-THEN-

Struttura FOR conpseudocodice e suo adattamento per il compilatore del PIC

struzione e fisso, stiamo parlando di un ciclo, previstonella maggior parte dei linguaggi di programmazione,

e che di solito si chiama FOR; si ripete qualcosa per un

numero di volte Anche all'interno delle strutture ripe-

Struttura WHILE-DO

in pseudocodice e suo adattamento per il compilatore del PIC

Ng

rímongo o coso

è giornofo bello

vodo o posseggio

NO e grorno

ùto

rimcngo o coso

fo bello

vodo c posseggio

Se lo condizione 'l è veroALLORA

Se lo condizione 2 è veroALLORA eseguire blocco I

ALIRIMENTI eseguire blocco 2

ALTRIMENTI eseguire blocco 2

lmplementazione dell'operatore logrco AND con strutture IF-THEN-ELSE annidate

Strutturo l

::-"rvl-:-*::: _..iStrutturo odottoto

. ..t_:::::_T:::":::".*l T _ruK numero vofé uu

lslruzione 1

lslruzione 2lstruzione 3

irtrr.ion. nEND FOR

Contolore = numero di volîeEtichefo lstruzìone l

lstruzione Ilslruzione 2lstruzione 3

iriru.ion. nDecremenlo conloloreSe il volore del contotore è 0

ALLORA vo ollo FineALTRIMENTI vo q Etichetio

Fi ne

Shutturo Shutluroin pseudocodic" i per il compilobre del PIC

WHILE condizione vero D0Isfruzione Ilstruzione 2lstruzione 3

iitrurion" n

ENDWHILE

Chiedere Se lo condizione è verqALLORA ondore o EtichettoALTRIMENTI ondore ollo Fine

Etichetto lstruzione 1

lstruzione 2lstruzione 3

tsruztone n

Andore o ChìedereFine

S*$&nrwre

Page 6: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Strulturoin pseudocodice

: Strutturq odqllqtqi "".

il compilorore del PIC

I EiichettoDO

lslruzione llslruzione 2lstruzione 3

irìr".i."" "WHILE condizione vero

lstruzìone Ilstruzione 2lstruzione 3

iiirr=io.".Chiedere Se lo condizione è vers

ALLORA ondore o EtichefroALTRIMENTI ondore ollo Fine

F ine

Struttura DO-WHILEin pseudocodice e suo adattamento per il compilatore del PlC.

titive si ulllizza una condizione oer controllare la finedel ciclo, ma non deve essere confusa con le strutturecondizionali. Quando si deve compiere una condizioneper uscire dal ciclo si dice che è una WHILE-DO (men-

tre si compie una condizione fare qualcosa), o una DO-

WHILE (fare qualcosa mentre si compie una condizio-ne) oppure una REPEAT-UNTIL (fare qualcosa fino a che

si compie la condizione). E infrequente che i linguaggidi programmazione abbiano le tre varianti allo stesso

tempo, dato che una si può trasformare in un'altra. I

tre tipi di cicli possono tradursi facilmente nell'assem-

bler deì PlC. La differenza fra la WHILE-DO e la DO-

Slrutlurq i Strutturo odqltqfq

i: "-:::-t""d:-" r T: :l ::-":1"::" t"l::'i

REPFAT i Eliche*oi lstruzione I

lstruzionef I lstruzione2fslruzione2 i lstruzione3lslruzione 3 ...

rstruzione. i lstruzionen

Ch;"d"." Se lo condizione è 'eroUNTIL condizione vero

; ALLORA ondore o Eticheito; ALTRIMENTI ondore ollo Fine

: Fine

Struttu ra RE PEAT-U NTIL

in pseudocodtce e suo adattamento per il compilatore del PIC

WHILE è che nella prima se non si compie la condizio-ne, le istruzioni non si eseguono. Nella DO-WHILE inve-ra qi oqonrrnnn lo iqtfl J-i^^i l- ^.;-- ,,^l+- ^-ztonr ra pilmd vorrd, e se sl com-pie la condizione, si continuano ad eseguire. La

REPEAT-UNTIL è simile alla DO-WHlLE, dato che il bloc-

co di istruzioni si ripete almeno una volta, e continua a

ripetersi fino a che non si compie la condizione. Comepossiamo osservare, se si comparano gli schemi, le dif-ferenze sono nella negazione della condizione, datoche nella DO-WHILE si suooone che sia vera e si esce

quando si converte in falsa, e nella REPEAT-UNTIL si

considera falsa e si esce 0uando dìventa vera

bloccodi islruzioni

bloccodi istruzioni

verq folso

condizione condizione

folso verq

STRUTTURA DO.WHIIE STRUTTURA REPEAT.U NTI L

Schema di funzionamento delle strutture DO-WHILE e REPEAT-UNTIL

Sw$*xwexws*g,rrisuìììììtrtlluu:t1t1utl]Niliililililurl

Page 7: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni:f istruzione DECFSZ

ncora una volta le lettere che compongonoil mnemonico di questa istruzione ci indica-no la funzione che realizza. La decfsz

decrementa (dec) un registro lf) e salta (s)

se il risultato è zero (z). ll risultato del

decremento può essere memorizzato nello stesso regi-ctrn rhp <i nrcndp romo h:co nér nro<t: nnor:zinno

oppure nel registro di lavoro W, nel cui caso il valore del

regrstro non vara.Forse ricorderete un'istruzione simile chiamata btfsc,

in quell'istruzione per fare riferimento allo zero si ulilizzala c al posto della z. Questo perche esiste una differenzasostanziale, dovuta al fatto che la btfsc verifica se è a

zero un bit ("clear" o cancellato), mentre nella decfsz si

verifica se un registro completo ha assunto valore zero(00h). Come la btfsc, il salto che produce e di una sola

istruzione, e nel caso in cui il salto venga eseguito, la

sua esecuzione imoieqherà due cicli anziché uno.

z- decfsz Í, dI ictr rzìana I\ '- --- "\-* isiruzione 2

::

f-t +w

' s eseqr,r si; f i:0*-l

È o

OPERANDO OPERANDOMNEMONICO FONTE DESTINAZIONE

decfsz

Operozione: decremenlo di uno unitò ilcontenuto del reqistro f. Nel cosoin cui il risultoto"di ouestooecremento sio 0 l'istruzioneseguente è ignoroto, e nel cosocontrorio no. Se d= 0 il risultotodel decremento si memorizzo nelregistro di lovoro W e se d-l simemorizzo nello stesso registro f.

Cicli: 1-2CodiceOP: 00 I0l I dfff ffffFlog: nessuno

Ca ratteristi che del I' istruzi on e decfsz.

Schema di come si comporta l'istruzione decfsz, a secondad el ri su ltato del l' operaz ion e,

prendendo come secondo parametro il valore d = 0.

€:%ffi$!qPg

il#ru $-'gsT$ail$Kx#rdffi #ffiilflsxLo schema rappresentato ricordaquello gia visto per l'istruzione btfsc,anche se con sostanziali differenze. La

piu importante, per quanto ci riguar-da, è che l'istruzione non solo verificarrn rr:lnro nor r]oridoro ca .:l+..^ ^ur I vorvrq pgr uELtuEtE )c )ctLdtc u

meno, ma realizza anche un'opera-zione, il decremento, e salta a secon-da dpl ricr rltato .ronor:tn So npr l:JL VL' 'u

funzionalità del programma, ci inte-ressa solo l'operazione di salto, non ènecessario memorizzare il risultato,quindi lo porteremo nel registro di

lavoro, senza eseguire ulteriori opera-zioni su di esso. La stessa funzioneche compie questa operazione si può

realizzare mediante la combinazionedelle istruzioni decf e la successivaverifir: dol flen 7 ron 16 [1f56

$$w#sxesclwxrw

Page 8: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni:l'istruzione INCFSZ

ffi d istruzione e simile allaffi -;- ^^l-ffi Prece0enle, sld llelrd

ffi struttura che nell'uso,ffiffi anche se al posto del

W decremento di un

registro questa realizza il suo

incremento, e in ugual modo

salta se il risultato è zero. Nelrrcn dalle dorf<z nrr,'Y-J apparlrepiu chiaro, pero anche incre-

mentando un registro si puoneqs:rp npr lo zero dato che

dopo il valore massimo (FF) si

Strutturo dipseudocodice

FOR numero di volte DO

lstruzione'llstruzione 2lstruzione 3

iri.r.;on. nENDFOR

Strutturo utilizzondo decfsz i S*r*ro ufilizondo incfsz

Traduzione della struttura FOR mediante le istruzioni decfsz e incfsz

movlw NUMERO I movìw C2 (NUMERO)mowf CONTATORE I mowf CONTATORE

ETICHETTA lstruzione 1 I ETICHETTA lstruzione 'l

lstruzione 2lsiruzione 3

lstruzione 2lstruzìone 3

decfsz CONTATOREgoro ETICHETTAgoto FINE

lstruzione nincfsz CONTATORE

goto ETICHETTAgoto FINE

passa al minimo (00) con l'incrementosuccessivo,

flsgffipxf, #f'é *iXSTRL$AX#ru tr Xrufl rSX

Lo schema di funzionamento di questa

istruzione e lo stesso di quello per ladecfsz anche se al nosto delle sottra-zioni abbiamo le somme. Entrambe le

istruzioni si utilizzano nella costruzionedei cicli in cui si deve ripetere un insie-

me di istruzioni un determinato numero

di volte.

Nella figura è mostrata la traduzionedella struttura FOR a istruzioni del PlC,

impiegando la incfsz e la decfsz. Notare

che l'unica differenza, a parte il cambiodi un'istruzione con L;n'altra, e r^el valo--^ -L ^ .J^. .^ ^--^-^ i^trndnttn nol roni-lC Llltr UCVC t:))flC lllLrvuvLrv rLr rLyl

stro che si usa come contatore, che nel

caso dell'istruzione è direttamente il

numero di volte che si vuole ripetere

una sequenza, mentre per la incfsz, per

contare lo stesso numero di volte, biso-gna introdurre il complemento a 2 di

detto valore.

OPERANDOMNEMONICO FONTE

OPERANDODESTINAZIONE

Operozione: incremenfo di uno unitò il conienulo- del regislro f. Nel coso in cui il risuhotodi que"sto incremento sio O l'istruzioneseguente è ignoroto, e nel coso confroriono. Se d=O il risultolo dell'incremen?o simemori-.o nel registro di lovoro W e sed=l si memorizzo nello stesso reqistro f.

Cicli: 1-2CodiceoP: 00 llll dfff ffffFlog: nessuno

Caratteristiche dell'istruzione incfsz.

$*S*xrwr*

Page 9: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Applicazion e pntica: visu aLizzazion e

dei dati det primo programma

questo purto abbiamo imparato a realtzza-

re tutte le fasi che comporta un program-

ma sino al momento della simulazione.Complìcheremo ora un po' il prtmo pro-nramma nronosfo e faremo tutte le fasi

una dopo l'altra.

Modificheremo l'enunciato dell'esercizio nel se-

guente modo.

[nunciato òmpliato del prtmo programma propasto

L'applicazione dell'esercizio suppone di vedere i dati, dt

modo che l'utìlizzatore possa osservare cosa sta succe-

dendo all'interno del microcontroller.

l"'l'-; rj.*í{'.'t ', '

Quando parliamo dei passr per la realizzazione di un

progetto, abbiamo gia visto che la prima cosa da fa-re e plasmare l'enunciato dell'esercizio in un organi-grarnma, Quanto piu preciso e l'enunciato, tanto piu

facile sara questa trasformazione, e meno ambigr,,ita

esisteranno al momento di interpretarlo. 5e si vuolefare un organigramma dell'enunciato precedente do-

vrebbe risultare come quello della f igura a f ianco.

Nel fare un organigramma, il primo riquadro deve

corrispondere alla definizione e alla configurazione dei

registri Anche se non e obbligatorìo decidere ìn prece-

denza qualì risorse si utilizzeranno, facilita il lavoro suc-

cessivo di programmazione. Dal nostro enunciato possia-

mo dedurre che si

utilizzeranno treradr<irr o rrn2 n^r-

ta, che verrà con-figurata come

uscrta, per mo-

strare i dati. Da-

to che r reg t-

stri hanno ottobit e delìe duennrto pcictenti nol

PlC16FB4 solo lannrte R a nli ntin

l;^^^ -, ^

--^l+-

q u esta.

ll programma

consisterà in una

serie di istruzionidiqnn<to in fnrm:

-^^,,^^-i-l^

questo sr puo ve-

dere nell'organi-gramma per l'as-

senza dei rombirha frnnn nranr]a-

re una decisione in

base a un dato.

All'interno del-

l'organig ramma,il modo di rappre-

sentare la visualiz-

zazione di un da-

to si puo ridurre--.1,,^^.t^ t- ^-.^)Lt tvtrt tuu rd poru-

ìa "DATO", senza,^-"-i-^prfuLLUPdrLr or r-

-^"^ A, ^, ,.li i.+", ,LUtO Ut 9UOil rJLr U-

zìoni si utilizze-ranno per que-

sto.

O rg a n ig ra m m a de I l' en u n c i atoproposto.

Configurozione:DATOI, DATO2, DATO3

PB uscito

mostrq DATOI

moslrq DATO2

mostro DATOS

03 -+

DATOI

DATO2..+ DATO3

mosfro DATOI

mostro DATO2

mostro DATO3

Abbiomo tre posizioni di memorio chechiomeremo DATOI, DATO2 e DATO3"Nel DATOI si vuole scrivere il voloreesodecimole O3 e nel DATO3 il volore l

che si lrovovo nel DATO2. i

5i mosfreronno frqmile i diodi LED i volori ,

dei registri primo e dopo le operozionidi movimenro dei doti. ,

$w$#e*ewre

Page 10: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

STATUS

PORTABDATOlDATO2DATO3

S{KXXY*JKESHL PRS&K&MPdX& S#Rffi mruYKFatto l'organigramma, dobbiamo tradurlo in istruzioniper rl PlC.

Dopo la direttiva LIST si definiscono i registri che vo-gliamo usare. Nell'organigramma apparivano già i regi-stri dei dati e la porta B. Nel realizzare il programma ve-diamo che abbiamo bisogno anche del registro di STA-TO. ll bit 5 di questo registro ci permette di muoverci dalbanco 0 al banco 'l . Nel banco 0 avremo la porta B, chesitrova all'indirizzo 06 dì questo banco, e nel banco 1 ilregistro di configurazione di questa porta B (TRISB)

che occupa la stessa posizione. Questi registri si po-trebbero chiamare rispettivamente PORTAB e TRISB,

oppure si possono chiamare entrambi nello stesso mo-do (PORTAB), così come abbiamo fatto noi, tenendoconto però che significano cose diverse, a seconda delbanco in cui le stiamo utilizzando. DAfOl, DATO2 e

DATO3 sono registr di utilizzo generale che possonoessere impiegati sia nel banco 0 che nel banco '1.

Dopo la definizione delle variabili, si deve posizio-

nare una prima istruzione del programma alla posizio-ne 0 della memoria di istruzioni. Questo si fa attraver-so la direttiva ORG con il parametro 0.

;Definizione del processore

;Definizione delle variabili

;posizionamento della prima istruzione;all'indirizzo O della memoria di codice

;Passaggio al banco f;Configurazione della poÉa B come;uscita;Passaggio al banco O

;Visualizzazione dei dati prima del;movimento dei dati

;Movimento di un valore a W;MovimentodiWaDATOí;Movimento di DATO2 a W;MovimentodiWaDATO3

;Visualizzazione dei dati dopo il;movimento dei dati

EQuEQuEQU

EQuEQu

ORG

bsfmovlwmowvfbcf

movfmowvfmovfmovwfmovfmovwf

movlwmovwfmovfmovwf

movfmovwfmovfmovwfmovfmovwf

END

P=16F84

o3o60cOD

OE

0

STATUS,5ooPORTABsTATUS,5

DATOl,OPORTABDATO2,OPORTABDATO3,OPORTAB

o3DATOIDATO2, O

DATO3

DATOI,OPORTABDATO2,OPORTABDATO3,OPORTAB

:

Programma in assembler dell'enunciato proposto.

$w**wwrs

;Fine del programma

Page 11: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Normalmente, prima di cominciare il programma si

devono configurare i registri prima definiti. ll nostro pro-gramma non fa eccezione. I registri che dobbiamo confi-gurare sono quelli specifici, e questa configurazione de-terminerà il comportamento successivo del PlC. Per uti-lizzarli correftamente dobbiamo conoscere bene le carat-

c{3ffi pxL&xg#Nm mffi L $3ffiffi ffi R,eMM&ll programma che abbiamo appena visto dovremo edi-tarlo in MPLAB per poterlo poi in seguito compilare. Si

può creare un progetto e un file nuovo o aprire quelloche avevamo già fatto con il nome "primo".

Entrando in N/PLAB ci verrà chiesto se dobbiamoteristiche 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 spiegatoprecedentemente, in PORTAB sapen-do che siamo nel banco 1. Dopoquesto si torna al banco O.

La visualizzazione dei dati e sem-plice tanto come muovere il valoreche 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 vederncì rho l: nnrt: R /a ln cfoqcn nor l:nnrt: A) :nrhe <o o (peciale perche

nermette l'inorpsso e l'uscita dei datid: p nor l'o<fornn dol Pll- <i no<ti<ra

in eguale modo di tutti gli altri registrill 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

la direttiva AND Ricordiamoci che

abbiamo seguito le norme per scrive-

re un programma così come sonostate spiegate per realizzare il primo.

ll programma, inoltre, contiene tuttele parti che ogni programma di com-prlazione richiede, anche se non sono

tutte utilizzate.

Apertura di un progetto che abbiamo già e che è stato l'ultimo utilizzato

Apertura di un progetto che abbramo già, però non è stato l'ultimo ad essere utilizzato.

SwSkwsw

Page 12: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Compilazione del programma

aprire l'ultimo progetto che è stato in uso, in modo

che, se coincide con il progetto "primo" basterà ri-spondere affermatìvamente. Si apriranno in seguito i

Onf ion srpflliprpmo il modovvUvl

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^ Por riodaro f 1;tf a la {i-qPql Lw. I gr vgugrL Lullc lc ll-

nestre nello stesso tempo, le

ordineremo verticalmente (Ti-

le Vertical). Potremo in segui-to regolare la loro dimensionea piacere.

Dopo aver fatto un Reset

del sistema introdurremo unv:lorp nel reoistro etichettatocome DATO2, ad esempro il

valore esadecimale FA, e trale nossihili azioni di simula-ziono srpnlicremo nuella di

evidenziare. Cliccando suc-

cessive volte F7 resterannoevidenziate le ìstruzioni che

entreranno ìn esecuzione e ivalori che prenderanno

i registri. Alla f ine verif icheremo che rl valore conte-nuto in essi sia corretto.

{iloc:(<^.;:ti : nro(t^ nr^-rrrqJ oJJvLruLì u vuLJLv vrv

getto e nel nostro caso il filecon lo stesso nome.

Nel caso che non sia statol'ultimo progetto utilizzato,possiamo rispondere no, e

aprire il progetto tramite il

menù principale di MPLAB.

Allo stesso modo si aprirannoi f iles associati. Nell'u no onell'altro caso si puo ampliaredrrettamente I programmache abbìamo gia visto per

adattarlo ai nuovi requisiti.Una volta salvato il f ile e som-mato al progetto, si passera

alla sua compilazioneDopo aver verrficato che

non ci siano errori di sintassiprocederemo a realizzare la

simulazione per vedere se il

programma esegue quel o

che vogliamo Nella finestra

Sw#sesesxsw1t:aa:a:ia..::::::!'Nt{..:::::.....ì:ì::::::.1:1.......ii:r,r1,rrì::ììrr,f-!ìì:rìrrììì.,ìììÌ,ììr;l:jr{1

' LIST P=16F8{

.slnTUS Equ 03rP0fiTnB EqU 6ó.DAIO1 EqU BC

,Dsl02 Equ BD

103 EQU BE

bsf STnTus,5noulu SBnouuf P0RIABbcf STATUS,5

nouf DAT0-I , B

frou{f P0ETABnouf DAl02,6ftovuf F0RTABnovf DAl03,6nouuf P0RTAE

noulu 03nouuf DAT0Inouf DAT02, B

frouuf DAT03

noqf DAT01 ,6novuf PIIRTAB

:SFR Hane Hex 0ec Binary6E 8 8O68B6B8ÉE 6 B0BB5C0g

qstisr*rrq Ff :55 1.,|J11111status 1B 2s BSÈ1'lBBg

oB 6 86066889&g B 806980001F 31 86B1111 l80 6 0ú6066C0FF ?55 JlJ11l11BB O O8B88696

66 6 606ú6680

0't d2 03 6rr 95 668s 6g 60 tB 6B 00 60o0 06 0B 0B 00 56 6B56 66 58 0B 00 B5 B0

BC 66 0B C0 B6 86BO BB 66 BO 6O 6B

Finestre necessarie per la simulazione del programma

Page 13: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni :

f istruzione CALL

ffi uando abbiamo spiegato le strutture di

ffi ffi controllo, abbiamo visto che un program-

ffi ffi ma non puo essere composto solamente

ffi W da istruzioni disposte in forma sequenzia-'E{W le, dato che la normalità è introdurre strut-

ture cne rompano quesra sequenza, reailzzanoo un sal-

to all'interno del programma per eseguire parti distinte,

secondo la convenienza.In questo caso rompiamo la sequenza con la quale

si eseguono le istruzioni, non a causa del valore di una

condizione, ma per rendere la struttura del programma

piu chiara. Quando abbiamo visto le parti di cui si com-poneva questa struttura, abbiamo già parlato di sub-

routines, anche se non le abbiamo trattate in profon-

dità. Per realizzare questa subroutine si utilizza l'istru-zione call. Questa istruzione fa sì che il puntatore salti

ad un'altra parte del programma, etichettato col nome

che accompagna l'istruzione come parametro. Questachiamata, o salto è incondizionato, come l'istruzionegoto, pero non si comporta come questa. All'arrivo di

un'istruzione call, prima di produrre il salto, sì porta au-

tomaticamente allo Stack del PIC il valore del PC, in mo-

do che, una volta conclusa la subroutine, si possa tor-nare alla parte di programma da cuie stata fatta la chra-

mata, e continuare con l'esecuzione normale. Poiché

non si conosce ilvalore del PC sino a che non si esegue

l'istruzione, non si è potuto calcolare in precedenza, per

EMONICO

:,r.1-- -*LMN

C

PARAMETRO PARAMETROI

k

Operozione: chiomoto od uno subroutineil cui nome oppore come porometrodell'istruzione.

Cicli: 2Codice OP: I O Okkk kkkk kkkkFlog: nessuno

Caratteristiche dell'istruzione call

Smfrswssre

cui i ciclr di istruzione so-

no due.

ffisffi&4$39 il#ruE--'gSYffi#Xg#$\$ffifl&*_*"

I a e\,iare zza in rrn nro-I v,, Yl

gramma e una qualrtàmoltn annrezz:ta sne-

cialmente quando il lin-^,,-^^i^ ,,+ili---+^ À l,-9Ud99rO ULilZldr(-) e ras-

sembler, che necessita dimoltp islrr rzioni ner rea-

lizzaro nnprazioni cpm-

plici. La bravura consiste

nel pensare ad una strut-tura del programma cosl

come se si trattasse di

una sequenza di moduli,-^h,î ^^+/-"^ ^^; l^icr r4o cr rLr or s I rqr rUIO

dettagli interni. Quantopiù complesso sarà il

modulo, e più frammen-ti ripetuti contiene, tantopiù sarà necessario fareuso di subroutine.

La trad uzione del-l'organrgramma, cherannresenfa il flrrssoprincipale del program-ma nrrò essere imme-diata utilizzando le su-

broutines. Se si ritiene necessario si possono fare al-

tri organigrammi indipendenti per ognuno dei mo-duli. Trasoortando ouesto in codice assembler si con-verte in una seouenza di istruzioni call che si ese-guono una dopo l'altra, e formano la parte principa-le del programma. Al termine di questa parteprincipale subentra lo sviluppo di ognuna deìle sub-

routines.

coll configurozionecoll roccolto-doticoll visuolizzo-doticoll sommo-doticoll visuolizzo-doticoll soitrozione-dolicoll visuolizzo-doti

configurozione

rqccoltq-dqti

wisuolizzo-doli

sommq-dqti

wissolizzo-doti

softrqzione-dati

visuolizzo-doti

Sequenza dei passi durante Ia

chiamata a subroutine.

Page 14: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Sch eda delte istr uzioni :l'istruzione RETURN

l'istruzione di complementoalla call. Mentre la call si uti-li--- ^^. l- -l^;-*-+-rzza per ra cnramala a su-

broutine, l'istruzione returncomanda il ritorno dalla su-

broutine, una volta terminata la sua

esecuzione. Per il ritorno non è neces-

sario nessun parametro, dato che l'in-dirizzo si trova già nella prima posizio-

ne dello Stack, memorizzalo al mo-mento dell'esecuzione dell'istruzionecall. Per questo motivo bisogna fare

attenzione a non utilizzare l'istruzione

return senza aver preventivamente

usato l'istruzione call, altrimenti non

avremo nessun indirizzo di ritornonello Stack, oppure finiremmo per utilizzare I'indirizzodi ritorno di un'aìtra istruzione.

KsX$,{PX C**$ L"XSYRL$XXffi h{ffi KffiY{jffiNNella figura possiamo osservare parte di un program-ma che ulilizza delle subroutines, e come funziona il

PIC internamente quando le esegue. A sinistra abbia-

@

,.-"- 0,.' I

2

coll configurozione -.--'

coll roccolto-doti =-

configurozione btf SfnfUS,Smovlw 00mowvf PORTA B

bcf STATUS,Srefu rn

ì2345

ó78

-i n

n+ln+2n+3n+4

Seouenza dei passi durante Ia chiamata a subroutine

PARAMETROMNEMONICO I

PARAMETRO2

Operozione:Cicli:Codice OP:Flog:

ritorno do subroutine.200 0000 0000 r 000nessuno

Ca ratteri sti ch e d el I' istru z ion e retu rn.

mo una serie di chiamate a subroutine e lo sviluooo di

una di esse. Possiamo supporre che la prima istruzio-ne inizi nella oosizione 0 delìa memoria di codice e leseguenti occupino posizioni successive a partire da

questa. La scheda rappresenta la sequenza di esecu-zione delle istruzioni del programma e quello checomportano, e i numeri sopra le frecce, l'ordine di

questa sequenza. Quando si eseguela prima istruzione, si tratta di unacall, si scrive nello Stack l'indirizzodell'istruzione (la 0), per poi poterritornare. Nel PC si carica I'induizzodell'etichetta che accompagna la

call, in questo caso "configurazio-ne", in modo che l'istruzione che si

trova in questo indirizzo sarà la se-oronta d: o(onrriro (,. ,r segue In or-dine la subroutine fino ad arrivareall'istruzione return, che farà sì chesi torni a caricare nel PC I'indirizzomemorizzato in cima allo Stack, chepermette di tornare ad eseguire I'i-struzione successiva alla prima chia-mata a subroutine.

$qrftultlre

Page 15: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Applicaúone pratica:contando il tempo

uando abbiamo modtficato il primo pro-gramma per visualizzare i registri prima e

dopo il movimento dei dati, proponem-mo di fare una simulazione del tioo istru-ziano nor i<trrrzinno nor \/anora .^mo

veniva eseguita; avete provato a fare una simula-zione del programma in modo completo, per vede-re come cambiano i registri nel momento in cuiavviene? Questo è proprio il momento. Apriamo il

progetto e ci apparrranno le finestre così come le

abbiamo Iasciate. Facciamo un reset del sistema e

introduciamo il valore FA nella posizione 0D dellamemoria dei dati. Quando saremo pronti per farequesto tipo di simulazione, dovremo selezionareI'opzione Animate all'interno del menùDebuq>Run. Fatelo ora.

Così come succedeva eseguendo il primo program-ma in questo modo, al termine delle nostre istruzioni il

Program Counter (PC) continua ad incrementarsi, e

dobbiamo fermarlo con Debug>Run>Halt. La velocitàdipenderà dal computer su cui si sta eseguendo il pro-gramma, ma. quasi certamente, sarà troppo alta per

poter vedere adeguatamente come variano i registri. La

stessa cosa succederà quando il programma invece di

essere simulato, sarà eseguito nel microcontroller conhardware reale: la visualizzazione dei dati che ci inte-ressano sarà appena apprezzabile. Lunico dato che si

potrà vedere chiaramente sarà I'ultimo che rimane nella

Porta B come neìla simulazione. Quindi sarà necessario

introdurre alcuni tipi di ritardo, che ci permetteranno.quando saremo nei panni dell'utilizzatore, di interagirecon il sistema.

&KffiA$dX&K&ffiffi&

Qualsiasi cambio che faremonel programma dovrà essere

riportato anche all'inizio, cioè

dovrà essere inserito nell'orga-nigramma.

L'idea è che i dati che dob-biamo vedere mediante i diodiLED, siano visualrzzati per il

tempo sufficiente ad essere

visti. Questo si ottiene introdu-cendo una routine di ritardodopo aver spostato ogni datosulla Porta B. Per fare in modoche ogni dato sia visualizzatoper circa 1 secondo sarà suffi-ciente per raggiungere il nostroobiettivo. Modifichiamo anche

l'organigramma.

Quello che è stato intro-dotto nell'organigramma chegià abbiamo, è una specie dipiccolo programma indipen-

i;*é ffi èÉse. Xffi# r_{'

i,iiÉ***ss*i*iàffij*g*4.*g* :*$éÈ*dee.

- - :':

iF.sfft

k:tuWfrx*, fid+&d?WÈ*w 'b€e$:i{H

**lxri&&*dd. &5.e+Fq

4lll ts*l€**

:rétrs* {ry+ *fgt,* *# fl&f*F-*ii q& .**tFCt {E!x *ldEF* *

I

*É- #+q*jgsi** "rÍl;F.í€a

Uno dei possibili modi di simulazione

S*S*'txrxre

Page 16: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Configurczione:DATOI, DATO2, DATO3

PB uscitq

moslro DATOI

ritordo lsg

moslro DATO2

rifordo lsg

mosfrtr DATO3

ritcrdo I sg

o3 +-DATOI

DATO2-"+-DATO3.

mostrc DAIOI

rirordo I sg

mostrq DATO2

ritr:rdo lsg

mosiro DAIO3

ritordo I sg

O rga n ig ra m ma del I' en u nciato conI' i nseri mento dei rita rd i.

dente all'internooer programmanrinrinelo ad ò

chiamato routine,

o subroutine, e si

ulilizza quando unpezzo di program-

ma deve essere

ripetuto varie volte.In questo casoquesro pezzo al

programma si

ripete 6 volte,<pmnro nolln (to(-

so modo. L ultimoritardo non sareb-

be necessario, datoche come abbia-mo potuto verifi-

care nella simula-zione, il dato finalenarmano o ln <i

puo osservare senza

problemi.

Xt YE$K*I metodi per otte-nere un ritardo," una perdita di

tempo", sono mol-

to vari. ll primoche ci viene inmontó À nnrro rrn:

f ila d i istruzion i

n op u na c relro:ll':ltr: norn qp

\/nnlrlmn nttonoro

una temporizza-zione di un secon-rin o nnni i<tri rzin-

ne impiega 1 ps

:d o<<ora a<onrri-

ta, dovremmo utr-

ltzzare ptù o meno

un milione di istru-ziani .li nroct.liinn il rho nlfro

che assurdo è

impossibile, dato

Sw#*vrwwe

che il PIC'l6FB4 ha solo una caoacità di 1024 istruzio-

ni. La seconda opzione è eseguire cicli all'interno di altri

cicli, in modo che una ripetizione dietro l'altra fornisca

il valore desiderato. Considerata la struttura di control-lo dedicata alla programmazione del PlC, avremo biso-gno di un contatore a cui far decrementare un valore,

e dato che i registri sono a B bit, il valore massimo che

si puo ottenere è 255, quindi il valore totale da conta-re si divide in gruppi da 256 (da 0 a 255). I cicli propo-

sti realizzano 256x256x15 = 983.040 istruzioni noo.

che si awicina al valore cercato.

Questo modo di lavorare è valido, anche se non e il

migliore. Quando ci serve contare il tempo, convienefare ricorso ad una risorsa del PIC che è il temporizza-tore TimerO (TMR0) Questo temporizzatore, una voltaconfigurato, è capace di contare un valore determina-to (256 x 256 come valore massimo), in modo indipen-dente da quello che si sta facendo con la CPU del PlC.

Alla fine ci awiserà. Così, in questo caso dobbiamo fare

un unico ciclo in cui il TMRO conterà 15 volte il valore

FOR 256 DOFOR 256 DO

FOR 15 DONop

ENDFORENDIOR

ENDFOR

Con un ciclo all'interno dell'altro-: ^ .- .--:,.--^ -il. ,^*^--Utaztone desiderata.)l lJuu alt tvdlc dild Lcl t tlJvt )

massimo. ll modo di configurare il TMR0 e il suo regi-cir^ rccari r+n n^r ^troqt: :nnirr:zinno islro d55ocidt() per q-r-.- ,l regl5lro

OPTìON, e rllustrato nella figura.Metteremo il valore 00h nel TN/R0, il quale si incre-

menterà ad ogni ciclo sino ad arrivare a FFh, da doveîornpra,r O0h nrodrrrpndn orrpllo che viene chtamato

overflow con il quale si attiverà un flag per indicare

che ha finito di contare. Questo flag e il bit 2 del regi-

stro INTCON.

Per quanto riguarda la configurazione del registroOPTION, questa deve essere fatta all'inizio del pro-

Àr^r ---^.li orresto esercizio dobbiamoVldllllllO. l\Cl LC)U U' yuLJLv

Page 17: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

I

ì

Configurazione del registro OPTIAN e del TMR0 per contare 256x256

inserire il valore indicato nella figura in alto. Le xsono valori che in questo specifico caso possono

essere'l onnrrre 0 indifferentemente. ltre bit meno' "rr''sionifrcativi (0-2) messi a'l indicano un divisore dif roattanzz .li 7 CA 172lara ralr+f ^ î ^,,^.+- tomnnriz_-, .-lUlC dUdLLU d qUC)Ld LLrrrpvrrl

zazione. ll bit 3 assegna questo divisore al TMR0. llbit 5 a zero fa si che ilTN/R0, dei due modi in cui puocontare, lo faccia utilizzando gli impulsi deì clocki nterno.

*"'{ ."" } ;.';. /'- -'";| : rorrtinp di Iemnorizzazione f unzionerà comemostrato nella frgura. Inizia con il nome della routine,

che abbiamo chiamato "ritardo". Come abbiamo spie-n:tn in nrcredenz: il îemno desiderato si otterra con

un ciclo all'interno di un altro, con quello rnterno che

realizza una temporizzaztone di 256x256 ms, grazie al

TN/R0, e un altro esterno che fa ripetere 15 volte quel-

lo interno. L introduzione del valore 15 fra virgolettesemplici, e con Lrna'd'davantr, fa sì che lvalore sia

considerato come decirirale. All'inizlo di ogn ciclo

dobbramo inizializzare i contatori

associati; verificando il valore del bit2 del registro INTCON, si sa se il

TMR0 ha terminato il conteggio, nelnrr:l r:<n

^lo<t^ hit n--.^-- -,,*^Vuur luJv VuLrLv urr pd))tjld dULU-

maticamente a 1 e noi lo dovremorimettere a zero. Al termine di

entrambi i cicli si esce dalla routine.

PS *{* S $il{ \1 .;\ T,|}T. L{Una volta visto perche si fa cosr,rama ranl'nr rrero il fl4R0 e il fegi-

stro OPTION, e come rimane la

routine di temporizzazione, andiamo ad integrare tuttoquesto nel programma che vogliamo modificare.

Le iinee in neretto sono quelle nuove aggiunte nel

nronr:mmà rnmp si nrro vedpre tr rtti i renistri che uti-lizzeremo in seguito devono essere definiti. Nella con-figurazione delle variabili abbiamo assegnato nuoviri:lnri nltro : nrrollì rha ni: o<ictov:nn I._..t regtstro

OPTION lo abbiamo definito come OPT perche la paro-

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"rìtardo di 1 s", ora sono stati convertiti in chiamatead una routine di ritardo. Ouesta routine. di cui abbìa-*^ ^i; ^-.1-+^ : -+-+- ^^-+- -l +^.*i^^ ^l^lmo gra paflaro, e sTaTa posia ar rermrne oer program-

-- -^-h^ -^ ^^+^,,r ^..^"^ -^ll^-.+. ^l- ^,,-l.i-.i .l+"-Itd, dILt tc )c puLcvd tr))crc LUiluLdLd ud L.ludr)rd)r dilrd

parte, tenendo sempre conto dell'ordine con cui si

eceorie il nronrammà notàte ehe donn l'rrltima chìa-

mata alla routine "ritardo" abbiamo un salto alla finede' nronr.1mrn.: ,al+rimenti tornerebbe ad escnrrrrsr

questa routine. li proqramma, come sempre, terminacon la direttiva El'lD.

I movlw

movwf

moviw

movwf

btiss

g0î0

teturn

Rouline di temportzzazione del TMR0

90t0

bcf

decfsz

d'15'

CONT

00

TMRO

INTCON,2

ctcL02

lNTCoN.2

CONTl

ctcL0l

;€ido esterno che si ripeterà 15 volte

;lnizializzaziore del cklo interno

;Ha finito di contare?

;No. (ontinua nel ciclo interno

;5i. Azzera il flag

;Decrementa il contatore del cielo esterno

;Dato che non è zero torna al riclo interno

;ll contatore esterno è arrivato a zero, esci dalla routine

Sqp$*x*rw*exx'.|l|...,.::.::.::|.'.|......1..1Nj1...::.j.:.jj.]]]i.lìN1,]i]]]]]]]:]]]]]]]::]lù!ì\|ì:::ìsi.*g

tlullNEn${l1fr1fssì

Page 18: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

'l'&,,,1:&:.'.'.7

'ì'lìii:..,u1ì:i

::::::.:,1..:a.::;,

.,ìt:::t*rr::iF,l::.,:3

:::a:,,.,:&

,,'::,:l::::

,,a:a,a,a,a:a,i

tt',.?,'

LiST P=16F84 ;Definizione del processore

TMR0 EQU 0f ;Definizione delle varìabili

OPT EQU 81STATUS EOU 03PORTAB EOU 06INTCON EQU OB

DATO1 EOU OC

DATO2 EOU OD

DATO3 EQU OE

CONT EQU OF

ORG 0 ;Posizionamento della prima struzione

;all'indirizzo 0 della memoria di codice

bsf STATUS,5 ;Passaggio al banco 1

movlw 00 ;Configurazione della porta B comemo!$'f PORTAB ;uscitamovlw b'00000f tl' ;Configurazione di OPTION per il TMR0movwf OPTbcf STATUS,5 ;Passaggio al banco 0

mov'f DAT01,0 ,Vjsualizzazione deidatiprima del

movwf PORTAB ;movimento dei daticall RITARDO ;Chiamata alla routine di ritardomov'f DAT02,0movwf PORTAB

call RITARDO ;Chiamata alla routine di ritardomovf DAT03,0movw,f PORTAB

call RITARDO ;Chiamata alla routine di ritardo

movlw 03 ;Movimento di un valore a Wmowvf DAT01 ;Movimento da W a DATO1

movf DAT02,0 ;Movimento del DATO2 a Wmowvf DAT03 ;Movimento di W a DAT03

movf DAT01,0 ;Vìsualìzzazione dei dati dopo il

movwf PORTAB ;movimento dei datì

call RITARDO ;Chiamata alla routine di ritardomovf DAT02,0movwf PORTAB

call RIIARDO ;Chiamata alla routine di ritardomovf DAT03,0movwf PORTAB

call RIIARDO ;Chiamata alla routine di ritardogoto FlilE ;Terminare programma

RITARDO movlw d'15' ;Ciclo esterno che si ripeterà f 5 voltemowvf CONT

CICLO1 movlw 00 ;lnizializzazione del ciclo internomovwf TMRO

CICLO2 btfss INTCON,2 ;Ha finito di contare?goto CICLO2 ;No. Continua nel ciclo internobcf INTCON,2 ;Si, Azzera il flagdecfsz CONLT ;Decrementa il contatore del ciclo esternogoto CICLOI ;Dato che non è zero torna al ciclo internoreturn ;ll contatore esterno è arrivato a zero, esci dalla routine

FINE END ;Fine del programma

Programma con la routine di temporizzazione integrata

Sofîwsre

Page 19: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detl,e istruzioni:l'istruzione RETLW

uso di subroutine è moltocomune in qualsiasi pro-gramma del PlC. Deidue tipidi subroutine che possiamo

distinguere, a seconda delle

istruzioni di chiamata e ritorno, abbia-

mo già visto quella che corrisponde alle istruzioni call e

return. L'istruzione con la quale lavoreremo in questa

sezione, la retìw. è anche un'istruzione di ritorno, che

ha similitudini e differenze rispetto all'istruzione return,

pertanto si usa in differenti tipi dì subroutine, a cui si

accede sempre con l'istruzione call. Quando si torna da

una subroutine con l'istruzione return, il valore che si

trova nella orima posizione dello Stack viene caricato

nel PC, in modo che questi torni a puntare l'indtrizzo

da cui era partito. Se al posto dell'istruzione return si

utilizza I'istruzione retlw, oltre a portare di nuovo il

valore dello Stack nel PC, in W rimane memorizzato il

valore che appare come parametro dell'istruzione.

xsKeapgffi fl*ru L'gs?Raixxsr-é ffi mffiY$-w

Questa istruzione si utilizza per formare le tabelle, negli

altri linguaggi di programmazione si chiamano array, con

indicì consecutivi che iniziano la loro numerazione da 0,

così come mostrato nell'immagine in alto. Per accedere

ad un dato dell'array dobbiamo conoscere l'indìce: il regi-

stro di lavoro W viene caricato con il valore dell'indice, e

TABELLA Dotol Doto2,.., , :,.ìì

I

Doto3

z

Doto4 DqtoN

n-l

Array di nome "Tabella" con indice da 0 a N

PARAMETRO PARAMETROMNEMONICO 1 2

: :-llv--*-J-"*-:-*-"--.L"Operozione: ritorno dollo subroutine

losciondo un volore letterole in W.Cicli: 2

€odice OP: I I 0l xx kkkk kkkkFlog: nessuno

Ca ratte ri sti ch e d e I l' i stru zi o n e retlw

poi si esegue una chiamata alla tabella come se fosse una

normale subroutine. Tornando dalla subroutine, in Wrimarrà caricato il dato che corrisponde all'indice fornito.

Per costruire una tabella dobbiamo porre il nome della

medesima, una prima istruzione addwf con i parametri

PCL e 0 e tante istruzioni retlw quanti indici ha ìa tabel-

la, ognuna con il parametro associato all'indice. La prima

istruzione, che è obbligatoria. fa sìche alPC (la sua parte

bassa PCL), venga sommato ilvalore che in quel momen-

to si trova scritto in W così da provocare un salto all'indi-

ce adeguato. Di tutte le istruzioni retlw, ad ogni chiama-

ta alla tabeìla se ne eseguirà solo una, quella corrispon-

dente all'indice utilizzato. Prendiamo l'esempio della figu-

ra: se prima di esegurre la chiamata alla tabella si carica il

registro W con valore 1, al PC, che a causa della chiama-

ta alla subroutine stava puntando all'istruzione addwf.

verrà sommato 1 sulla sua parte bassa; questo ptù I'au-

toincremento normale che caratterizza questa risorsa del

PlC, portano il PC a puntare all'ìstruzione retlw

b'00001111'che è quella che si stava cercando.

tobello

robello oddwf PCL,O

redw b'OOOOI I l t' i

retlw 5ó i

Frammento di programmanel quale si mostra l'utilizzo delle tabelle.

Sw#*wwsw

Page 20: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Sch eda delle istr uzioni :f istruzione RETFIE

I'ultima delle istruzioni di ritor-no, però questa volta da inter-rupt. Anche se il suo utilizzoappare simile a quello dell'i-

struzione return. in questo caso quan-

do il processore ritorna al flusso prin-

cipale del programma, recuperandoI'indirizzo memorizzato nello Stack,pone il bit GIE del registro INTCON avalore 1 .

Questo bit che abilita il microcon-troller ad accettare gli interrupt, e

^^.+^ -' ';pwrrv a Lctv ou LOflìattcament€entrando nella routìne di servizioall'interrupt. per fare in modo che

durante la sua esecuzione non ne ven-gano accettati altri. Mettendo di

nuovo il bit GIE a 1 si torna a permet-tora nli inforrr rnf qo c; ^.-^ 'l- ' '^-rsrs yil il rrEr I upr. Js )l c>Lc ud ul ld

routine di servizio all'interrupt con

return, invece che con retfie, questapossibilità viene annullata.

R llaE Hex Dec Binar! Chari0 il 1 000[0001

pcl 85 5 80tJ0tìl 01optifin_r€g 0ú 2BB 11[18868stJtus 1C 2B 06S1110úfsr UB Í 00880890p0rta 80 0 06i188006tri5è 1t 3l 0ú01111JpOftb ffS g S{'BBSSBùtrisb [ù I 05ù06060Èedèta gS g Bú0S0080elconl ffù B 86866[[úPeèdr 0S ù 0B0SSBBù

on2 tl8 0 000t1ú600ldth 00 B S0B0B0{ì0

rntc0n 2q 3ó 0$1 Í6.1 6B $Lr 14 20 [ùS1$iÉilt6Ère 81 1 úS0EBB01

;P"ogrm dli tratteètrto dlell,intetdpt.

goto SEEUIflEmuf r P0RIBxorlr b'3t8081 86'

;Ancora !o

ilnv€rti@ it bil 2

;Se è spetrto si acceode;Se Ào si speG€

mulf P0RTS

mulr -26mulf f,ontl ;IDizíalízziúo iI coEtl

IlfiC0ll,T0IF iRèsètti@ i1 flag delh'111111.11' rcarichi@ di nuovo ilTllS! ;dla cootale

tffi#. : .'l: Beturn Addres5:

.2 96-tC {Interrupt)

Programma esempto per I'uso dell'istruzione retfie.

PARAMETRO PARAMETROMNEMONICO 1 2

.--::*t*li-: , "i--..- . .- ""*iOperozione: ritorno dollo subroutine

di servizio dell'interrupt.Cicli: 2Codice oP: 00 0000 0000 I 001Flog: nessuno

Ca ratter i sti c h e del I' i stru z i o n e retf i e

$i$swPsil*ru $i3SY$e#X3*S*il KffY$;Xfi

Nella figura abbiamo tre finestre aperte:quella del codice del programma, quella

dei reoistri snprifiri e nuella dello Stack.

E stato eseguito il programma passo an:qqÒ è l'imm:nino a qtaf: nro<: nol

momento in cui si entra nell'interrupt.Nello Stack è rimasto l'indirizzo di ritor-no, per quanto riguarda i registri specifi-ci, possiamo notare che nel registro INT-

coN, e più esattamente il bit 7 o bit GtE,

e appena stato messo a zerc, per nonpermettere altri interrupt. Come ultimaistruzione nelle subroutine dedicate agli

interrupt, si trova la retfie.

$s$*xrywr*

Page 21: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Program m azione: subroutire,macro e recursività

: npressità di nron16pl-131'g

in forma strutturata e modu-l-"^ À .+-+- .^i^^-+. ^^ll-rcrc c )LoLd )Prc9drd rEild

sezione precedente, cosìcome le strutture che forma-

no parte di questi moduli. Ora trattere-mo idifferenti moduli esistenti, e qualisono le differenze fra di loro. In ognicaso la modularità deve sempre per-mettere che un programma da princi-pio complesso, si divida in parti piu

semplici, riutilizzabili, e pertanto piuf:rili d: mtrttprc ,a nUnto e da mOdifi-ca re.

5t$ffiffi*8"$TXF$ilLa decisione di ulilizzare o meno le

subroutine dipende daltipo di programma

che vogliamo realizzare. Quando un'azio-

;Súbrùutlrt

,rtfll€' mr*f T'*0Èllr b'g6talJ91'*orf Pflf I4

*0tf€n-t ttfsi ll{tcofl,l0ltgoto nunl|z*-lbcf lt{ft8t{,f8lrretwc

t€Sfg* ssxf llsgselr t'tc8ú1111'@* P6nt*

9€SliÉ,1 btÍss IltTCBtl,IElFgotr t€Slf,*_1bcf lHTe0l,lClFretgrn

Carieè il lil*g

Sotq terÈirati ; Fógii?llo" CcatidúaSi. ti5attira it tlrqn1tcrra

Cariea il fB*

scúo terrArati i pèssi?tb " CodtituèSi. oisat?lsa 1l fl*gIittr*s

Proeramma che utilizza moduli nella stesura

ll programma precedente, sciltto senza l'utilizzo dei moduli

ne si ripete molte volte, come puo esse-

re il "ritardo di un tempo determinato",non è consigliabile ripetere tutto il codi-

ce ogni volta che bisogna usarlo.

Questo potrebbe portare gravi inconve-

nienti, il primo è che stiamo sprecando

spazio nella memoria di programma, e

questo è pericoloso, tenendo conto che

il PlC16F84 dispone solo di 1024 linee

di programma. ll secondo e che un pic-

colo cambio in una di queste parti di

programma che si ripete, comporta un

cambio in ognuna delle ripetizioni. il

che oltre ad essere oneroso. può provo-rara tlanli arrari

L'inconveniente e che sia la chiama-ta sia il ritorno dalla subroutine "sciu-pano" cicli di istruzione, in altre paro-le ogni chiamata ad una subroutinecomporta una perdita di tempo,

Sw*fuswxw

Page 22: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

accedono sia il programma che il subprogrammasiano indipendenti, cioè di ambito locale, di modoche al momento della chiamata al procedimento,siano le uniche variabili interessate. Pero questo non

e possibile con il compilatore del PlC, dato che la

chiamata a subroutine (istruzione call) ammettecome parametro solo il nome della subroutine stes-

sa. Una soluzione intermedia fra lo scambio di oara-metri e la non comunicazione fra programma e sub-programma, consiste nell'utilizzo di variabili globali,. -',i ^^c.îna trraAaTp antr:mhi l-nqj nri-: Àoll:d LUI pU))OllU OLLCULT Prlllld \lrlld

chiamata ad una subroutine, verranno introdotti nei

^-i^-i^'r^ hasterà inserire iì nome della9rorilro prrLrporE L

marro nel nrrnfo che ri interessa e lp istrrrzioni che la|,L' Pvl

compongono saranno eseguite.Nome_macro esprime il nome della macro che in

seguito verra inserita nel programma prrncipale per

aggiungere tutte le istruzioni che appaiono sotto que-sto nomtr fr: le n:rolc chiave maCro e endm.

ffigrrtr${{r,iffff rffi& ffieflft* # s#ffiR*{jYi{$\é#Nonostante I'ulilizzo delle macro e delle subroutine si

assomiglino, fra loro c'è una differenza fondamentale.n,,-^.1^ -i -^-^il *- {-++^ -^^ SUbfOUti-vuottuu )t LU|tPilo uttPrw9rorrilro rotLv LUrl

.nmllnnlro <A tiiliTT-+^ inLvrrrurrVuu uLilr44dlc lll

modo coerente, i vantaggisono maggiori degli svan-

tagg r.

Normalmente una sub-routrne comunrca con rl pro-gramma principale median-te lo scambio di una sene di

valorr. Quando si chiama il

subprogramma, questo rice-

ve gli argomenti necessari-ll- -,, ,-,^^^ ^ .^-+,ì,,ts ts tu)U-

tuisce dei risultati. È consi-gliabile che le variabili a cui

rpnic,tri nrodisnncti i valOri

da utilizzare con le subrouti-ne, e prima di ritornare dalla

subroutine, saranno aggror-nati iregistri che devonocontenere irisultati del lavo-ro svolto onnrrre entrambe

le cose se sono necessarie.I ln o<omnin tinirn eli nrro<tn

e l'uso delle tabelle, che-l^r-i--^ ^i. ,,i-+^ ^-a00ramo 9rd vrsLo pdrlan0odell'istruzione retlw. In que-qtn càsn il reoistro che f un-zionava da intermediario era

il registro di lavoro W.

r'{ i; r* €}S*f il:L:\'J

Un altro modo di semplifica-re un programma consrstenell'utilizzare delle macro.

Una macro definisce un

insieme di istruzioni a cui si

assegna un nome. Nel pro-

Sw$*xeswrw

Nome_macro mactolstruzione-1

lstruzione-2

lstruzione-3

lstruzione-{n-l)lstruzione-n

endm

Avanti macr0

movlwmovwfendm

b'0000rî01'PORTA

Struttura di una macro ed esempio del suo uttlizzo.

Itoufreoto it aqarti

tira a destra

; Sulrsutin"

àlnflZf svef IHREfivanti-

tl.litl?A-.f ùtfss lìlTt8t{,l$rtgato A8àHZ$_1àcf IltTc0l{,IClFreturn

DESI in ffivsf TIiEBges t

!€Sî{n_1 btfss lill00Í,lglfgBto 9Fst8È*1brf IllTC0N,TBIrreturn

Carica lI TI4BS€ugrzaSoGú terRioati i passi?HO. e?ÀtirùaSi, Disettise il flaggitsrnà

Darica i1 l3ngCira a destraS060 te.niftati i passi?Hì. 0rntiruaSi- Disattiu8 it FlagRitorna

Sezione dello stesso programma, pero con l'utrlizzo di subroutine e di macro nella stesura

Page 23: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

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 dettocodice è 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-t^ Lt-^^^- -^"uso, cne orsogna conoscere e

applicare, perche questi non si

producano A causa della diffe-renza che esiste al momento di

assemblare, fra macro e subrou-

ne, il numero di istruzioni generate, e che piu tardì saran-

no scritte nella memoria del microcontroller, risulta lo stes-'so di quelle scritte nel programma al momento dell'edita-

zione. Quando si utilizzano macro, invece, ogni apparizio-

ne di un nome di macro è sostituito dal compilatore, da

tutte le istruzioni che formano la macro; questa operazio-

ne è chiamata espansione di una macro. ln questo modo

la quantità di istruzioni che saranno scritte nella memoria

di programma sarà maggiore che nel caso di utilizzo di

tine, l'inserimento dei cicli non si

or,ò realizzare nello stesso modo. Nel secondo pro-

gramma di esempio, sono state sostituite le subroutine

con le macro, definendole in modo errato.

Dato che tutte le istruzioni delle macro si ripetono

tante volte quante sono le chiamate, si verificherà

anche la ripetizione delle etichette che formano parte

di queste macro. Questo genera un problema, quando

un'istruzione, ad esempio una goto, fa riferimento ad

un'etichetta e questa etichetta appare duplicata nel

Generazione del codice nel proqramma scritto con subrouttne

Generazione del codice nel proqramma scritto con macro

mwf PonTieúnpe_1 ùtass tflrcoff,f8lf

goto l!f,Mt-1bcf lxTcol,Toif

ESlinRÙgf TM!mlls b 00!fi111'mlqf Pú81î

o€SlRi_1 òtf5e lfllc0l,T0lfgoto tEslnf_lbc, lNlc0N.lùlf

i Prograffi 9rincip3le

; Carlca il lB!

i son. tefúlnati I Pasri?

; Si- Dle.ttisa t1 lrÈg

; sóno tersinati i póssi?

ì Si, Disattfvó 1r Fì39

ÈlClO frllr oxFB ; ita8z. dl 25Ù M (7 pasli)t0iff?nÈlls ÙrfÙ ; 6ifa . destra di ió Pèssi0lsrnamvl{ gf1 ; llitz! dt 1à Pastia0htzi

ÉF

Secondo programma esempio con le macro defintte in modo errato.

Sw#*wexre

Page 24: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Errore che genera MPASM cercando di assemblare il secondo proqramma

sarà traslata in anticipo o in ritar-do del valore che ha in quelmomento il PC. Visto che ognichramata a macro verrà sostitui-ta -da tutte le istruzioni che la

compongono, ogni istruzioneverrà collocata in indirizzi diversidella memoria di programma.per cui il PC al momento di ese-guirle avrà un valore diverso, egli induizzi che ne risulterannoper incremento o decrementoanche. Se isalti sono realizzati"verso l'esterno" della macro, si

noqsono riilizzaro ptirhafto

dato che queste non sarannoconsiderate ripetute.

ef;e uesxvxTeLa recursività è definita come lacapacità di un subprogramma

codice compilato. Una soluzronea questo inconveniente, la tro-viamo utilizzando gli indiizzirelativi. Invece di saltare verso

l' induizzo esatto di un'etichetta,si salta verso una posizione che

5i no

Allora

5e no

X=0

FACI0IIAL = 1

FAOORIAL = X t FACT0RIAL (X - 1)

Esempio di programma scritto in forma recursiva

mGromvwf llno ; grrlca 11 tíAgnov10 b'c88tll61.[Òvef F0nla

Sl. Disattlua ll Flòg

muuf îf{Fomvt.s b' 6BO6J11'' ,

meef p08înbtfss txtcoH,Totfgoto $-'rbcf tNf0frfi,f8lferdn

; Ffo$raM pflnrlpale

11toila

eartca ll lín8

Soro tarnlnitl I passl?tllt. Cortinut31. tisótttca 11 FlagRlt6roó

*viozó dl 2gS w l7 Oasst,

dlra i destra dl tó paÉ51.

guanza úl It paesl

Forma corretta di fare i salti nelle macro.

di auto-chramarsi. Al momentodi dichiararla, bisogna identifica-re bene il caso base per cui il

proced imento terminerà.Non tutti i problemi possono

essere definiti in base alla recur-srvità, e generalmente è unadelle cose più difficili da capire e

applicare nella programmazio-ne. In ogni caso con il PIC potre-mo ulilizzarla poco, perche conla recursività si generano indiriz-zi di ritorno ogni volta che la

subroutine si "auto-chiama", e

nel PlC16F84 abbiamo solo 8inditzzi di ritorno, tanti quantine puo contenere lo Stack,numero che è molto basso per la

maggior parte dei programmirecursrvr.

Ss**xrw**

Page 25: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Sch eda dette istr uzioni :fistruzione SUBLW

istruzione "sublw" potrebbe essere descritta

come il contrario dell'istruzione "addlw",

dato che realtzza la sottrazione di un valore

letterale meno il valore del registro W. ll risul-

tato rimane in quest'ultimo. I flag che vengo-

no attivati sono gli stessi che nel caso delìa somma,però, dato che l'operazione si realizza med ante il

metodo del complemento a due, il flag di carry, invece

di attivarsi quando c'è riporto, lo fa quando non c'è.

OPERANDODESTINAZIONE

Operozione: Sottrozione del volore letterole k

ol volore del registro W {k-W)Cicli: I

Codice oP: I I I lOx kkkk kkkk

Flog: C, DC, Z

Caratteristiche dell' istruzione sublw.

.q-o.-q_"9o9-t-1

oooooloo

Complemenloo 2diW lMlt0l

sommg -d9l

lqrole -c91 !t ,gomg-femlto o 2 {|!v oo-o9:1o_o_l

Doto che c'è riporto nello sommo si ottivo it flog C

v:hr-: -9i.Y.eli ry: i:ll li:1r".:i.:r:-

Volore letierole do cui soltrorre

Esecuzi one de I I' i str uzi o n.. su b lw

::::::aa:a:tt:a::aaaaat*la,?taaa,lL,tl::::::i:;\i

oDtion req lFistatuE- -

1F

I rs. {lo

iporta 0€

! trisr B0

: prrtb 6ttrisb FF

eedata go

€econJ St€eèir 3B

€econ2 BS

tclath BB

intcsn 6B

Esemaio tiaico dell'uso dell'rstruzione sublw.

l-Éffi,r'=:.,irr-SF* ll* llartBrB [8

: -lBldÌc g:^l

enflÈ s

254 1

t @lr QSf ; Pottr B

cffYF&l! ffiìÈ !O ; ltrtà aIt Hr* 6l2 htf *t,G : Ps$ al àaFl3t* elÈ S ; Si sp"4w i15 Frs 6*É ú!f s,l ; le3{o li p&ta7î ssùli Gtl btfs (É,2

; |lcro m cEi

; tccÉdt iì tE!2t agsal! hif f6,l

ff gste riR

Così come ci mostra ì'esempio, vediamo che quando il

risultato di un'operazione e un valore negatlvo, quello

che si scrive in W non è il valore, ma il suo comple-

mento a due, e il fatto che sia negativo viene segnala-

to da uno zero nel bit del carry.

g$frffirr. {*f,f &.'XS?ffi1}X5#ruffi S#ffiLWOltre alla funzìone classica di eseguire la sottrazione, l'i-

struzione sublw si ufilizza per fare le comparazioni.

lmmaginiamo di aver formato un numero con gli inter-

ruttori, e che questi siano collegati, ad esempio, alla

porta B. Questo numero può essere il numero di una

chiave, ed è necessario sapere se esso possiede un valo-

re determinato per convalidarla, e accendere un LED

rosso per proibire l'accesso e uno verde per accettarlo.

Sottraendo il valore che abbiamo in ingresso con il valo-

re di riferìmento (ma potremmo anche fare il contrario),

possono succedere due cose: che il resto della sottra-

zione dia come risultato zero o che dia un numero

diverso da zero, qualunque esso sia. Se il risultato è

zero, signif ica che ì due numeri sono uguaìi, e ottenen-

do questo risultato si attivera ilflagZ (di zero). Se dopo

la sottrazione si verifica il valore di7, si saprà se ivaloricomparati erano uguali oppure no, a seconda che il flag

Zvalga 1 o 0 rispettivamente.

$q*{i$wsxw*

Page 26: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda delte istruzioni:fistruzione SUBWF

la seconda istruzionedi sottrazione e sot-lraa ad I rn ron i<trn

chramato "f " il valoreche contiene il regi-

stro di lavoro W. ll risultato diquesta operazione rimane in fo in W a seconda del valoredel parametro d.

Così come I'istruzione pre-rcdpnto \/onnnnn rninvOlti i

flag C, DC e Z nella forma già

descritta.

ffi$ffie$trx fl#ru$-*XSTffi WtrX# $q ]l: S t* **W $:

|'uso di nreqta istrr r7i61'19 g

simile ,a nrrelln dpll'istruzione

sublw, che abbiamo appenavisto. Entrambe servono per

OPERANDOFONTE

f

El*is :{€úÈ !Eà1es leb

LIST P=1éF8à ; Defini:i3ne d"t procass$ra

CR* O ; Posizionafiento dell.a pri$à istruaione; all'indirj.zzo B della sì*ncria {ti pro$raRfla

;Cst arazion* con i ualori letterali

muf AC,O ; Sl mtte in S iL uetorg d1 rÈgistro gCsubl's 94 ; ffurmro con cui si uuole far"e La conparazitne

fioulù, g{ ; NUR€ro con cui si vusl"e fars la canparazionesubsf 6t,S : Sl ps"gue la sattrazione ccn il registro da

;Carvàrazione Sra registri

na'Jf Bs,a ; Si &ettè in !, il ual3re d"l registra BCsubnf S',€ : Regi.stro con cui si uùol* far€ La coaparazi

Esempio di comparazrone con le istruzioni sublw e subwf

Cicli:

Codice OP:

Flog:

Ca ra L teris ù c he d el I' istru z io n e su bwf

Sottroe ol contenuto del registro fil contenuto del registro di lovoro W.Se d=0 il risultoto si porto nel

registro di lovoro W, e se d=l si

loscio nello stesso reoistro f.I

)0 0010 dfff ffff., DC, Z

Operozione:

MNEMONICO

subwf

OPERANDODESTINAZIONE

d

sottrarre valori p oer fare com-' " Y-' '

pa razron r.

Comttnnrro ,a <crgnda del+i^^ ^li ^l-+^ ^l-upo (lr odro Lìa fomparare, nonsempre sr puo ulilizzare la

sL-rblw, a rneno di casi semprici,r'l:tn rhp nor o<adrrirn ÀnllnuoLU Lrrc PEr q)Eguilc uc tE

comparazioni la subwf e piu

comnieta Ner caso della com-parazione fra il valore di un

regrsîro e un vatore costantedeterminato, sarebbe a direcon un valore letterale, è indif-ferente l'uso di una o dell'altraistruzione, ma nel caso di com-parazione fra registri è necessa-

rio I'ulilizzo dell'istruzionesubwf .

Sw6*ses*wss*

Page 27: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Appli cazione pratica:

poco a poco stiamo conoscendo l'uso dellevarie risorse del PlC. Abbiamo studiato i

registri, le porte di ingresso/uscita e nell'ulti-mo esercizio proposto abbiamo parlato del

TMR0. Però il TMRO si può utilizzare in duemodi: uno come temporizzalore, e l'altro come conta-tore di impulsi esterni. In questo esercizio lo utilizzere-mo nel secondo modo

Leggete con attenzione l'enunciato dell'esercizioproposto e pensate a come risolverlo.

r{qx{\$# #KseN$sffi&&4ffi&La prima idea ootrebbe essere I'utilizzo di un contatoreda incrementare tramite il programma, ogni volta che

rileveremo un impulso (passaggio da 0 a 1 e nuova-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-to in modo soddisfacente già con il primo organigram-ma esposto. Dato che il nostro programma deve solosvolgere una funzione, non importa se impiega tutto il

tomn^ nol foqt:ro rrn i;16;pqq6 increment:re Un COnta-

tore, e compararlo con un valore dato; però se oltre a

Abbiomo un nostro trosportotore sul quolesiqnno possondo i pe:ni che vogliomo conlqre.Per contore il numero dei pzzi posizioneremoun pulsonle che sorà oftivoto dol possoggiodi ogni singolo pezzo. Per ognigruppo di lO pezzi otliveremo un diodo IEDche ci owiserà, od esempio,che i pezzi possono essere impocchettoti.

En u nciato del l' eserci zi o proposto

sl:èì::Wrrrrrrrrlu,urlSw#*wwvw

un altro programma con it TMR0

Configurozione:CONTATORÉRAO ingressoRBO uscito

spegnere il LED

RAO=I?

RAO=O?

CONTATORE = CONTATORE + I

CONTATORE = lO?

occendere il LED

Primo organigramma dell'esercizio proposto.

Page 28: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

€onfigurozione:RAA ingressoRBI usritoTIARO

spegnere LEDiniziqlizore TMRO

occeîdere LEDTOIF=O

Secondo organ ig ra m ma del l' eserci zioproposto.

*ffi*&ruXffiffi&Mffi&MffiTXruXTX\g#tl ^,,1--^+^ -++i,,-+^ -l-ll pur5anTe aluvaro oòt pezzt, sl puo

collegare al piedino RA4, il quale si

puo configurare per introdurre impul-si nel TN/R0. Ogni volta che arriva un

fronte di salita o di discesa, il TMRO si

auroincreme^ra senza la necessita di

eseguire alcuna ist'-z one. 'r- Pi-,confÌgurando ll TNIR0 Ln modo ade-guato, potremo essere avvisati del

termine del contegg o delie 10 unità.A^che se o-trsto qccordo rodo d

procedere e rnigliore del primo, non e

ancora quello ott ma e, pero non

potremo migliorare ulteriormente il

programma senza l'ulilizzo degliinterru pt.

Come vedremo, abbiamo elimina-to tutti i riferimenti al conreggio -che e controllato dìrettamente dal-

OPTION

Configurazione del registro OPTION per questo esercizio

questo dovesse

controlìare an-rho rho i nozzi

non siano di-fettosi, il movi-l-^h+^

^^l ^ aIlEttLU uEt tto-

stro trasporta-+^v^ -,, -,,, ^^-LLrr c )u Lu r pd>-<:nn i nozzi a

il braccio del

robot che li

prende, questo

sottrarrebbetempo al processore, dato che ci sono modi migliori di

fare la stessa cosa

l'hardware del TMR0 - ad eccezione del suo termine;questo controllo è realizzato verificando il valore delfl:r^r T0lF rhp nasspr: aUtomaticamente a 1 al terminedel conteggio, e che dovrà essere rimesso a zero per un

nuovo conteggio"

{sru Fgffi tiffiexg{.}ruffi *ffi L ffififfigsYK#$p?x**dIn uno dei capitoli precedenti, abbiamo visto come con-

figurare ìl registro OPTION per realizzare un determina-to conteggio.

Dovremo impostare questo registro ogni volta che

desideriamo lavorare con il TMR0. Per l'esercizio in

corso, in cui ilTMR0 dovrà contare gruppi di 10, non è

Sw#Swwrs*

VATORE DELTMRO

o00000r r Volore che si vuole contore

III!tIO0 Complemenf,o o I del volore do conlore

lIIltI0l Complemenfo o 2 del volore dq conlore,che è quello che si deve metlere nel TMR0

lllllll0 Volore che si incremento nel TMRO,con il primo impulso o istruzione

illiltìl Vqlore che si incremento nel TMROcon il secondo impulso o istruzione

00000000 Volore che si incremento nel TMRO

con il ferzo impulso o istruzione.A questo punlo owiene l'overflow e si oftivoun flog per owisorci di questo

Esempio del valore che dobbiamo introdurre nel TMR0

Page 29: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

necessario il divisore di frequenza, e dobbìamo confi-gurare il contatore in modo che gli incrementi sianoprodotti con gli impulsi che arrivano dall'esterno e non

con gli impulsi interni del clock.

I primi tre bit (0-2) rappresentano il valore del dìvi-

sore. Come abbiamo già detto, per questo esercizio

non è richiesto nessun divisore di frequenza, però asse-

gnando il valore "000" al divisore per il TMRO, risulte-

rebbe di 1:2. Pertanto dobbiamo combinare questo

dato insieme al bit 3, che avendo valore 'l assegna il

divisore al Watchdog in modo 1:1.

Con i valori dei bit 5 e 4 impostiamo rispettivamen-te l'incremento del TMR0 mediante impulsi, ed il fron-te di discesa per questi impulsi. Le X riflettono valori

che non hanno alcuna influenza sul risultato di questo

esercizro.

bóe$-#$qg: ffiffi&- Ytu$ffi#

Un altro importante dato da considerare quando si

lavora con iì TN/R0, è il valore con cui viene carìcato.

Per non creare equivoci è necessario conoscere come

lavora il TMR0; ouesto contatore si autoincrementa ad

ogni istruzione o impulso esterno,

oppure ogni due o tre istruzioni oimnrrlsi estprni sino ad arrivare al

suo valore massimo, che vale FF,

dato che sì tratta di un registro a Bbit, per poi passare dal valore massi-

mo al valore minimo, a 00.A, ,^-+^ ^ ----^^i^ e conosciutovuc)rv Pd))d99ru

con il nome di overflow, e ci awisa

che il conteggio è terminato, anche

se in realtà il conteggio non si ferma

ma prosegue. rmparato queslo, se

vogliamo che il TMRO conti fino a

"3" non possiamo caricare questo

valore direttamente, altrimentiotterremmo un conteggio di

3,4,5,6,7 ,8..., sino a FF, avverrebbe

l'overflow e ne saremmo avvisati.

^^^i .,^r+- -t^ ,,^^riamO Contafe\-/9 | il VUr Ld Lr rC vU9 |

un valore dobbiamo introdurre il

rnmnlomonfn : 7 di nrroctn v:lorc!v,,,P,Ll

Nl^ll- {in, 'rr rllnnr+r o rinnrt:fn rrnl\Clld ll9uld dllc9d Lo/ L I rpvl

esempio per il valore 3, in cui si vede

'n modo semplice e rapido come si

rnmnio nrael: nnrm:

La stessa tecnrca si aoplichera oer

numeri p ùr grandi.

${F$SeÌé! gLffiryffigil*

Nella f gura e r ooriato io schema

eettrico sempirficato. \,4ontandolo

dov'e-o coilegare oltre al 'al:ren-

tazione e la massa, il cristallo di

quarzo e il pulsante di Reset per

livello basso su MCLR.

Dei due elementi montati il pul-<:nto rlorro o<<ora nrnnrin <tt nttoqt:I f,r vl./r

ino: norrho o l'r rnir: rha o rnllan:-'il rLu/ VL !r rL L I urilLU Ll lq E LVllqyo-

H

-{ *uo

E'ù.iH,'rJE,ú,:C14lq,sr-r

H E'I

fccl HsICEEREù

I'EÉ H EilEB?

UBt' HE1E ETIIHT

Ftr IEFII4

Schema elettrtco dell'esercizio proposto

0fiG E ; Il programa inizia ,.,

goto IHIZIo : alf indirizzo U ,.,

tBfZIo bsf SIAîUS, fiPB ; Si passa aI banco I :noulu 8'866808ù6' ; Porta E uscitanDuuf TnISBnoulu E'38È16806' ; Bg4 inqr€sso" if resto uscitefiùu0f TRISnnouls B'081-llBBB' ; Configuraziùne de1 THnBnouuf llPfloH_REGbcf SÍRIùS,RFB ; Si passa a1 banco B

I bcf PùfiTS,LFD ; Disattiua LEDnouls 0*F6 ; Carica il TNBo con il cohplemîtoftousf IHRB :a2di1ú

CLo btfss INICOil,Í0IF ; Sono pèssati 10 pezzi?goto clcltl ; Ho, attenderegoto nCCENDEÈÉ ; si, auuisè cor iI LÉD ,.

IIDERE bsf PORTB,LED ; ÉCcENdèTÉ iI LEDbcf IHICoN,IBIF : nzzera lt +lèq per Ia prossina tenpgoto unL0RI ; Torna alf inizio

Programma finale dell enunciato proposlo.

Sw$*wwsw

Page 30: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

ta internamente con il TMR0, per fare in modo che si

incrementi. ll LED è stato collegato al piedino RB1,

ma potrebbe essere collegato a qualsiasi altro piedi-no di l/O.

Pffi##ffi&f-$fv$e

ll programma, dopo aver considerato tutti i passi pre-cedenti, apparirà come mostrato nella figura. Comenovità, è possibile notare il nome assegnato ai registrie ai bit.

Anche se potremmo chiamarli come vogliamo,ferma restando la funzione di ognuno e il modo diutilizzarli, normalmente hanno nomi che si possonoconsrderare universali, in modo che tutti quelli cheutilizzano l'assembler del PIC abbiano un linguaggiocomune.

Stato del I a si m u lazio n esubito prima dell'overflow del TMR0

S*SSweglwm

EQU &85EqU ar86

0nG 0goto rtlzto

Inlzro bsf sTeÌus, RPonóùlú B'A0!06A9!nóo{f fIISBnoul{ 8 00fi0!!t

$EAE bsf PoRlB,lEohcf IilTCoN,l0IFgoto UCLonI

€m

10 1ó C5flÉCgoqFe a7 7 09F4fi11

Scelta dell'introduzione di stimoli esternt

rrlrlÍ1ff]írìrìììììì::*w*j;ir]:rrrrrrt1tilr11ii1111ftfì*:rra,ìii!€i:?;1í$i|ruiìììììilf*gtirflÍ:f'r)t*trùìmi:::::&{@

pR*we ffitr1 pR{3&K&M$4&

La simulazione del programma precedente ci pone unanuova sfida, dobbiamo introdurre impulsi tramite RA4in modo che il TMR0 si incrementi.

Se proviamo a farlo con I'opzione Window>Modify,vedremo che è imoossibile.

Lo dobbiamo fare con l'opzione Debug>SimulatorStimulus>Asynchronous Stimulus. Da qui si aprirà unafinestra in cui fare la scelta dei pin da utilizzare perintrodurre tutti i dati necessari, e la forma di questi dati:impulso, livello basso, livello alto, o zero e uno alterna-tivamente.

Nel nostro caso sceglieremo gli impulsitramite RA4.In seguito mostreremo lo stato della simulazione, subi-to prima che il TMRO vada in overflow, e poi dopo l'o-verflow, al momento dell'accensione del LED

Stato d el I a si m u lazi o nedopo I'overflow del TMR0 e accensione del LED

iéx sec rrnafg6ú 3 046ú€ng8aó ó 4€6É3116

ion_r€g FF 255 11111111atù5 3a 5ó 0C111646

rr 00 0 sB6ú004cDrta c[ 0 co60606€

IfflcoN EQù gf0B0PlloN,R€c E{u 0x31lÎlsn €Qú 0xa5tntsB €Qú 0xa6

OBG O

goto IilIZt0

IilT2IO bgf STAIUS, sPOroulv 8 09ú00060'

òcf PoRts,LED

btfE5 ixlcoff,t0tF

qOtO ACCEilDERE

bsf P0BIB,LEoh.f lNtc0NtT0tF

€xD

Scelta per I'inserlone di impulsi su RA4

Page 31: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni :

f istruzione CLRW

uesta è un'altra istruzionenor l: no<tinno dai rr..- --, ,Jgt-

stri, anche se questa voltasi tr:tfa del renistro flilavoro W. L'operazioneche comnip non e altro

che la cancellazione (clear) del conte-nuto del registro, ossia la sostituzione

del valore del registro con 0. Comeper molte altre istruzioni, producendoquesto risultato si attiva il flag Z.

Dato che sì agisce sul registro Wnon sono necessari ulteriori parametri

addìzionali.

$:Sffi $-*PK fl*N gJ gSYffi $Kg#f\$ ffi

{$_ffiw

PARAMETRO PARAMETROMNEMONICO I 2

clrwOperozione: il registro di lqvoro W viene

coricoto con il volore 00.Cicli: ICodice OP: 00 0001 0000 00] 1

Flog: Z

Caratteristiche dell' istruzione clrw.

Come si puo osservare nelle due figure seguenti, l'uso

dell'istruzione clrw è simile a quello dell'istruzionemovlw 00. L'unica differenza sta nel fatto che dopoclrw si attiva il flag Z, dato che il risultato presente Wsarà 0, mentre dopo l'istruzione movlw 00 questo flagnon viene attivato.

Per fare la prova con MPLAB e vedere bene quando

Valore dei registri STATUS e W dopo I'esecuzrone

dell'istruzione movlw 00

variano i registri si raccomanda di cambiare i valori dei

registri STATUS e W prima dell'esecuzione di ogni istru-

zrone. Vì suggeriamo di introdurre nel registro STATUS

ilvalore 00, anche se in pratica i bit 3 e 4 non si posso-

no cambiare, e nel registro W il valore FF. Osserviamo

che eseguendo l'ultima istruzione la riga evidenziata innero non si modifica.

Valore dei regisrri STATUS e W dopo I'e>ecuzionedell'istruzione clrw.

Sw#&e*ewwep

Page 32: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda delte istruzioni:f istruzione CLRF

Valore dei registri STATUS

e TRISB dopo I'esecuzione della prima opzione

Mruffi

WM-^^-tÍt -^>pcLil rLd

assoctato

messo a

ome l'istruzione precedente,anche questa realizza la cancel-lazione di un registro, in questo

caso della memoria RAM dei

dati. L'indirizzo del registro si

come parametro. ll suo flagè nuovamente Z, che verrà

1 dato che il risultato sarà 0.

K$*&q PK fi #ru L*gSYffiWXg# gd ffi

CL&PLavorando con le porte di ingresso e usci-

ta. sovente è stato necessario inizializzare

MNEMONICO

clrf

OPERANDOFONTE

OPERANDODESTINMIONE

f

Operozione: il registro f viene coricoto con

il volore 00.Cicli: I

Codice oP: 00 000.| I fff ffff

k*Caratteristiche dell' istruzione clrf.

tutte le linee di una porta come uscita, per cui doveva-mo caricare il registro di configurazione con degli zero.

Questo veniva fatto con la combinazione di due istru-

zioni: la movlw 00 e la movwf f, dove f era il registro

da configurare.A partire da questo momento, con l'uso delle due

nuove istruzioni clrw e clrf. avremo diverse oozìoni. Per

:r.Ì20 ùdo ót tnt:iart:zèzto

provare adeguatamente i differenti casi, dovremo ini-zializzare prima di ogni blocco i registri STATUS (00), W

Valore dei registri STATUS

e TRISB dopo I'esecuzione della seconda opzioneValore dei registri STATUS

e TRISB dopo I'esecuzione della terza opzione

(FF) e TRISB

(FF)

Nel prrmo

caso non si

orLrvo il ilo9 L

per nessuna

delle dueistruzioni, nel

seconOo caso

si modif ica

con la terzaistruzione,così come nel

terzo blocco.

qrP

iFln. del p.ogr.h

$c#!wsre

Page 33: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

rappresentazione dei datisuldisplayaTsegmenti

Appli cazione pratica:

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 diinnresso 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 nerò se!vJr/ v!,v Jr

la sua interfaccia è complicata da utilizzare o richiedemolte conoscenze, azioni ripetitive, ecc. è condannatoall'insuccesso.

Non bisogna però conf ondere le interf acce di

ingresso o di uscita piu adatte, con le piu moderne; il

miglior modo per introdurre caratteri in un programmaresta la tastiera, e per muoversi sul video, il mouse. Nel

lavoro con i microcontroller succede qualcosa di simile.

Sino ad ora abbiamo lavorato solo con interruot oer

introdurre idati, e con idiodi LED pervisualizzare ì risul-

tati. Ora faremo un passo in più con l'utilizzo di un

nuovo elemento, il display a 7 segmenti. Sicuramente la*-^^;^"-^-- ,.Ji ,,^; -,,"- ,,+ili---+^ ^,,^-+^maggloranza or vor avra uLrtttàLo quesì.o elemenTo

come utente. E quello che indica il turno in pescheria o

al supermercato, pero ora saremo noi a programmarloaffinche gli altri lo utilizzino.

Rappresentazione del display a 7 segmenti

xL $}KStr$_&Y & 3 Sffiffiei$ffiFdYg

Quando abbiamo bisogno di rappresentare dei numeri,

la soluzione più semplice ed economica è il display a 7

segmenti. Come indica il suo nome è un dispositivo for-mato da 7 segmenti che non sono altro che diodi LED

COfiIPUIER

INGRESSI

I t t | .--1+lì\ttrtlrll.l

usctrt

L'interfaccia uomo macchina è sempre più importante.

$*#*wwm*w

Page 34: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

0n

n

0

I

I

I

1

Volore Volorei"crt"n"ti a".irol" dP S f*i*"0 -:--*o -':-*-o d o **]*"4'

ib;i*

1-*:1jl!rÌl;oi0itì

iqll

1:0l

\loloe ieqdeimte lj

3F

0ó5B

4F

ooóD

7D

07

I

I

001

I

I

1

0I

0I

ri0Ì02 i o i13:Ot]4a0tr5:Oilójorl710:0

00

lI

I

0

In

0

l0

0

I

I

01

I

1

01

I

I

I

I

I

0I

lI

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

numero 8. Questi segmenti sono numerati, comemostra la figura, con lettere consecutive dalla 'a' alla'g' iniziando dal segmento superiore e continuando in

senso orario per terminare con il segmento centrale.Oltre ai 7 segmenti c'e un punto decimale nella parte

inferiore destra, indicato come dp, che a volte si ripeteanche nella oarte sinistra.

ffi ru# ruflg&Yffi *KLei"g$mKflXXX*Lesercizio che ora vr proponiamo non ha grandi prete-

se, vuole solo aiutare a comprendere il funzionamentodel display a 7 segmenti per il suo uso in progetti più

ambiziosi. Leggiamo pertanto l'enunciato e mettiamo-ci al lavoro.

Quello che si richiede è di trasformare ilvalore bina-rio che un utente introduce tramite gli interruttori in un

codice nuovo, in modo che si illuminino i differentidisplay a seconda del numero che si vuole rappresen-tare. I numeri possibili sono dallo 0 al 7, dato che i valo-

ri degli interruttori potranno variare da 000 a 111.Prima di fare la tabella corrispondente dobbiamo cono-scere un dato in piu sul display. Tutti sappìamo che un

diodo LED ha due terminali, conosciuti come anodo e

catodo, e che se colleghramo il catodo a terra e l'ano-do a un PIC dobbiamo far uscire dal piedino del PIC un

1 logico per accenderlo, al contrario se l'anodo è colle-gato a 5 V e il catodo al PlC, dobbiamo fornire uno 0logico per accenderlo. Con i display succede la stessa

cosa, solo che tutti i segmenti (LED interni) sono unitifra loro per l'anodo o per il catodo, dando quindi il

nome al display che potrà essere di anodo comune o di

catodo comune rispettivamente. In un display di anodocomune, si dovranno mandare degli zero per accende-re i differenti segmenti, e in un display a catodo comu-ne ogni segmento si accenderà con il suo 1 corrispon-

dente. In questo esercizio simulramo il display che si

accende con uscita a 'l , cioè un display a catodo comu-ne. Vedr tabella in alto

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

il punto decimale, questo rimarra(non+^ ll mntivn nor., r-. cur 5r pa55a al

valori esadecimali e che si possono

maneggiare più efficacemente i dati,mpnfrp nnfrohhpro eSSere confusifacilmente con tanti 1 e 0.

*ffi#eruxffiR&ffiffi&L'organigramma per questo esercizio

è molto semplice, visto il modo concui utilizzeremo il display a 7 segmen-

tì. Forse qualcuno starà pensando che

bisognerà testare il valore degli inter-

Si vuole roppresenfore per mezzo di un disploy o Z segmentiil volore introdotto tromitelre interrutlori, in modo che il volore binorio di questi ultimisio visuqlizzoto in decimole.Questo può essere uno piccolo porte di un progetto più gronde,in cui un fottore importonte siolo roppresenlozione dei numeri - doto che non tutti gli utentipotrebbero non essere o conoscenzodel sistemq binorio, come succederebbe se si visuolizzosserole informozioni tromite i diodi LED.

E n u nciato del I' eserci zio proposto

$e$trnrsre

Page 35: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Configurozione:RAO-2 ingressi

RBO-ó uscite

Roccogli volore

ConYeÉivqlore in

codice 7 segmenfi

Visuolizzo numero

Organ ig ra m ma del l' eserc izi o p roposto

ruttori, e a seconda di questo,

mostrare i differenti valori sul display,

però per questa simulazione non sarà

necessaflo.

Confìgureremo la porta B come

uscita, per collegare ad essa il display,

e la porta A come ingresso per gli

interruttori. Dopo aver raccolto il ""--"-"-"-

Fo+i:o+>o+

Disploy o cotodo comune :

Schema elettrico dell'esercizio Droposto.

istruzioni tipiche di configurazione delle porte, di un

ciclo principale che corrisponde con i passi visti nell'or-ganigramma e che è ripetuto all'infinito Per ultimo, la

subroutine di conversione dei valori binari al codice per

i 7 segmenti, che abbiamo già spiegato parlando dell'r-

struzione retlw.

valore degli interruttori si realizzerà una conversione,

secondo la tabella vista in precedenza, e si visualizzera

il risultato sul display a 7 segmenti.

S{$"$flr*qe m$-ffiYYffiX{#

Nella figura dello schema elettrico mostriamo la con-

nessione degli elementi da utilizzare.Non sono riportati i collegamenti del-

I'alimentazione positiva e negativa, il

quarzo né iì pulsante di reset. ll

nrrntn dorim:lo dol r.li.^l-,, À e+r+apurrLU usL[rors usr ul)Pldy C )LdtU

lasciato in aria. Se si volesse collegar-

lo, si dovrebbe fare con la linea RB7.

Gli inter.uttori sono collegati alle

linee meno significative della portaA nor rondoro niir comnliro l: rnn-

versione.

PM*GRAMM&ll programma risultante è illustratonella frgura: si compone, oltre alle

$sffi#v'e ffiffi*-pR#*ffi&ffiF$&

La simulazione del

programma non

sarà semplice, datoche non abbiamonel sìmulatore un

display a 7 segmen-ti, su cui vedere i

valori convertiti.Dovremo accon-tentarci di vedere i

valori che ottenia-mo dalla tabella. sul

Sw$*wr*xse

ED

ÌtIzt0

B 000ad1r'

atN_tsE6

CICLO

50

rl 9rograR in12ia

Passiar aÌ àaîco 1

tèggìar ll larorè dèg1l lîtèrrúttori0niaÈta allà roútìae ri trèsfo.Èriún€uisuèriz.iah il !.lorè sùl distìagst rtpètq aD tnflntto

Si srN il ualorÈ dell'indlcèsl rèstitùls.e il ùrÌ.ru úi a tr.sforÈtò31 restltùis.e i1 uèhre dt 1 trasrorÈtosi rèstltùis.e iÌ oèlora di 2 trasforDtosi rcstitùl5ce il u.l.r. dì 3 trasrorstosi restitúiscè il !ùlore dì | tràsFùrEtosì .èstltúlscè ll ùaÌù.e di 5 tiast.rDt.sl r.stitúisc. lì calorè dt 6 trèscèrÈt.si restltùisc. ù !òÌo.è di I trasforÉt.

Prog ra m ma del I' en u nciato proposto

Page 36: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Un momento della simulazone

registro PORTB. ll valore mostrato dipenderà dal valore

valore degli interruttori, e al registro PORTB che contie-ne il valore convertito. I valori devono coincidere con latabella che abbiamo visto.

fl #ffi pà_xfl F$ s&$w * $Jffi ru q"$ pé fl.l{&?*

Che cosa ne dite se vi oroooniamo di ulilizzare non un

solo display, ma diversi, per rappresentare numeri conpiù di un digit? Di sicuro starete pensando: impossibi-le, il PIC 'l6FB4 ha solo 13 Iinee di ingresso/uscita e

ogni display ne utrlizza B I

Arioto r:ninno norlH-,J Sr puo sempre ncorrere a quar-

che piccolo trucco. In questo caso collegheremo diver-si display in parallelo, in modo che I'rnformazione man-data a uno di essi sia ricevuta anche da tutti gli aìtrì.

Affinché non sia visualizzato lo stesso dato su tutti i

display, che sarebbe la stessa cosa di averne uno solo,

brsogna ulilizzare le linee addizionali, una per ogni

display, che li attiveranno in modo consecutivo tramitedei transistor; in modo che se ne attiva solo uno per

volta, al momento divisualizzare il dato che gli compete.Ogni attìvazione sarà associata al dato da visualiz-

7Àre îpr nrrpl disnlav Orresto nroceqso e cOnOSCiutOYVLJLV

con il nome di scansione, ed è simile a quello realizza-

to, ad esempio nei teìevisori, per mostrare l'immagine.Se si realizza l'attivazione di ogni display con sufficien-te velocita. orazie alla modalità di funzionamento del-l'occhio umano, si produrrà la sensazione ottica che

tutti i display siano attivi allo stesso tempo, ognuno con

il proprio dato.Per realizzare questa simulazione pero, servirebbe

qualcosa in piu dell'immaginazione.introdotto sulle linee RAO-RA2.

Ricordate che il modo di introdur-ro nr ro<ti d:ti qi rnnf in' '.. À -ll'^^-i^-ru VuLrLr il ryulo uoll UP4IU-

ne Debug>Simulator Strmulus>Asyn-chronous Stimulus.

Abbiamo sceìto l'opzione Toggle,rho p nrrolla in nr,ado di simularemeglio il funzionamento degli inter-ruttofl.

Ogni impulso che introdurremotramrte una linea fara in modo che

questa cambi il suo valore, cioè se è an ^---^.- - I ^-^ À - I ^--.^"ì - n\JPd))Crdd I c)ced I pd))crddv.

La simulazrone si realizzerà conl'opzione Debug>Run>Animate.Nella frgura è riportato un momentodi questa simulazione. Fate attenzio-ne al registro PORTA, che contiene il

Sm#sqerwrm

!'ifirnfi8 ! €Qu 0rcsÍocro F EQù 1!lrs!8to PCt EQù Ax@úúÍ11111 STaTUS EQù 6xB3!í!Ífr0íìr P0ITA EQU 0x61r11i111 PoATS EQU &ùÍiíj!90tr0 RP! EQù 0xs$Í0$!0t0 IRISA Equ *453flrqî3ii6 lFlss Equ oxaé

IflIZlo bsf Slnl0S,tP! : Pasllah al bancò IFvlr Ea!s40000 :P.rt.Bdsrit.xu* TnISB

tulHel

Configurazione dell' introduzione degli stimoli esterni

oBG A t 11 progranà iniziagoto lfffzlo ; a11 indirlzzó a

3i;3::il "6ee4ta1o Dvt' P0Al8 : Uii{irlzzlam 11 {órrlarr1l1 qot. GICIo : Si ripéte alt infini

RBO

RBIRB2RB3RB4RB5RBóRB7

RAO

RA]

RA2

RA3

Schema elettilco per l'utilizzo di diversi display.

Page 37: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Sch eda detle istr uzioni :l'istruzione ANDLW

uesta e la prima istruzione logica che trovia-mo. ll suo compito e realizzare la moltiplica-zione logica dei due valori: un valore lettera-

le e il contenuto del registro di lavoro W. ll

risuitato rimane sul registro di lavoro W.

Se il risultato delì'operazione è zero, si attiva il flagZ.

E considerato falso il vaìore 0, e vero tutto cio che

non è falso, cioè tutto cio che ha valore diverso da 0. In

alcuni linguaggi di programmazione, questa istruzione

puo avere più di due operandi. Se tutti isuoi operandi

sono veri darà come risultato un valore vero, e se uno di

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

come lo fa nel PlC, dove lavora sui bìt di un registro. La

prima tabella mostra il funzionamento generale e la

seconda un esemoio oarticoìare. Partendo da due valori

per un registro e per un letterale, se si lavora con il regi-

stro al completo, il risultato finale sarà 0 (falso) sola-

mente se uno dei due valori, o entrambi. sono 0. In tutti^li -l+.i ---i il "i-,,1+-+^gr drLr rLo)r r,)urrqLv sarà vero, però non ha nessun

senso dare un valore, infatti le istruzioni che operano in

questo modo non lo danno: lasciano solo un valore V in

una varrabile di tipo logico o booleano. Se si lavora con

i bit, avremo il risultato di ogni coppra di bit, e puo suc-

cedere, come nell'esempio, che due valori che in princì-

pio non hanno valore 0, diano questo risultato combi-

nandosi con una istruzione and loqica.

ffisffiffig3x{*F* tjg$Y$4#x,K#ruffi&Fdffi$_wMentre un'istruzione arit-metica uÍtlizza come unitàbase un registro completo,un'istruzione logica opera

con ognuno dei bit di que-

sto reoistro in modo indi-nanÀania \/arlirmn nr'^.+1pcllucllLc. vcuror ru l]tlr)ld

differenza con l'istrrzioneAt -,.1 -l -+:--^ ^--,,^^ndO.ut Lut Lr )Lrdr ru uLLuPo

fistruzione and, chiamata

anche moltiplicazione,suppone che ivalori con

cui si opera siano veri (V) o

falsi (F).

OPERANDOMNEMONICO FONTE

OPERANDODESTINAZIONE

it

:

Operazione: reslizzo l'operozione logico ANDfro un volore lefierqle

e un volore del reoistro di lovoro W.Cicli: I

Codice OP: 'l I l00l kkkk kkkk

Flog: Z

Caratlerisl.iche dell istruztone andlw.

Tabelh generule

**Js:*--* -M* "ii*:dn*-i**n"i -.---L--i"-*.t**l -""-".Y-.i "--.,'".-t.---"i**J_".iVFF

y"."".i -"--x*i " -""-"Y,-*.-i

Lsrcro con rcgistrÍ lsvlttmnbit i i

,ssx:k#ffi#--rti*s!t*"F."i "Hi*r";rj!Mt ."".-fi

-gl-qi-$3,:-llqjg$rs--.".--y*-*-:3l"qlq1srr,!sg!-q.!* -9ffio"-{nii

Fu nzi on a m ento d -^l I' t struzr o ne a nd lw

#q*##ews*ww

Page 38: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda di istruzioni:l'istruzione ANDWF

ino a questo momento la maggior parte delleistruzioni viste hanno due modalità, per quantoriguarda gli operandi con cui lavorano; in que-sto caso, anche l'istruzione and ha questa

seconda forma: la andwf. Come si può immaginare,per comparazione con le altre istruzioni, la differenzasta nel fatto che le operazionr si realizzano fra il valoredel registro di lavoro W e il valore del registro f, lascian-

do il risuitato in uno o nell'altro, a seconda del valoredel secondo parametro. lnoitre verra coinvolto il flaq Z.

If OPERANDO OPERANDO

MNEMONICO FONTE DESTINAZIONE

ondwfOperozione: reolizza l'operozione logico AND

fro il volore del registro f e ilcontenuto del registro di lovoro WSe d = 0 il risultoto si loscionel regisfro di lovoro W e se d = lsi loscio nel medesimo registro f.ICicli:

Codice OP:Flog:

Ca ratte risti che d e I I' i stru zion e a n dwf

Nella figura corlspondente si realizza la rappresenta-zione grafica dell'istruzione and mediante un circuitoformato da alcunr interruttori. È sufficiente che un solointorrt rttnro <i: :norin /r,:lnra {rlcnt nnrrh^ r lrmn'ÀiilrLErruLLvrs )ro qpEr Lv \vorutq tcì>ur pctL|c d tdItpdul-

na non si accenda (valore falso).

il$;*.${ tr.Y *fr L!*'i.STffi #X,h3fd tr . S $}bd$r

f istruzione andwf opera nello stesso modo della andlw,cioe bit a bit, per cui l'esempio già esposto serve ancheper questa istruzione. Così l'esempio che vedremo ora,sara simile per enrrambe le istruzionr. Queste, e tutte le

logiche in generale, si utilizzano per fare quelle che ven-gono chiamate maschere. Una maschera permette di

operare su diversi bit di un registro senza alterare il resto.

Ssw#swwyqxr,rrrfrrlrrrr{ìrìsÌr11:i:.::::.rl3ry(lÌl!l{i:ffiffi ,!trrl

Fi F

l*1,Circuito con interruttori per rappresentare I'istruzione and

Orroctn À rriilo nrrrnn{n rrn ranic+rn ci "+ili--- "yvlJLv ,-- un regr5rro 5t uI'|tzza per otversernco:lln <ttr(q^ tomn^ Pcr pqpmnin noi nrnnr3pprylj 163{-I rvv.

' Ll

lali finn.ì orestÒ mompnlo lp norte A p R si ulllizzava-no come ingressi o come uscite, pero mai con le due fun-zioni allo stesso tempo; non perche non sia possibile, maper maggior comodità. lmmaginiamo ora che la porta B

sia collegata a quattro interruttori e quattro diodi LED: si

tratta di conoscere il valore di questa porta per realizzarenrpqt: n nrroll: nnor:zionp o di :nire sr ri LED Senza

interferire con il valore degli ingressi. Per non falsare i

dati, dovremo realizzare differenti maschere. Nella figurasi esegue quest'operazione con l'istruzione andlw o con

la andwf. essendo 0ueste intercambiabili.

Annullamento dei bit più significativi della Porta B, rimanendo con i valoridegli intenuttori situati sui quattro bit meno signifkativi.

PORTB,W

b'00001 I I 1'

5e PORTB = 0,|101100, dopo l'operazione avremo che W = 00001100, dato chegli zero del letterale fanno in modo che qualsiasi valore diventi zero, mentreil valore I lascia che il risultato dipenda dall'ahro bit.

Azzeramento dei ted della Porta B senza coinvolgere gli interruttori.

movlw 0tandwf PORTB,F

Anche se l'operazione sembra la stessa del caso precedente,

nel primo caso awiene in W. per cui la Porta B non viene modificata, mentre

nel secondo caso si realizza direttamente sulla porta, cambiandone il valore.

movfandlw

Esempi con le istruzioni andlw e andwf

Page 39: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Applicazione pratica:scrivere chiavi netl,a EEPR0M

ffi n numerose applicazioni è-re-ffi necessario scrivere una serieg&EEI

ffi dr datr cne dovranno por esse-

ffi re recuperati. Se questi dati si&aw memo|zzano e st recuperano

nella medesima esecuzione di pro-gramma, possono essere scritti nellamemoria RAN/ che, anche se volatile,non perde le informazioni sino a che

non si spegne il sistema.Pensate ad esempio a una sveglia:

una volta conf igurata l'ora corrente e

l'ora dell'allarme, essa ci avviseràogni volta che entrambe le ore coin-cideranno, e non dovremo più ripro-grammarla, a meno che non manchi

- la corrente. lmmaginate ora una cartadi credito, i cu j dati sono scritti grazie

a un'alimentazione esterna nel

momento in cui viene introdotta nellptlore' in altre narole dato che nonnn<<iodo :limont: .-zrone propfla,ntt:ndn ò nol lotinra À rnllan:f : avuorruv q rrgt rgLtvrg E twilE9qto/ E

quando non e inserita è scollegata.In oresto raso se si utilizzasse lo

stesso tipo di memoria, la RAM, ognivolta si dovrebbero configurare alcu-ni dati dell'utente, ad esempio il codi-ao nercnn:lo d:tn -l^^ ^,,-l-i--:_,-J LtìE gUdt)td)lmodifica andrebbe persa togliendo la

scheda dal lettore. ll tipo di memoriaadenrrato in nrresto ca5o e la

EEPROM.

Questa memoria si scrive e si can-cella elettricamente, e i suoi dati nonvanno persi togliendo l'alimentazio-ne. Ora impareremo a leggere e scri-vere in questa memoria, e applichere-mo tale metodo in un primo esempiomolto semplice.

Specificore indirizzo dq leggere.

Dore I'ordine di letturo.

Roccogliere il doto lefto.

Passi per la lettura della EEPROM dei dati.

ge ge8us qÉiffi Ift& !g;*A 4+

mulsFus€callMufmuufgsto

LEGAI EEFROII mufnÚuífbsfbsfbcf[ouf60u*Freturo

Passiam al bancc -l

Porta I sgcita

8adóio al banco E

scriuièm l'irdirizeo da leggerein ùna uariàbile ausiliariaChia€ta alla roútine ói lettsrasi ùistralizzù it risrltitosulìa PortB g

SpostiÈE I'iodirizzo da leggeressl sro registroPassiaE al banee Illrdine di letturaPassaggis al banco 5sprstia* il dato sulregistro aúsiliEris

SIAfUS,BPB8' g8ABA66A'

TRISEsT*tus,RPs

83EEfiDR_USRLEGGI_EEPROIIEElnTn_ufiB,tfPOETBI}IIZIB

EEADE_UàS,t4EEADÎslATrrs,qP8EEColft,BDSTATtS,SFtEED6TC,tEIDSTR UAB

Subroutine e programma per la lettura della EEPROM dei dati

Sqp$&wwrsp

Page 40: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

*-ilYYài Ke ffi tr*-L& 14 sM*ffig&ffiffipffi*$r4 gSKX ffi&YX

ll nrocesso di lettrrra della memoria

EEPROM dei dati richiede solo di

seguire i passi che sono elencati nellart^,.-- -rr^^-+- {^-^tdO USO dellail9Utd cilE9OLO, rqLEl

RAM dei dati.ll nrimo nàqsn p snecificare l'indi-

rizzo che si vuole leggere. Dato che la

EEPROM dei dati nel PlC16FB4 ha 64

byte, questo indirizzo deve essere

compreso fra rvalori 00h e 3Fh.

Questo valore deve essere introdottonel registro EEADR, ubicato nella posi-

zione 09h del banco O. L'ordine di let-

tura si dà ponendo a 1 il bit 0 (bit RD)

del registro EECONl, che occupa I'in-

dirizzo 08h del banco 1 nella memoria

RAM. A quel punto il dato letto appa-

rirà nel registro EEDATA, posto all'indi-rizzo 08h del banco 0. Questi passi

sono stati scritti in una subroutine chia-

mata LEGGI-EEPROM, la quale vtene utiliz-

zata per leggere un dato a un determinato

indvizzo e mostrarlo sulla porta B.

Cambrando il valore del registro

EEADR-VAR, si realizzerà la lettura di

un altro indirizzo. Per fare la simula-

zione di questo primo programma

dovremo prendere, oltre al file dei

registri specifici, come abbiamo già

fatto altre volte, anche i registri della

porta EEPROM dei dati. Inoltre se

vogliamo che neìla porta B si veda il

valore dell'in dvizzo della EEPROM,

prima dovremo mettere in quell'indi-

rizzo un valore, dato che per defaulthanno tutti valore FF. Questo si ottie-ne con l'opzione Window>Modify.Nelle due figure sono riportatequeste finestre, prima e dopo la

realizzazione della simulazìone.

Questa simulazione si puo fare con

l'opzione Debug>Run>Animate, o

Debug>Run>Run, infatti ci interessa

solo il risultato finale, dato che que-

sto programma è in pratica un ciclo

che realizza continuamente la stessa

funzione.

$w#*wwsw

, ,JEt4l.tSBinaru ^issos8i8o

= F

soggstuo -i FD

1i1'ti111 :BPc

BXtrlBX 6é

6:{ 68

BX 69

OXtr6X 60

6X8ó6X88

ilmff ==.r:..::.1SFS HaF H€x llec

tnr0 B0 6

pcl BÉ 6

eption_reg FF 255status 1B 2ilfsr 5B !porta Bs IlrisÉ 1F 31

psrtb B8 Itrisb iF 255Èedata FF ztteeclnl gB 0

eèadr 63 3

eec[n2 0S 0

pDlath 00 0

intcún Bg 0

sg53t8prF FF 259

bsf STf,lUS,nP0MUlr B'56606050'murf TRISBbcf SIATUS,RP8

mulu 63musf EEeDR_Ufif,call tEG[I_EEPn0fimuf EEDgfn_Ufin,UHurf P0BTB

goto IfllZI0

muf EEntR UAn,il

PassiaffiPorta I

taúio .

scriqiafin ufia IChianat;si uis!:sulla Pr

spo5tiar

qJ.:* = -ltrlr---- 3à Fl P fl 6à 65 s t7 S^TIET FI IT IT 35 FF FT FF Ff ffSfI! FF FI FF FT TF Ff fF FT

IEà FF FÈ FF FF 'F

FF IT F' FiC*I3 FI TF FF fF fF FF FI T5 F'

--zùc,Bkún:Sbt:.tl,lHz :Ed

Finestre preparate per la simulazione

lr** tA q*4 !Étrs Iosb Hid6# !+

Scriuiatir úna {

Chianatisi uisuisulÌa Pr

Ílouf EEADn_Uf,ft, S

muuf EEAllfi

bsf STeruS,fiP6bsf EEcoH-l,BD

bcf STATUS,fiFg

#fffl=;a:i:.1:,,r,'.::'':'' -ltrlt{}SF8 HaR Hex Dec Einarg ^tnrú 0S ! ù0SBCú06

lii i.! :; *'!i1ì95-topti.on_reg FF 255 11 111 i11stituE 18 2q !6fl11886fsr sE É 606S0800porta g0 0 B6ffS08gB

trisa 1F 31 06011111p*ril BS i31) 1tÉài$nfl:f::i !41 È 8$il8$5f3.rc;t: ti i.2í 1S8È-r*BS

ercBil1 ÈS S BA60SB06

Éeadr Bg 3 B6úBBII 1

escún2 65 ! 068008S0pclath S6 0 86!05S6g!:Ì1r.,:: lil I *:i**SgE1ir 6$ 13{ I g*g-i *i1F

tlSFrt 13 i7! 1 *.11 S*1j

---- !e fi e C! 3{ 85 S t7 !8^ltft tl ;f :i S8 :l ii l- i: Vt

33!! i:: ft iF ar i:t F,' rt Fr a

3&a ti FF at: rF if iF íi Ff rIts! rF FF tr ft ir FF ti fF Ff

Ek0n Sin {l'lHz Ed

Finestre dopo aver fermato la simulazione

Page 41: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

sf,ffi33Y#ffi&ff#.1*;' Mffif,q#Pf,iffi*itrry#ffi ffirg m&?ill nrnro<<n .li q6pi11r rrr Àall:il PtvLgJJV Ur )!r rrLulc uEllo

EEPROM è un po' più complessodi quello della lettura. Questoncrrhp mtrntro l: lottr rr3 e imme-diata, la scrittura non lo è. La

scrittura impiega un tempo mini-mo di alcuni millisecondi. lnoltre,affinché non si producano scrit-

iure errate, bisogna rispettarealrrrnp nrnrodrrrp di sicurezzanrodi<nncté d:l .Òstr rttore

N/icrochip. Così dopo aver speci-

ficato I'indirizzo dt scrittura del

dato e abilitata la scrittura, dob-biamo caricare nel registroEECON2 due valori reali: 55h e

AAh. Questi registri non sono

implementati fisicanente e si

ulilizzano solo in questo proces-

so di scrittura.

Oltre a questi, si utilizzano glì

stessi registri che servono per la

lettura; infatti sono stati inclusi

in una subroutine chiamataSCRIVERE_EEPROM, che si usa

nel programma della figura per

scrivere il dato 27 all'induizzo03. Cambiando il valore dei regi-

stri EEDATA_VAR ed EEADR_VAR

si realizzerà la scrittura di altri

dati, in altri indirizzr. Per la simu-

lazione di questo secondo pro-

gramma, utilizzeremo gli stessi

reoistri del r-aso nrecedente.rRealizzate la simulazione con

l'opzione Debug>Run>Step e

fermate nell'uìtima istruzione il

programma, arrivando all'eti-chetta fine, cosi come e mostra-

to nella f igura. Come si puo

osservare non e stato scnttonulla nella EEPROM dei dati.

Questa scrittura non si produrràfino a che non utilizzeremoancora diverse volte l'opzioneStep (F7). Questo è dovuto al

Etu Prottrt Ed 0.en"S lptore ]oois Wìndou Eeh

: I1 orooranna inizia

IHIZI0 noulu 03 ; HEttiano I'indirizzo in cui scriueremouuf EEADB_UAE ; su di una u3riabite ausiliarianoulu 27 ; l4ettiano il dato da scriuerefrouuf EEDATA_unR ; su di utra uariabite ausiliariacall SCRIUI_EEPR0}| ; úhianata alla routinegoto FIHE

SCBIuI-EEPR0ì| nouf EEnDfi-Ufi8,1,1 ; spostiano I'indirizzo da scriuere Ifrouuf ETADR ; sul suo registronouf EEDAfn_unR,ll ; spostiano il dato rla scriuerenouúf EEDATA ; sul suo registrobsf STÉTUS,BPO ; Passaggio aI barco 1

bsf EEc0Hl,trBEH ; Perness0 dÍ scritturanoulu 0X55 ; Inizio della sequenzanouuf EECoH2 ; obbligatoria dinoqlu 6XÉA ; sicurezzanouuf EEC0H2bsf EEC0H1,I,|R ; 0rdine di scritturaret urn

FIHEEHD

Subroutine e programma per la scrittura della EEPROM dei dati.

Ede fuotwt ldit lebuq lploro lock Windw leb

ÉG-F*=1.Ií".Î.F.1:;t.l'i-. .-'-','r,'.t:.,,,':,,,,, :' =lgjèlEEDîTff,UAR EQU úXOD

IRISB EqU 0l(8óEECoN1 EqU 0X88

EECON2 EQU OXSC

l1 prograalf indir

I'lettiiftonsulr4 63

oouuf EES08_UA[noulu 27nouu,f EEDfiTA_UAR

call SCfiluI EEPR0tl

su di rnllettianùsu di unàChianata

spùstianosul suo rSpostianssul suo rPesseggioPernessolnizío deobbligatos i curezza

0rdíne di

SCRIUI EEPR('I4 núuf EEnDR_UÎR, !,Íìoeuf EEfiDBnouf EEDnTe_UnR,Unúuuf EEDATe

bsf STnIUS,RP0bsf EEC0N1,!,REllnoulr,, 0X55

nouúrf EEC0ll2noulu 6l{AÉ

nouuf EEC0N2

bsf EE[0H1,t,Bretur n

f ili!=l:li-. ::e;r4r:=SFB Hane llPx D8c ginargtnr0 A0 S oBBdnoSS

irì i3 1E f!8iÉt11rption_r?g FF 255 111 111 11

ststus 38 !ó 681 1 1 008fsr ú0 ú 0BB5ù060porta tlo 0 06900880trisa 1F 31 80011111portb 0(} I B00$0rrtlntrisb FF 255 11111111eÉdata 21 3S 6t!l t10111

eecnnl gó ó 0B0Bú11 B

eeidf ú3 3 00ú0ù911eeccn2 Èn 170 10101816pcldth B0 B 00008000irìtcon 68 B 8000ùS60$ iìfi 17S 1S101010t Siìr? 1'! tl S681 ùÌ 1 J

---- 06 6l B2 03 94 05 0ó 07 Bf.SCÉS FF TF FF F' FF FF FI FF FI

5810 Fr FF Ft Ft Ff FF tf rF tiÈ@$ iT FI FF FI FF FF FI FF FISffiq FF FF FF FF FF F!: FF IF FI

rc:&r13 w.&4.-zdcc Bk0n 5h thlHz Edt

Finestre al momento dell'ultima istruzÌone

Sw#swwryw

Page 42: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Vogliomo ufilizzorelo EEPROM

per scrivere un codice di un

solo digit che può essere

letto, visuolizzoto o combioto.lJopzione dipenderù dolvolore di un segnole

d'ingresso, e ilvolore domodificore si introdurràtromite quottro piedini del PlC.

E n u n ciato del l' esercizio proposto.

tempo che impiega la EEPROM per scriversi, per cui,se si uscisse dalla subroutine immediatamente dopol'ordine di scrittura, questo tempo non sarebbe anco-ra trascorso. Se dopo aver chiamato questa subrouti-ne si proseguisse con il resto del programma, dopo un

certo numero di cicli riusciremmo a realizzare la scrit-tura, però se subito dopo ilciclo discrittura siva a leg-oere o si nretende di scrivere consecutivamente diver-si dati in differenti indirizzi, il programma non funzio-nerà, dato che non ha avuto tempo sufficiente per

tura che la lettura della EEPROM. Leggete l'enunciatoche vi proponiamo. Utilizzeremo i quattro bit meno

significativi della porta A per introdurre i valori da scri-

vere nella EEPROM e la porta B per mostrare questo

valore. La quinta linea della porta A sarà quella che

determina se si legge la EEPROM o se si scrive in essa

un nuovo valore, a seconda che abbia valore 1 o 0rispettivamente. Seguite le istruzioni del programma

principale. Le chiamate alle subroutines le abbiamo grà

viste e commentate.realizzare la scrittura. Dovremo quin-di modificare la subroutine di scrittu-ra. La modifica consiste nell'attende-re che la scrittura del dato sia termi-nata, croè verificando quando vienemesso di nuovo a 0 il bit WR o quan-

do il bit EEIF (bit 4 del registroEECON 1) viene messo a 1 . Dopodovremo resettare via software que-.+^ {lrn I Inr h' rnnr f666i62 di nrn->LU lld9. ulld UUUI ld LL!ril!u vr prv

grammazione consiste nel verificareche il dato scritto sia veramente il

dato che volevamo scrivere, leggen-dolo e comparandolo con l'originale.ll bit 3 del registro WERR verrà messo

a 1 in caso di errore.

e_ffiYT#ffi& m sflffi]i?Y*ffiefl*î4ffi3qJruYilfìi <onrriin mncfrorom^ r'n: nirrnl:ut )E9utLv I r rv)LtEtEr I tv ur to PtLlwtoapplicazione dove si ulilizza sia la scrit-

Sw$swwrm

SCB I U I-EEPAOH

saEEÉDB-UfiB27EEDÉTÉ-UÉgSCBIUI.EEPROIFIHE

EE nD R_!fÉ , UEEfiDfiEEDÉfÉ-U6n,0EEO9fAslfiTUS,8POEECOill,#REHgt55EECOH2ax A6EECON2

bsfbsf

Íettieno f indlrizzo ln cui scrlueresu di una uariabire àusiliarteEettlàmo il dato da scriueresu dl una uartàbire ausiliartachlamata alla routine

sDostiano L'indírizzo da scriueresul suo registroSDostiano il data da scriueresul súo registroPeEsagglo al banco 1Pernesso di scritturaInlzfo della seouenzaobblígatoria di

Subroutine di scrittura della EEPROM dei dati modificata.

!Bì@r Edìt géus qdbF lmb

I HI Z I 0 bsf srfiTus, BP B

cITf TBISBnoulu 1Fnouuf TFISAbcf Slfilus,RPB

SCELIg btfss P0nTÉ,4goto SCRIUEfiEgoto LEGGEBE

SCRIUERE froulu 93nouuf EEADÉ_UÎBnouf PoBTA, l,ffroquf EEDNIÉ,UAÉcaII SCNIUI_EEFNOilgoto SCELIB

LEGGESE noulu 03Íouuf EEnDR_UÉRcaIl LEGEI_EEFRO}4múuf EEDf,Tn_USR,t,nou$f POBTBqoto SCELTA

LEGGI_EEPSOH nouf EEDNTh_UfiR,14nouuf EEDf,fnh<t qTÉtil( epf

Banco 1

Porta I ugcitaPorta A ingresso

Banco B

opzione da scegliereSe 884=B si scriueSe BA4=l si leqge

Hettiano 1'ínrtirizzo in cui scriueresu di una uarirbile alsíliariaíettiano il dato da scriuere5u di una uariabile ausiliariaChianata alla routinesi torna a scegliere

Scriuiano f indiri?zo da leggerein una uariabile aùsiliariaDhianata aIIa routine di letturiSi uiEualizza il risultatosul1a Porta B

si torna a scegliere

spostíamo l'indirizzo da leggeresu di un registroP:<<i:nn rl h:nrn I

Terminato il nostro programma, si prosegue eseguendo posizioni non valide

Page 43: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

istruzione clrwdt (clear wat-rhnlnn\ r:nrall: il ton,, .-,,rporzza-tore chiamato Watchdog, evi-

tando In questo modo cne

raggiunga il suo valore massi-

mo (FF) e vada in overflow, cosa che

farebbe resettare il sistema. Non ha

nessun parametro, quindi il suo uso è

semolice come scrivere il suo nome.'-"'r"--Nello stesso momento in cui viene

messo a zero il Watchdog (WDT) si mette

a zero anche il suo prescaler, o divisore di

Íroatonza rhe e rna risorsa utiltzzata dal,,rYvLl

\^/-+-1.!^^ ^^" "i+-"-l -fe UltefiOfmente ilvvd LLI ruu9 Ptrr I rLotuo

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,

ts{FrÈi}i {{:s L"ISì$,{*HE*};il {. t$qW*Tll Watchdog e una risorsa propria dei PIC per vigilare

che le istruzioni di un programma siano eseguite in

mndn :donrrato Frrnziona con Un clock interno di|||vuv uu!:,

PARAMETRO PARAMETRO

al sistema, il Program Counter vada a

puntare su un indirizzo di memoria

che non contiene nessuna istruzione.In questo caso il programma smettedi funzionare, però il Watchdog con-

tinuerà ad incrementarsi sino ad arri-

vare a FF e debordare, resettando il

sistema, e assolvendo così alla sua

f unzione. La f igura mostra un esem-

pio nel quale si controlla l'uso del

Watchdog. Quando il programma è

eseguito in modo corretto, il WDT

viene messo a zero all'esecuzionedell'apposita istruzione, altrimenti si

produrrà un reset.

WDT).

"_*J

$*SSq#ssws$

Sch eda dell,e istr uzioni :l'istruzione CLRWDT

MNEMONICO Il

..' l.--l-.Y 9 r..: .

Operozione: concellozionedel Wotchdog

Cicli: 1

Codice OP:Flog:

xI

!I

I

tipo RC, e si incrementa sino ad arrivare al valore FF,

per poi andare ìn overflow e resettare il sistema.

Questo non succede se fra le istruzioni del program-

ma se ne trova qualcuna in grado di cancellare ìl

Watchdog: la clrwdt, con cui il contatore ripartirà da

zero. Puo succedere che a causa del rumore esterno

00 0000 0r r 0 0l 00#TO, #PD

List P=1óFBl.include "P1óF84-IHC"

orq 0xg8goto IHIZI0

org 6xB5

THIZIO ClTf POBTSbsf Slnf[S,ÈP0clrf IRISBnoulu b' 06011 1-ll'mouuf lnlSAbcf sTnTUs,BP0

btfsc P0Rln,B ;festa Io stato di RÍagoto Rno-uala-1 ;RAB uale 1

btfsc PORTn,f ;RÉ6 uele 0' lesta 10 stato di RÉ1

goto Sono_a-1 6nouls b'181fifi4'ncusf p0FlB ;Sono a 60- Esci dalla sequenzagoto cIclo

Sono a lB nouls b'00091111'nouuf PofiTB ;Sono a 18- EsGi dalta sequenzagoto clcl0

;Tlpo di processore;Definizione dei registri interni

;Uector Reqet

;salqa i1 uector di interrupt

;Cancelta I latch di uscita;seleziona il banco I;configure ta porta E cone uscitè

;Configura la Porta fi cúnè ingresso;Sele?iona il banco 0

Caratteristiche dell' istruzrone clrwdt

Page 44: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni:f istruzione COMF

on quesla rslruzrone sr rea-

lizza il complemento a 'l del

valore di un registro. Questosi fa bit a bit, cioè ogni bit di

valore zero del registro vienecambiato con un uno e ogni bit che

vale uno si cambia con uno zero. ll

risultato di questa operazione si puo

memorizzare ne lo stesso registro dadnvp si nrpndp il v:lo1s iniziale Se il

parametro d ha valore 1, o nel regi-stro di lavoro W se il parametro d ha

valore 0. Inoltre nel caso che l'opera-zione dia come risultato 0, il flag Z

verrà messo a I. Questo significa che

il regLstro, prima dell'operazione,aveva valore FF

:rh :^l ao".; $'TÉ-Yq;!*{{'**::{*l*rl'rr<n di nro<tr ictrr rzinne ò <omnliro

-- -^*^li--+- ^^+.^L-L-^ ^-.^"^ lt^^f ro LUrrPilLoLo PULIcuuc c))cttr tdp-

OPERANDOMNEMONICO DEST'NAZIONE

Roim Eú Qebus Qpliffi lcols {irdw lelp

LISI P=1óF84 ; Definizione del processore

EqU Bg ; oefiîizione di uariabileEflU Bó

OBG 6 ; Posizionanento della prina istruzione; all'indirizzo 0 della mensria di prcgranna

clrÍ P0ftlfiE ; Iúposto la Porta B cone uscitdbcf STAT0,5 ; Passaggio dl bdnco 6

noulu b'01 61 81 01 ' ; Houinento deÌ uilore inizialenosuf PoBIAB ; sulla porta I

8ICL0 conf PBBTg8,l ; Conplenento a I del ualore della porta Bgoto CICL0

EHD ; Fine del progrÈnna

'11

12t314

16171ft9?!

Programma di simulazione delle luci di Natale

plicazione dove la si vuole utilizzare. Per il

I OPERANDO OPERANDO * momento vooliamo limitarci acl rsarla in rrn

Caratteristiche dell'istruzione comf

: e r-:-"""-i. " l ": "-g* i

Operozione: complemento o I del contenutodel registro f bit o bit. Se d=0 ilrisultoto si loscio nel registro dilovoro W. se d=l si loscio nellostesso registro f.

€icli: I

Codice oP: 00 l00l dfff ffffFlog: Z

momento vogliamo limitarci ad usarla in unprogramma cne la vede prolagonrsta.lmmaginiamo per esempio le luci di un albe-ro di Natale. Possono seguire differentisequenze, pero la maggior parte delle voltesi accendono e si spengono formando drse-

gni in cui ognuna di esse si complementacon l'altra. Digitate sul PC il programma.-l^ll- fi^' rrrÀrta nall: nnrt: R mentroUEIIC llVUld U 9UdlUdtC rrLilu pvrLu u tttLttrtL

viene eseguito con l'opzione "animate".\/nlcfc nrÒ\/Aro:d in5gflpg Un inteffuttofeche, a seconda del suo valore, faccia esegui-re una sequenza oppure un'altra inventatad: riniT F norrho nnn mottorln in nr:tir: nor

il prossimo Natale?

ffiw$$*xerwsr**

Page 45: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

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.

La zona cerchiata in rosso è l'opzione Finestra di configuraztone del Watchdog in MPLAB

La disattivazione del Watchdog si fa tramite il software di scrittura

rhe dovremo nrendere in conside-.,,'" Y,

razione in questo caso: impostar-do NO il Watchdog rimarra disabr-

litato, al contrario, ìmpostando Sl

lo abiliteremo Se in seguito desi-

derassimo utrlizzarlo, dovremoriprogrammare il microcontrollercon 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, set,^^-;^^^ -^^l+^ ---ì,,None,, ilI upztut rc )LcrLd )drd

Watchdog rimarrà disabiliiato.

Sss#*qwwwres

Page 46: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Si vuole visualizzare sulla porta B

il valore complementato introdotto sulla porta A,

in modo ciclico, Inizialmente la porta A avrà valore 0,

5i controllerà l'uso del Watchdog,

Questa scelta equivale a mettere NO nella videata del

software di scrittura. Per l'opzione Sl abbiamo due possi-

bilità: una equivale a quella del software di scrittura, valea dire abilitare il Reset del PIC all'overflow del Watchdog(WDT Chip Reset Enable), e l'altra consiste nella possibi-

lità di fermare il sistema quando sr produce l'overflow(WDT Break Enable). L opzione del Prescale delWatchdog (WDT Prescale) durante la memorizzazione,non serve quando si lavora con un PIC'I6FB4, quindi

appare disabilitata anche se si seleziona una delle dueopzioni relative. La selezione del Prescale per il

Watchdog, in modo che ritardi il momento dell'overflowva fatta via software.

.;:;:,;::l

,. a::a:

I ìii.:::

':;'::ì:.:r,iaa

't:ì:, ìl,rì:ì

:1r:i:.:l

l,:,:i!:

..:a.a:.,:.:;j

,: ,.il

.,,liltj

. :aa,

:l:1i

::,:,:î,L,:.

. ìt,ììììt

.:,4.a:.,.:aaaa

:,1,,,.t.,..:1,:;.11

':"::::{*

.r I -:1ì!ì

,.:$':'::'*:.;.:,:.:.al

.. :,:',:.;.:::i::

' ,rì iìì:ì,iill

'I r:ìl

':,i::i::

.r ìì':l':i. ..: ì.li.::,::::,i

:,:.'.',:,1..::!

:t:l:.::i

"Ll',;ll:.1

':,a:,:a!&

':.:.:::"t{t)

3L L&V#K* {#ruSe avete scelto di

lavorare con il

Watchdog, nelle pros-

cimo.rinho imn;roroto-i.'- "v'

come fare. Scriveremo

un primo programma

d'esernpio, molto<omnliro dnrro <i riodo

cnraramenle comefunziona ilWatchdog.Come dichiarato nel-

l'enunciato, realizze-

remo un'azione in

modo ripetitivo, owe-ro un ciclo infinito,

dopo l' inizializzazione

delle variabili. fazioneda compiere consistenal nronriora il nlrin

che si trova sulla porlaA -h^ ^^+"ì ^--^.^n, Lr iE Pv Lr o E))ct c

variato dall'utenteesterno, complemen-

tarlo, e mostrarlo sulla

porta B.

Come sempre,per prima cosa fa-

Sw#sEwcxww

KL WeTfl*{ ffi#ffi

Configurozione:PB uscito

PA ingressoOPTION

OO+ PORIA B

C {PORTA A) *W

W+ PORIA B

O rgan i g ra m ma del l' en u nci ato p roposto.

Organigramma tradotto in programma

Page 47: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

remo l'organigramma dell'enunciato proposto.

Come possiamo osservare si prevede l'uso del

Watchdog, anche se non del suo controllo, dato che

l'unico riferimento fatto al Watchdog è la sua confi-gurazione nel registro OPTION. Inoltre possiamo

vedere che il nostro organigramma si avvicina molto. ^"^ll^ .h^ ..r-^^a lo i<trr rzinni dol nrra queilo cne SarannL ,, --, r,Jgramma,d,atn rhp i tro rinrradri :rrrchhcrn nntrto contenefeaffermazioni del tipo: "inizializzare porta B a zero" ,

" Complementare porta A" e " Passare complementodella oorta A sulla oorta 8".

Nel listato del programma si possono vedere

chiaramente ognuna delle parti riflesse in preceden-za nell'organigramma. Nella configurazione del

registro OPTION, gli unici valori che sono significati-vi sono ibit da 0 a 2, che pongono il prescale a 0, eil bit 3 che assegna questo predivisore al Watchdog.ln conseguenza di questo, il Watchdog impiegheràcirca'l B ms ad andare in overflow e a resettare il

sistema. Dopo aver editato e assemblato il pro-gramma, faremo una prima simulazione, con il\^/-+-L,l^^ -ll--++i,,vv6LLruwg ur>or'uato (Options>DevelopmentMode>Configuration>None) per vedere meglio la

d iff erenza.

sge$ài$_&gx#*$**ffiL pffi*&$4&ffiM&

Utilizzare l'opzione

Dato che stiamo eseguendo una simulazione, se sce-

glieremo le l'opzioni Animate, potrebbe passare diver-

so tempo prima che si verifichi l'overflow , quindi apri-

remo alcune finestre per farlo in un altro modo, senza

perdere dettagli.Da un lato attiveremo una finestra che ci indichi

in ogni momento il tempo trascorso: è la finestraWindow>Stopwatch. Ad una f requenza di 4 MHz, il

tempo che deve passare prima che il Watchdog vada

in overflow sara di '1 B ms, pero saremo capaci di fer-mare la simulazione in quel momento, per vedere in

che modo il programma inizia nuovamente?Sicuramente no. Per questo utilizzeremo anche la

finestra per tracciare il programma; in altre parole,

questa finestra ci permette di vedere quando il pro-Iistruzione che ci interessa. Per9rdililro po))o ptrr | |

fare questo utilizzeremo Window>Trace Memory e

Window>Program Memory. Nella finestra di memoria

del programma dovremo selezionare il codice che

vogliamo mettere sotto controllo, ad esempio la prima

istruzione del programma "bsf STATO,5".

Cliccheremo poi con il pulsante destro del muose,^^' {^'^ -^^-'i'^ "^ renù contestuale. All'interno dipcr rorc opvorrc ur rl

questo menù sceglieremo la funzione di tracciatura

Debug>Run>Animate persimrrlarlo e senTa nreoccu-

parci dei valori che assume-

ranno i renistri osservare

come vengono eseguite le

ictrr rzinni 61656 616 an+rrr)tr u4lvr il. uuvv Lr rE cl lt l o

nel cìclo, il programma con-

tinua a girare lì all'infinito.Configureremo ora il

simulatore per lavorare con

il Watchdog. Per il momen-to simuleremo solo la scel-fa che si nrro fare trami-

te il software di scrirtura,rinp rlirrheremo l'onzione

Options>DevelopmentMode>Configuration>WDT Chip Reset Enable. In

questo modo il programma

si resetterà quando andrà

in overflow il Watchdog.

l;l {=

rry2 0001 01só clrf gxó

3 CgsZ SqfF nouls 0xiFb 8093 8985 moesf ft5:,r,r:.:*::gg$l 3ss nouls $rS

,:,:,+..:lgg Smf Kvof 0!.17 900ó 1283 bcf fr3,&(5I C007 S18ó clrf Bxó9 0008 0905 cIcL0 coBf &(5,11

10 00Bq 088ó muqlf t*ó11 000n 2808 goto ClCt0tZ g00S SFFF addlB 9:{ff

,1:

,l

=.:.

:

".:.,:-:i'.i*'."::

-i

Finestre da utrlizzare per la simulazione

$w$ffwwre

Page 48: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

\tatn rlplle fine<trp rlnnn sygl'fermato la simulazione

il#pég$q#il1#ffiffiL W&Yflffi**ffi

Ora controlleremo il

Watchdog, in modo che nonprovochi questi reset delprog ra î ma. Per fa re

ouesto rtilizzeremol'istruzione "clrwdt": essa--^-^ll- il \^/-+-l-J^^cdrceild il vvdrLnoog ognl,,nl+r -h^ ',;^^^ ^.^^' 'i+-vurLo Lr rE vrcrE E)cvutLd/

evitando che arrivi al limite e

vada in overflow, a menoche il programma sfugga dalcontrollo in orresîo .aso il

WDT resetterà dawero il

sistema. Questa istruzione di

solito si mette all'inizio dei

cicli, e in sequenze diprogramma molto lunghe.Provate a rnserire questa

istruzione come nella figura,e ripetete la simulazione: ha

funzionato il controllo sul

Watchdog?

(Trace Point(s)); ora sr

puo eseguire il pro-gramma.

Quando la finestra

Stopwatch segneràalmeno 1B ms, si potrà

fermare la simulazione.L'opzione più rapidasarà Debug>Run>Run

Nella finestra Trace

Memory apparirà nellaparte sinistra l'istruzio-ne messa sotto control-lo, e nella parte destra il

tomn^ fr2<rnr<^ ll

primo tempo è quellotrascorso dall'inizio delprogramma, dato che

si tratta della primaistruzione, ogni appari-zione successiva invece

indicherà il susseguirs,dpn li ovorf Inrnr dpl

Watchdog.

%w#@wwww

Inserimento dell'rstrulone per il controllo del Watchdog.

Page 49: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda dell,e istruzioni:l'istruzione SLEEP

uesta istruzione oone il microcontroller instato di riposo o di basso consumo. È suffi-ciente scrivere il mnemonico dell'istruzione,dato che si utilizza senza nessun parametro,per fermare il sistema. ll flag #PD (Power

Down) si pone a 0 e il fìag #TO (Timer Out) si pone a '1

Cara tteristiche del I' istruzione sleep

Questo tipo di funzionamento è con-

sigliato per applicazioni in cuì ci siano

lunghi periodi di inattività, nei quali il

microcontroller debba comunquesorvegliare il valore degli ingressi.

ffism$dètrx

fr#ru e--xsK$q#xg*rutr sLHtrp

Quando si esegue l'istruzione, l'oscil-

latore del sistema si ferma.

Dato che il ritmo, o velocità delle

istruzioni, è scandito dall'oscillatore,e nresto p fermo le istruzioni si fer-mano anch'esse, cioè non sono piu

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^i,, ,,.1^"^. r I rnc+nrrnnn rPtu votwiE, )E Etqttv o I rcJrcrorilr\/ d

1 e se erano a 0 anche. Nemmeno il TMR0 funziona,ouìndi non arriva all'overflow.

Questo è lo stato tipico di un telecomando; rimane

in stato di riposo sìno a che qualcuno decide di utiliz-zarlo e preme un pulsante.

Questo pulsante provoca un interrupt che fara usci-

re dal letargo iì processore. Inoltre si puo "svegliare" il

processore provocando un reset tramite il piedino

N/CLR#, oppure mediante il Watchdog.In quest'ultimo caso, entrando in sleep, il Watchdog

si azzera, però dato che funziona con un oscillatore

indipendente, può continuare a incrementarsi e arriva-

re all'overflow. orovocando un reset. Si tratta comun-que di un reset speciale, dato che non si riparte dall'ini-zio del programma, ma dall'istruzione successiva allo

sleep.

Copiate il programma della figura e simulatelo con

il WDT attivato e poi senza attivarlo. Attendete almeno1 B ms ner vedere cosa succede.

PARAMETRO PARAMETRO12MNEMONICO

s.l .e e p

Operozione: Porto il microcontroller nellostoio di riposo

Cicli: I

Codice OP: 00 0000 0l l0 001 'l

Ffogs: #IO, #PD

Aeh4 Splil€ lcds Ehdm Help

LISÍ P=16F84 ; 'efinizione

del proeessore

SIAI0 EQU B3 ; Definizione delle variabitiPOFTAB EQU A6BPT EOU S1

oBG B i PosizioBatrento della prina istruzÍùne: alf indirizzo B della @mria di progrannà

clrl PoBfnB ; Porta B cone uscitanoulD b'68681860' ; confiqurazione di 0PTI6H per il fDTnouuf oPTbcf SIfiTo,5 ; Passaqgio àl banco g

noulu 6xFF ; llovinento .lel ualúre inizialen0!uf PoETAB : sulla Forta I

fICLB sleep ; I1 ricrocontroller entrà in stato di riposoconf PoEfnB,l ; Si canbia il salore della Porta Bqoto CICLo

EllD ; Fine del progranBa

Programma che permane in stato di riposo

S*#swswwe

Page 50: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Scheda detle istruzioni:f istruzione SWAPF

on questa istruzione si cambiano i quattro bitpiu significativi di un registro con i quattrobit meno significativi dello stesso registro. ll

risultato si memorizza nello stesso registro onel registro di lavoro W, come sempre a

seconda del valore del parametro d. Nella figura e rap-presentato il modo in cur è eseguito questo cambio.Dato che il registro si divide in due si cambierà unaparte con I'altra.

DOPO t'ISTRUZIONE

Rappresentazione del funzionamento dell' istruzione swapf

{5{?rz]lr'î {*ru # g$?ffi *J.:*i, il Sii,i,& firQuesta istruzione e piu importante di quanto sem-

bri; come avrete già notato, i dati normalmente sonoraggruppati in byte, cioe in gruppi da B bit, per poi rap-presentare questi bit in binario o in esadecimale. Così B

bit si dividono in due digit esadecimali, o se vogliamorappresentare il dato in decimale, in due digit decimali.

Quindi in un solo registro possiamo scrivere due digit, e..r-+- l- ---.-t+^ r^: -^îi<tr; di rr ri di<nnno ;l Plf 16F84,uo Lo to )Ldt )tLd uEt tEL

;;":'; u-, " ì,,i^"t;,;;';"; ;;;;^;"- -" v' "- POSSlamO

fare, se, ad esempio, vogliamo sommare i due numeriche sono scritti nello stesso registro? Ecco che entra in

gioco la nostra istruzione. Lidea è schematizzata nella

figura; dobbiamo annullare i bit più significativi e

memorizzare il

dato su un altroronicfrn <i nttio-

ne così il primovalore.

Si utilizza in<onrrifn l'i<trr r-

zione swapf per

scambiare i bitpiù significativicon quelli meno

significativi, e si

torna ad annul-lare i bit più si-

gnificativi (quelli

che erano I

meno signif ica-

tivi), e si memo-rizza il risultato

SU UN NUOVO

regrstro.

Dopo averottenuto i duedati si puo ese-

guire la somma.

OPERANDO OPEMNDOMNEMONICO FONTE DESTINAZIONE

-. -:--y--e*-? f i -", .r --.,"-,j g . i

Operozione: scombio dei quotiro bitpiù significotivi del regislro fcon i quottro menosignificotivi dello slesso regisfro.Se d=0 il risultotoresto nel registro di lovoro We se d=l il risultoto si loscio nellostesso regislro f

Cicli: 1

Codice oP: 00 I I 10 dfff ffffFlog: nessuno

Caratteristiche dell' istruzione swapf.

Schema esplicativo diun esempio che utilizza I'istrulone swapf .

ffiw#*wwww

Page 51: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

Appli cazione pratica:I'interrupt arriva dall'esterno

uando si impara a programmare bene coni microcontroller, è normale utilizzare unastruttura in cui il programma principalecompia solo l'inizializzazione delle risorse,

mentre nella routine di servizio all'inter-rupt (RSl) si realizzi solo cio che si desidera dal pro-gramma. ll difficile non è utilizzare gli interrupt, ma sa-pere cosa fare quando sono generati. Pero e meglioprocedere a poco a poco, per il momento è sufficien-te vedere un primo esempio di routine applicato ad un

orooramma.

g*dYffiffim&ipY ffi& ffiffi*lxruYtultlizzo dell'interruot evita di dover testare continua-mente se si è verificato un determinato evento. Così il

microcontroller puo restare in stato dr riposo e risve-'gliarsi in caso si produca un interrupt, ad esempio unoesterno tramite RBO/INT.

Se si analizza I'enunciato orooosto si arriva alla con-clusione che nel programma principale non si fa niente;

tutto parte dall'interrupt. Nella subroutine dedicata,dopo aver verificato il valore di un bit si esegue qualsia-

sr operazrone.Lorganigramma rappresenta le operazioni che si fa-

ranno nella Routine di Servizio all'lnterrupt. L'organi-gramma principale non è stato disegnato, perché è so-

lamente di configurazione. Prima di trasformare l'orga-nigramma rn programma vediamo il significato dei bit

Abbiamo un dispositivoche permane in stato diriposo sino a che unutente non lo risvegliapremendo RB0/|NT.Al risveglio, a secondadel valore di RB1, si ponelaportaAa0oppureal.

di due registrimolto impor-tantr In questo

caso: INTCON

e OPTION.Nlal ronictrn

INTCON si ese-

guono le abili-tazioni ai di-versr InferrupLNoi lavorere-mo soto conRB0/lNT. quin-di dovremonrnihira irrtf i

gli altri. ll bir 4

RSI

ùb RBt=l O(X)-w lF-w

w -PA

INTF=O

Torno

Organigramma della routine di interrupt

è quelìo chedovremo mettere a 1 in questo caso, inoltre il bit 7 è l'a-bilitazione generale degli interrupt, e se non è a 1 non

sarà possibile utilizzare nessun tipo di interrupt. Per

ogni tipo di interrupt quindi, deve essere messo a 1 il bitche gli corrisponde, più il bit di abilitazione generale.

Dopo aver prodotto l'interrupt, si attiverà un flag, per

RBO/INT sarà il bit 1 di questo stesso registro. Per quan-

to riguarda il registro OPTION solo un bit è significativoper il nostro esempio: il 6. Con esso specifichiamo se il

fronte attivo sarà quello di salita o di discesa, a secon-da che il suo valore sia 1 o 0 rispettivamente.

INTCON

OPTION

Registri coinvolti nell' interrupt RB)/INTEnunciato per I'uso di un interrupt

$s#*wwr*

Page 52: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

I

STATO

PORTAAPORTAB

INTCON

OPT

INTF

tNtzto

RIPOSO

CONTINUA

Programma proposto

LIST

EQU

EQU

EQU

EQU

EQU

EQU

ORG

goroORG

gotoORG

bsfMOVIW

movwfcl rfmovlwmovwfbcf

movlwmovwf

sleepgoro

P='l 6F84

03

05

06

OB

81

1

0

lNtzto4tNr5

5TATO,5

0xFF

PORTAB

PORTAA

b'01 000000'OPT

STATO,5

b'10010000'INTCON

RIPOSO

PORTAB,lZERO

UNO

00CONTINUA

b'00011111',CONTINUA

PORTAA

INTCON,INTF

btfssgoto

9oto

movlwgoto

movlwgoto

movwfbcfretfie

END

lndirizzo del Vector di interrupt

Programma princlpale

Porta B come ingresso

Porta A come uscitaConfigurazione del fronte attivo per l'interrupt

Attivazione dell'interrupttramite RB0ilNT

Si pone in stato di riposoRitornando dalla subroutine di!nterrupt si passa in stato di ripososino al prossimo interrupt

Verifica il valore del bit RB jÈ zeroÈ uno

5i sposta lo zero

Si sposta uno

sulla Porta A5i resetta il flag di RB0/INT

Definizione del processore

Definizione di variabili

$ep$Swrwryes

Page 53: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

lndirizzi delle istruzioni nella memoria di oroqramma

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 degliinterrupt e selezionare il fronte con

cui si produrranno. ll microcontrollerviene poi messo in stato di riposodall'istruzione sleep, e rimane lì, sen-

za eseguire l'istruzione successiva, si-

no a che si sveglia, al verificarsi di un

r nterrupt.Un interrupt e un avvenimento

asincrono, quindi non si conosce il

momento in cui awerrà. Nel nostrocaso l'interrupt si produce grazie al-

l'attivazione del piedino RB0/lNI,quindi sarà provocato dall'utenteesterno premendo un pulsante. ll PC

La novità è nel modo in cui il programma è orga-nizzalo, anche se di questo abbiamo già parlato nella

parte dedicata alla struttura generale di un program-ma. Per prima cosa, come sempre, bisogna decidereche microcontroller vogliamo usare, e definirne le va-

riabili. La prima istruzione del programma si posiziona

all'induizzo 0 della memoria di programma grazie alla

punterà all'indirizzo 4 e inizierà la

routine dedicata all'interruot. In essa si verifica rl valore

del bit 'l della porta B, configurata come ingresso, e a

seconda del suo valore, carica nel registro di lavoro Wil dato 00 oppure 'l

F, per poi passarlo alla porta A e vi-

sualizzarlo. Prima di uscire dalla routine con I'istruzioneretfie bisogna resettare il flag di questo interrupt a 0.

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 trovareun'istruzione della Routine di Servi-

zio all'lnterrupt (RSl). Per questo mo-

tivo dobbiamo mettere la primaistruzione della routine all'indirizzo4, e lo facciamo utilizzando nuova-mente la direttiva ORG. Nella figurain alto possiamo vedere come resta-

no localizzate le istruzioni nella me-moria del programma, dopo averloassemblato. Notate che negli indiriz-

zi da 1a 3 si trova il valore 3FFF, ciosignifica che non ci sono istruzioni.

ll programma principale realizza

solo le configurazioni: imposta la

r sÈta08c6c ctBattcù

t55 1tlJ1r-rf24 S961tÉ08! o0ts98!at s6tùa9É0

31 $6$1Jl'rl! sostùtct

255 11 1'ttltt

ststuE f8Í5î 09

gÈ!8sio{&6t|e5ae9l8ls9*ef,ótto8c80aa&0s00ooatù0ttca*t9ù&osúaú009&

Ltsl P=1óF8{ ; oeFlnizlone del proce

EQn 8'r :

FEQUT.

ftnc o lgoto INIZI0 :0FÈ 4 ; Indirlzzo del ùèctor .

gotú lt{t Iof,G S :.

r S.fF i lorta B co* lngresl:: : ::::'.. ::.,:. :: ..: :.,ìir .rl

Finestre necessarie per la simulazione.

Swf*wmre

Page 54: Microrobotica Monty Peruzzo Editore - 09 B - Programmazione

ll microcontrollore permane in stato di riposo in attesa di un interrupt

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-

gle).

Simuleremo ora il programma in for-ma di animazione. ll programma avan-zerà sino ad arrivare all'istruzione sleep,

la eseguirà e si fermerà aspettando che

si produca l'interrupt, mentre punta al-l'istruzione successiva.

Prima di premere qualsiasi pulsanteguardate il valore della linea RB1, e del-la porta A, entrambi nella finestra deironi<tri qnorif iri Prpmotp il nrrlc:nfoRB1 della finestra Stimulus e verificateche ilvalore cambi. Se ha valore 1, pre-

mendo RBO, la porta A assumerà valo-re 1 e se ha valore 0, premendo RB0,

assumerà valore zero.

verificato l'interrupt, così nel caso fossero previstianche interrupt di diverso tipo, consultando i f lag si

saprà quale di questi si è verificato, dato che solo un

flag sarà a 1. Inoltre quando si verifica un interrupt,l'abilitazione generale (bit 7 di INTCON) viene messa

a 0 automaticamente, e sino a che stiamo esequen-

do la subroutine del primo, non se ne potranno ge- l

nerare alîri Fseorrendo I'istruzione di

ritorno dall'interrupt questo bit vienenuovamente messo a 1, e l'istruzione"goto NIENTE" fa sì che il microcon-troller torni in stato di riposo.

sg*iBt3*_&xx#ru$:ffitr1 trffi#ffiffi&&?&,t&

Per simulare il programma avremo bi-qonnn di rrn: sprio di f inestre che ci

permettano di osservare quello che av-

viene all'interno del microcontroller.

Queste finestre sono: quella dei registrispecifici (Window>Special FunctionRonistpr) ner vedpre se le funzioni si/, Y!' Yrv!rr

compiono, lo stack (Window>Stack)npr vpdprp ali indirizz.i di ritorno che

vengono memorizzati, e il programma

vero e propflo, per vedere la sua evolu-zione. Inoltre avremo bisogno della fi-nestra che simula l'introduzione dei

Sm$&wsxpm

Premete ancora RBO. Vedrete che nella finestra diprogramma verranno eseguite rapidamente le altreistruzroni, pero non potremo verificare quali, comun-orre vedremo che nella norta A si carirheranno va-Fv'

!v '

lori diversi. Per verificare isalti all'interrupt ferma-te la simulazione ed eseguitela passo a passo

(Debug>Ru n>Step).

sr-rsfr sr-rrft

; Porta î conmulr È'fit8t!6€' ; Configorazioomqrf OPTbcf STfiT0,s

úulr b'16a1cat€' ; Attiuazionr d*erf ll{fcol| ; trarite nBtal

i Proqramma di lraltamento della interruzione ; sind al Fross

Z€É0 s{Iu t€ ; Si sposta 10goto C{lt{fltltf

SFB NaR llex Dec 8ifiaru Ghùr -tÉ€ 3: 1 G€AgggSprt s 15 6{àS111-lùStisn_rÈg 1€ 54 *tèè8È45 &ciètus 1à :ú Agft*1€C

6g € &cca$€tga € e€€488È6s€ g a8àaa6€6€à E €ASAAAECaF 259 lltl11:l

ledatè ÈA S EEtntq€Ceeccql Èg g egg$eg8e€eadr Èe € C565C€8C€ecaF? *! 3 CggCg€A€Sclath *g à eSeàCS*€idtcar 9è lqà 16È1AA&€E *3 lqÀ 1g*lggegt{Ère 5g S 8ùSSCgg€

gffi=!:.::1a::-+'i::'lt leturr Èddress:2 66S {lnterrupt}

sr-f,Pl . sb?IFlStir l0 [Pl I 9b rl tPt

E ffi11"Fa---SFR ilam Hex Dec Biîary char:tRrS ll 5l ÉÈ€ì1111pc1 1è îA 9SÈ1 lge€ú$tiàs req 4S 6q 9i888Bge Estatls lll 26 48il Bl 88f5r 6d & BùEEEÈBEportè lF 3t 8851JJ'11trisa 0e I 8BB6ú86Èportb tr2 2 60884fi9t.ì5b FF 255 11'1.î1111eedata Eg I B60tlú68Peconl 68 C 0ù8CS668esadr BA I BqgE!308eecanS B8 ú AÈg6E{BApclath g0 S CgBgS&8oifttcnn 12 18 888198JSs lF 31 88811111tAFr€ *S E È€e$*€SÈ

; Si sposta La zero

; Si sposta uno

Un momento della simulazione eseouita oasso a oasso.

tttttttl t:- ::t :t tt tttttt:tttttttttttl