Microrobotica Monty Peruzzo Editore - 09 A - Programmazione

Page 1



Programm azione:

principi generali

Per

pater uttlizzare molli àppàròLi "intelligenti" e necessario che siano programmòti

ar tnilizzsra :l monlin mnlti<<rma :nn:rar'-v'" rhi:rrrre " intollinenti" e noro<<:rin nrnnr:m'

A^t+t -^rarati | | ror rE. rvrvrLr ^,.-^tt vrLLUrr oPf

--.1^

À

elettronicr di uti_ lizzo comune, ad esempio un videoregistratrrrp nor rpni<tr:rp l: nn<tr: <orio T\/ nroforii:

oppure un gioco all'interno del nostro computer, o la moltitudine degli apparati rntelligenti che abbiamo intorno a noi, devono essere dotati di un programma per poter eseguire le loro funzioni. Programmare non è altro che indicare a un orocessore ouello che deve fare

rrnI lrl linnrr:nnin lln ul l9uo99lw

rho Ll lq nro<tn 9uLJLv

rnmnranrio rrprL. ruL. Lvr

nrr:nÀn l-ncì !v)l 9uol luu

premiamo il tasto play del video, le istruzioni che sono state fornite relative a quel tasto specifrco, mettono in funzione il motore che trascrna la pellicola, leggono le nformazroni che questa contiene, ecc. ,A' n:rtirp Y", .,, d::dpssn diventpremo rla semolici utiliz-l^ll--+^"i 4OtUt tuEilo

+^-^^l^^iLEL|tutuvto,

-L^.^-li--.^^ rcdil//drr(, a vrw9ro|iltroLv +^.i rLtrE

-^^r:--- Ur -r+.i O ner noi stessi Per orteStO dOb_ ^^iil ^^. ^ri OrLr oPPilLO4 Ptrr 9il biamo strutturare il nostro pensiero e tradurlo in uno I

dei molti linguaggi di programmazione esistenti. Un lin-

S*#*wwrs


da ' Chiedere chiave di

;--

accesso all'utente.

risolvere;

si

vede che fun-

'Girare la chiave.

Aona male e che non dà

. Se la chiave è

rr:lnri

.Leggere chiave.

giilsta

aprire la porta. .Se la chiave non è giusta. ..

Organigramma

i

<norrii

Stesura del programma principale

però non indica dove c'è l'erro-

Compìlazìone del pf0gramma

re. ll nostro caso

è aggravato dal fatto che si trat-

ta or un

pro-

gramma

che

Errore di sintassi?

#

deve funzionare

con un naroware, e non in un

Simulazione del pr0gramma

aÒmn||tér nor Le diverse fasi per la realizzazione

di un programma

cui

potrebbe

dinondorp del cattrvo f u nzio-

quello che viene chiamato pseudo-codice, che è la rappresentazione del linguaggio che noi utilizziamo - il Linguaggio Naturale - ìn forma strutturata. ll risultato finale è il programma.

programma, ma da problemi

*g

$*&S$:

namento

di sviluppo

Anrho <e l'a<no-

Problemi

rienza

hardware?

f

orn ita

;^ -^-ì ^,,^-+i Ld)t, il t vuc)U noi drsponiamo

migliore alleata

Monlaggio del

di strumenti che

ci

Problemi

facilitano

o semantico. Una volta scelto il linguaggio di programmazione,

nrra<tn

bisognerà conoscerlo per non commettere errori di tipo sintattico. La conoscenza del programma è facile, basta

sono rappresen-

ll primo caso e quello di un programma che funziona male, però non presenta errori sintattici, ed è difficile

Prova con il sistema

controllato.

sia il linguaggio di programmazione che utilizzeremo. Per questo, in questa prima fase del programma, dobbiamo avere un'idea chiara di quello che il programma stesso deve fare, per non generare errori di tipo logico

$?.R*S*Sîí *3 treài*ffi*

microprocessore

dell'hardware

J-ll- prdLrLd ^"-+:-- cÀ ludild rd

ta programmazione di Monty. ll nostro linguaggio sarà l'Assembler, e sfateremo il tipico mito che sia uno dei linguaggi di programmazione piu difficili.

# Scrittura del

del

Un programma scritto in pseudo-codice deve servire da base per la realizzazione del programma finale, quale

seguire le norme che lo regolano. Dovremo conoscere la struttura del programma nel suo linguaggio, i tipi di dati che si possono ulilizzare e i loro possibili valori, l'insieme di istruzioni, la struttura di controllo, e tutte le rnrrat rnse rhe snipnhoromn srrrroq<irrampnttr nor lz ru trt v I Jvrryr tq LUt tE(-

sintassi?

non

guaggio di programmazione è un insieme di regole, simboli e parole speciali per costruire un programma. Come passo intermedio bisogna trasformare l'idea in

Yflffifl4sru#L*#XÉs

Enore di

l'errore

hardware?

lrrrnrn

Nella

ffi

figura

+r+i ; Lq Lr I ^-.-i vo))t

Montaggio finale

,-Juc

segurre quando

un

progello,

come

la

pro-

Fs<i nar ._ ls raalízzszinna .- di ._-,r-, _, un progefto

grammazione del nostro microrobot, ha una parte software e una !p<rrizinno - ULJ!r ^-'+^ h-'!'^'-'^ di uyttUtru nnnrrnn di nrro<ti lldlUVVdlC. |Ld r.rvrrs ut PdILE passi verrà fatta nei fascrcoii seguenti. Osserviamo attentamente le differenze dei testi all'interno dei rettangoli, e all'interno dei rombi. Le etichette dei dati, la forma di rappresentazione delle azioni, sono tutti dati essenziali al momento di proqrammare e che meritano ,,^u ro

^-^;^Pogil

î ^-r+^ rd d pd r Lc.

$*S$e*es$w€P

:.:iili ì.:ìi::-:l


Strumenti di lavoro: i linguaggi di programm azione

La differenza fra il programmare con linguaggi di dlto livello o con uno dt basso livello, e analoga ad agg i u sta re u no stru me nto el ettro n rco cambiando i suoi pezzi o aggiustare i pezzi che compongono quello strumento.

ome gia abbiamo spiegato nelle pagire precedenti, un linguaggto di programmazione è rrn insieme di ir\Jv,L, rcnole simhnli c n:rnlo snprr:li ,,L v, per la costruzione di un programma, Esistono molti linguaggi di programmazione, di svariati trni con caratteristiche a volte srmili e a volte molto diverse fra di loro.

ilL;{5*î fít&X:* l; ;: * il: Li"ru* :-r,&{"r*: Una delle molte classificazioni che si possono fare con ilinguaggi di programmazione, differenzia la loro similitudine dal codìce che è direttamente accettato dal computer, cioe jl "codice macchina". Quindi, si è soliti dividere il settore in linguaggi di alto livello e in linguaggi di basso livello. Anche nel lavoro con il PIC seguiremo questa distinzione. Un

linguaggio di alto liveìlo è più vicino al modo di pensare delle persone, mentre un linguaggio di basso livello e piu vicino al tipo di dati che accetta ìl micronr.ìro<qr'ìro Fntr,amhp lo r:teoorie h:nno ,- \/'^+-^^; ,drLov9rtr^ svantaggi.

1r{fl9{_ffie$:i I linguaggi di alto livello piu utilizzatr per programmare i microprocessorì, sono il C e il Basic. Entrambi sono linguaggi di impiego generale, croe si utilizzano per applicazioni molto diverse fra loro. Questi lìnguaggi sono nrodotti d: divprse C:sp e orrr màntenendo trna struttura fondamentalmente simile, possono presentare alcune differenze, anche se, come qualsiasi linguaggio di programmaztone,la ioro efficacia dipende dal modo con cui il programmatore Ii ulilizza. 'l|--',

S***wcisr* ì-tìtì:tì)r*r:

: .:.:r.

.:.ì

:

, .:

,.rr.

iiii,rrl


.Ì :: "-l

)$é

I

,1,,,'.i,$

:t

;.

:

r::iììi ir:tliij

.

.::.:ììià!

'',t}i1, ,',:l

main {

(

liÍi:

'..:ì

)

,ì,:.ì::ii;

'l

set_bit (

STATUS, RpO ) ; oPTroN-REG = l;

set_tris_b( 0 ); clear_bit ( STATUS, Rp0 ) ; oulput_porc_b( O );

/

/

Assegna un

divisore di L:256

:.::,.1€*

a.::',..,:t

.'ììì:ilt

:ìì:t:::

...:a:j:at ':.rr-:rìì

enable_ínterrupt ( Cfn ) ; enable_interrupt( T0IE ); //

r.ìi::t

Abilita interrupt de1

TMRO

'uruìi::

.ììÈ

::,4

while( 1 );

/

/

Ciclo infinito a:.:::'atta

r :::ììì

:-,,::t;&

".,a,:,'.tl*

Frammento di un programma scritto in linguaggio C

riì

:a,,:.:e

Nella frgura precedente è illustrato un esempio di frammento di programma scritto in linguaggio C per il plC In esso si configura nel banco 1, la Porta B come uscita, e si assegna un divisore per 256 alla frequenza di lavoro per il suo utilizzo con il timer TN/R0. Si continua togliendo gli zeri dalla Porta B e si abilita l'rnterrupt all'attivazione del TMR0. Proseguendo, si entra dentro ad un ciclo infinito che verrà forzalo solamente dal TMRO alla fine del suo conteggio. A prima vista si possono notare alcune caratteri-

stiche di questo programma, che sono quelle che hanno contribuito a renderlo uno dei linguaggi più utilizzati. Le istruzioni di controllo strutturate. come

Vantaggt dell'uso dei ltnguaggi di alto livello

Ss$*wctre-m

la "while" danno chiarezza al programma: in questo esempio è utilizzata per restare in un ciclo sino a che la condizione scritta all'interno delle parentesi e realizzata. In pratica si converte in un ciclo infinito sino a che un evento non modifichi la condizione scritta all'interno delle parentesi. Se si volessero ripetere diverse istruzioni per il tempo in cui resta valrda una determinata condizione, basterebbe inserire queste rstruzioni fra le parentesi. Trattandosi di un pezzo di programma non si puo apprezzare la seconda delle caratteristiche fondamentali: nonostante sia collegato al programma principale, e quindi s a stato abilitato da un evento di interrupt, all'interno di questo spezzone potremmo inserire un altro richiamo ad un ulteriore pezzo di programma - anche quest'ultimo sarà inserito all'interno di parentesi - e sara indipendente dal programma principale, comunicando con esso solo per lo scambio di parametri e risultati. Oltre alle rstruzioni standard, il linguaggio C specifico per il PIC ne dispone di altre, che si possono considerare delle piccole funzioni di uso frequente: come il settaggio da'l a 0 di un registro specifico, o di un bit di un registro, o l'abilitazione di un interrupt. La differenza con iinguaggi come l'Assembler non sta neila complessità del codice, inteso come chiarezza, ma nel minimo numero di funzionr utilizzate per dire quello che si deve fare Altre funzioni

'-: :il

t. .::::t*

.l

;

'::

...1

.-,::l::',

j

:.:::a:.,i,:7,t

.4,.::::1

.ì:ìùg

.

r,r;rl:"i$ . :,:,4:&

':;is

$

-.r''

Li:ìr:ì:iili '.':lili

l ,::.:::::

:'.:t:i]*

'.:.,;::'*.

.,..:,:,.tt

i:r,::a:::l :.a,ar-:

.

:a:.-t:i:.

: :::tr::l.ii

.

.:::,:a:'Ì .',.:ìi::ii

.:t::,,itì

,:.:l:l

:

.::at i.;.

-t .;::;:,;,;i;.,1


tropartita, il programma scritto in Assembler si traduce in tante posizioni di memoria quante

doto

t# nFffi 'o"@@ rrumG-

-EffiT m Ere

m l5

o

ooto

compilatore che verrà utilizzato.

@

colcolore I'oreo

sono le istruzioni utilizzate, nel nostro caso nove (CICLO non è un'istruzione). Nel programma scritto in C invece, ogni istruzione scritta - quelle dell'esempio riportato sono sette piu la struttura "while" - si tradurrà in una o piu istruzioni macchina (posizioni di memoria), a seconda del Questo perche in Assembler ogni

istruzione si traduce con un solo codice macchina, al contrarìo dei linguaggi di alto livello. Possiamo u))trr vdr tr quc)rd ^,,^.+1 Pa ^rrticolarità nella figura della pagina seguente, dove la seconda colonna della finestra del programma (Program

Memory Wrndow) riflette la posizione in cui si trova ognì istruzione. Benche la programmazione in Assembler sia piu faticosa per rhi l: o<onrre il rndiro nonorafrl è ottimrzzato, con un constderevole risparmio di spazio occupato

Convertire il doto in codice ASCII

dal programma, cosa molto

ll programma principale comunica normalmente con i vari procedrmenti per lo scambio di parametri e risultatr.

capacità di memoria, che nel caso del PlC16FB4 è solo di 1024 posizioni. In ognì caso i compilatorì C di ultima

come la capacità di attendere un evento, facilitano l'uIil\zzo, a vantaggio della chiarezza.

$_'essil*4ffi1trffi È il linguaggio denominato di basso lrvello ed e il piu vicrno al compuLer. Nella figura a lato e illustrato il prece-

dente programma redatto

in

Assembler. ll programma scelto e molto simile sia in un linguaggio che nell'altro, e non presenta grandi complicazioni. Senza dubbio, per chi non conosce nessuno der due lìnguaggi, potrebbe risultare piu con,prensrbrle rl linguaggio scritto in C, dato che non necessita della conoscenza dell'architettura del PIC per: realizzare le lstrr-t-

zioni, ed è p u intr:itivo. Come con-

imnnrtanlp considerando le restrizroni del PIC in quanto a

CICLO 1-€ UD!

movlw mOf,'Wf

clrf bcf clrf 1-^ r: UDL

STATUS, RPO a1 OPTIOI{_REG TRISB STATUS, RPO PORTB

bsf

INTCON, GItr INTCON, TOItr

goto

C]CLO

Frammento di programma tn lrnguaggro Assembler.

Se€th*p*srym


ln Assembler ogni istruzione si traduce come un solo codice macchina

generazione producono un codjce ben ottimizzato. Come abbiamo detto, una delle caratteristiche che fanno sì che il linguaggio C sia uno dei piu ulilizzati, e l'uso delle funzioni. Nella figura a lato si mostrano alcune funzioni di un compilatore del C per il PlC. La maggior parte sono funzionì molto specifiche del -PORT-A lavoro col PlC, che non si incontraPIN PORT no in compilatori di C standard. Per rnciso, dato che sono molto

specifici non apportano vantaggi rispetto all'Assembler, se non per il fatto che utilizzano espressioni molto più chiare. Dove realmente si nota la potenza del C con i microprocessori, e nella struttura di controllo, nei pro-

S.&6*ws#s*

cedimenti, e nelle funzioni proprie dei linguaggi di alto livello.

OUTPUT_HIGH-FOFIT_B

OUTPUT-LOLPORT_B INPUT PORT-B A

INPUT PIN PORT B SET_OPTION DELAY_MS

DISABLE INTERRUPT CLEAR.BIT GETCHAR

CHAR |O-BED

Alcune funzioni di uno dei tanti compilatori C per il PIC

DELAY US


Strumenti di lavoro: installazione e uso del

CD I CD-ROM che commenteremo, è quello allegato ai primo f,acrirnln di nrre<t'o-

pera. E formato

da

,,-";^ --.+^li^ ^ +i ^. CO[ì VdJle Ldl telle e llre5 divorci rnn-pnr rli rl.p ver-

.:n.Ò .lili, tat nol I lavOro con rl nostro microrobot. Ora lo ana zzeremo il;^|

| rvuu uqLLcvlrc Lv. -^,-l^.1^+r-^1,-+^

Introducendo nel lettore

il

CD e selezionandolo, s tr-^A^ r,,n -lln qudì.Lro cardLLeue dile 5ue n,,r telle, e ai quattro files, così come indicato nelia figura

't

basso ll CD non è autoinstallante

L

informazioni

A destra il CD allegato al prrmo fascrcolo

'1'aqr

la

Inco |La

:fl

u

-h^ sr -J ^,,^-+^ --.+^il^ que5re cd' .e're, rre

_J ",

file

lpnn ''vv"" mi rvr descrivono il modo di nstallazione e il contenuto

,f

"a -rsl

che troviamo nel

in Le

nn : nriro ann

annul 1a

a

r

r:

lr rn n

possora on r-

tor dr testo. Gl' altri 3 files, per ora, non I prenOeremo rn con-

ts (E:)

si

derazr on e.

oimensione

I t/: 'l Q]:a

| - prmd .l - esan"rnare --"+^ll^"i- - caileild ^. La od

.-. ,i

e la cartella "installa". Una

JJ:i

l -"t I gl: I 1

ill.:ts r:a:::':

|

:i]:

,aF)

i ft.ú a:!,J.il

-t

1 lLlrr,, 1 +l:'L

'i

t

volt: ,anprt: s dorir: osocrriro il file spr,ro exe cos si insraJlera il prograrrma robot.exe, che ci normot+ori nli ur Pg lrlgLLqro

vi<r r:lr / t vr)uoil4Latct

1.^

+r1 t a-

mite ìl PC, r video dimostrativr rohnt N,4on-ir p lc diffefentt nrovo dei rn.rorqi di nicroro-

doL

bots. j:

..,i Contenuto del CD

Questa installazione, installa <nln d : n:rro indi<nonq'hilo 'lol )vrv Pqr Lc il rurJPcr rJdr,llr url software, dato che il CD dovrà

$qp$Swwr*


Proseguendo nell'installazione,

ci

verrà presentata la videata successiva,

nella quale dovremo decidere l'indirizzo dove installare il software. Si nrrn l:<ri:ra

l'indirizzn niì nrodicnn-

sto in nIipqtn rasn (- \{p6livi\RObOt\ o cambiare indirizzo con un altro che ci sembri piu adeguato. fliqiitT"É:LL'q Vgffi## Nella cartella video troveremo i video

dimostrativi, con prove di lotta e di ricerca sui differenti tipi di microro-

bots, tra questi anche Monty.

Per

vederli non dovremo entrare diretta-

Videata iniziale del Programma di installazione di Robots

m6n+ó r:r+allr lgl ILE nall: I lEllO Lql LEIId/ ||

m: I ru o<onttiro LJLyuil L '

tlil

programma Robot.exe dalla cartella

nrincinale rhe e oia stato correttamontè

inct:llatn

qp6lranÀn nrcci JLyuEl luv Ii pd))l

spiegati precedentemente. Apparirà la videata di inizro. |Lq : frur r rnzinno r4rvr rs di ur nnni vyr il +rc+a Ld)LU cÀ ram )Eil t-

plice, e ci ricorda quelli che sono normalmente utilizzali negli apparecchi musicali o video. All'inizio si potrà solo attivare il pulsante superiore, che ci di sreolie rp il video che si -, nermette Y',,,

vuole visualizzare.

ScelLa

Una volta selezionato un video all'interno del menù, bisognerà aprir-

della direclory di installazione

lo, questa operazione attiverà anche

essere nresente npl lettore al momen-

to dell'esecuzione dei video; in questo modo i video non verranno copia-

îi

srrl comnrrter nermettendoci Y',

di

risparmiare spazio.

Orresto nrooramma di visualizzazinne dai vidon ò ntrreolsposto per lavorare con Windows 98.

.:.'::.21

:l::.:E

Quando lo eseguiremo apparirà la schermata iniziale del program-

:,,,ta.t

,:,,t:,,,:::

'at'a,.'::a

.:ì

ma.

Se non si stanno eseguendo altri programmi, si clicchera sul pulsante

"accetta",

o al contrario si dovrà

uscrre dall'instarlazione e rientrare dopo che si saranno chiusi gli altri programmi.

Sel*Sse*eecr*c

Schermata iniziale del video dimostrativo

di

Robots.


fl e$qYH *_$_e $:,$q#ffi

ffi

&ffi w g

Questa cartella contiene tre programmi esempio. che in seguito verranno caricati sul nostro robot Monty per

fargli eseguire diverse operazioni. Queste operazioni, sono quelle tipiche per iniziare la programmazione di Robots: come seguire una traiettoria,

evitare degli ostacoli o percorrere un determinato tracciato, e servono da r.--^ ^^- rto .^-r'---zione IcorLLo2 uc)tr di altre PEr applicazioni molto più complesse. La metodologia di esecuzione per la programmazione del robot, sarà

tema dì studio in un fascicolo do prossima pubblicazione.

fr&ffiYfrts_e ffirL&*$ Quest'ultima cartella contiene Scelta del video da visualizzare

gli altri tre tasti. Partendo dall'alto verso il basso

le

icone indicano la messa in marcia, la pausa, la nuova attivazione, e lo stop definitivo. La videata centrale sara quella che ci mostra il video prescelto. Per uscire dal programma divisualizzazione, bisognerà

un

solo programma eseguibile per l'installazione di un'applicazione, che porta il medesimo nome della cartella: MPLAB. In realtà è formato da vari programmi, integrati in uno solo, che formano quello che viene comunemente chiamato "ambiente di sviluooo". Questo programma è indispensabile per le applicazioni con il PIC e dovrà essere studiato in modo la

cliccare sopra la parola Robots nell'angolo in aìto a sinistra del monitor

Se

ri

fossero dei nroblemi con

la

visualizzazione dei video, si dovrà reinstallare Windows Media Player, che è

il <nftrnr:ro rho ri nérmotto rlro<to visualizzazioni, lo faremo eseguendo il programma mpfull.exe, che si trova nella cartella "installa". Alla fine dell'installazione, verrà attivata la proce-

dura di connessione alla pagina web di Windows Media Player, che si puo canceilare senza nessun pro0rema, perché non provoca nessun errore di installazione. Inoltre, se il software di accesso a Internet non fosse già ìnstal-

lato sul PC, si attiverà una finestra in cui ci verrà chiesto se vogliamo installare questo tipo di software; a questo punto sarà quindi necessaria un'altra cancellazione.

Esempio di visualizzazione di un video.

Sry#ee*ce$rye


Le informazioni ci appariranno,

r: LUrtc |ltu)Ltd^ Itd r:^ il9ul-,

dnnn :vor

aperto il fiie PDF corrispondente. Gli archivi in formato PDF si leggono con h{!: /llw.micrùchip coell0l1ítlplì{e/piwimlì'derhm

il programma Adobe Acrobat Reader

3.0

' li*Gf&tu#* , F1

J fúicrochis la{ebsite ' J Literature J Microchip Producl Linm É Plcmicrots DeviEs

o

superiore. Nel caso non lo

avessimo sr puo scaricare dal sito di Adobe. Queste nformazioni posso-

,

Seardr optiore

no essere lette direttamente a video, oppure stampate, come qualsiasi file

4

S

Text Search

di lesto Nella nanina sinistra del video troviamo un piccolo indice che

About PlCmicro6 Devim Microchip is a leaditr{ supplier ofB-bil micfùrontr0llers, wiìh 0ne ofthe

ri L

RefÈfeilce Manqals Fùllow ihls link ts dotrnload the latest teference msnuals. lhe

,,1 Ai ur .i.' )rLUrczlo, 'r^

cessori Plc

picmicro/index.htm si otterranno tutte le informazioni aggiornate riferite ai PIC e ai prodotti ad essi relativi. I file saranno sia in formato PDF che in forma compressa ZlP,

oppure come file di

schermata. Da qui in poi troveremo i PIC classificati nelle diverse famiglie, e potremo selezionare le informazioni che ci

interessano a partire dal PIC'16X8X, che ci porterà nella pagina dove troveremo il file che ci serve. Navigando

all'inîerno del sito notremo trovare tutte le informazioni di cui avremo

Sw$$wwrys

lfffiiliÉs/1 dftx/dalasirietl30430c

testo.

della nostra onera si trovano nella sezione "PlCmicro MCUs" di questa

bisogno.

rmnli{irrtnri orrPililLoruI

d

1 0 General Descrpfon

=? iai.'=

? 0 Plc l 6FBX DeYire vari

ts''B

3.0 Architectural

i!''A

Owfries

4.0 lìfemory orqaiizalion

c'.ffi f .t uo Rorts

É-g

*-$

EB EE É-'€

Timeú lvodule and T t.o oata eeeRou tr,temo 6.0

8.0 Epecial Features

oft

IS-pin FlashlEf?R{}\! &Bit HiÈrocorlrùllem kbld*din6btuSH: m.*c

9.0 Instruclion Set Summ

slpp

I

0.0 Developmenl

Ei-A

1

1.0 Etectricat

E-A

12 0 Electrical Charaîlel

@

t.o

charaitel

oc aec cnr

. EEÉJdÈtsrryÀ€:,Àah ,prc:6F5x ft:6LCR*l F*ffi@ f,ÉC SU

Hbi

E €l40Packaqinqh ffi tnoer

A

0n-Line 3!FFpol

;g

Header Hesp0nsP

H Plcl 6F8X PrrrJuct

g

nnorrzinuvctd/tu-

liha accara E))EtE tuc-

Nelle prossime pagine utilizzeremo questo CD per installare sul nostro computer gli strumenti software che ci fornìsce Microchip per il iavoro con i micropro-

si accede alla icroch i p. com/1 0 /lit/ pline/

Trovererno inoltre diverse utility per lavorare con i microprocessori. Le informazioni piu complete riguardo il PIC'l 6F84, protagonista

l\,4irrnrhin l, lvlrLluLl lll-/

fabbnca e commercializza anche altri dispositivi:'nemorie, convertitori, kit

nn c, tl <itn rnreh vvLU e L nn<<nnn PvJJvrtu rî"_^^+^ -^^-,,1+-+^ tot I tct tLc LUI t)utLd Lc

viamo. solamente sul CD, però se m

modo

nali eccetera. Anche le informazioni rol:+ir.,c : nrrccti rnmngpgp{i S trova-

sua installazione sia per il suo ulilizzo. MPLAB e f ornito direttamente da N/icrochip, che è la Casa prodrrttrire dei mirrnnrocessori PlC. ll software lo troa we b http ://www.

in

!

Come ottenere la ptù completa tnformazione sui PIC

n

Oltro :iur mirrnnrnro<.nri r.il!rvprvLLr)ul vrLrL

:

manuals

Plf,micro lltlClt Parametric Search Quickly narrow lour search thf pi.mìcrù mictoÈontrollers wilh 0ut nÈ!v

i

nalla r,:rio itcilc vqttE

comodo e raprdo.

reliew architeÈl!re and peripiìeral múdules, bul does not cover thÈ sFecillcs oi each CMúS device.

pa g

normotte di ur cnnct:rri JvvJLqtLt pErrrrELLc

sezioni del documento

brcadesl produci 0feinqs Products range fromSp,[, 1? bii instruction mrd to 66-pin, 16-bit instructi0n word deîices. Fa$t operation, lDw powÈf and IDw qsst c0mbinÈ 1o make lhe hlicrùchip PlCmiEro familv one oflhe mosl popular rrroducl lines n ìhe world

Fsl!#

..*d:--q"b-*. .:D-r! *-qi

*-r-q i--q! )-=-q-iÈ€q: -qq-€Er

i3:O*r-\., 1* rpÈ.Èa . E*,-, :B_! i :jEr+ia ,.8-r..'

ldE

Worldwide gales and .1nb[se**ÈE . Èrt*e*sfi

Dati tecnici del PlCl6FB4 in formato

PDF.

. !@tq5È&lrpÉÈffnnfr]6Ét ó{ih#lùd;*#rtur


Programm azione:

gli organigrammi e persone nanno ta neces-

sità di esprimere il

loro pensiero sotto forma di comrrnirazione rnn nli altri Alcuni lo fanno attraverso la pittura, altri attraverso la musica, la scultura, la scrittura e il ballo. Gli or-

CODICE ISTRUZIONE (letterale)

t/

ffi

ganigrammi sono la forma di espres<inno rho ri :irrt: r nlrcmrrn rrvr rL !r rL nirr Viu Lr uru LO O plO)llldltr inr dsLrdttd rrtrr++r Ul 'l; Un ' '^ progfamma, ^.^ Uecì In

l'i | ,-

Uîa serie di decrsioni e azioni che vengono riprodotte in forma logica e ordinata. Così come nell'arte, esistono molti modi di esprimere un'idea me-

t/ 8--.

l'organigramma, seguire una serie di "norme d'uso" per far sì che cio che rir

da

,/

Controllo

diante un organigramma, è compito dell'analista, cioe colui che compone

' <i

MEMORIA DEI DATI

Segnalatore

rnlo oqnrimoro rienn: intornroi:in

tutti nello stesso modo Considerazioni al momento di costruire un oroanioramma

*g tf tÍ *:rfl,8\Tf?,'sj-i'4 f&etrtrffi*5ilfltTÀf.:*N*il Un organigramma e formato da rettangoli e rombi che si uniscono tra di loro con le frecce. I rettangoli rappresentano azioni che vengono esegulte nel programma. Possono essere semplici, come visualizzare un dato, o

l':ra: rdtcd r'li ut rrna uild Íia".^ ilgutd ..^l+:)LctLd dall'utiìizzatore, e mostrarla nel video insieme ala sua rannfesentazinnp " In nro<t^ .2<^ nrr^ óSsefe nernmnloc<è rarno -_.,,tr,___.- ,.-,,,_

cessario un secondo organigramma, per realizzare meglio le azioni. I rombi contengono domande che vengono poste in base ai dati variabili all'interno del pro-

All'interno si descrivono le azioni da eseguire nel programma

ROMBO

Dentro si inseriscono le domande per scegliere fra due possibilità

FRECCE

Indicano I'ordine con cui si devono realizzare le azioni

Sinboli di rappresentazione di un organigramma

"C alrnl:ro *_,,urdrE

gramma: sensori che forniscono un dato al sstema, opzioni dell'utilizzatore scelte attraverso interruttori, tastiera, eccetera. A seconda della risposta a una specifica domanda, bisognera prendere una decisione per l'azione successiva, Le frecce indicano l'ordjne con cui sr devono eseguire le azioni e le domande.

{,e*&-í?9.ffi3:tru{94fl #fl*i-?

{}s*efdi,*&&i4fi;

Dobbiamo tenere conto che il lavoro con i mrcronrocessori Der la soluzione

S*Skesr*


dei proolemi e composto da varie fasi, che riguardano <,.: l: purLL n:11 e rvrrvvurL SOftUlare -i^,,^ll- t--",.J,^,-"^ lloluvvolg. NOfmal_ )lo ru J.u 9uEllo

Chiedere operando

mente quando si realizza un progetto, soprattutto se si lavora in un'equipe di sv luppo, la oersona che realizzal'analisi del sistema, non e la stessa che più tardi

stenderà

il

programma, né quella che veriftchera

le

soluzroni,

o

,:i,:'#ìîà

{-"; tQta t^ tE ^"^,,^ vrwvE

,,

di

s

, z

lnizializzazione: Variabili di ingresso Variabili di uscita Regístri

c g

{

ln rn |.uv

B

I

Chiedere

nrn:ni-

r

r

in molte di ^,,^-+^ {^.i 1O)r, E 9UE)Ls in nnnrrn: di l^il^ -,,"\ uc|c ^--^ dvtd E))E

intfodotto?

nÒrmo cnerifi-

Operando

che, Chiedere operando 2

Operando

Chiedere dato C

''r''

-

E corretto?

Chiedffi dato A

Togliere salutg

Chiederé dato B

l'interno di regole base. Noi

utilrzzeremo

solo introdotto?

Mostrare risultato

comun-

^,^.^-^.^-l

riÉ

si

rtilizz: ro

I

operando

ffi

Così

gramma n

Chiedere di nuovo operandi

+*tr

a

funziona-

mento.

Chiedere operando 2

I

Dare

risultato

organr-

grammi che

si

riferiscono alla rî^^r^-^^+a

rdvprc)Errcdella

zrone

arganigramma di un enuncrato, realizzato tn forma corretta e non corretta

.

struttura di un

programma, ^..J r^ ttELc))d^^-^.-^ fLl

rin rho nrrosti siano molto nrari<i nerrho rhi nlr r t:rdr

t

iI i r i Meno cose si lasciano alla lrbera interpretazione, meglto è.

sarà incaricato d realtzzare

Ì

orrol nrnnr:m"Y'-' ma, non abbìa difficoltà al momento di tradurre in istruzioni rl pensrero di un altro. Ecco alcune considerazioni importanti al momento di costruire un organigramma. Fissare un preciso punto d'intzio, è un buon modo per non dinrentcare nulla, inoltre e molto difficile, soprattutto neì programmi che si dividono in piu alternatrve, term,nare con Ln urrco pJt^Io. Ouesto si ottiene quando alla fine diognialternativa, si arnva ad un punto comune denominato come Fine. L'uso di alternative con due uniche scelte, risponde ',

Sqe#**eswff*

Aa+ar.ll^ -nra--,t. 6nl plLv, ,l!, uqLqrdlic Uclld 61666:mm,azinno 'CLC))'Ld À^ll. Pr m nata dal tipo d istruzioni, che al trpo di organigramma n se. Quando qua cuno disegna il suo organigramma ha bene in mente la sequenza esatta che il pro-

^i' ' f-j|U

gramra dovra eseguire, le allernative possib'li,re domande importanti eccetera, quindi si tende a dare per scontato il verso delle frecce, e a non disegnarle correttamente. Però bisogna pensare che chi dovrà tradurre la "nostra" idea, si baserà unicamente sul disegno, e meno dali lasce"e.no alla libera interpretazione, --"- |rr5urLdL(). r9ilure >dtd ",-,,l+-+. il-,^li^,^ lr rertango o a, t\i/ialtzzaziore dei registrr e definizioni delle variabili servira da promemor a al momento di mettere in pratica la stesura del programma. Senrrcndo nresttr rons Cerazioni abbiamo realizza-

to un organigramma che rappresenta ra richiesta dei dati per l'esecuzione dt u'a so'nn-a, e la presentazione

del 'isultato. Nelle frgure in alto, vediamo ;r esempio di come nor si deve rappresentare rl medesino programrna.

.:,:.

.:::$li

l::ìa::!

: .:.,a:a,t:

.ra

r.:r:a . :.:,.),ta:a

::.::.

a.::a:,


Appti cazione pratica: it pnmo programma nche se rimane ancora molta teoria da : <tfuttufa e UtiliZZO del Dlî rnmtnrr:m^ ,- a^n .-,, Jn pflmo programma,

i$-

memoria dei dati a partire dall'indirizzo esadecìmale OC possiamo immagazzinare i dati che ci interessano, per lavorare con essi come meglio ci conviene. La ALU (Unita Aritmetico Logica) e incaricata di realizzare le onerazioni aritmeîiche e looiche e all'interno di queste, le operazionr di movimento che sono quelle che ci interessano. W è un regìstro chiamato di lavoro perche interviene come appoggio alla memoria nella maggior parte delle operazionì che interessano la ALU.

con il quale ci addentreremo a poco a poco nella programmazione e nel linguaggio -h^ ^^^ q^ LUJI ---^-t-r^" .n<t Lvt .rìmnlir:tn rnmo ttPilloLv ttE tutti cre_ Lvt IutEt o))ct - lt tE ttutl dono -, e più concretamente nell'assembler dei PlC. Cominceremo muovendo dati da un posto ad un altro. Leggiamo con attenzione l'enunciato dell'esercizio. Nel grafico che accompagna l'enunciato, irettanreg

istri entro

Abbiamo tre posizioni che chiameremo DATO1,

nrr:li o<onrrire

DATO2, DATO3.

dati, le

ln DATOI si vuole immagazzinare il valore esadecimale 03, e in DATO3 il valore che abbiamo in DATO2.

I

i

Quando un'operazione aritmetico-logica ufilizza due operandi, uno di quest è sempre il registro W, l'altrn nro essere sia rrn reoistro della memoria dei dati sia un valore letterale dato insieme al codice dell'istru-

ì

movimenti dei frecce r:nnro<ont2nn il rrorcn di nrro-

zione.

sti movimenti; idatì all'inter-

no

i;i i"Í-è*#gefg*Fitffi ffi&Tg

Per noter realizzare il srrn I L' l.JvLrl

I

golr sono

#i€]{il#

rnmnito il PIC h,a al suo interno la struttura mostrata nella figura seguente. Nella

vodoro in nrr:ntn

La discriminazìone tra i due è fatta grazie ad un multiplexor (MPX) la cui linea di controllo avrà un vaiore o l'altro a seconda dell'istruzione che sta eseguendo in quel momento. ll risultato dell'operazione puo arrivare al reqistro W o alla memoria deì dati. ll numero B che

appaiono

nol nn<tn rho

avranno dopo

LETTERALE

t/

8-..

ffi 8:-

Enunciato del programma da realizzare e la sua rappresentaztone grafica.

ffi

t/

MEMORIA DEI DATI

CONTROLLO

l'esecuzione del programma, indi--+^ dllLllc ^^-l-.^,l-ll-udllc Lc|tu

^,,^+. I,Jullld

^J^ll^ {"^ucllc llcL-

ce. ll valore 03 esadecimale è un valore letterale e la X rappresenta qualsiasi valore, visto che non conosciamo il valore iniziale del registro DATO2.

Percorso che seguono i dati quando si esegue un'btru1one

Sw#sxs*rsxss*


l

,:.'la

:'a:t:..:a

.::,a:aL:,..:

::,..;ti

::.:74

l'irl:l:::

a a

movt

tvt-y9-ve

T--_o-..v.,y

Muove il valore contenuto in W al registro

movf

f,

letterale if yatore

k

1l

zioni, la parte sinistra del quadro è quella che ci dice i tipo di istruzione che si sta

resi$ro ditavoro,W

f

eseguendo, quella che

Muove_il valore contenuto in f alla destinazione d, che può essere il medesimo registro f (d=l) o registro di lavoro W (d=0)

Tavola con le possibili istruzionr di movimento del PlCl 6F84.

viene dopo e gli ope-

randi che intervengonn in nrro<t: nnor:zinne; generaimente si

LÉTTERALE MEMORIA

appare nel grafico ha un suo signif i-

,DEI:,D.ATI

cato: indica che tutti idati con quali lavora il PIC 16F84 sono da B bit, sarebbe a dire che sia i registri che i dati con quali opera la ALU, i

MOVIMENTO DI UN VALORE _oB

oc

LETTERALE

AW

sia i risultati che genera, inclusr i dati che puo contenere il registro di lavo-

ro W, sono a B bit. Allo stesso modo, se al posto di un B appare un '1 , o qualunque altro

numero, significa che il dato che passa per quella linea, e composto da quel numero di bit. La ALU, realizzando alcune operazioni, oltre ad

LETTERALE

MOVIMENTO DI UN DATO QUALUNQUE

un risultato, fornisce anche una segnalazione, di cui parleremo in

AW

seg u ito.

gsYffi#x5*F,{t *3 N#Vs$$ilNY* Nel PIC esistono tre istruzioni per muovere i dati. Tutte cominciano nAr mn\/ e rnntonnnnO a COntinUa-

zione altre lettpre ner indicare da

LETTERALE

dove a dove si muovono i dati. Così si puo muovere un valore letterale al

registro di lavoro W, o muovere un valore dal registro di lavoro ad un

registro della memoria dei dati o viceversa, muovere un valore dal registro della memoria al registro di lavoro W, o da W a se stesso. Le tre istruzioni che appaiono nella figura saranno trattate in una scheda individuale più avanti, pero vi anticipiamo che per tutte le istru-

$wSsxwwww

:ffi;

MEMORIA DEI DATI

CONTROLLO

MOVIMENTO DI UN DATO

DAW _o3

oc

Percorso dei dati, con drfferenti istruzioni in esecuzione

AD UN ALTRO

REGISTRO

ì

:

rlr:1.ì

.

l::.:

rr:,r:ì


LETTERALE

,/

ffi'/

t/

MEMORIA DEI DATI

OB

_oc SEGNALAZIONE

_oD OE

t/

Blocco di elaborazione dati dopo aver eseguito il programma

&4& &SSfr W &$ g-fi ffi programma assembler risultante

rappresenta sempre con una lettera legata al tipo di

$}W*S

istruzione. Possiamo seouire ì |v Jg:jv||

ll

il lrrsso nercorso dai dati nella figura della pagina precedente. La prima rappresenta il movimento di un valore letterale a un registro, che e la f

parte del nostro compito nell'enunciato numero

'l

,

muovere un valore letterale a W. Per portarlo poi da W

al registro DATO1, dobbiamo seguire il cammino segnato dalla terza figura. Nella seconda parte dell'enunciato del programma dobbiamo muovere un dato da un registro ad un altro. Anche se non esiste alcuna istruzione per muovere un dato all'interno dei registri, questo si puo fare con la combinazione di due istruzioni: muovendo prima un dato da un registro qualunque a W e dopo da W al secondo registro. Questo viene illustrato nella seconda e terza figura. Dobbiamo considerare che il registro dì lavoro W è l'unico che non fa parte della memoria dei dati, per cui non viene trattato come gli altri, e per utilizzarlo bisogna fare riferimento ad esso tramite nome dell'istruzione.

il

K&914

è illustrato nella

pagina seguente. nella prima linea con la direttiva LlSl, si indica il tipo di PIC che sì vuole ulilizzare, nel nostro caso il 16F84. Nel caso in cui volessimo utilizzarne un altro, cambieremo il parametro che segue P=. È obbligatorio usare questa direttiva, perche tutti i nostri programmi cominceranno neìla medesima forma Nelle linee 2,3 e 4 si usa la direttiva EQU per definire le variabili. Nell'esercizio si chiede di muovere dati nelle differenti posizioni di memoria, senza specificare quali, la prima posizione a disposizione dell'utilizzalore è la posizione OC. Per questo si hanno codici a tre posizioni consecutive, a partire da 0C, al posto di lavorare direttamente con gli tndiizzi, la direttiva EQU ci permette di dar loro un nome per far sì che l'uso sia più sig n if icativo. La lrnea 5 è di nuovo un'istruzione, la ORG. Questa direttiva dice all'assembler che l'istruzione che seguirà, (nel nostro caso la movlw 03) è messa nella posizione

di memoria che è indicata dal oarametro (nel nostro

Sw$*swws"m


o8

l'enunciato. Per .nuovere dato contenuto in DATO2 al

f

I

I

LIST

P='16F84

EQU EQU EOU

0c

5

ORG

0

6

I

movlw movwf movf movwf

03 DATO 1 DATO 2.0 DATO 3

10

END

2 3 4

DATO 1 DATO 2 DATO 3

7

8

registro DATO3 si usa come regrstro intermedio W (rstru-

OD

zronr B e 9). Nella linea 10 si termina il programna con l'islruzrone

OE

END.

; Fine del programma

Questa istruzione e sernpre obbligatoria Una volta eseguito il programma ii blocco di eiabora-

zione dati del PIC restera come segue, tenendo conto della posi,,ione d, re'noria che gl abbiarno asseg^ato

Programma assembler dell'enunctato proposto

caso 0). Questa istruzione, inoltre, e sempre obbligato-

ria, dato che e la prima istruzione del programma (fino aila movlw non sono istruzioni) deve essere nella posizione 0 delìa memoria di programma, dato che e lt che viene ndir zzalo il puntatore al reset del PlC. Comincia così ii programma tn sé. Nella linea 6, si

?:1"!1.,1:,1:1r: a: 1.i

lt

N'4olti

flti.:

f',

I :,: r,i :l l lri:lii: rl

:.i ; rÌ :::i,r:,r

lettor s staranno chredendo perche alcune cose

muove jl valore letterale 03 a W per proseguire col

sono sul margine sinistro e altre sono tabulate, se cambi tra maruscole e minuscole hanno significato eccetera. Ecco qui delle norme, alcune obbligatorie, altre solo come raccomandazioni, da seguire al

va ore al regrsrr-o DATO I , cosr come abbiamo derro re,-

momento dì scrivere un programma per tl

r

i

PIC

Le etichette e i nomi divariabili {LIST, DAfOi) di solito si scrivono in maiuscolo. Non succede niente se vengono scritte in minuscolo, però così si distinguono meglio dalle istruzioni. Dobbiamo ricordarci di scrivere le etichette in forma sempre uguale, dato che lnassembler è sensibile a maiuscole e

minuscole.

' I nomi (mnemonici)

delle istruzioni si scrivono in minuscolo. Non accade nulla nello scriverle in

maiuscolo, però si stanca di più la vista e sifa più fatica a leggerli.

'

I programmi devono essere tabulati e ben allineati per vedere rapidamente la struttura del programma stesso' Le uniche cose che si scrivono nel margine sinistro sono le definizioni delle variabili {DATOI, EQU, OC) e le etichette (che vedremo in seguito). Aiutano nella presentazione di questa struttura gli spazi bianchi che si lasciano tra le parti del programma.

'

L'utilizzo di commenti per spiegare le istruzioni o parte di queste, aiuta nell'elaborazione e nella successiva modifiea o riutilizzazione di un programma. Per questo si utilizza il punto e virgola (;) e in seguito il commento che si intende inserire {; Fine del programma).

Norme dl scrittura del programma rn assembler per il PIC

Sap$&rrmr'qr


Schede dette istruzioni:

concetti generali oco a poco vi mostreremo le differenti istruzioni che formano il repertorro del PIC

16F84. Per questo

Utdilre

^^-^--^",^-l^i-":"^^ necessdilo

wf f,d *addwf

e

prlma

una serie di termini, che saranno quelli che utilizzeremo d'ora in poi

MNEMONICO

coDrcE oP DELL'ISTRUZIONE

nol rnr<n Àoll'nnor: vvLru. Esempio di alcuni dei termini spiegati

Mnemonico: è il nome dell'istruzione che noi useremo per ordinare al microcontroller cosa deve fare. Dobbiamo scriverio tale quale senza cambiarlo.

Parametri: operandi che necessita l'istruzione per essere eseguita. Per entrare nei dettagli di un'istruzione si specificano i parametri che essa ammette che dovranno essere poi sostituiti da valori reali. Parametro f: rappresenta un registro della memoria dei dati, operando originato da un'istruzione. Parametro d: rappresenta un registro, operando destinatario di un'operazione, con due possibili valori. Se si sostìtuisce con uno 0 significa che il registro di destinazione è il registro di lavoro W o accumulatore e se è sostituito da un 1 significa che è il medesimo operando originato dall'istruzione. Parametro b: rappresenta un valore (da 0 a 7) di un registro. Parametro

k

rappresenta un valore letterale, sarebbe a dire, un valore riferito al mnemonico dell'istruzione.

Registro di lavoro o àccumslatore W: registro speciale che non fa parte della memoria dei dati, e che si utilizza nella maggior pade delle operazioni aritmeticologiche.

Giclo di istruzione: è il tempo base che impiega un'istruzione ad essere eseguita. Per il PlC16F84, funzionante a4MHz, questo ciclo vale microsecondo (prs).

1

Unità Aritmètíco-Logical è incaricata di realizzare Ie operazioni aritmetiche e logiche del PlC.

Blocco di elaborazione dati: insieme dei registri che eseguono le istruzioni.

Flage: bits contenuti in determinati registri che servono come segnalatori di eventi nell'esecuzione delle operazioni.

Codice OP: traduzione di un'istruzione realizzala dall'assembler, perché possa essere compresa dal PlC, che non lavora con codici mnemonici, ma con 1 e 0. La longitudine dei codici OP in un PlC16F84 è di 14 bits"

Termini utilizzati parlando di istruzioni

$*#*xwmry*


a

Schede dette istr uzioni: l'istruzione movlw 'isl.-rzione "mov" e tiptca ir îutîi i nrocessorr dato che e sempre necessario movimento di dat da un

,d']-ffij

posto ad un

a

rro,

OPERANDO FONTE

MNEMONICO

I

siano

movlw

o-esti de risultaLi, valori f ra registri o

OPERANDO

I

DESTINAZIONE

k

vaiori immediati

Consta dr due operandi, dove

il

OPERAZIONE:

o lrzcfar't. nol nrimn rrqr Pril rlv q Lt o)tqtt_

drtn LUrrrcrruLU rnnionrrin uorw

to, o soostato al secondo. Con questa istruzione si realizza una copra der

dati, poiche non sr cancella il dato orig inale.

Ci sono tre tipi di "

istruzioni

mov", le quali si differenziaro rei

loro operandi di orrgine e deslinaz oNel caso della movlw, l'origine è

ne

un val'ore letrerale e la destinazione il rpniqtrn di l:rinrn \A/

[5fr

i4ilt il*#

e

Movimento del valore letterale k al registro di lavoro W

CICLI:

1

GODICE OP:

1

FLAGS:

Nessuno

1 00xx kkkkk kkkk

!*,**'-",****,.*"Ca

ratte ri stiche del I' i struzr

t'951",{{"3ríq:$il

o

ne movl

w.

pi;'acile dr :nnàre C)r: r,pdrpmn nrrplln rho succede in o<omnin n:c<n Y---- a passo.

v,sto che la programmaz one n assembler e

i**vì..it,

nrrel rhp

Questa istruzione è stata ulilizzafa precedentemente nella realizzazione di un programma, dove abbtamo

nra<tn

Si

n zia

mrove^do il valore letterale 5 nel regi5tpe

li

avo.o W e si nroseorre muovendo il valore letterale 3 al medesimo registro W. |LO : {inr'r: : l:+n r:q66p(ont: il y:lnro rr9UrO O rqLVrOFr-.-,-

valore iniziale

xxxxxxxx

rhe

rssrrme \A/ dono l'esecuzione

di

nnn rn: dollo i<trr rzinn

All' nizio il valore di W sara indeterminato, e quindi si rappresenta median-

movlw 5

movlw 3:

00000 1 0 I

000000

Valore di W all'interno di ogni isLr,tzione movlw.

$sa*S$qryqsre*

1

J

te "x". Dopo la prima istruzione avremo caricato in W il valore 5, il cui codice h.nalo si r:nnrpsent: con "'1 0'l " Dato che i registri del PIC hanno una dimensione di B unità (bits), le celle non diret+16^n+^ .dilìerLe '^+^.^--^+^ InreressdLe, -.50no messe a zero,

iniziando da sinistra. Dopo la seconda istruzione il valore di W varia, cancellandn il nrimn v:lorp o nassando ad essere "0000001

1

"


Strumenti di lavoro: I'ambiente MPLAB è un ambiente dr sviluppo integrato per il lavoro con la famiglia 'MPLAB

PlC16/17 di Microch p. Fsspre inteorato sionifica

che dal suo interno si puo editare un

programma, compilarlo, tradurlo

in

linguaggio per il microcontroller, simulare il suo funzionamento, emularlo su un hardware, che abbia le funzio'ti del sistema reale, e anche scriverlo rel microcontroller, anche se nar flrro<to dr.a rrltimo nnc<ihrlit: é necessario disoorre dr t-,n hardware -r^^, -+^ urLrE -ll,-^îliCaZiOne. ^r+"^ oil oPP duf9uotv, ,

gr'1is?&g_il,&at*ru

# #g

&4

r*-effi

f ambiente MPLAB si trova in una cartella con lo stesso nome nel CD di Finestra di inizio dell'installazione di MPLAB.

Robots, che

vi abbiamo fornito.

Per

rrraÀaramn o<onr q l'in<r:ll:zinnp l -uclcl l lu d: I r rJLO ro-rVr rq d( E)CVUil rira

questa cartella, dove troveremo un file che dovremo eseorlire. rF:rondn ulur ruv

qj n1a<tn rr 2nrir: oPl llo VULJLv

, 'n: lll lEul lo fina-

(tr: .nmo nrroll: doll: finttre

16,o ei

comunichera che stiamo per procedere all'installazione di N/PLAB.

Accettando (Next) apparirà una finecfr: r'îor '-^^tt^'^ ^ '-tl )LCVrlClC \-'luOll

<.ornnd,a

componenti vogliamo rnstallare.

I rnmnonenti che

selezioneremo programr.r,, ai files e corispondono ai alle loro funzroni relative che utilizzeremo: MPLAB IDE Files: sono i frles Finestra di selezione dei componenti da installare

relatrvi all'ambiente

di sviluppo

in

Sep##wwr*


sé, a cui si fa riferimento con la sigla

IDE (lntegrated

Development

Environment).

MPASM/MPLINK/MPLIB Files: sono il compilatore, i linker e i files di libreria accessibili tramite MPLAB. ll compilatore sara necessario per tradurre i programmi che editeremo in linguaggio macchina, in questo caso quello del microcontroller. Se il programma è realizzato in diversi files tra loro relazionati, ed ognuno di essi contiene vari sottoprogrammi, sarà necessario il linker per renderli una sola unità coerente. I f iles di libreria, dal canto loro, facilitano il lavoro di programmazione fornendo "frammenti" di programmi già elaborati e molto utilizzati che potremo includere all'interno del nostro codice.

MPLAB-SIM:

è il

simulatore software che fornisce Microchio. Con esso si puo verificare il corretto fun-

Finestra di selezione dell'ambiente dei componenti

zionamento delle istruzioni del programma che si sta eseguendo, vedere come'risponde agli ingressi del sistema, così come le uscite esterne che questo genera. MPLAB-ICD Debugger Support Files: come indica il suo nome non si tratta di un'applicazione in sé, ma di files di supporto necessari per la funa,';e+' Ài "nlahrrn" n r'trarrur utruu9 u rLcrLd 9ud>t-t. Questa funzione permette, non solo di vedere i risultati finali di un oro-

zinna zrur rc

gramma, come farebbe l'utiltzzatore, ma di accedere ai registri del sistema mentre si sta eseguendo l'applicaziono ocanrondn Io i<tr uztont passo a n:<<n aaaatar: Î rttn nro(fn ln rror{ro-

mo in maniera piu dettagliata trattando questi strumenti cosi importanti. Help Files: sono i files che ci per-

metteranno

di ottenere aiuto

dalle f unzioni, menu, finestre eccetera, che

Finestra di selezione dell'ubicazione del linker.

inteqrano MPLAB. I restanti componenti danno supporto software a strumenti hardware per emulare e scrivere i programmi commercializzati dalla stessa ditta N/icrochip, dei quali

Ssflr*rsre

non disponiamo, per cui al momento non parleremo di loro. La programmazione del PIC nei programmi che realizzeremo si farà con il software e l'hardware specifico in ouest'ooera.


Una volta scelti i componenti, continuando (Next) apparirà una spconda finestra ner selezionare l|||LJ!|9

F\

l'ambiente nel quale si eseguiranno

i

programmi. Noi abbiamo scelto l'ambiente Windows perché in questo momento è il più diffuso sul mercato.

In seorrito verra chiesto un indirizzo per l'installazione. Si puo scegliere quello proposto, oppure uno che vi sembra più adeguato all'organizzazione del nostro disco fisso,

dato che oresto non influira

in

seguito sull'esecuzione dell'applìca-

zione Nplla seorrente f ineStra

è

offerta l'opzione di fare una copia di <ictrezza dpi files oià esistenti sul nostro computer che saranno sosti-

tuiti, e in seguito introdurre

nel

Menù di Inizio di Windows l'accesso Durante l'installazione sono mostrate una serie di caratteristiche dell'applicazrone rapido all'applicazione in modo che non sìa necessario entrare nelle sotFI"J NffiSNX tocartelle o nei f iles per ricercarla. rfinestra ner sreoliere sg f4pLAs I'indlrizzo lq il rLrLr u rLLyilLr! luu oPvoltr vudl ^',-^r^ vLr 'del linker, dovremo selezionare una delle due possibili Possiamo già eseguire un programma, aprendolo apparirà una fìnestra come quella della figura riprodotta qui opzioni. Se avremo installato una versione precedente In basso. di MPLAB, la scelta sarà fatta di conseguenza, per renprogetti quelli Come si puo osservare l'aspetto e come quello nuovi. con dere compatibili i vecchi Comunque per un utrlrzzatore nuovo si raccomanda di installare il linker in r

MPLAB\Lkr.

In seguito dovremo scegliere dove

installare

gli archivi di

sistema.

Se

lavoreremo in Rete le scelte verranno

fatte di conseguenza. l-lnnn trrv rfia nr ro<to SCelte iniZia l'invvvv r!! stallazione di MPLAB. Durante il processo di installazione appariranno una serie di caratteristiche nel video, oltre alla barra di stato dell'installazione.

Una volta terminata l'installazionó Jr ci pvLrorilrv nntr:nnn Irsr

l666,nrn i{il^. I lllc) rsygElE

Ài Ul

testo associati ai componenti installati, oppure lasciarli per la fase successiva.

Tutti questi passi del programma MPLAB si trovano nella cartella " C :\Archivio di programma\Mplab".

Finestra di inizìo di MPLAB alla sua esecuztone.

Sa**nrara


.,,a,:a,,:.& '.'.Ìa:-':?&È

'r...::-,:i*

.::::::1ffi

,,,,:::Liff

;3.

. .l:t

"s4 ,.-ffi

ffi

1::€

"Aiuto" e altri che, invece, sono specifici di

della maggior parte dei programmi che funzionano nell'ambiente Windows. Nella parte superiore della finestra appariranno diversi menù dentro iquali incontreremo i tipici "Files", "Modifica", "Finestra",

questa

ffi

ffi

particolare applicazione.

,:#

i menù le icone che raooresentano le fun-

-":'.Ea

zioni oiù utilizzate. Se si seleziona l'icona di sinistra il gruppo di icone varierà. All'interno di questo ambiente si

-:w "Èffi

Sotto

potra:

-::::x --iffi

"w

w

'E€

ffi

Organizzare codici di una

e

applicazione in progetto.

I

-l*

Editare i programmi fonte per il PIC 16/17 così come altri flles di testo di cui potremo aver bisogno.

iìè :::lr:;:*

:.t:&

Compilare i codici fonte ottenendo i files da memorizzare sul microcontroller. ln Assembler ogni istruzione si traduce come un solo codice macchina.

:.:,,aa&

:,;:1|ll&

".-,.}

&:

Simulare icodici una volta compilati e prima di memorizzarli nel microcontroller, verificare che il lavoro realizzato sia adeguato.

"E

,,,,ì1ffi

,,'::a::# .::-:..ix r:ìi::il::!A

ffi

'::,::t:atffi

:ìa:::11i9;!

Grupfii di icone che rappresentano le funzioni più comuni Tabella delle funzioni da realizzare nell'ambiente MPLAB.

,:*$ffi

w

"qffi

4tr

.11,11:,::,74&&

;

Pnro : norn vod;911o come Si realizzano queste opzioni. Per il momento diamo un'occhiata alla

***rì******t**.$***r*r**dtt*Iq*r****i**rì.*r

r*r*r*È*r+**, i*r*ú******r**** ;* Hlcr0chlp lechn0l0gg IncorForated

* *

(anronta

;r lhls proqrafi conflgures the n,/ù ilúdulÈ t0 r ;i l/D channel 0 (the potentllneter) and dlspl ;r rÈsúlts on thÉ LE0S on PoRTC. ìlak€ sure tl

di informazione che ci permette di

16 0ecenber 1998 hssenùtÈrt ulth l4Pfisl'l u2,?8 ***it*it*t**t*iÈ*tr*r**t****i*i**t***$**r*H{

r sÍltch

SSg has

all ssltches ln tha

0H posll

0ú 01 02 03 64 05 06 07 - :T: F; cF Fr rE FF r_ tF !t - FtÉ ld.f6 FF FF FF FF rÈ L, rF tt g&!.f fr fF FF FE ,! FF Ft Egg! FF El lr Jf rl cf Fl fF

Hex 96 OB FF '18 BS 6B 1F B! FF 69 a0 06 05

Dec B B ?55 24 B B 3t & ?55 B B 0 B

08 09 0n

81n3f9 BBSSBBBB

588ÙBÙ68

11111111 IrJù11888 BSBB6BOB BB6ÙB8BB

ggg1t.i11 86800080

i1111111 6OB86O68

00866800 06860666 86068880

I +:000S B 0003 i oooq q!!-', + 0009

SFFF SFFF arrr litl aFFF

Finestra che mostra i differenti titti di tnformazioni fornite da MPLAB.

!8

0C

tr FF;F rl il t, FF EE tt 'l rr Ft fF t, rf F. FF FF l,- r

€ddlw orFf

eddtu oxff àddlu 0xff

'

finrrr: nor vorifir:ro

il f inn

vedere l'applicazione, e cominciamo -^^idiversi ^i^--"^ur I PU LUr o- gruLorE | menu.

ffi .

.iss

..*# :i

"*ffi 'ffi l*q ':;t

|

la

finestra srrnpriore a sinistra mostra l'edizione del programma in corso. Sopra di essa, in un'altra finestra si nrro vedere il valore di oonrnn dci renrstri sDecifiCi del PIC nel loro formato esadecimale, decimale e brnario. Nelle finestre di destra, cominciando dall'alto verso il basso, troveremo la finestra dello Stack delle istruzioni del PlC, la EEPRON,l dei dati e la memoria di programma.

:,à ':#

...1# orX

w ig '4 ,::j!.?}*;

' ::* ,{4

$fi* w

ffi ':ts

:,.ff ,ffi

":ff 9à'w&%*xww*

'ffi ---é,9

!i{g

t3&


.

ìir':::ir1,

i?:,:,::':ìr.:.

.. :-::iii

^.. ".

'

Schede dette istr uzioni

:

*.::r:lll',,,,

'''

:aìr.ìl:ìlì:ì :

l'istruzione movwf

'

]iaa-

la seconda variante dell'iaaa::.:::::

-:::

struzione

OPERANDO OPERANDO

contenuto nel registro di lavoro W è trasferito a1 registro f, che qui appare come parametro, in

ì:ii:,:i::,':

l"

..

L,,t,, l;:L;',::,

at,:.:,,

I

In essa

rl dato

,1L1;1::l;1:,:,,,,

:ìiììì:r:ì::

"mov"

-

FONTE DESTINAZIONE

MNEMONICO

m o.v

modo che si cancelli da W Dobbiamo solo indicare qual

t movimento del contenuto del registro di lavoro W al registro f

è

l'operando di destinazione, visto che quello d'origine, W, e

Operazione:

implicito nel codice di istruzione.

Cicli: Codice OP:

00 0000 1 fff ffff

Flags:

NESSUNO

;1$l1r!;;ìl ii1!i l. tit,ii *i.ìì-; Î 4,,^-+vuc)Ld

í:': ;ri :ji'i

,,^l+vulLd ,,^^li--^ vu9llol

I

ijqi

l;

I

dl l\ dlú 'lll lv (-^.,-^"^

de recistro rl crri indirizzo (ricordramoci che a partire e 0E valore

Ca

ratte risti c he de I l' i struzi

,'lr rLyrJrrl uLr ranictri ud nf uL Ài.n^ni.mn ur)purror rw doi

generali che possiamo utiìizzare come ci conviene),

e

o

ne movwf

:

chechiameremooPERANDo,conva|oredectma|eB' Per questo dovremo impiegare le due istruzioni che gia

conosciamo: movlw e movwf Nella figura si vedono i passi da .

realizzare.

l

lregistri, all'inizio, si considerano con valore indetermrnato, X e Y. Notramo che al momento di utilizzare le istruzroni il valore letterale non viene sempre rappresentato nello stesso modo; dipenderà dalle situazioni o dall'utilìzzatore, comunque al momento di memorizzare i dati nei registri e quando 'a

Í,

I

w

OPERANDO XXXXXXXX ' . . '. : .

€t ,rn

m OV lwdi

...

ì.]ì.ì:ì:

ìì

:...'.'....

:':.1

: t

::. '' : 1',. ].

ari

Y.YYYYYYY .

snec if .'

'.--l

lfjt

I xxxxxxxx

I

riF;., ì.:i' a

:

0000

ru

r

000

lavora la ALU la base utilizzata sara la binaria ll codice esaderimale e orrello che si usa normalmente, in assenza di altre

:

iche e

com nre

nd

e

i

valori da 0 alla f . Per utilizzare gl altri codici dovremo esprimere rl numero entro "virgole semnliri" e nrerpderlo da una lettera che indichi il codice in

cui si trova. In questo modo, avremo diversì codici molto impiegati, come ad esemp'o il decimale e il brnario. Dopo le

nnor:zinni pntr:mhì i roni<tri '-v'-"' hanno il medesimo dato, visto jp6prL \r:nrolrhA tA<ln nnn d lLcl\'rL nt 9ULJLV l:rn noJ ronictrn nli nrir 17

Passi

da realizzare aer Cart(ÀrF il rpni<rro aPFRAIIDO COn il valore deCimale

B

-,

-,,Jrne.

$s*$*sws*etr


Schede delte istruzioni: f istruzione movf % W ffi* w ffi fu

la terza e ultima variante dell'istruzione " mov". In questo caso rl contenuto Oet registro f, che e l'operando fonte, si puo trasferire nel registro di lavoro W, o al medesimo

f :

sorond: del valore dr "d" F necessario snecificare tanto l'origine come la destinazione. renistro

OPERANDO

MNEMONICO FONTE

movf Sed=0si

muove il registro di lavoro W e se d = 1 si muove allo stesso registro f

trr nr rÀ nccnrn vuv c))ctc Ltda

partire da W, o operare nel medesrmo registro di lavoro, pero muovero rs ttn urr d:tn uqlv

:lln cfac d: uo ttn urr roni<+"n rEyr)trv qilu )Lc)-

so regrstro, sem0ra non

avere senso. Tutto ha una ragione, ed e che quando si realizza questa operazione resta coinvolto un segnala-

^;

del registro f alla destinazione d.

Muovere un dato da un registro

sferirlo ad un secondo registro

d

Operazione: movimento del contenuto

al registro di lavoro W ha senso, d:rn vo Lv rho Lr rq l'nhioftirin I uurqtLtvv

OPERANDO DI DESTINAZIONE

Cicli: Codice OP: 00 1000 dfff ffff Flags: Z 1

Caratteristiche dell' istruzione movf.

tore, o flag, chiamato Z. ll flagZè un bit del registro di STATO che viene messo a I se il risultato di una operazione è 0. Così, muovendo un registro a sé medesimo e verificando il valore del flag Z, possiamo sapere se questo registro ha valore 0, o no, visto che Z sarà messo a nel caso che questo valga O. Cio e molto utile, e si vedra, parlando di cicli, che per ripetere un'azione un determi-

nato numero di volte, si puo caricare il valore in un registro e decrementarlo fino a che questo raggiunga 0.

frsfre4px

il***

#xsgffià$trg#$€g &4#w$:

Nella f igura sono rappresentati i valori che prenderanno i registri all'esecuzione dell'istruzione movf nei due

'1

diversi casi, dipendendo dal valore degli operandi di

destinazione. Questo ci darà

t

Valore iniziale movf openaruoo,l si opeRlruoo= 0 si oprRnuoo+0

t

movf openaruoo,O si openaruoo= 0 si opeRnuoo+0

"ìr:**Y,*i

;-

yyyyyyy vvvvvvv

I

yyyyyyy yyyyyyyy

lL vvyyyyyy vvvvyyv

Valori dei registri nei differenti casi con esecuzione dell'istruzione movf

Sw#sweqwwqp

due

combin azioni, però se uniamo il valore del flag Z otterremo quattro casi distin-

STATO

OPERANDO

]dll@lì\]]ìiìWs'ì''ì]i]ìù]$ì]Wls'''''[W!]l!]l!.ìrìsW*]sl!l*lW\ll|wilìììììr]]{l*lf1ffi:è.ì:ì:ìììì]]]]l]\*:\wqfr,']|

J?-:YI

:

ti. Nei primi due avremo )z=1t _

. -l

_t*z=gt

I

qa\.+^..^ m.)qq.l il rpnictrnv q1 Ju Jú )LE))U

e Z si sara attivato, o no,

a

seconda che il valore del regiI

^-.12.=11 '*l tz=ol .J

stro sia 0 nel momento del movimento. Negli ultimi due esemni oltre :ll',aftivazione del f lao 7 il rcnistrn dr ravoro W ha alla fine dell'istruzione, !J!|

il

| |H|,

medesimo valore dell'ope-

rando fonte.


Strumenti di lavoro: it compitatore MPASM MPASM è un compilatoro npr PIC Delle l-rc versioni che esistono attualmente, noi utiiizzeremo quella per Windows, che

File

A5M

--"i--+^ installando -r^r-i--^ ^i- LorLoLw rw 9ro ouuior MPLAB. Questo offre il vantaggio

di noter romnil,arc senza

Compilozione con MPASM

uScire

dall'ambiente di sviluppo, cosa che risulta molto comoda, oltre a fornire un'interfaccia molto piu nradpvnle risnetto alla versione

Errore di

per MS-DOS.

sintossi?

f MPASM oeve iavorare con file con estensione ASM, li compilerà e, se non sono staîr cornmessl errori, darà come risultato altri fiies orresta volta co. estensione HEX. ll codice HEX e qL,ello che nntr: pqqorp nronr:rrmato nel PIC per essere eseguito. Se I orog'am-

Files

*ri.

File

File

ERR

HEX

più importanti in relaziane all'MPASM

ma contrene error srnta'ttr-

ci

,ad csomnio sp

p

Stata

scritta maie un'istruzione, o l^ nnn \/ennnnn riqnó++:r^ lC l,Ull vcl'VU ,U ITJPqLLoLC

nnrmp dpl rnmnil:lnro ' '|./iluLvrE/

rl

ql

nnqtn dol fila lldlr rr'L oq:dori*.lo LruuLL vL PUJLv

riorrÀ nrnoolln irn tile

d

e"ore FRR che sara nossiAit^ -t^ r199crc c^ rc ^^t ^,, \luartr uiltr :^^^^.^ saranno contenuti i codici nlonl vrvl

arrar't

frnr,:1-i

Che

dn\/rp'nn rnrrenctrrtr nr

di oroseor,ire lo

Tla

schema

rinrodotl-o in della fiarira "v-',altn rrnstr: i: sonrrg1173 segu ta e i files co nvohi, '

nrio(tn cr r! rrrU :nrho iLr hom: Ur rLr rL <a JE 9ULJLV

versione di MPASM per MS-DaS ha quesro òspa|7o

forma srmile non essere confuso

deve

con

s--

h I lor

un

bq;}trYt";q*P*


f

organigramma, perché in questo nuovo schema sono mescolati differenti tipi di dati. I f iles mostrati nella figura sono i più importan-

il#

ti, ma non gli unici, dato che vengono generati anche altri tipi di file che per il momento non men-

continuamente far riferimento a quest'ultimo. Così, per esempio, in MPLAB tutto è basato sui progetti,

zioneremo.

files si chìamano nodi (nodes), e sono raggruppati per formare il progetto, così MPASM si dovrà configurare in h:<o:llo o<inonzo di _, nr ,Jnt progeîto. Per configurare MPASM per poterlo utilizzare in MPLAB bisogna seguire i seguenti passi: 1. Si creerà un nuovo progetto (Project>New

Ovviamente le finestre che ìllustrano questo capitolo di "Programmazione" non le troverete sul CD, ma servono unicamente come esempio di nrocpdttre d: sporriro ner rcalizzaro il vn(trn nrngerro.

f

gi;f

*rg# #

ffi

&f.X*

ru

ffi tr L n*-ffi

tr&SÍv?

MPASN/ che utilizzeremo è parte dell'ambiente di svi-

luppo di MPLAB, per cui parlando del primo dobbiamo i

Project), dopo di che appa-

rirà una finestra di dialogo come quella nella figura.

2. Si dovrà riempire il

.$ c:\

;l archiv*l ffi mplab If er*ample I template

-^^,, nome Ldil rpu ;^^;--+^ il rurLd ro Lor file" (File Name)con il nome

*

che vogliamo assegnare al progetto lad es. "prova") e cliccare OK Apparirà una seconda finestra con le opzronr.

3. All'inizio il modo

,li*.ljE '*r lProiect File+ Finestra

:,.:,:.,:,,:

['.pitf j

(Development Mode) sara di sola scrittura (Editor Only 16F84). Per il momento e su'f iciente, pero possiamo ugualmente provare a cambiarlo, con il

Sri1e*: r -"*

l'#s

di dialogo che appare quando si crea un nuovo progetta

f,anfigurdbn

Tsol*

é. 3

i

!t

llone [Editor Bnlyl

ilirlrF-flt! srl*lt} t q.

î:

f'Ì

1:.1:l

fu""r

I

]

EreaL tlptiun*

H*r+:*:g

"--.'"-'"*"" -r.: : :Proce*sor:

Ptc16Ffr{

ial

:li

'l;:

f li

er

,,;,1

1i

Ii.++r:Ì+l+r

1.

carlbio rt .lmb,e

r* i, g,',

ma.

4. Torniamo pero alla fines'ra 11o11o n6zinr., d€l progetLo nella parte infe-

l/tl

is nnt simulated" 'Details' for additional information an Flfl EF8{.

.1i1oa

riore dei a fineslra trov a"no

attivo il pulsante

e,1:r:t:i,

:

::ryla1tan1

un nodo

per (Add

Nocie), clrccandolo

farà

aEgiungere

ir:**iií:,t

r--------------t{rper.metteràdi | 0K | f,ancel |r $rply { lestra

?

simulation.

l'lPLAB-lCD Debugger

F

pulsante "Change", selezioniano il modo simulazione (MPLAB-SIM Simulator), ^.-^",,-^,1^ quanlt ^,,-^+i ^-, parameos5ervan0o tri dovremo tenere in considerazione al momento di simulare il nostro program-

ot all peliphelal* have $uFFort for

{{}::

f:tll:lffi,tli ì

] rinu

:"+wt+

:'"++

di

sviluppo

apparrre una f inestra che

l-l.elp

-- I

ci

realizzare

I I

o'-lesta OggraTione.

Una vclta selezicnato il fil-., c rccare su "OK" llel


ia::::

iiirr l::ll:::':, '.:,a,,::,:::: ,,.:tt:a:t',:', :a:a,:,.:,::::

:t:titìit:.:

'l'tllLli:ll:

t:.,,::.:::'

$l,,,, t:,::.:a,:: ;4,4,a,,,:

caso che nessuno dei files già editati faccia al caso nnctro np nnsqiàmn creare Uno nUovo con l'onzionp

Properties), che, di conseguenza dovremo cliccare.

File>New.

zionare MPASM come linguaggio di programmazione /r -^^,,-^^ -rr,i^+prno \ LOt t9UO9E T^^r\ tUUt// Oil [ tLsr I rU dplle UCilq nossihili )Lr FattO pUJ)rUilr srelte.

l-^-6 ln nrroct: finoctrrilrLJ(ro lo Lv)o

5. Se si seleziona ìl nome del progetto, (prova.hex), del riquadro Project File, si attivera anche il pulsante di proprietà del nodo (Node PKid TudFi*as

i;-*d"h*

i-^^.+-n+a ^:,, LolltC l.JlU llllPUl

a )ElCcala E

questo, cliccheremo OK. Tornera la finestra delle nnzinni

dol nrnnotln

s

EE:F.i

*-------:---l

-t-S:- ..- ,*1'" iEonfiq.ndion 3 ' '=-.

c*u:]ì

l-:---]-= lldp

È

*FÈiffi"1*;6,16;1',

I

{snc . gef f*r*P,F*+et Énah*e I :' :, .: f*qf 3r+* Etable

l'

Dae@extrode: Fdibo'tt6F81 rure"4ol*j.5oìio

|;;g"

-

-___l

i: :.*

.St*rr.rr'.+nk+H,*r

'

i

qle4Ei...l

,*=

Plr4É{{ Éùer

tdd

]

i.....-......-.=.- -'.-.....-..-'.-.iq

I;

* Ir rin*:

li6de---

Mk=+pr+r.'+,r++r l:.yt

*t+tktí

Í*

i+.'*

+++rttr

+Íì+;+

,IrritT'ri ff"#:

1

, :$#

{

l

+ llll

la..a:.:':.,'::'-a tr f ''ir,:

r.ll::::

.:t.: t .-

{

f.qil

i

nn-ostra per inserire le opztoni del pragetto

cryrd '

I aar |

490

|

t:

Alcuni parametri da tenere rn constderaztone quando si símulera tl programma

File Name:

Directories c:lalchir*l lmplab

e!.dmFle.ósm

OK

";! c:\ d

hala.a+m idasml E-asm idasml tr-asm mulSxfi-arm teÉdme-asm

j j I

List Files of Type |

5

uur** f iles

[". c;-. msml

:i

archiv*l mplah

e*ample template

|.:IP

I


Ab'iamo quindi

definito

MPASN/ come compilatore per

flrpsto nrnnpttn All'interno dt -+^--- {i^^-+-^,,^-+quesra sressa Trnestra posstamo )na^r2 <ronlioro :lrr rnr,-r opztont, cnme il tino di e rrorp di cui vor-

remmo essere avvisati dall'as-

il sistema di numeraziana arc a L ttzrizro vur rutL iI n:r:mairi POlOlllELl

sembler,

I

rhe rimannono Ie nnzioni scelte sono mostrate nella linea di comando (Command Line).

il*ffitrxLexH*ru* f$Fg ilxr i:{ M ks I À*nL --.

Finp<tra rlello nronricra

dct

7. Una volta definite le proprieta del progetto e r suoi frles,

1166c

per compilarlo dovremo scegltere

Suildíng EI(*HPLE.HEX... Cùnpiling comnand

EXÉ|4PLE .

-t

fiSl'l:

linÉ: "c:\AR[HIU-'l\HplÉE\l'tFfiSl'lt,lH.Et(E le+ lL+ Íx- lt,+ tqlíFgtt /q 0:\f;

Euild completed successfullg.

l'opzione Project>Make

Project,

tr:mitp l: nrr:lp sp nOn SOnO ci:ii rnmmoc<i donli

orr 'or|,

verra

cpneràlo il file HFX da caricare ..Jì ^^il- Irle'rì(Jrld Ilellcl ^"^^", U litOg'Amî4. -^-^"i-

R Drrr,rntp

l,r

noneraTjglg

lgl

{ile HFX il ro.nnil,atore N,lPASN,4 r, nrro .rrniiq,lrp dr t.p tint di even-

ti: errori (errors), awisr (warnings) rmnrc rnnc\ I L.lud'l ^, -li 'lllc)>d9c)// possono impedire che si crei il f ile

c^ -^.craai llc))d99r

HEX. Nell'help in linea dì NIPLAB

sono descrittr ad uno ad uno nrro<ii tini di arronir Questa finestra indica che non sana stati commessi errori durante la comptlazione

3 AB82

Buílrting

!

El(AHPLE.HEX. - .

Co&piling EXfi HPLE.É$h: Conmafid line : "C :\*BCHtU*1U,lFLAS\l,lPf,5l,lltIt{-E,(E

/e+ /L+ fx- ft+ lp16F84 /q C:\g Found rlireetiue iÍ co1ufin 1. { C:\ÉECHIU-1\l4FLf,El EXf,l'IPLE-ASl,t ó Found lahel after cúlunn 1. (L C:\AnúHtU*1!]{PLnE\E$Él,lPLE-fi511 12 : Sgmbúl not pr€uiouslg defined C : \AECH I U-1 \l'lPLfi S\ EXfi f,lFLE. A$l't 1 6 : Found label after column 1 - ( È;\RRCHIU-1\l,lPLAS\El{Él4PLE.FSll 17 : $gfibo1 not preuiouEly dÉfined C:\ftRCHI$-1\tlPLRB\Et(ÉllPLE.ASJ,I 2g : llLegal. opcode {stop} 0:\ÉnCHIU-I\t'fFLAB\EI{*HPLE"frSrf 22 : Ill-egal condftiDn (E0F Éncoun

t'rarning[295] C:\f,FCHIU*1\l'lPLf,E\EX*],|FLE.frS]4

irarning[267]

Error['t131 ttarnlng [ 2 07 I ErrrrÍ1191 Errúrf1227 Errúrf"1257 l,lPLf,E is uÍablP tú fínd úutorrt Bull-d fallÉó.

4

.,EI{f,HFLE"HEX",

Bg63

8193 3008

ùg84 e 8065

B09t

7 BB6ó

1

E a6a7

80s8

t5 1l

881

C

665 8C91

.t8m

60ca

9792 gc$2

+2 6úM

gctS

OEB9

1A 666C '14 6E5t

19 66# 1ú B06f

î:

î* -fq ?t

661 B

60rJ

g81'

gB94 2897 34C0 8J B3

3t15 d691

3MÙ

6413

909 0

sB14 cB19

2

6Bló

6ù'f

281b

ti

8417

AFFF SFFF

s818

3'FF

z6

E61C

SFFF

,b

alrf clrf úouls mu6f mvf bcf rrF btfec

8e12 gk11

6t8

Brl4

6x10,1 6x3,888 gx1l 8x3,grg aódwÍ 6xlz

f.f rrÍ

dscfsz

gsto retlF clrs dsùls

6x12 Sx13 8114

looP gxB

ErgS

Éúosf gfJl

aoúls E*20 mvof ù<16 call nplt_S goto min àddl$ 6rff addlw hrff èdrt1( Bxff

rddlw kff

Memoria di programrna con il file Finestra chc >; genera se ci sono orrori di tomptlaZtaFa

3*fswwsm

HEX caricato.


Scheda delle istruzioni:

l'istruzione bsf i puo dire che insieme alla " bcf " e una delle istruzioni plu ,,+il;,--+^ ^^llpro^i,, uriltlòte rera grammazione del PlC. ll suo

ohieltivo è di norre a'l un bit di un registro. ll nome o la posizione del reoistro all'interno della memoria dei dati, sarà fornito come primo parametro di istruzione, e il numero del bit come secondo parametro. Sia uno che l'altro iniziano a contare da 0.

PARAMETRO

I

MNEMONICO

bsf

Ít

Operozione: Cicli:

PARAMETRO

;;;;,,di

2 **",

b

un registro.

f

t

Codice OP:

0t 0t

Flogs:

Nessuno.

bb bfff ffff

ffissMpx# flseé

$-'3$gffiiliXg#*l$ fi lìxs$ A differenza delle istruzioni di movimento ouesta istruzione non varia rnmnlotempntc il rgplenutO di Un registro, dato che serve per modifi-

Caratteristiche dell' istruzione bsf.

care bits individuali, lasciando il resto così com'è.

Questo è molto utile nell'uso di alcuni registri specifici, dove ogni bit h: rrn sinnif ir:tn p deve essere trattato in modo singolo, al momento giusto, senza che gli altri debbano variare. Un esempio tipico e il cambio di banco; normalmente si lavora nel banco 0, pero nella maggior parte dei programmi e necessario accedere al banco 1 per configurare rrn: <ario di ronictri ,, e oopo lornare al banco 0 per lavorare. ll cambio f ra questi banchi si realizza modif icando il bit 5 del registro STATO (registro che occupa la posizione 03 della memoria dei dati). ll bit è conoscru- Uso dell'btruzbne to come RPO e, dato che la numerazione dei bits inizia da 0 da destra verso sinistra, occupa la posizione del sesto bit. Nell'esempio si

bsf per il cambio di banco

vede questo cambio di banco; Ia linea dr istruzione bsf è stata evidenziata in un altro colore.

$c$flwsxra


.rì

tììì

Scheda delte istr uzioni

:

l'istruzione bcf ffi.ffi

uesta istrrrzione realizza l'operazione contraria alla "bsf "; pone a 0 un bit di un regi-

zioni non sono solo utilizzate oer ouello e non è detto

ffi' ffi ffi ffi stro. ll nome o la posizione del registro

che debbano essere utilizzate insieme. Per esempio un altro uso molto importante che si puo fare con l'istru-

W ffi all'interno della memoria dei dati e anche '%.fornito come prim.o parametro

-i^^^ zlulle

ffig#

^-+ c^ l.ld llle>>d lc>cL -l^i utrr .^^^.1.+^'; )cgrdrdr-uil/ uLl dr A u n u rnrn+ -^...

PARAMETRO

dell'istruZione, e il numero del bit all'interno dol reniqtrn aaìmo (oaaìndn n:r:mptro l p vL|

{1.^. lldg)

PARAMETRO

2

l:,IJL'

'

sue caratteristiche sono illustrate nella figura a f ianco. Cnmc ci nrn nqsorvare il mnemonico di vJJr' vuv

ambedue le istruzioni si differenzia solo da una lettera, la "s" della bsf è sostituita dalla

"c" della bcf . Entrambe le lettere indicano il cambio di comportamento delle istruzioni, dato che il loro significato è porre a uno tset) e porre a zero (clear) rispettivamente,

in questo caso un bit (b) del registro (f). Questo modo dì nominare le istruzioni lo

Caratteristiche dell' istruzione bcf

troveremo molto spesso nelì'utilizzo del PlC.

o bandiere, quando queste si attivano. Normalmente

t"*w

*X%YW*KK*WW. tu€x Rtguardo l'istruzione bsf abbiamo già presentato un esempio, in cui entrambe le istruzioni si utilizzano in maniera congiunta, una per passare al banco 1 della memoria dei dati e l'altra per tornare al banco 0. Poro :nrho ctr nrpsta combinazione si trova nella maggior parte dei programmi con il PlC, queste istruW%XWWX

questi segnalatori si attivano in modo singolo, quando J,si nrodLtce un evenln r^hc notrehhe pssere il teruv vl

mine di un'operazione, il salto ad un'interrupt, eccetera. Questo viene detto attivazione via hardware, !^.,^ c>)clc ^^^^"^ fatta Via pelu ^^.À tld t^"n lulu ric.++i,,^-i^-^ ul>dl-Llvdzruilc ucvc mettere a 0 noi dovremo sarebbe a dire, software, questi flags tramite un'istruzione.

j*j'iY':.Y*l"-l

ffi

bcf bcf

STATO, Z

INTCON

bcf bcf

INTCON, TOIF

EECONI

bcf EECONI, EEIF bcf EECONI,4

STATO

STATO,2

INTCON,2

Per esempio, all'attivarsi del contatore TMR0, avremo un bit all'interno del registro INTCON che si pone a 1 per avvisarci di questo fatto. Se vogliamo utilizzare il TMR0 più volte all'interno di un programma, dobbiamo rimettere a 0 questo segnalatore ogni volta che si attiva, in questo modo tornerà ad avvertirci della sua messa a '1 quando il nrnaoq<n (t nnoté

Un uso molto comune dell'istruzione bcf è il reset dei seqnalatori

S*#*wessw

Questo si fa con l'istruzione bcf, all'interno del programma, dove il registro INTCON sarà il prrmo parametro e il bit di attivazione TMR0 il secondo.


Appti cazione pratica: compilazione det primo programma

na volta visto rl primo programma e l'uso del rnmnil:tnro

N/lPA(l\,4 nalfo <ozinni nro-

rodonti J!:rv,iL,,,v ccnrrirpmn nra v,L le faSi Che do<rrittn nor l'ol:hnr:zinno di rn a tq lr Lvrrrvilqzrvrrq rnmnil:zinno E

doci su un esempio concreto

nli 1n ur urlPlU9ldllllrlo, ^r^^rammr

abbiamO nraìnottrì lrrc:nuú)qll-

flffifrsbHgq}ru# ffig aisé pffi*#ffiT?# 1. Eseguire l'ambiente di sviluppo MPLAB, e creare un progetto di nome primo.pjt 2. Selezionare il nome del progetto in modo che si attivi il pulsante di proprietà del nodo. 3. Entrare nella fìnestra di proprietà del nodo

Creazione di un progetto

Attivazione del pulsante di proprietà del nodo

f-inestra di propriela del nodo

SwSSwswww


Assicurarsi

qui, che il linguaggio

scelto

(Language Tool) sia MPASN/. Dato che non abbiamo ^-l;+-+^ ^"^^"-,-,e(lrrdio ilil programma non posstamo sommare nessun nodo da assemblare. Uscire dalla f inestra di Edit

${ffixYY$"3ffi& #tr$_ tr$A##ffieffi *4e 4. Creare un nuovo file (File>New). 5. Scrivere nella finestra corrispondente il programma che diamo come esempio di primo programma in

Project.

assembler.

Finestra del nuovo file

Scrittura del programma.

Assegnazione di ,Ln nome al programma

Somma di un file al progetto

Sw$swessw urluìÌrtjÌtl;]j::1::]::]ffi:!t


Questo sarà il programma che più tardi sommeremo al progetto. 6. Salvatelo (File>Save As...) con il nome di primo.asm nella directory dove avete installato MPLAB. 7. Ora che disponiamo di un file (nodo), possiamo apri-

re la finestra dr opzioni del progetto Project) per aggiungerlo.

(Project>Edit

emp4trxL-&Kx*rum

ffi

ffig Fg$-il

#g $"$** pw**ffiYY* B. Ora manderemo a comporre

il

progetto

(Pro-

ject>Make Project), mentre il software compila tutti f

i

ile del progetto, nel nostro caso uno solo; apparirà una

finestra di comunicazione. 9. Se non sono stati commessi errori nella scrittura del

Compilazione dei file

conpilinq FnIH0.nSí:

comand line: "C:\AFCHIu"1\t4PLAB\flPnSfiilItl"ExE le+ l1+ /x- /c* lp1óF8|| /q c:\g

Fuild cospleted 5uccessfuI19.

Finestra di progetto compilato con successo.

SwW&Eeswww


nrnnr:mm:

deve,ann36jpe una finestra como nrĂŠtt: della figura, che ci informa della compilazione conclusa con succesSo.

se"$L il*ffigfl il *Ă :ruf, ffiey* si apre la memoria di programma (Win-

*ssgffiwex3#ru3 '10. Se

dow>Program Memory), si puo osservare come verra caricato ilfile nel PlC. Anche se le linee compilate nella

Finestra della

Altre finestre che ci forniscono dati sul progetto

Sw$*wwrm

memoria di programma sono 17, vengono caricate solo le istruzioni, sarebbe a dire quattro indirizzi di memoria. A partire dalla linea 5 (indirizzo 0004 di memoria) quello che appare ha un codice fisso, per senn,rl,rre chp non r'e alCUn codice caricato. 1 1 . All'interno del menĂš Window possono essere aperte altre frnestre che forniscono diverse informazioni sul progetto e sui file.

memoia delle istruzioni con il arooramma caricato


Schede di istruzioni: f istruzione addlw ffi d

istruzione "add" è una delle

ffi

che puo

ffi

ffi

due istruzioni aritmetiche eseguire un

ffi ffi ffi

OPERANDO

MNEMONICO FONTE

PIC'16F84: la somma. L'altra

è la sottrazione. ll PIC'16F84 non sa moltiplicare, ne dividere, ne tanto meno puo fare radici quadrate, potenze; nulla di tutto questo. Questo e dovuto ad una delle caratteristiche

oddlw i Operozione:

essenziali del suo insieme d'istruzioni:

rr^.^ )crrpILrLor Lr -^frt fa Si Che SianO td rutu -^*^r:-i+\ molto raoide nell'esecuzione. Nono-

Cicli:

<t:nta arro<tn qé <i do<idor: oqonrriro

'

OPERANDO DESTINMIONE

'.

Sommo del volore letterole k ol registro di lovoro W I

alcune di queste istruzioni complesse,

CodiceOP: I I I I lx kkkk kkkk

ira d:lla <i nn<<nnn rncirr uilriro )r E q: n:rf vv)Jvr ru Lv)rr Pqr Lrr E vollq i<trr rzinni <omnliri

Flogs:

La

C, DC, Z

somma nel PIC ha due modalità:

"addlw"

e

"addwf

".

La "addlw"

Caratteristiche dell' istruzione addlw.

somma un valore letterale al contenuto del registro di lavoro W, e lascia il risultato in quest'ultimo. #%frF4Fg

{*ru

giore del suddetto numero, si genera quello che

rs%€ffi€jtrg*ruil &ffiffiLw

Supponiamo che il registro di lavoro W contenga I valo-

re 05 prima di

si

conosce come riporto o carry, e per avvisare di questo fatto sr attiva un flag chiamato nel medesimo modo (C).

realizzare

roperazione,esi

vuoreÈ

esadeci-

|ilrrqrL ilrl valore vurvrL sommare JVr LJUwLll

ì ::

meto FF \/odi:mn ,,- n'oiln ; -Jellu che srrccedera dono l'ese- , cuzione

è FF (255). Quando dopo questo caso il risultato è magun'operazione come rn

valore che puo contenere

dell'istruzione.

Nella seguente figura

si

rappresentaqr.rtotuìto mostrando i valori in drversi codici numerici,

-

ll registro di lavoro, così come gti attrr regrstri dei

.

.ESADECIMAIE"

I

?

DECIMALE

u)

W

f; oddlwFF "+ l;

BINARIO

ffi

i

FF

i llllllll

255

il Y

al $

trne di fine tacilitarne la Ia comdr facilitarne L'

prensrone

. l r vqlore lnlzlole vqlore rnrzrole |

vqlore finqle W W

A

04

OOOOO t O0

ffi

ffim$*e*remw* t@lb.rt&taaaaaltt l^)::::))::::::)):::|))::::t:


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

'a,::l

,::'l:.:l

Schede di istruzioni:

l'istruzione addwf istruzione addwf e la secon-

:W

da modalita di somma esisîenfe nel renertorio delle istruzioni del PlC16FB4. La somma st realizza fra il conlónrrln ranici66 LCt tu LU rli Ur rrn Ur r rc9r)Lrw

volore inizi ole, OI

;

:

0l

oddwf 3,1

5e DC è messo

ol

OOOO OOt

OOOO OOOO

lrilizza rlal 1t|/y iltn urf)î uvYv rJana I anars zìana di <amms

Y;% {,: {:tt'i:'

OPERANDO

DEsTtNAzór.rr

Sommo del contenufo del registro

f

i

{i. \,',.i

Yi

1.,,,"r"1::,'7"

Y.l} 7-l

*

?}'{.

{:,'1,.}1|j\g'rl i;:

i

+--++-+i I rfvrl I fl:nc I o 7 sono- qtà+r - --.Lr Lrdt LdLr ^^^ri

altri esempi, per cui rìmane solo da spiegare il co"nooruamento del flag

d

con il contenuio del registro di lovoro W. Se d=0 il risultqto si loscio nel registro di lovoro W, e se d=l si loscio nello stesso

';,?',1

I , OOOO Ol lO :

DC=l

:

correggere i digits

I MNEMoNlco io-NrÈ qddwf , f

u zr o

oo@oooo

o I dovremo

OPERANDO -

ratte r isti ch e d el I' i str

,

+l+J

v

I

Codice OP: Flogs:

o0rr ; oo0o olo!

oooo

fi

sono interessati i flags C, DC e Z.

Cicli:

0000 llll

ol0l

1

&

o nel registro di lavoro W, secondo il ri:lnro dol n:r:motrn d Così corne con l'istruzione addlw

registro

oooo

r

LSBI

t

ro W. ll ri<rrlt:fn doll'nr -,,, -Jerazrone puo l^.-,^+^ ^.-^"^ ^^l ld>LldLU lìcl lllcuEJilrV roni<lrn rEgr)Lrv e>>ele -^...loqimn

Ca

0000 00r

(contiene il digit

E

Ànllr ^' 'rlci.ci L.1udl)ld)l uúlld

memoria dei dati, e il registro di lavo-

Operozione:

REGISÎRO - 3

REGISTRO-2

REGISTRO- I (contiene il digit MSB)

f

DC. Questo flag va a 1 quando si pro-

duce un riporto nel 4' bit, anziché nell'8", come succede con i flag C Viene utilizzato, se necessario, quando bisogna tener conÌo in un regrstro, il superamento del valore massimo di un digit. Per esenpio, se un numero e <rnmnnqtn in tro dinit< pc:dprim:li p

ogni drgit e nemorizzato rn un regi-

I

rrn rinnrtn :l rUU c; ) nrnrlrrro )U U, LIUO| 'rnÀn PTVUULE Ur | | rPWr LW ql

00 0t I I dfff ffff

superamento del valore F, ìl flag DC verra messo a 1; it che sign rica che

C, DC, Z

dovremo mettere a

ne a ddwf

.

'1

0 il

registro

e

al digìt seguente. Questo e mosTrato graficamerte nella figura

sommare In aito.


Strumenti di lavoro: il simulatore MPLAB-SIM ambiente

di

MPLAB possiede

sviluppo

tra i

suoi

strumenti un srmulatore,

il

N/PLAB-SIM. Un simulatore

nprmettp di pspnrriro

pgl

computer il programma che piu tardi sarà registrato nel microcontroller. Si nrrn rrpdpro rn<ì <o il,, programma sr

comporta come noi pensiamo,

il

valore dei registri in ogni momento, p in tr rttn nlellO Che SUCCey', - ,,, npnor:lo

de dentro il

microcontroller

in part colare, è prooettato npr drp fr rnziont che sono

,,','

La

velo<ità dei simulatori software è sempre minore rispetto a quella degli emulatori. Questo può

essere un vantaggio o uno svantaggio al momento di programmare, dipende dal programma e dall'utente. ln MPLAB-SIM si possono eseguire istruzioni ad una velocità dell'ordine del millisecondo per istruzione,

mentre I'esecuzione reale di un'istruzione nel PIC è di un microsecondo.

al

momento di eseguire il programma.

ll

GIi stimoli esterni nel MPTAB-SIM sono elaborati una voha ogni ciclo d'istruzione, perciò i segnali di durata inferiore non possono essere captati, e pertanto simulati, cosa che è permessa dagli emulatori in circuito.

MPLAB-SIM,

illustrate nel riquadro seguente. Nonostante questo, non dobbiamo confondere un simulatore con un emulatore in circuito. I simulatori rappresentano la situazione ideale e non un'esecuzione reale al 100% di un programma, ed hanno delle limitazioni. Permettono di eseguire un codrce, modrficarlo, ed eseguirlo nuovamente, simulare gli input sulle linee d'ingresso, seguire l'esecuzione linea a linea del programma e i suoi registri. . .., pero si differenziano dagli

I simulatori hanno il vantaggio di non necestitare di hardware esterno al PC per il loro utilizzo, per questo se non è necessaria un'esecuzione in tempo reale, di solito sono sufficienti per trovare

e coneggere gli errori della maggioranza dei programmi.

Differenze fondamentali tra i simulatori e qli emulatorì in circuito.

emulatori come il MPLAB-ICE in tre cose fondamentali:

Assistere l'utente nella verifica dei programmi.

Funzioni realizzabili con MPLAB-S|M

Opzioni per cambiare I'ambiente di sviluppo.

Sqw##wsmwq*


.:::4,.:,:,aa

:a;,,::*. ,::,:::::.::::

:::4.:t

il**urg##*q&ffi*ru*

#ng- ffiF$-&ffi trffiffi g-&v*$c&ffiffi

f,#ru ffipL&#-$sffi Aprendo MPLAB, il modo di sviluppo standard è di scrittura. Questo significa

che dobbiamo configurarlo prima fare una simulazione, altrimenti

di le

opzioni non saranno accessibiìi. La procedura per cambiare il modo di lavoro è contenuta nel menù opzioni (Options> Development Mode). Eseguendolo, a seconda del programma installato, deve apparire una finestra con ìn parte opzioni accessìbili, così com'è mostrato rrella figura della pagina precedente.

Permette solo la scrittura e la compilazione dei programmi, e le funzioni di progetto.

Finestra della memoria d'istruzioni con caricato il programma con il quale

possiamo sce-

L'N/PLAB-lCD Debugger si vede evidenziato, perché è stato installato sul software come componente

gliere fra diffe-

di MPLAB (vedere

In questo Permette la simulazione dei programmi oltre la s(rittura e la compilazione. Dobbiamo scegliere il microcontrollore che si va a simulare nella parte destra della medesima finestra.

CaraLteristiche dei modi disponibilr

si sta lavorando

caso

renti modi,

se-

condo le necessità.

fascicolo dedicato a MPLAB), se proviamo a selezionarlo ci apparirà un errore dovuto al fatto che non abbiamo hardware associato. Inoltre, tra i microcontrollori che ammettono questa opzione non appare il PlC16FB4. Gli altri modi non sono selezionabili, dato che non sono stati installati nel software, e nel caso lo fossero non potrebhero essere scelli noiche non

disponiamo dell'hardware. Per realizzare delle simulazioni dobbiamo selezionare la <arnnrl: nnzinno n-^^^-+vp.rvrrL )LLvrruu HIUPU)Ld. Possiamo effettuare una prova e verificare, per ognuna delle

opzioni, le possibilità che ci off rono i menu di Debug e Window. YZ?LW%T W#"

&:{{X%%KffiK*H

34ffiL Wffiffiffi %KWWL{vTKZWWW

Durante la simulazione del programma puo essere inteMessaggio d'errore che appare selezionando il MPLAB-ICD Debugger.

Sw$swwrye

tsffi::t:;;z::;:@stúll;frswaarlttwffiltwlllyl2t8:wllùuuktw,

rnccrnin,/^À^r^ lLc vcucrc lc))dl

&r4t..n.,..rr:lllltL:,lrrt

rhorE nn<iilinr Lr vw)l-


!1020t&090ó07 liq:06 10s613600S0ú 00 03 0g 00 s& 00 [{ lllq 33 @c 0[ 00 63 66 00 00 00 ù6 .!ts$: sr 6A 6! !3 03 06 30 09

..,f.:""

EOD 00 06

Nak

Her Dèú 1ó

e.on2 cìrth

ntcon 09re

8inèr! t93lt00ù

3 00003000 255 11111111 24 00011ú69 5 ú000009s 0 03Ù0Ù066 31 000i1111 | 06003s6s 255 11111111 0 g9Í03303 0 00500s3c

6! 31

06 0s 60

6 6

0 0 C

30

3f

6ú 6ú 0A BC 00 ù0 0c

pcl 0B rPtioú r,aq Ft 11 itètle 36 lorta 1F trisi 06 óftb ÉF fisb D0 00

OE

úù

clar

,

90036000 30ù30Ù60

6000000ú !0643003 3360306U

Finestra di memoria EEPROM tramite la quale si modifica un valore

Finestre dei registri con un dato appena modificato.

zione si trovano le istruzioni che si stanno esequen-

Dall'opzione Window>Modify potremo modificare il valore degli indirizzi della EEPROM che ci interessano, per fare la simulazione. Nella figura corrispondente abbiamo modificato il valore della posizione 0B rntroducendo il valore '12 esa-

do.

C)rrestn YVLJLV

Memoria

e nossihile attraverso la Finestra di del Programma (Program Memory

Window). Le informazioni disponibili si possono ottenere in differenti formati, da scegliere cliccando nell'angolo superiore sinistro della finestra. Questi formati sono quelli che ci mostrano il codice delle istruzioni in esadecimale oppure così com'e stato scritto, facilitandone la verifica. lnoltre, appaiono informazioni addizionali sul numero d'ogni istruzione e sulla posizione all'interno deìla memoria dr programma. Se il nostro programma lavora con la memoria EEPRON/ dei dati, possiamo vederne ivalori che contiene nella EEPROM Window.

decimale.

rr^,-l+.p uEllvslc sp )E il lr nrnnramma \Jll dltld ^^..ihìli+Prvyra PU))lulllLo E dpridcrc

Che

vogliamo simulare deve essere visualizzato così come lo abbiamo scritto o con informazioni addizionali che fornisce il simulatore alla compilazione, come gli indirizzi d'ogni istruzione, le etichette definite. il numero d'in-

dirizzì della memoria d'istruzione non utilizzati, ecc. Questa informazione è disponibile nella finestra del listato (Absolute Listing).

La finestra generale dei registrì (Fìle

Register

Window) e quella dei registri speciali (Special Funtion

E+4 Ee 0à4 tudq Id

02.40

IC

OBJECT UNLUE

EJEilPLo.nsl 2-2-2861 22:4st51

Rereased CúDE

LìNE

PnGE

02.40 OBJEEI

SOURCE IEXT

neleased COOE

LIffE

EJtXPL0.eSh 2-2 2EC1

22145.51

PîGf

1

SOUNCE IEXT

00004 ;r.**E***t*,r

80005:

0000ó ; The 1ó bit result is stored 00067 i 00568 ; Before callinq the subroùtin€

0!609

09810

in 2 bltes

" npy , the nult ; be loaded in location nulplr ", and the nulti : nulDnd " The 1ó bit resurt is stored in 1oc

06ú11;H,ÒJte&L_byte.

HCr: w3'i p=1ór84

. | .'. .j ,

: . i . tr " rrrr r.

; PlClóf8!! is the tarqet

00016

0ú017 Sinclude 'P1óF84.1flc ; Include header fi tlsf 00!61 08602 ; P1óF84.lNC Stnndard Header Fi1e, Uersi0n 2-00 0013ó LISr 88018

00019

cblock 0110 i lenooraru storaae

lnformazioni addizionali del proqramma assemblato fornito.

--:;

00 61 82 03 94 05

& B7

16tr 08 10 00 lt 00 8! 0ú

asf !6 0t !6 E6?a 00 !8 00 6&t B0 ú0 80

0g 08 8B 00 Ù0 ú0 0Ù 0B 0ú 00 90 00

00 60 80

'l.:.!l:l 08 60 08 09 9ú

c9 0t

6t 08 08

!6

CB

8C

0ù c! 00 6& 00 0B !0 [6 00 n0 00

t0

Alcune finestre utili per realizzare la simulazione

Ssp$fuwwsw


Register Window) generalmente è molto utile durante una simulaztone. La finestra dei registri speciali con-

tiene solo quelli

specif

ici,

mentre

quella generale riunisce sia r registri specifici sia i generali. Un cambiamento di valore all'interno di una finestra, Window > Modify, influenza ambo le finestre se gli rndirizzi esistono rn entrambe.

Sono interessanti anche altre opzioni come lo stack delle istruzioni (Stack Window) o informazionr del

Finestra per I'abilitazione del Watchdog

modo sviluppo, per vedere che tipo d'oscillatore è stato utilizzato e per determinare la velocità del processore, l'abilitazione o no delWatchdog, o il modo di collocare i punti in cui

vogliamo fermare (break points).

Finestra per la determinazione del tipo di oscillatore.

progetto (Project Window). Normalmente si tengono aperte diverse finestre nello stesso tempo. Le utilizzeremo, così come i diversi modi d'esecuzione di un programma (menù Debug), a seconda di come procederemo con i concetti e la programmazrone.

&rxr*wx

m& wewT&&w

y"&wLL& %KW**&XXffiy"&W

Prima di realizzare delle simulazioni, dobbiamo tornare alle finestre del

Sm$*swwre

Differenti opzioni dei break points

la simulazione


fistruzione

INCF

UCSTA ISTTUZIONC

può considerasi un caso speciale

dell'istruzione add, dato che

somma

I

al

contenuto di un registro, cioè incrementa di una unità il con-

tenuto del medesimo. ll risul-

tato puo essere portato nel registro di ìavoro W al posto del registro di origine, in modo che quest'ultimo non venga modificato. Questo dinpndp anmp qemnrtr o:l

lncremento

di

ilfiifi'[i',.j -::s:*-19IH9Ti Incremenlo di re in rre qer

t

in.rcoNTAToRE,r

--*

...-.

.-*

*i

:jj},StrruroRE,r

i

. --, ..i

unirò i::[ ::li]î]:[:,1 "*k q1 _ óóNrnronr,t i ;[[33N]î13[E ] ' "JJ*r

rer''*

valore del parametro d.

Osserviamo che l'unico

flan interessato a

Comparazione dell'uso dell'istruzione di somma e incremento

ouesta

$:SsffiPA fl#ru $js$"l|"ffiUtrX#rutr gN*r L'uso oiù comune di ouesta istruzione è nei contatori. Normalmente i contatori si incrementano di una unità per volta, per rr ri nttoct'ictrr rzinno nermorro rn OPERANDO OPERANDO sostanzrale risparmio di tempo se la FONTE DESTINAZIONE MNEMONICO compariamo con quella di somma, poiché ogni incremento comporta solo un'istruzione (un ciclo di istruzione). Infatti per la stessa operazioOperozione: incremento di uno unitò ne di incremento realizzata con ì'idel contenuto del registro f. Se d=O struzione di somma, è necessario caricare un vaìore (un 1) nel registro il risultoto si loscio nel registro di lavoro W, e poi sommare il regidi lovoro W e se d= si loscio stro utilizzato come contatore, al nello stesso registro f. registro di lavoro W. ll risultato sono Cicli: l due istruzioni, per cui il tempo sarà

istruzione è Z, per cui se ci interessa controllare i f lag C ola lC n^n n^trom -,,,o usare quesra ts{ruzrone.

incf

-*J------:r*--ir--*.*"g -*i |

Codice OP: Flog:

Ca

00 I0t0dfff ffff

Z

ratteristi che del l' istru zio n e i ncf

.

il doppio.

Se rl contatore che vogliamo imnlpmcnt:rp dpvp essere incrementato di piu di un'unita per volta, è meglio impiegare istruzioni di somma.

Sw$swwryw


fistruzione DECF uesta istruzione è quella opposta alla "incf". Con essa si può decrementare il valore di un registro e portare il risultato al ronictrn qto<<^ n:l

lavoro W.

ll

roni<trn di

suo flag associato

nuovamente Z, che andrà nrr:ndn

a

e 'l

il roni<+rn in nrroctinno

arriva a

O.

Anche qui, come con l'opera-

di

incremento, quando si deve decrementare di più di un'unità un registro, è meglio farlo con un'altra istruzione, in questo caso

zione

la sottrazrone.

OPERANDO OPERANDO

MNEMONICO FONTE

DESTINAZIONE

**.-:J***,i***--f*. -- l-r:-*-* :""*-- i Operozione: decremento di un'unitò del contenuto del registro f. Se d=0 il risultoto si loscio nel registro di lovoro W e se d=l si loscio nello stesso registro f.

Cicli: Codice

1

OP: 00 00.| I

Flog:

dfff ffff

Z

er$fle4Pg fl**\$ AjgSYR{"*trX*ruffi *ffiflr Caratteristiche dell' rstruzione decf. L'uso di questa istruzione è simile all'istruzione " tncf " , per cur non verrà ripetuta. In ogni nome, e non con l'indirizzo che occupa dentro la memoria di programma. ln realtà e la stessa cosa, caso, parleremo ancora dell'utilizzo di questi parametri in altre istruzioni. Normalmente quando impieghiadato che abbiamo dovuto "indicare" al compilatore mo un registro, faccramo riferimento a questo con un che sono uguali. Questo è possibile grazie alle direttive EQU, che fanno

W F

EOU

0

EQU

I 0c

CONTATORE EQU decf

CONTATORE,W

decf

CONTATORE.F

decf

tCoNTATORE

decf

WF

rn rri< nn n doro

; ; ; ;

Decremenlo del registro contotore portondo il risultoto ol registro di lovoro W Decremenio del regisiro contotore portondo il risultoto ollo stesso regisiro F

; Coso erroto, doto che CONTATORE non ; corrisponde con 0 o con un l, che è il ; poromeho che serve oll'istruzione decf ; Decremento del registro che occupo lo ; posizione 0 dello memorio dei doti (non W) ; portondo il risultoto ollo stesso registro 0

Differenti significati di etichetta a seconda del luogo dove si utilizzano.

ffie*S*www*

I

rn

nome o un'etrchetta con un valore numeflco. Quindi, dovremo {--^ tdtc

-11,,,ud-++^^-i^^^ Ltút tztut tu dil

so che faremo <anrritn

.li

in

nrro<ti

"nomi", dato che,

a

seconda dell'ambien-

te in cui li

utilizzereparametro il mo, cioè: di istruzioni a cui fare-

mo riferimento, significheranno una cosa o l'altra.


Appli cazione pratica: si m ulazione del primo programma opo aver vrsto In cosa consiste il simulatore integrato N/PLAB, è arrivato il

momento di simulare il primo programma che abbiamo fatto e che è stato compilato con MPASN,4. Ora diamo un'ocrhir+r c: ^llò.+^ cazinni nor rrLvruors rirard,aro LllldLd 9uc)ttr )EZlvril vsr

l'enunciato del programma, i passi e gli aspetti di cui tenere conto. Fatto questo saremo pronti per cominciare la simulazione.

fl&$axfleffi tr x$_ $3$c*sKTT* 1 o Una volta dentro a MPLAB, la prima

-^.. L\J)d

Ud

^a

{ar^ î^rìr^ ìlE il il nrnnottn LLv rho ldlC !r rL ^C Opl lJrvyL

abbiamo realizzafo, primo.asm, cosa che si fa mediante il menu di progetto (

Finestre utili per la simulazione.

Project>Open Prolect).

2

.

ln seguito, se non I'ha fatto

l'apertura del progetto, apriremo i file o nodi associati al progetto tramite il menù dei file (File>Open).

pgK ffiè,$ssYe $xMe$L&xx*ruK Ppr onni nroncfto dovfemO SCerxruffi$Y$q$; #Y3*-x

gliere quali finestre sono utili per lerri traÀara nrrolln rho -,,- il programma sta facendo e quali rappresentano solo una distrazione, non fornendo informazioni essenziali. Alcune opzioni possono dipendere carì d:llo pr nroforonTa nor<^^îli srqrsr r4E psrJul ldll, c^ )old uoils

proprio l'utilizzatore che determinera ron l'cs,nerienza iì suo modo

Limitazioni di MPLAB-SIM per tl PlCl 6FB4

di lavorc. 3 . Per prima cosa dovremo sce-

gliere come modo di sviluppo

Sw$&wwss'**


gramma. Potrebbe interessarci solamente il risultato finale di un registro oppure vedere lo sviluppo di un

pezzo del programma su cui abbiamo dei dubbi sul funzionamento, o vedere +' '++î pd))u d pd)>u ^a..^ ^ pdr ^ar+^Lc LULLd u dpll'pse r^r rzione dcl oroI

grarnma. Vedremo alcune

di nrrpsfp onzioni rnn

il

nostro prmo esempro.

5 o Prima di eseguire il programma faremo

un Reset del sistema con l'op-

zione Debug>Run>Reset. n^^i -^^ +^.-i\J9ilr ,,^l+VUrLd (-ile rdL(rdmo una simulazione e vogliamo reinizializzare il sistema, dovremo eff ettuare 5i deve fare un Reset ogni volta che si desidera iniziare una srmulazione

la

simulazione, opzione inclusa dentro

a

Options>Development N,4ode. All'interno della finestra che ci appare selezionando Details, potremo vedere le limitazioni che ha MPLAB-SIM per il PIC che vogliamo

simulare, nel nostro caso

questo Reset. 6 . Iniziamo con la prima simulazione. Selezioniamo Animate all'interno del menu Debug>Run. Come si puo vedere, questa opzione non è di grande utilita, almeno in questo esempio, dato che le nostre tre istruzinni <i oconrrn nn rrnid:monto

a nni il

ar

rr(nro nr^<o-

..,,,Í

. . ,.ì-'

':l.r::

......1|.

' ..i::::i

ìl

PIC

16F84.

4.

Dopo aver scelto il modo,

sono già disponibili diverse fino<tra fr: nrre<to <ronlioro,,q JLLY"T'r YSLJLL

mn di lasriare anprte

solo quella del programma, quella riai ronictri nonor:li o nrar;

.:....::..

dei registri specifici. Ora dob-

r::* i:iil:-

biamo disporre le finestre sullo crhprmn So l,a disnnsizione si

:'.:a;

effettua tram ite Wi ndows>Ti

.,::1:;:

le

Horizontal dobbiamo ottenere una serie di finestre dove noler vprifirarp i dati fonda-

: , ..:::ara:.

mentali.

: :

#PXg#8dg #gn-Léq %xp.$#Lexg*ru9

,).::'.,,,1 .::a::9

Le opzioni della simulazione scelta dipendono da cosa ci

interessa ottenere

dal

t:'::lj,

pro-

.:..,aaatÉ

: ,:,:a,tij

Terminato il nostro programma, si prosegue eseguendo posizioni non valide

-.ú

ffiwf:*wwww

-v


gue per il resto della memoria

di

programma,

che non conttene valort validi. Nella figura precedente sono visibili le finestre rhe s nossono vedere con questa simulazione. 7 o Utilizzare Debug>Run>Halt

npr fermare la simrrlazione. Ora possiamo verificare che il valore dei registri corrisponda con l'enunciato del programma: il registro OC contiene il dato 03 e i registri 0D e 0E conten,^,,.t^"^,,^,,-t^ 9Ullu ull vdrurc uvudlc.

\/prifir:rp nr reqfe irrformazioni spostandosi all'irterno delle varie finestre.

$ o Ripetiamo la stessa simulazione, prima pero cambiamo il valore del -^^:-+.^ -,1 esem-^^ ao ^, u, con, regrslro nn pio,07. CosĂŹ, eseguendo

Modifica del valore di un registro

il programma, noteremo meglio che i registri 0D e 0E prendono lo stesso valore. ll cambio del valore di un reqistro, si fa tramite la fine-

stra Window>Modify. Dovremo scrivere I'indtrizzo (Address)e il dato (Data)che si desiderano, e cliccare tl pulsante di scrittura (Write) per far sĂŹ che la variazione abbia effetto.

9.ll

seguente

tipo

di

simulazione lo troviamo ĂŹn Debug>Run>Run. Per notare l'eff etto dobbiamo

tornare a mettere OO

nei

registri 0C e 0E, seguendo i passi del punto preceden-

te di modifica dei registri, poi eseguiremo il programma (Debug>Run>Run) e lo

fermeremo (Debug>Run> Halt). Ci appariranno i registri secondo quanto predi-

sposto dal programma.

differenza con

La

il tipo

di

sim u Iazione precedente, Animate, sta nel fatto che noi non vediamo come si modif icano i registri,

anche se internamente Scelta del modo di simulazione passo a passo

il

0rocesso e lo stesso. e il PC, eseguito il nostro codi-

ffiw#srurwww


::,:.:4,

:',,1,

,i*

,

.:,)1.;

ce continua con gìi indirizzi successivi della memoria dì

:rì::

:tl:

programma.

10 o In ultimo eseguiamo il programma istruzione per istruzione. Questo modo viene anche detto tracciare, dall'inglese "to trace". lnizializTcrpmo i renistri rome nel caso

nrorpdpntp

oltro:

ros,ettare il

sistema. Andiamo all'opzione Debug>Run>Step. Notiamo che il tasto funzione è F7. 11 . Ogni volta che premiamo

F7 verrà eseguita una

sola

'

tstruzrone e potremo o5servare il ri:lnra nroqn d:i rani<tri .li

volta in volta. Le variazioni all'interno dei registri sono segnaìate dal coìore rosso, cosl come l'istruzione che sara ese-

lnformazioni ottenute con I'esecuzione passo a passo

guita in seguito. La figura mostra il processo dopo l'esecuzione della

seconda

istruzione; a DATOl è gia stato spostato il valore 03, il PC (pcl) punta ancora la seconda posizione della meùoria delle istruzioni, e appare evidenziata la terza

istruzione, che sara la prossima ad essere eseguita. 12 . Se in un determinato momento ci interessa vedere solo quello che succede passo a passo in una parte del programma, e non nel programma completo, si puo modifir,are il valorp dpl PC ner farlo iniziare dal punto che ci interessa. Questo si fa con l'op-

zione Debug>Run>Change Program Counter.

l'rso di oilesta onzione è tipico in programmi molto

lunghi, dove la simulazione -^-^l^+pdsso comprera

d

pa55O

risulterebbe molto noiosa.

l'onzione di

simr rlazione

passo a passo, generalmen-

te e la piu usata quando

si

a

programmare, per collaudare le nuove funzioni delle istruzìoni Introducete ora in questo stesso programma le istruzioni apprese sinora, assemblatele e realizzale la loro simulaziointzta

Ino rc/

per iniziare la stmulaziane da un òltro punla

Moditica del

PC

F es$Fqe*

re

{:*

riodrota 6|16 vLurL LL Lr rL il15| 566hicci vvll ll))l-

mo tempo dominerete loro funzionamento.

il

't'':


fistruzione

G0T0

iamo arrivati all'istruzione tabù della maggior parte dei linguaggi di programmazione che la possiedono. Molti libri di programmazione strutturata, hanno naturalmente

rn r:nitnln rho cnion:: fnndn nro<ta istruzione, alla f ine del quale si raccomanda di utilizzarla il meno possibile. Noi non abbiamo altra scelta che utilrzzarla, dato che nel PIC è l'unico modo per fare un salto incondizionato, cioè, andare ad un'altra parte del programma in modo incondizionato, inoltre è la base principale dei salti condizionati, come vedremo piu avanti. Pertanto, vale la pena imparare l'uso corretto di questa istruzione, per non dover poi esclamare: "chiaro! quando si usa questa istruzione nessun programma gira". ll ciclo di esecuzione di questa istruzione, sarebbe a dire il tempo necessario ad essere eseguita, è | doppio di quello normale, questo signifìca che un PIC funzionante a 4 Mllz impiega 2 ms al posto di uno. Questo perché l'architettura segmentata del PIC mentre esegue un'istruzione punta alla prossima da eseI- ^^+^ q.i nrrira rho in ,,:--,,--. spnupnTe Po'^ -lu ld 9uLU J-"'' -"'-'--rr sr rnnonp <i: .,, salta da un'altra parte del programma, rompendo Ia senlenza ner crri l'istrrzione senrrente non e conosciuta, e si impiega un altro ciclo per ottenere la nuova rstruzrone.

PARAMETRO PARAMETRO 2

MNEMONICO I goto I

Operozione; solto incondizionoto oll'indirizzo segnoto come k, che potrebbe essere un'elichetto.

2 Cicli: Codice OP: l0 I kkk kkkk kkkk Flogs: nessuno Caratteristiche dell' istruzione goto

ffiSffi *$ $3K

fl#fd

L*XSY${X.$Xg#N ffi ffi #K{3

Nella fìgura possiamo osservare due usi dell'istruzione

goto, il primo corretto e il secondo sbagliato. Come si ouo vedere nel ouadro delle caratterrstiche dell'istruzione, dopo il mnemonico della medesima si mette un parametro, che è indicato come letterale, e che normalmente è un'etichetta che raporesenta I'indirizzo di destinazione: dove si desidera andare. La programmazione strutturata, dice che se si salta da una subroutine a un'altra, bisogna andare all'inizio di questa e non a una parte interna della medesima, per non rompere la struttura del programma rappresentato dall'organrnr2mm:

golo

inizio - modulo I

golo

mezzo-modulo ...........................-.-.-.-....-...-,,..

se* inizio-modulo I

islruzione I

inizio-modulo I

istruzione 2 islruzione 3

metà-modulo I

islruzione 4 islruzione 5

goto

meto-modulo I

islrvzione 7 istruzione 8

goto

.J

si

i

inizio-modulo I

Utilizzo corretto ed errato dell'istruzione qoto

metù-modulo I

considera

nrimn

,9ltS

l- n<ì <a il

o<omntn

dove l'etichetta 1è all'inizio di

is*ruzione I istruzione 2 islruzione 3 islruzione 4

una subroutine non c e ne5sun

islruzione 5

problema; il pro-

soro

kt^*-

i{:!g.:r-:*!-"-."1--=_i

islruzione 7

soto soto

-,À -^

me net seconOo ..

I

pcemnin

'-'t":_ta:n..S{qJg. !-.. ..

-l^^++-'t rcLLd Lr

!ni:i-"---n,9-d-U|-"'.!-

-^

l'oti^ ^-.+^ I g porLc di un'altra subroutine.

Sep$&ewwrq*


fistruzione ffi d ffi W ffiffi

ffi ffi ffiffi

rstruzione nop e una delle qomnliri nir r JEr rvilLr À. uo uLilr41drc, ^ ' '+ili..-"^ c Pru nello stesso tempo e quel-

la meno ulilizzala E semplice perche non ha parametri, e quindi non puo essere impiegata male, ed anche se fosse ulilizzata in modo indebito, l'unico inconvenipntp r-hc notrphho nrovocare Sarebbe una perdita di tempo equivalente

lW

NOP

ORG

0 rNrzro 4

goto

INTER

ORG

goto

MEMORIA DI PROGRAMMA

ad un ciclo di istruzione, dato che non fa niente e non varia nessun f lag. Nel suo codice OP le due x indicano che

ORG

0

goio nop nop nop goto

tNtzto

INTER

MEMORIA DI PROGRAMMA

00

00

0l

0l

in orrella nosizione si oossono ave.e zeri o uno indistintamente.

02

02

03

03

fi5fleqF$;

04

04

05

05

{*ru

à.'gsYkr.jr3#Fi

f, ru#s

La natura stessa dell'istruzione rende

difficile immaginare un caso in cuisia necessario il suo utilizzo. Alcuni pro-

Modi diversi di posizronare le rstruztoni nella memcria di programma

l-,,+ili--granrmdtor ^"-,---+^.; ra uuilzzano In sosltlU-

zione della direttiva ORG che, come ricordiamo, manda al compilatore l'indicazione che la posizione de l'istru-

metro. Come abbiamo gra visto, in questo modo si ottiene di mettere all'induizzo 0 la prima istruzione del

zione successiva è all'indirizzo indicato dal suo para-

PARAMETRO

t2

MNEMONICO

nop

programma, cosa necessaria, dato che quando ìnizierà l'esecuzione dei proqramma, è lì che si deve lrovare la nr,ma istrr rzigng. Abbiamo anche PARAMETRO rrn altro indirizzo sneciale nella memoria dej codici. l'induizzo 04. ln questa posizione, il nrn.trqqrìrtr \/À À .o(.Are la rouiine di Servizio dall'iniarrr rnt nrr:ndn <o no rrnA r! nrnnlrr.a urrv, vrvuuLL

in mndn rho il srn nÒ<ln nón nnq(a o((oro

Operozione:

è un'operozione che non

fo nullo. Cicli: Codice Flogs: Ca

ratteri

sti ch

1 I

da nessun'altra istruzione. Nell'esemnio si -' mostrano due modi di rea' 'Y'" questo, lizzare utilizzando l'istruzione nop e con la direttiva ORG. Anche se il risultato occupato

OP: 00 0000 0xx0 0000

nella memoria dei codici può apparire

nessuno

diverso, l'esecuzione del programma e la stessa. In alcuni casi, inoltre, si utilizza que-

e del I' istruzi on e no p

sta istruzione nei cicli, cone metodo per costruire delle routine di temporizzazione.

Sw$$wsww*


Programm azione: struttura di un programma pro-

.:,zi$Èi*,, uando si affronta la realizzazione di un .: granî"na, sia esso in assembler o in o.ra siasr gd .'""."-... ahro linguaggro di orogranrmazione, molte À1+ volte non

si sa bene da dove iniziare,

soprat-

:

:

-!t:::

;tile

d' piantina che ci faciiitii||avoro,perevitareerroriodomrssioniindesideessere molto

creare una specie

rate.

Orro<t: YriLJLu

ni:ntin: ", Ottiene faCilmente, datO Y's'

I r,,

,u

Che Un

programma assembler, e composto da varie parti chìai

ramente differenziate. La tabella mostra in modo schemat co queste parti. Spregheremo per prima cosa alcune convenzioni utilizzate nella realizzazione di queste ni.rntinp lrlpll.. rninnna di sinistra scriveremo le etichette delle rouiine e delie subroutine, nella colonna ranl-rrla rzinniil \/oró nar nrnrc icl-r r)Li uzrur vqrs ó s PrwPr lEt tLrorg c.r,\tòrò6^ )L j vgrgr ru la ^rAnriors usr P' v

gramma, che devono rispet"tare l'esatta nomenclatura prevista per il nostro microcontroller. Infine, neìla colonna di destra, scriveremo i commenti ed i nomi che vorremo dare alle varìe sezioni del oroqramma. ,,

:

ilsI

P=tip di procesore

::

RADIX

Sistemo di numerozione

,.

È

c

volore

Elichette !l

ORG

0

goto

etichetto inizio

ORG

4

g0f0

rouline-inler

Configurozioni

ORG

eftheilo-inizio

istruzioni Configurozione

i

Progrommo principole

ciclo

Progrommo principole

Rouline interrupt Rouline di hotlomenfo dell'intenupt

r0uflne-rnîer a

, Fine L

Direttivo di fine progrommo

parte

di

LulLo tl

progrdm*2 ,s,-pilatore per il

PIC

obbligatorio opzìonale e mullrplo

{ì:.,:r.

.:.i:-

.:l.r.,I.r;

q.

ìì-t, ìì,ì, t..,.,r,.,..u.,,t..i-'


,:',':' :raìiìtì

':,ii .ì:ìììì

*

tl

l

1;r{j lÌì:i

P=lót84

i:i !,-il

INCTUDE

"Regx84.inc"

(i inizi: rnn dirottivo nor il nrnroc(^ra

INCI.UDE

"Mocros.inc"

il5t

in pratica, "ordini" che il comprlatore dovrà tenere conto ai momento di

IED

EQU

I

IAMPEGGIAIORE

EQU

6

0R0

0

dalle so"genti. Queste direttive non

g0î0

rNrzt0

traducono in istruzioni, dato che non

ORG

4

vot il tu

golo

INTER

memoria

coll

CONTIGU

nrrpnti :nrhp sp np esistono molte

t(ót)LLdt "^-1,--^"^ c |llil^ |tc

uLLuPctc

d. ^-.+;"^ iJdt Lrtc

ovonti

indirizzi della

di programma. Nello sche-

GOTO

ctcto

bsf

STATUS,RPO

altre: la prima informa del tipo di PlC, e la seconda determina il codice standard dei dati, cioe se i dati saranno in esadecimale, decimale o in binario.... Cone abbiamo visro in arcuni ese'npi,

movlw

b'0000000t'

di sonrritn :rriri:nn ic definizronr delle

movw{

TRISB

crcL0

ficlo

infinilo

CONIIGU

movw

b'10000'

movwf

TRISA

movw

b't0t | 0000'

movwf

rN1CoN

movlw

b'01 I t000'

movwf

OPTION.REG

kf

STAIUS,RPO

bcf

PORTB,IAMPEGGIAIORE

bcf

PORTB,IED

movlw

movwf

TMRO

',::l:

otirhottp nor riforirei: roni<rri rho sono valori, con un nome al posto di un numero. Nella zora di configurazione si in,-

;INTERRUPI TMRO E RBO ABILIAN

zializzano i renisîri cl-e si utilizzeranno ;TMRO RA4;INTEFRONTE

;IMR0 SENZA

Dl SAUTA

nel nrnnramma Orrc5f6 si fa nella zona chiamata "etichetta inizio" e

PRESCATER

quesra configurazrone si realizza con

istruzioni normali. Prima di questo, considerata anche come conf ig urazione, la direttiva ORG indica al compilatore, con differenti parametri, dove

;Cl ASSlCURl/ritO CHE SIA SPENIO

;10 lMPUl.Sl

PER lL I|MER

refurn

deve collocare ie d''ferenti parti del

sl0p

;ROUTINE Dl INTERRUPT. 5e chiomofq

btfsc

tNTCoN,T0tt

g0f0

IMPUISI

btfsc

INTCON,INTT

programma nella memoria dei codice. Nella posizione 0 e obbligatorio met-

tere la nrima

istrr rzione che dovra ,l+^^"--l-^^+^,,^/^+iut' cLtc)>ctc c)cguttd, ltu||diltrcILc

reilie

chetta come inizio, start, etc.,

o ia

a

-l^i-*-+^,,^-+1 Lr ilor rdLo o Liuc)Lc.

BUMPER

bsf

PORTB,I.ED

;ATIIVIAM0 lt LAMPEGGIATORE

kf

INTCON,INTT

;CANCEttllrlvl0 lt ttAG Dl INTERRUPT

Nella posizione 4, come vedremo

-.,-^+i ^^rre l,in,zio della ^i,, cvol rLr, t-i-^^^ur)w9r ro PU Pru rorrtino rhp no<tir: l'intorrr rnt il vpttn-

retfie

re di interrupt.

|MPUr.Sr

bsf

PORTB,IAMPEGGIATORE

;AfTlVlhlv{O IL I.AMPEGGIATORE

kf

INTCON,TOIT

;CANCEII|AMOlL FIAG Dl IMERRUPT

ll modo ideale per progettare

un ciclo da cui si chiamano le routines lavoro,

che realmente real,zzano il

TND

a

Programma esempta che mostra diver>e parti Lipiche

un

r a nlnnn fLULLv rrtfn E ci+r )lLUClC uvvv P,U9lOllllllO n, rln+^ in| nrarodanzr rzq Imonzinnrtn rqLv rLU I rcr r4rvr il vuqr PrqLcuqr -

re#ie

6+*$*****1.*

si

ma appajono due dirett;ve molto fre-

tNtzto

INTER

-r

ou

^.-'-l^-i'-.1^|dtc/ c)dueLil

normalmente in modo ciclico. Questo è cro che normalmente otirhott:tn.^mo

è

nr^r -Jramma pflncr-

t,,l,l,


LffiffilTISfEn

*

figurazioni, il programma principale e la direttiva di fine programma. Le uni-

::#.':":

esg,4;trtrllffi!;J!iriFè1É-H6&d.-r4-!ir-r:ea€3?q+l:?Éi;a

stop

"'

che parti che devono essere uniche,

-róril

;RAUTINE

Ol IilTEBnUZt0HE-Se

p

sono: il programma principale, la rou-

tine di trattamento dell'interrupt e fine del programma.

Coúpilirg ESEIiFI0 -ÉSl,l: Connand line: "C:\ARCHIU^1\flPLCB\WASflUIH-EXE lp16îA4 lq C:\AfiCHIU-1\flPLAB\ESEHPIO-ASl" (LISI) Uarninq[285] C:\CECHIU-1\HPLAB\ESEHPI0"ASil 4 Uarning[285] 4 : Found directiue directiue in in coluan coluan 11- (LISI) Sarning[287] ErrBra113l ErrBrlll3l

C:\0BCHI{r1\flPLAB\ESEf{PI0.ASl'l 6 : Found label after coluno 1. {LED) C:\AECÍIU-1\ilPtgB\ESFHPI0-ASx 12 : îilnhnl nrFuinr<lrr dFfinpd lTllFflì C:\AECflIU-1\HPLSB\ESEHPI0-ÉSX 12 synbal not not preuiouslg defined (IílEfl) C:\nÉCHIU-1\HPLîB\ESEhPI0,ASr l6 : Fsund 1abe1 after colunn 1- (auaoti] C:\nBCHIU-1\ilPLAB\ESEHPI0.AS]l 17 : Sgnbol not preuiouqlg defined (8ucle] C:\AfiC$IU 1\HFLÉÉ\ESEHPIo,ASfl 2s : Ilfegal opcsde (stop) (f0F encountprecl before EHD C:\neCHIU-1\ilPLAE\ESEHPI0-ASf 22 I I lcgal condition

tarniîg[267] Error[113] Errgrfl22l

ErrorÍ125f I4PLAB

is unable to find output file

Build failed

Uir;adl

'

l

fl:trffiF{# ffffi&?}"il* ll programma compilatore

menti visti, anche se la sua struttura

"ESEhPl0-HÉX"-

non è perfettamente uguale allo schema iniziale - così come abbiamo detto - la soluzione ad un problema non è unica. Si inizia con tre direttive una di queste ripetuta. In seguito vengono le definizioni delle due etichet-

:

+^ l- LUr il ìVUrO4rUr rC, dUUrd-Al,-;LE. tr--^^^l^ I OLqr rUU rO -^^{i^,,"--:^^^ mo una parte che non effettua direttamente fino a quando non si chiama

Modo di awiso degli errori da pane dell'assembler.

pale; anche se e una buona forma di programmazione, non è l'unica, e comunque, non è obbligatoria. ln seguito troveremo le differenti subroutines, da cui si rientra con l'istruzione retlw o return, a seconda del caso, e anche la routine di trattamento dell'interrupt. Si termina con la direttiva di fine del orooramma END. trffi

#fr

ffi

eiljli Í4

mostrato

.Ama olaLVr rrE a<amnin sjs rrPrv rnntiano lvr rLrgr rE trLurtti LLt nli vil Etc-

ol

-

l1E

la

e

;?i g

tr€

g}1$#

Tuttavia, non tutte le parti sono obblìgatorie, per cui puo succedere che qualcuna non ci sia. Aì limite possiamo iniziare con la direttiva LIST, non definire etichette, lavorare con gli induizzi, mettere solo una ORG con parametro 0, che non configuri nulla e non utilizzare subroutines. Obbligatoriamente dovremo terminare con la direttiva END. Comunque questo non e abituale, poiche lo schema in genere viene utilizzato al completo e molte di queste parti si ripetono diverse volte. L'organigramma mostra oltre all'ordine delle differenti parti di un programma, quelle che possono essere saltatg g 6rrrollo rho oossono essere rioetute. Se SentriamO le {1p6ra rrodiemn rho nr rallg 691{;6lj indicano la sequenza delle diverse parti. Le f recce a sinistra indicano la possibilita disaltare il quadro a cui girano intorno, passando alla parte seguente. Le frecce di destra, che puntano verso l'alto, indicano che la parte ouò essere rioetuta tutte le volte necessarie. Così vediamo che sono obbligatorie alcune direttive, alcune con-

una routine per realizzarla (CONFIGU), nella quale si configurano 4 registri, e si inizializ,,StOn,, .,-"i-t-;li |LE^ ^lrole ,,avanti,, e -îh^ +r^ ZOIIV LIC VOlloulll. L rLvV SOnO Una PqrvrL specie di subroutine chiamate macro, che si studieranno in sezioni successive. ll programma principale consiste unicamente in un ciclo infinito da cui si aspetta ad uscire mediante interrupt. f interrupt inizia con l'etichetta INTER, dove, al contrario di cosa puo apparire, si lavora con una sola routine di trattamento dell'interrupt anche se e divrsa in vari rami dovuti al fatto che possono esistere diverse

cause che

la provocano. La fine del programma

è

segnata dalla direttiva END.

Se siete stati canari di idpntilir:ro nnngnS lgllp n:rti :nche se ron oralcuna di esse non abbiamo mai l-,.^--+^ ldVUIdLU,

-:^+^ >lete

^:: 9ld

i^ lll

.,-À^ 9ldUU

Ài Ul

r^ali??ar^ ledllLLdle

llil ,,aqf V(rJLrv66

566_ prv

gramma, che sara sempre piu complesso, man mano che andremo avanti.

{rqJ' .'}i i**!

*q#SffiiÀf-:i.l1

I programmi sorgente possono essere scritti con qualunque editor di testo a caratteri ASCll. Guardando nella struttura che segue, vedremo le divprcp n:rti rhp nÒqcono rr formarlo. PvJJv Classificheremo ora il suo contenuto in altro modo, rinò rnmo finn nli d:ti rho n^((^nn.^nîonor ,-, e ognuna di queste parti. Così il compiìatore, durante I'esecuzione, verificherà che idati ditutte le linee delfile siano di uno di questi quattro tipi: etichette, mnemonici, ope-

SwS4*ealus*w*e


randì o commenti. Questi dati devono assecondare a norme di scrittura e

a

norme

di

movf

posizione relativa che

occupano gli uni rispetto agli altri.

U5T

ovonli

ovonti

eticheito I movf Etichetto2:movf

l-nma rannl: nonor:lo nor 1r rtli ouesti la loro scrittura non deve ^--^.J^-^ CLLCUCff

movf

U5T

Etichetto5movf

_etichetto3? Movf

iI LJ) 4trtr tót --"^++^.i dLLCt| -,,11)Uild -+^--)LE))O

Eticheilo 4

lrnea.

ilYgfrsil3"Yffi

Mnemonici, direttive e chramate a macro corrette e sbagliate

Una etichetta deve iniziare nella colonna 1 e puo essere seguita da due punti (:), spazi, tabulazioni e salti in linea. Possono contenere fino a 32 caratteri, che possono essere alfanumerici, e includere un tratto basso e tl segno di punto interrogativo. Però

movf STATO,W

etichetlol

movf

movf STATO,W

STATO,W

STATO,W

eticheftoó movf ESTADOW

EiichetÌo2:movlw 9

il

primo carattere non puo essere Operandi formulati in maniera corretta e scorretta nrrmorirn no di connn dalla colonna 2. Se l'istruzione segue una etichetta Come standard si differenziano le maiuscole e le "ciclo" "ClCLO" l'etichetta nella medesima linea, deve essere messa tra due punti, di modo che e minuscole, spazi in bianco o tabulati. Si possono scrivere in minusiano differenti, a meno che non si affermi il contrario scolo o maiuscolo indistintamente. mediante un comando speciale. Se si utilizzano i due punti per terminare una dichiarazione di una etichetta, nrro<f i nnn (nnn nrpci rnmp n:rtp doll'ofirhorr,a m: *Fíf{i\ri *9 vuLJr, Devono essere separati dai mnemonici da uno o piu come un operatore. Nella figura le etichette definite (o ul lo icl-rr rzinnolg h: cn:zi rrn I lo nirrdi l)Ll uzlvl )pdz I n u trhrrlrzinni tóuuloLlvl ll. Jc rrn: alla sinistra sono corrette, e quelle a destra sono sbaPru ul ul I vPq^nóqol12r:r rrndn nrrocii dorinnn a<(aro n: rrn: v rnnl: nli:to | <fo(<n <i nrrn diro dol roctn donli --''ffiPl -'r" ocr ^ I

....

li:$g:ffi##:{-i

p,,irnnl: rttn nrrolln rhp ci nnno dnnO- rjn nlnt6 vll9wlo /\r/\ r è trattato come un commento fino alla fine della linea. Se il commento occupa più di una linea dovremo mettere un Etichetto5 punto e virgola all'inizio di ognu?etichettoó n: ut nli c))E a<<o (eamo nncci:mn rradorLvI tq pu))ratrr(/ vcucItd ir:fi\ n ra nonli o<omni lLoLl/. rrLVil LJL',ry, Tetichetto i Quando il compiiatore incontra prrori di nrresto tinn ci avvisa e I ,,*-.......,*.."*.,.",*'.,.,,,,,,J non nonpre il filo che doveva

Gli mnemonici delle istruzioni, le direttive del compilatore e le chiamate alle macro devono inrziare a partire

eiicheilo I elichetto2: _etichetto3? Etichetto 4

,.*;.-*..

ì1'."-..--..-*

Etichette formulate in maniera corretta e scorretta

eticheilol movf Etichettq2:movlw

STATO,W ;movimenlo I ;movimento di un ;volore letterole

Commenti formulati bene e formulati male

Sw#*:sqr{:svaF

lltsi.

'''lfs

Tr

^-^^,,i+^

STATO,W

mnemonrco

etichettoó movf STATOW ;tutfo sboglioto


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.