Professional Documents
Culture Documents
PREMESSA
E quando diciamo tutti, intendiamo proprio tutti: dai due programmatori in kit, ai
circuiti di prova, dalla spiegazione teorica delle istruzioni del linguaggio Assem-
bler, alla loro applicazione pratica in elettronica, dagli accorgimenti per utilizzare
al meglio le istruzioni e la memoria dei micro, alluso del software emulatore per
testare i programmi.
Lintento didattico accompagna tutti gli articoli, anche quelli che, a prima vista, so-
no di carattere pi propriamente pratico: gli stessi programmi-sorgente, che tro-
vate in questo stesso cd-rom in una directory dedicata, servono soprattutto per ca-
pire come si deve scrivere unistruzione per ottenere una determinata funzione.
Leggendo i commenti accanto ad ogni riga di programma, non solo vi impadro-
nirete della materia, ma potrete addirittura utilizzare blocchi di istruzioni trasfe-
rendoli nei vostri programmi.
Non poteva mancare lindice analitico dei kit e degli argomenti teorici, che vi ri-
manda immediatamente agli articoli in cui largomento scelto trattato.
la Direzione Editoriale
Nota: poich negli articoli si fa spesso riferimento agli argomenti trattati specifi-
cando la rivista in cui sono apparsi, nel sommario abbiamo riportato, oltre al tito-
lo dellarticolo, anche il numero di rivista in cui stato pubblicato, per facilitarne
il ritrovamento allinterno del cd-rom.
SOMMARIO RIVISTA
PROGRAMMATORE per
non si possono pi cancellare e quindi nemmeno - se la prima cifra un 2 (vedi 20-25) sono dispo-
riscrivere. nibili 4 K di memoria.
Gli ST62/T si riconoscono facilmente perch sono
sprovvisti della finestra per la cancellazione (ve- La seconda cifra indica i piedini disponibili per i se-
di fig.1). gnali dingresso e duscita:
Solitamente i microprocessori ST62/E vengono u- - se la seconda cifra uno 0 (10-20) sono dispo-
sati per le prime prove, perch in presenza di un nibili 12 piedini,
eventuale errore nei programmi sempre possibi- - se la seconda cifra un 5 (15-25) sono disponi-
le cancellare e riscrive il software. bili 20 piedini.
Se osservate la zoccolatura di questi microproces- NMI - Questo piedino va sempre tenuto a livello
sori (vedi fig.2-3), potete leggere a fianco di ogni logico 1. Applicando a questo piedino un impulso
piedino una sigla, e poich non sempre viene pre- negativo, si informa la CPU di interrompere il pro-
cisato il loro esatto significato, sar utile spiegarlo. gramma che sta eseguendo e di passare automa-
ticamente ad eseguire una seconda e diversa
Vcc - Piedino di alimentazione positiva. Su que- subroutine (sottoprogramma).
sto piedino va applicata una tensione continua sta-
bilizzata di 5 volt. Vpp - Questo piedino serve per la programmazio-
ne. Durante la fase di programmazione questo pie-
TIMER - Applicando su questo piedino un livello dino, che normalmente si trova a 5 volt, riceve dal
logico 1, la frequenza del quarzo (vedi piedini 3- computer una tensione di 12,5 volt. Quando il mi-
4) divisa x12 potr giungere sullo stadio contato- croprocessore gi programmato viene inserito nel-
re. Da questo piedino possibile prelevare un se- la sua scheda di utilizzazione, si deve sempre te-
gnale ad onda quadra, la cui frequenza pu esse- nere questo piedino a livello logico 0, per evitare
re stabilita con le istruzioni del programma. di danneggiare i dati in memoria.
OSC./In-Out - Sui piedini 3-4 viene applicato un RESET - Questo piedino, che si trova sempre a li-
quarzo necessario per avere la frequenza di clock vello logico 1, resetta il microprocessore ogni vol-
che serve per far funzionare il microprocessore. ta che viene cortocircuitato a massa. Quando si u-
tilizza un microprocessore gi programmato, su ta- del Connettore, che normalmente si trova a livel-
le piedino occorre sempre collegare una resisten- lo logico 1, si commuta sul livello logico 0 e co-
za al positivo ed un condensatore verso massa, s la Base del transistor NPN siglato TR3 toglie il
in modo da avere un reset automatico ogni volta cortocircuito sul diodo zener DZ1 da 7,5 volt.
che si alimenta il microprocessore. In questo modo la tensione sulluscita dellintegra-
to stabilizzatore IC3 sale dai 5 volt iniziali a 12,5
PA - PB - PC - Sono le porte che la CPU pu u- volt (5 + 7,5 = 12,5).
tilizzare singolarmente come ingressi oppure co- Da questo istante i dati in scrittura giungono dal
me uscite tramite programma. Se le utilizzate co- computer sui terminali 4-6-5-7 del Connettore e,
me uscite, per non danneggiarle consigliabile prima di raggiungere il microprocessore ST62,
non collegare dei circuiti che assorbano pi di 5 vengono squadrati dai quattro inverter siglati
milliAmpere. Per pilotare dei circuiti che assorbo- IC1/E - IC1/A - IC1/B - IC1/F.
no pi di 5 mA, necessario interporre tra il mi- Le resistenze R7 - R5 - R6 - R8, che abbiamo po-
croprocessore ed il carico esterno dei transistor sto in serie agli ingressi di questi inverter, servo-
oppure un integrato tipo SN.74244 o 74HC244 o no per proteggerli nelleventualit che il CONN.1
74LS244. venga per errore collegato sulla presa Seriale del
computer anzich su quella Parallela.
GND - Piedino di alimentazione da collegare a Poich non labbiamo ancora precisato, vi segna-
massa. liamo fin da ora che il CONN.1 va inserito nella
PRESA PARALLELA del computer (presa LPT1),
SCHEMA ELETTRICO del PROGRAMMATORE alla quale normalmente collegata la stampante.
A memorizzazione completata, il computer ripor-
Lintero circuito programmatore visibile in fig.5 ta a livello logico 1 il piedino 3 del CONN.1 pola-
molto semplice perch richiede solo 3 transistor, rizzando cos la Base del transistor TR3, che por-
due NPN ed un PNP, due integrati stabilizzatori di tandosi in conduzione, cortocircuita a massa il
tensione uA.78L05 (vedi IC2-IC3), un integrato di- diodo zener DZ1.
gitale C/Mos tipo SN.74HC14 contenente sei in- Quando il diodo zener risulta cortocircuitato, sullu-
verter a trigger di Schmitt (vedi IC1) ed infine uno scita dellintegrato stabilizzatore IC3 la tensione
zoccolo textool a 28 piedini. scende da 12,5 a soli 5 volt ed in queste condi-
Su questo zoccolo andr infilato il microprocesso-
re ST62 che si vuole programmare.
Tutte le tensioni necessarie al microprocessore
ST62 vengono prelevate dal secondario del tra-
sformatore T1.
I 15 volt alternati, raddrizzati dal ponte RS1, forni-
scono una tensione continua di circa 20 - 21 volt
che raggiunge lEmettitore del transistor PNP si-
glato TR2.
Come si vede nel disegno dello schema elettrico,
la Base di questo transistor risulta collegata, tra-
mite la resistenza R3, al Collettore del transistor
NPN siglato TR1.
Quando questo transistor riceve dai piedini 2-1 del
Connettore collegato al computer la necessaria
tensione di polarizzazione, porta in conduzione il
transistor TR2 ed in questo modo la tensione po-
sitiva di 20 - 21 volt pu raggiungere gli ingressi
dei due integrati stabilizzatori siglati IC2 - IC3.
Lintegrato IC2 provvede a fornire sulla sua uscita
Fig.1 I microprocessori della serie ST62/T
una tensione stabilizzata di 5 volt per alimentare
sprovvisti di finestra NON sono cancella-
lintegrato IC1 ed i piedini 1-5 dellST62 a 28 pie- bili, mentre i microprocessori della serie
dini o il solo piedino 1 dellST62 a 20 piedini. ST62/E disponendo di una piccola finestra
Lintegrato IC3 provvede a fornire una tensione sta- SONO cancellabili. Il numero posto dopo la
bilizzata, sempre di 5 volt, sul piedino 10 dellST62 sigla T o E indica i Kilobyte di memoria e i
a 28 piedini o sul piedino 6 dellST62 a 20 piedini. piedini utili per i segnali di entrata e di u-
Quando tramite computer si desidera memorizza- scita (vedi Tabelle 1-2).
re un programma allinterno dellST62, il piedino 3
Vcc GND Vpp
1 20 6 Vcc 1 20 GND ST 62 E 10
TIMER 2 19 P A0
OSC. INP 3 18 P A1 ST 62 T 10
OSC. OUT 4 17 P A2
ALIMENTAZIONE Vpp MEMORY
NMI 5 16 P A3
Vpp 6 15 P B0
ST 62 E 20
RESET 7 14 P B1
WATCH
PORTA A P B7 8 13 P B2 ST 62 T 20
DOG
P B6 9 12 P B3
P B5 10 11 P B4
5
NMI NMI CPU PORTA B
7
RESET RESET
3
OSC. INP
OXILL. A/D CONVERTER TIMER
OSC. OUT
4
TIMER
Fig.2 Tutti i microprocessori siglati ST62/E10 e ST62/T10 hanno 2K di memoria utile, men-
tre quelli siglati ST62/E20 e ST62/T20 hanno 4K di memoria utile. Questi microprocesso-
ri a 20 piedini dispongono di 12 porte di entrata o di uscita. La porta A dispone di 4 en-
trate/uscite (PA1-PA2 ecc.), mentre la porta B di 8 entrate/uscite (PB1-PB2 ecc.)
1 28 10 Vcc 1 28 GND ST 62 E 15
TIMER 2 27 P A0
OSC. INP 3 26 P A1 ST 62 T 15
OSC. OUT 4 25 P A2
ALIMENTAZIONE Vpp MEMORY
NMI 5 24 P A3
ST 62 E 25
P C7 6 23 P A4
P C6 7 22 P A5
WATCH
PORTA A P C5 8 21 P A6
ST 62 T 25
DOG
P C4 9 20 P A7
Vpp 10 19 P B0
RESET 11 18 P B1
5
NMI NMI CPU PORTA B P B7 12 17 P B2
P B6 13 16 P B3
P B5 14 15 P B4
11
RESET RESET PORTA C
3
OSC. INP
OXILL. A/D CONVERTER TIMER
OSC. OUT
4
TIMER
Fig.3 Tutti i microprocessori siglati ST62/E15 e ST62/T15 hanno 2K di memoria utile, men-
tre quelli siglati ST62/E25 e ST62/T25 hanno 4K di memoria utile. Questi microprocesso-
ri a 28 piedini dispongono di 28 porte di entrata o di uscita. Le porte A-B dispongono di
8 entrate/uscite (vedi PA1, PB1), mentre la porta C di 4 entrate/uscite (vedi PC1).
zioni nessun dato pu pi essere trascritto nella
memoria del microprocessore.
ELENCO COMPONENTI LX.1170
I due inverter IC1/C - IC1/D, collegati in parallelo
ed inseriti in senso inverso rispetto agli altri quat- R1 = 10.000 ohm 1/4 watt
tro inverter, vengono utilizzati dal computer per leg- R2 = 47.000 ohm 1/4 watt
gere i dati dallST62. R3 = 4.700 ohm 1/4 watt
Grazie a questa uscita il computer pu rileggere R4 = 10.000 ohm 1/4 watt
il programma caricato sul microprocessore e veri- R5 = 220 ohm 1/4 watt
ficare che non vi siano errori nella trascrizione dei R6 = 220 ohm 1/4 watt
dati. R7 = 220 ohm 1/4 watt
In presenza di un errore possibile cancellare il R8 = 220 ohm 1/4 watt
microprocessore e ricopiare nella sua memoria i *R9 = 1.500 ohm 1/4 watt
dati corretti, a patto che lintegrato inserito nel tex- C1 = 22 mF elettr. 25 volt
tool sia del tipo ST62/E. C2 = 100.000 pF poliestere
Nello schema pratico visibile in fig.7 abbiamo raffi- C3 = 100.000 pF poliestere
C4 = 100.000 pF poliestere
gurato lo zoccolo textool per i microprocessori con
C5 = 100.000 pF poliestere
28 piedini e non per i microprocessori con 20 pie-
C6 = 100.000 pF poliestere
dini, ma come vi spiegheremo pi avanti, lo stes-
*C7 = 1.000 mF elettr. 35 volt
so zoccolo viene utilizzato per entrambi i micro- DS1 = diodo EM.513 o 1N.4007
processori. *RS1 = ponte raddriz. 100 V. 1 A.
A questo punto possiamo passare alla descrizione DZ1 = zener 7,5 volt
della realizzazione pratica e subito dopo vi spie- *DL1 = diodo led
gheremo come procedere per la memorizzazione TR1 = NPN tipo BC.547
dei programmi-test che troverete nel dischetto TR2 = PNP tipo BC.327
floppy fornito assieme al kit. TR3 = NPN tipo BC.547
Sono inoltre in preparazione degli articoli teorico- IC1 = C/Mos tipo 74HC14
pratici per insegnarvi a scrivere alcuni dei pro- IC2 = uA.78L05
grammi che possono svolgere i microprocessori IC3 = uA.78L05
della serie ST62. *F1 = fusibile autoripr. 145 mA
Vi chiediamo per di concederci un po di tempo, *T1 = trasformatore 3 watt (TN00.01)
perch oltre a testare i programmi, vogliamo ricer- sec. 15 volt 0,2 Ampere
care tutte le possibili soluzioni per renderli com- *S1 = interruttore
CONN.1 = connettore 25 poli
prensibili a tutti.
Nota = I componenti contraddistinti dalla-
REALIZZAZIONE PRATICA sterisco andranno montati sul circuito
stampato siglato LX.1170/B.
La realizzazione pratica cos semplice che in bre-
vissimo tempo avrete gi disponibile il vostro pro-
grammatore montato e funzionante.
Sul circuito stampato a fori metallizzati siglato
LX.1170, dovete montare tutti i componenti richie- B
sti disponendoli come visibile in fig.7.
Potete iniziare inserendo e stagnando i piedini de- +V 13 12 11 10 9 8 E C
gli zoccoli per lintegrato IC1 e per il textool. BC327 - BC547
Questultimo deve essere inserito nello stampato
rivolgendo la leva di bloccaggio verso il basso, co- M
me appare chiaramente visibile nello schema pra- 1 2 3 4 5 6 GND
tico di fig.7. E U
Dopo questi due componenti potete inserire i due 74 HC 14
diodi: la fascia bianca presente sul corpo plastico uA 78L05
del diodo siglato DS1 va rivolta verso la resisten-
za R3, mentre la fascia nera presente sul corpo in
Fig.4 Connessioni dellSN.74HC14 viste da
vetro del diodo zener siglato DZ1 va rivolta verso
sopra e dei transistor NPN e PNP e dellinte-
lalto.
grato stabilizzatore uA.78L05 viste da sotto.
Proseguendo nel montaggio inserite tutte le resi-
stenze, i condensatori poliestere e lelettrolitico
T1 F1
S1
DS1
RS1
R9 RETE
R2 220 Volt
E C1 C7
B DL1
R3 C
CONN. 1
C TR2
R1 E U
B
2 TR1 IC2
D0
E M
STROBE C2 C3
1
GND
22
23 E U
24 IC3 1 28
25 C4 M C5
2 27
C
D1 R4 ST 62 / 15 - 25
B 3 26
3 DZ1
E 4 25
TR3 C6
5 1 20 24
6 2 19 6
23
R7 14 ST 62 / 10 - 20
D2 1 2
4 7 3 18 22
IC1 - A 8 4 17 21
R5 IC1 - E
D4 5 6
6 9 5 16 20
IC1 -C
10 11 10 6 15 19
BUSY
11 11 7 14 18
12 13
12 8 13 17
D3
R6
3 4
IC1 - D
5 13 9 12 16
IC1 - B IC1 - F 14 10 11 15
D5 R8
9 8
7
7
Fig.5 Schema elettrico del programmatore per micro ST62. Il CONN.1 a 25 poli posto sul-
la destra andr collegato con un cavetto seriale alla porta PARALLELA del computer, cio
dove ora risulta collegata la STAMPANTE. Dopo aver sfilato il connettore della stampan-
te, dovrete innestare il connettore proveniente da questo PROGRAMMATORE.
C1, che come visibile nello schema pratico di fig.7, e controllando con molta attenzione le loro sigle, in
deve essere collocato in posizione orizzontale. quanto uno un PNP e laltro un NPN.
A questo punto potete inserire i tre transistor ed i Per completare il montaggio non vi resta che inse-
due integrati stabilizzatori e poich questi ultimi rire sulla parte alta dello stampato il connettore ma-
hanno le stesse dimensioni dei transistor, dovete schio duscita ed infilare nel suo zoccolo lintegra-
controllare attentamente la loro sigla prima di sal- to 74HC14, rivolgendo la sua tacca di riferimento
darli sullo stampato. verso destra.
Come potete vedere nello schema pratico di fig.7,
la parte piatta dei due 78L05 (IC2 - IC3) va rivol- Lo stadio di alimentazione verr montato sul cir-
ta verso destra e cos dicasi per il transistor BC.547 cuito stampato siglato LX.1170/B, e poich questo
siglato TR1.Gli altri due transistor, siglati TR2 (un un monofaccia, in fig.8 potete osservare le sue
BC.327) e TR3 (un BC.547), vanno inseriti rivol- dimensioni a grandezza naturale.
gendo la parte piatta del loro corpo verso il basso Su questo stampato potete inserire come primo
Fig.6 In questa foto potete vedere come si Fig.7 Schema pratico di montaggio dello
presenta questo programmatore dopo aver stadio siglato LX.1170 e, a destra, del suo
montato tutti i suoi componenti. Si noti sul- alimentatore siglato LX.1170/B. Facciamo
la parte inferiore del circuito stampato lo presente che il CONN.1 pu avere una for-
zoccolo textool, che vi permetter di in- ma diversa da come labbiamo disegnata.
serire tutti i microprocessori da program- Se sul connettore fossero presenti due tor-
mare senza sforzare i loro piedini. rette (vedi foto), occorrer toglierle.
Fig.8 Disegno a grandezza na-
turale del circuito stampato
dello stadio alimentatore
LX.1170/B visto dal lato rame.
componente il trasformatore di alimentazione, i cui mentatore utilizzando i distanziatori plastici con ba-
piedini risultano gi predisposti per entrare solo nel se autoadesiva che trovate nel kit.
loro giusto verso. Sul piccolo pannello della consolle va invece fis-
Quindi proseguite e completate il montaggio anche sato il portaled e linterruttore di rete S1.
di questo stampato inserendo il ponte raddrizza-
tore, il condensatore elettrolitico C7 rispettando la A questo punto dovete effettuare i pochi collega-
polarit dei due terminali, la resistenza R9, che ser- menti richiesti per portare la tensione di alimenta-
ve ad alimentare il diodo led, ed il fusibile autori- zione allinterfaccia LX.1170, al diodo led ed allin-
pristinante siglato F1. terruttore di rete (vedi figg.7-8).
Linterfaccia verr fissata dentro un piccolo mobile Dopo aver montato il programmatore siglato
plastico tipo consolle (vedi fig.11). LX.1170 dovete collegarlo alla presa della porta
Come prima operazione fissate sul mobile il suo parallela del computer, cio a quella che ora uti-
pannello frontale utilizzando delle viti del diame- lizzate per la stampante. Questa porta si distingue
tro di 2 mm o delle piccole viti autofilettanti. da quella seriale perch femmina.
Su tale pannello fissate con quattro viti lo stampa- Per questo collegamento non potete usare il con-
to LX.1170, ma prima di eseguire questa opera- nettore che sfilerete dalla stampante, perch que-
zione dovete stagnare sui due terminali di alimen- sto non pu innestarsi nel connettore maschio
tazione uno spezzone di filo rosso per il positivo presente sulluscita del programmatore.
ed uno di filo nero per il negativo. Per collegare il programmatore al computer potete
Sul piano del mobile fissate lo stampato dellali- usare un qualsiasi cavo seriale provvisto ad una
estremit di un connettore maschio che va inne-
stato nel computer, e dallaltra di un connettore
femmina che va innestato nel programmatore.
IL COMPUTER da USARE
una scheda grafica che rientri nel tipo CGA - Per iniziare a prendere confidenza con i micropro-
EGA - VGA - SuperVGA. cessori ed imparare a trasferire su questi un pro-
gramma presente nellHard-Disk, abbiamo ag-
giunto nello stesso dischetto tre semplici pro-
INSTALLAZIONE del PROGRAMMA grammi, che una volta trasferiti allinterno di un
ST62 vi permetteranno di verificare se avete ese-
Con il kit riceverete il dischetto floppy fornito dal- guito correttamente tutte le operazioni di trasferi-
la SGS Thomson, indispensabile per poter pro- mento dati.
grammare tutti i microprocessori della serie ST62. Per copiare nellHard-Disk quanto contenuto in
In questo dischetto abbiamo inserito dei program- questo dischetto dovete eseguire soltanto poche
mi che vi permetteranno di semplificare tutte le o- semplici istruzioni.
perazioni necessarie per scrivere un programma, Quando, dopo aver acceso il computer, sul moni-
per modificarlo e poi assemblarlo ed ovviamen- tor appare la scritta C:\>, inserite il dischetto nellu-
te per trasferirlo allinterno della memoria di un mi- nit floppy poi digitate:
croprocessore ST62.
C:\>A: poi Enter
Il programma vi indicher inoltre se avete com-
A:\>installa poi Enter
messo degli errori, se avete inserito un ST62 bru-
ciato, se la memoria del microprocessore vergi- Nota: Usate solo queste istruzioni e non altre, co-
ne o gi occupata da un altro programma. me ad esempio il COPY del DOS o le istruzioni dei
programmi tipo PCSHELL - PCTOOLS - NORTON
Commander, perch il programma non funzione-
rebbe.
C:\JVFAX>
dovete digitare:
Fig.14 Scompattati tutti i programmi con Sul monitor comparir cos il menu principale (ve-
successo, il computer ve lo segnaler fa- di fig.15).
cendo apparire sul monitor questa scritta.
Per uscire da questa finestra pigiate un ta- Nota: Le scritte colorate in azzurro appaiono di-
sto qualsiasi. rettamente sul monitor, quelle senza colore dovre-
te digitarle dalla tastiera.
Fig.15 Richiamando il programma con Fig.18 Premendo il tasto P = Programma do-
C:\>ST6 Enter, C:\ST6>ST6 Enter, vedrete po pochi secondi apparir sul monitor del
apparire sul monitor questo menu. Se computer il software della SGS scritto in
premete il tasto funzione F3 apparir la fi- lingua inglese. Per continuare pigiate un
nestra di fig.16. qualsiasi tasto.
Fig.16 Premendo F3, appariranno in questa Fig.19 Sullo schermo apparir una lista con
finestra i programmi test da noi inseriti, tutti i tipi di ST6 che potete programmare e
cio Conta - Led - Lotto che potrete trasfe- che sono circa 20. Per selezionare la sigla
rire, come spiegato nellarticolo, su un mi- del vostro microprocessore usate i tasti
croprocessore ST6 vergine. freccia su e gi.
Fig.17 Se portate il cursore sulla scritta ST6 Fig.20 Poich dovete programmare un
e premete Enter o pigiate i tasti Alt+T, ap- ST62E10 portate il cursore su questa sigla
parir questa finestra che vi permetter di poi pigiate Enter. Sullo schermo apparir
programmare lST6 inserito nello zoccolo questa finestra con in basso lindicazione
textool del programmatore. dellST62E10.
Fig.21 Dalla finestra di fig.20 premete il ta- Fig.24 Quando compare questa scritta, non
sto L = Load e apparir questa finestra. Qui toccate pi nessun tasto, perch il compu-
dovete scrivere il nome del programma che ter dopo aver verificato che lST62E10 ver-
volete trasferire dallHard-Disk al micropro- gine, provvede a programmarlo impiegan-
cessore ST62E10. do circa 9-15 secondi.
Fig.22 Dopo aver pigiato Enter apparir la Fig.25 Completata la programmazione, sul-
scritta File checksum per avvisarvi che il lo schermo apparir questa scritta. A que-
computer ha selezionato il programma, ma sto punto pigiate un qualsiasi tasto e cos
non lha ancora trasferito sul micro vergi- ritornerete al menu di fig.20. Per uscire ba-
ne. Per continuare premete un tasto. ster premere X.
Fig.23 Pigiando un qualsiasi tasto apparir Fig.26 Quando sul monitor appare il menu
la finestra di fig.20. Per programmare di fig.20, se volete proteggere il micro dal-
lST62E10 che avete inserito nello zoccolo la lettura dovete premere il tasto K = locK
textool del programmatore pigiate il tasto P poi Y. LST62E10 anche se protetto si pu
= Prg e di seguito il tasto N. cancellare.
A questo punto molti penseranno di aver gi risol- re nel microprocessore. In questo file abbiamo vo-
to tutti i loro problemi, ma poich non nostra a- luto inserire tutte le istruzioni standard che occor-
bitudine illudere nessuno, vogliamo subito precisa- re richiamare in ogni programma e che vi risulte-
re che se non conoscete larchitettura di un mi- ranno utilissime nel prossimo articolo, dedicato al-
croprocessore e non avete ancora una seppure le istruzioni dei programmi per ST62.
minima conoscenza generale di come scrivere un
programma, saranno necessari dai 3 ai 6 mesi di Di questi files ne dovete scegliere uno solo, per-
pratica per poter diventare autosufficienti. ch allinterno di un microprocessore potete inse-
Per questo motivo abbiamo inserito nel dischetto rire un solo programma alla volta.
tre semplici programmi che oltre a servirvi per ef- Ammesso di aver scelto il primo, cio LED.ASM,
fettuare le prime prove pratiche di trasferimento di dovete ricordare il solo nome LED tralasciando le-
dati verso le memorie del microprocessore, po- stensione .ASM, che non vi serve durante la pro-
tranno esservi utili per capire come si imposta un grammazione del microprocessore.
programma per ST62. Vi spiegheremo infatti an- Lestensione .ASM labbreviazione della parola
che come richiamare e visualizzare tutte le istru- Assembler.
zioni dei vari programmi. A questo punto potete uscire da questa finestra
premendo il tasto Escape e vedrete riapparire la
CARICARE un PROGRAMMA pagina del menu principale (vedi fig.15).
Per trasferire allinterno della memoria vergine di Tenendo premuto il tasto ALT dovete premere il ta-
un microprocessore ST62 uno dei tre programmi sto T = ST6 ed apparir una finestra con in alto la
che noi abbiamo scritto, bisogna innanzitutto inse- scritta Assembla - Programma (vedi fig.17).
rire il microprocessore nello zoccolo textool e bloc-
carlo spostando verso il basso la levetta. Premete ora il tasto P = Programma, e dopo al-
Nel kit del programmatore troverete un ST62E10 cuni secondi comparir lintestazione del software
che ha una memoria EPROM utile di 2 Kbyte. di programmazione della SGS in lingua inglese (ve-
Ovviamente potete caricare uno dei nostri pro- di fig.18).
grammi anche su un ST62E25 da 4 Kbyte di me-
moria EPROM, che per oltre ad essere pi co- Per continuare dovete pigiare un qualsiasi tasto e
stoso, non pu essere utilizzato sulla scheda spe- cos comparir la finestra di fig.19.
rimentale LX.1171, pubblicata su questa rivista,
perch ha 28 piedini. Premendo i tasti frecce gi o su, potete visualiz-
Poich LST62E10 ha soltanto 20 piedini, dovete zare e selezionare tutti i tipi di microprocessori
collocarlo nello zoccolo come visibile in fig.27, cio ST62 che questa interfaccia in grado di pro-
in basso e rivolgendo la tacca di riferimento ver- grammare.
so lalto. Poich dovete programmare un ST62E10, andate
Eseguita questa operazione potete richiamare il con il cursore sulla riga in cui appare questa scrit-
programma (vedi paragrafo Come si richiama il ta e pigiate Enter.
Programma).
Quando sul monitor del vostro computer appare il Sul monitor comparir la pagina di fig.20 ed in bas-
menu di fig.15, per proseguire dovete conoscere il so a destra vedrete la sigla del tipo di micropro-
nome del file da trasferire e per questo dovete sem- cessore selezionato, che nel nostro caso :
plicemente premere: DEVICE: ST62E10.
Apparir cos la finestra bianca visibile in fig.20 e completata, potete gi estrarre lST62 dallo zoc-
a questo punto dovete solo pigiare il tasto P = Prg colo textool per inserirlo nel circuito siglato
e sul monitor vedrete la pagina visibile in fig.23. LX.1171 (vedi articolo su questa rivista a pag.56).
Ora pigiate il tasto N in modo che il computer inizi Per uscire dal programma premete un tasto qual-
a controllare il microprocessore inserito nello zoc- siasi e di seguito il tasto X. Ritornerete cos al me-
colo textool. nu principale di fig.15.
Nota: Non pigiate mai il tasto Y e se per sbaglio GLI ERRORI che possono COMPARIRE
lo premete, annullate questo comando pigiando il
tasto Escape, quindi premete ancora il tasto P e di Pu succedere che per disattenzione premiate il ta-
seguito N. sto sbagliato o che il microprocessore che inserite
nello zoccolo textool sia difettoso.
Dopo aver premuto N sul monitor apparir questa In questi casi sar il programma a segnalarvi con
scritta: alcuni messaggi in inglese lanomalia o lerrore
commesso cosicch possiate correggerlo.
Verifying the target chip ... Please Wait
Verifica chip da programmare ... attendi Target Chip not presente or defective
Lintegrato non c o difettoso
Se tutto risulta regolare, dopo pochi secondi ap-
parir sul monitor la finestra di fig.24 con la scrit- Questo messaggio appare ogni volta che vi di-
ta: menticate di inserire il microprocessore nello zoc-
colo textool oppure quando il microprocessore che
Programming the target chip ... Please wait! avete inserito bruciato.
Programmazione in corso ... attendi! Non sempre per il microprocessore fuori uso,
perch questo identico messaggio appare anche
Loperazione di scrittura dei dati dal computer ver- quando:
so le memorie del microprocessore ST62 richie-
de circa 9 - 15 secondi. - avete inserito il microprocessore nello zoccolo
textool rivolgendo la tacca di riferimento verso il
A programmazione completata sul monitor appare basso anzich verso lalto, come visibile in fig.27.
questa scritta (vedi fig.25):
- non avete innestato bene i connettori nel com-
The device is successfully programmed puter o nellinterfaccia LX.1170.
Microprocessore programmato con successo
- vi siete dimenticati di accendere linterfaccia del
Poich loperazione di caricamento dati nellST6 programmatore.
Device already programmed alzasse inavvertitamente la levetta dello zoccolo
Continue Programming? Y/N textool, i piedini dellintegrato non sarebbero pi a
Lintegrato gi programmato contatto e quindi non entrerebbe pi alcun dato nel
vuoi continuare? Si/No microprocessore.
Poich qualche dato pu gi essere entrato
Questo messaggio compare quando nello zoccolo nellST62, ripetendo tutte le operazioni di trasferi-
textool avete inserito un microprocessore ST62 mento il computer si accorger che nelle memorie
che risulta gi programmato. gi presente un programma e subito lo segna-
In questo caso dovete premere il tasto N per ritor- ler.
nare cos alla finestra di fig.20. Anche in questo caso premendo il tasto Y, il com-
A questo punto potete togliere dallo zoccolo tex- puter completer linserimento dei dati che in pre-
tool il microprocessore per cancellarlo (vedi pa- cedenza non erano stati memorizzati.
ragrafo Per cancellare un ST62/E) e quindi ripro-
grammarlo oppure inserire nello zoccolo un ST62 Program result: Device fail at address xxx
vergine e ripetere tutte le operazioni per la pro- Trovato un errore allindirizzo xxx
grammazione.Vi chiederete allora a cosa serve il
comando Y, che conferma al programma di prose- Dove xxx un numero esadecimale.
guire nella programmazione. Questo messaggio appare ogniqualvolta il compu-
Se premete il tasto Y lasciando nello zoccolo tex- ter non riesce a trasferire correttamente i dati nel-
tool lST62 gi programmato, non accadr nulla, la memoria del microprocessore.
cio il programma presente al suo interno non si Normalmente questo si verifica quando il micro-
canceller ed il nuovo non sar mai memorizza- processore ST62 gi stato riprogrammato pi di
to nella sua memoria. un centinaio di volte.
Poich nessuno ha mai chiarito quando possibi- Se questo messaggio compare spesso, consi-
le usare il comando Y, cercheremo di spiegarvelo gliabile sostituire il microprocessore.
noi utilizzando degli esempi.
Se durante la fase di programmazione, quando Per CARICARE un altro PROGRAMMA
allinterno della memoria del microprocessore gi
stato trasferito un 50% di dati, venisse improvvisa- Se volete riutilizzare un microprocessore gi pro-
mente a mancare la corrente di rete, voi vi trove- grammato per trasferire nella sua memoria un di-
reste con un microprocessore programmato per verso programma, dovete prima di tutto cancella-
met che risulterebbe inutilizzabile. re i dati al suo interno, dopodich potete ripetere
Una volta ritornata la corrente, il computer leg- tutte le operazione gi descritte.
gendo allinterno dellST62 anche solo una parte di Proseguendo nel nostro esempio, se dopo aver
programma, lo considerer gi programmato, ma memorizzato il programma LED volete provare le
se in questo caso premerete il tasto Y, il computer funzioni del programma CONTA ed in seguito quel-
trasferir nella memoria dellST62 il restante 50% le del programma LOTTO, solo dopo aver cancel-
di programma mancante. lato il microprocessore potrete trasferire dal com-
Sempre durante la fase di programmazione, se si puter i dati contenuti in uno di questi files.
Fig.28 Per cancellare i microprocessori della serie ST62/E e tutti i tipi con EPROM, oc-
corre esporre la loro finestra alla luce emessa da una lampada ultravioletta da 2.300-2.700
Angstrom. Poich queste lampade non sono facilmente reperibili, abbiamo provveduto ad
ordinarne un certo numero ed appena ci perverranno ( prevista una consegna entro set-
tembre) vi presenteremo un completo progetto provvisto di temporizzatore.
Per PROTEGGERE un ST62 re ai 50 minuti non sono garantite pi di 70 - 80
cancellazioni.
Dopo aver constatato che il microprocessore pro- Se volete usare un solo microprocessore per ef-
grammato funziona correttamente e siete certi che fettuare tantissime prove di memorizzazione e
non volete pi apportare modifiche al programma, cancellazione, potete collegare la lampada ad u-
ed inoltre non avete pi alcuna necessit di rileg- no dei tanti temporizzatori o timer per lampade da
gere i dati memorizzati al suo interno, vi conviene 220 volt pubblicati sulla nostra rivista (ad esempio
proteggerlo. il Kit LX.1068 pubblicato sulla rivista N.153), che
Un microprocessore protetto tipo ST62/E si pu potrete regolare per una accensione massima di
cancellare per renderlo idoneo a ricevere altri pro- 10 minuti circa.
grammi.
Per proteggere un microprocessore, sia del tipo A lampada accesa non fissate ASSOLUTAMEN-
ST62/T che del tipo ST62/E, lo si deve lasciare in- TE la luce viola che emette, perch nuoce grave-
serito nello zoccolo textool e procedere come ora mente agli occhi.
vi spiegheremo. Per evitare questo inconveniente si potr mettere
sopra la lampada un panno o una scatola di car-
Quando sul monitor appare il menu principale (ve- tone.
di fig.15), tornate nel menu di programmazione pre-
mendo Alt+T e di seguito P e apparir la fig.19. CONCLUSIONE
Selezionata la sigla del microprocessore che ave-
te inserito nello zoccolo textool, quando appare il Su questo stesso numero troverete un semplice
menu di fig.20 premete il tasto K = Lock e cos ap- progetto che oltre a permettervi di controllare se il
parir sul monitor la finestra di fig.26. microprocessore programmato con uno dei tre pro-
Per proteggerlo sar sufficiente premere il tasto grammi da noi inseriti nel dischetto, cio LED -
Y, se non lo volete proteggere premete il tasto N. CONTA - LOTTO, funziona correttamente, vi con-
sentir di fare un po di pratica sulla cancellazio-
ne di un ST62/E e sulla riprogrammazione.
Per CANCELLARE un ST62/E In questo articolo vi insegneremo anche ad appor-
tare delle semplici varianti sul programma, men-
Tutti i microprocessori della serie ST62/E, cio tre nei prossimi articoli vi spiegheremo tutto il set
quelli provvisti di una piccola finestra (vedi fig.1), di istruzioni per i microprocessori ST62, perch
una volta programmati si possono cancellare e solo conoscendo il significato di queste istruzioni
poi nuovamente riprogrammare per utilizzarli con potrete un domani realizzare programmi persona-
un diverso programma. lizzati per far svolgere agli ST62 tutte le funzioni a
Per cancellare questi microprocessori occorre una voi necessarie.
lampada ultravioletta che lavori su una lunghez-
za donda compresa fra i 2.300 e i 2.700 Angstrom.
Sotto questa lampada va collocato il microproces-
sore tenendo la sua finestra ad una distanza di cir-
ca 2 centimetri. COSTO DI REALIZZAZIONE
A questa distanza per cancellare un microproces-
sore occorrono dai 15 ai 20 minuti, sempre che la Costo di realizzazione dello stadio LX.1170 (vedi
finestra risulti pulita. figg.6-7) completo di circuito stampato, zoccolo
Se sopra tale finestra c della sporcizia, ad e- Textool, connettore duscita, transistor, integrati
sempio rimangono dei residui di collante dopo a- con INSERITO un microprocessore ST62/E10, un
ver rimosso unetichetta autoadesiva, dovrete pri- dischetto floppy contenenti i programmi richiesti, ed
ma pulirla con un batuffolo di cotone imbevuto di il CAVO seriale completo di connettori, ESCLUSI il
alcool o di acetone. mobile e lo stadio di alimentazione .......... 49,10
Poich la lunghezza del bulbo di una lampada ul-
travioletta di circa 30 cm, potete cancellare con- Costo di realizzazione dello stadio di alimentazio-
temporaneamente pi ST62/E disponendoli uno di ne LX.1170/B (vedi fig.8) completo di cordone di a-
fianco allaltro (vedi fig.28). limentazione.............................................. 11,60
Se vi dimenticate il microprocessore sotto la lam- Costo del solo stampato LX.1170 .............. 5,42
pada a raggi ultravioletti per una tempo superio- Costi del solo stampato LX.1170/B ............ 1,55
Vogliamo subito precisare che questo circuito ser- Nel CONN.1 dovete inserire la scheda con i dio-
ve per testare i programmi che avete imparato a di Led, se avete memorizzato nellST62E10 il
trasferire nel microprocessore ST62E10 fornito nel programma LED o la scheda con i due Display
kit del programmatore. se avete memorizzato nellST62E10 il program-
Lo stesso circuito pu essere utilizzato anche per ma CONTA o LOTTO.
i programmi che vorrete scrivere, a patto che con- Per alimentare questa scheda occorre una ten-
figuriate le porte come le abbiamo configurate noi, sione stabilizzata di 5 volt 200 milliAmpere cir-
diversamente non potrete sfruttarlo. ca.
74LS244, che in grado di sopportare carichi fino conviene collocare il quarzo in posizione orizzon-
ad un massimo di 20 mA. tale, saldando il suo corpo sul circuito stampato
Sempre guardando lo schema elettrico, sui piedini con una goccia di stagno.
3-4 dellST62E10 trovate collegato un quarzo da 8 Nello zoccolo IC2 (quello posto in alto verso il
MHz, che serve al microprocessore per generare CONN.1) inserite lintegrato 74LS244 rivolgendo la
la frequenza di clock necessaria per il suo funzio- tacca di riferimento verso il condensatore C2.
namento. Nello zoccolo IC1 inserite dopo averlo program-
La frequenza di questo quarzo non critica, quin- mato il microprocessore ST62E10, rivolgendo la
di potrete utilizzare anche quarzi di frequenza in- tacca di riferimento verso il condensatore C1.
feriore, ad esempio 7 - 6 - 4 MHz, tenendo co- Completato il montaggio di questo stampato pote-
munque presente che pi si scende di frequenza, te prendere lo stampato siglato LX.1171/B e su
pi lenta risulta la velocit di esecuzione del pro- questo saldare il connettore maschio, tutte le re-
gramma. sistenze dalla R3 alla R10 ed i diodi led, come vi-
Non utilizzate quarzi con una frequenza maggiore sibile in fig.14.
di 8 MHz, perch il microprocessore non riuscir a Quando inserite i diodi led nel circuito stampato do-
generare la necessaria frequenza di clock. vete rivolgere il terminale pi corto (terminale K)
Dei tre pulsanti presenti nel circuito, quelli siglati verso le resistenze.
P1 - P2 svolgono le funzioni rese disponibili dal pro- Lultimo stampato, quello siglato LX.1171/D, prov-
gramma, mentre P3 serve sempre e solo come co- visto di due display vi servir per testare i pro-
mando di reset. grammi CONTA e LOTTO.
microprocessore ST62E10
Come visibile in fig.15 su questo stampato fissate Questa stessa operazione va effettuata se dopo a-
le resistenze da R1 ad R8, che sono da 220 ohm, ver trasferito il programma LED volete sostituirlo
e le due resist,enze R9 - R10 che sono invece da con il programma CONTA o con il programma LOT-
4.700 ohm, poi il connettore maschio, i due tran- TO.
sistor TR1 - TR2 rivolgendo la parte piatta del loro
corpo verso destra e per ultimi montate i due di-
splay, rivolgendo il lato con i punti decimali verso
il basso. COLLAUDO MICROPROCESSORE
nel CIRCUITO TEST
IMPORTANTE
Dopo aver realizzato il circuito test siglato LX.1171
Se nel microprocessore ST62E10 avete memoriz- potete collaudare il microprocessore che avete im-
zato i dati del programma LED, dovrete inserire parato a programmare con uno dei tre semplici pro-
nel CONN.1 della scheda LX.1171 la scheda con grammi LED - CONTA - LOTTO, come vi abbiamo
gli 8 diodi led, se avete memorizzato i dati del pro- spiegato nellarticolo precedente.
gramma CONTA o del programma LOTTO, do- Per prima cosa dovete inserire nello zoccolo a 20
vrete inserire la scheda con i 2 display. piedini del circuito test LX.1171 il microprocesso-
Se per errore scambiate le schede, non causere- re appena programmato, rivolgendo la sua tacca di
te nessun danno n allintegrato IC2 n al micro- riferimento verso il condensatore C1 (vedi fig.12).
processore IC1, quindi baster inserire la scheda Dopo questa operazione, se avete programmato il
giusta per vedere il circuito funzionare. microprocessore con il programma LED dovete in-
Se il circuito non funziona, potreste esservi sba- nestare nel connettore femmina del circuito test
gliati nel memorizzare il programma nelle memo- LX.1171 il circuito applicativo a diodi led siglato
rie del microprocessore. LX.1171/B.
In questo caso dovrete esporlo sotto una luce ul- Se invece avete programmato il microprocessore
travioletta per cancellare i dati dalla sua memoria, con uno qualsiasi dei due programmi CONTA o
quindi dovrete riprogrammarlo. LOTTO, dovete innestare nel connettore femmina
DL1 DL2 DL3 DL4 DL5 DL6 DL7 DL8
2 4 17 6 15 13 8 11
10 DS1IC1 = vediEM.513
= diodo nota o 1N.4007
IC2 = TTL
*DL1-DL8 tipoled
= diodi 74LS244
P1-P3 = pulsanti
XTAL = quarzo 8 MHz
B0 B1 B2 B3 B4 B5 B6 B7
C1
15 14 13 12 11 10 9 8 17
IC1CONN.1 = connettore 12 poli
= vedi nota
1 16
IC2 = TTL tipo 74LS244
2 IC1 20
Nota==pulsanti
P1-P3 I componenti contraddistinti dalla-
5 6 sterisco
CONN.1 andranno 12
= connettore montati
poli sul circuito
18 19 3 4 7
stampato siglato LX.1171/B. Lintegrato si-
R1 R2
glato
Nota IC1 il microprocessore
= I componenti contraddistintiincluso
dalla- nel
Kit delandranno
sterisco porgrammatore
montatiLX.1170, che po-
sul circuito
XTAL
trete inserire
stampato siglato nel circuito Lintegrato
LX.1171/B. dopo averlosi-pro-
grammato.
glato IC1 il microprocessore incluso nel
P1 P2 C3 C4 C5 P3 Kit del porgrammatore LX.1170, che po-
trete inserire nel circuito dopo averlo pro-
grammato.
Fig.1 Schema elettrico del circuito che dovrete realizzare per poter verificare se il pro-
gramma LED (vedi pagg.37-38) stato correttamente memorizzato allinterno del micro
ST62E10. Per alimentare questo circuito occorre una tensione esterna stabilizzata di 5 volt.
del circuito test il circuito applicativo con i due di- Il programma LED vi d la possibilit di far lam-
splay siglato LX.1171/D. peggiare gli 8 diodi led presenti nel circuito con 5
A questo punto potete passare al collaudo vero e diverse modalit, che potete selezionare pigiando
proprio del programma caricato nelle memorie del ripetutamente il pulsante P1.
microprocessore.
1 Lampeggio
I led si accendono in sequenza uno alla volta da
COLLAUDO PROGRAMMA LED
sinistra verso destra. Il ciclo continua allinfinito.
TR2
E E
B B
TR1
C C
ELENCO COMPONENTI LX.1171/D
A1 DISPLAY 1 A2 DISPLAY 2
R1-R8 = 220 ohm 1/4 watt
R9 = 4.700 ohm 1/4 watt
R10 = 4.700 ohm 1/4 watt
TR1 = PNP tipo BC327
TR2 = PNP tipo BC327
a b c d e f g dp
DISPLAY1-2 = display Anodo comune
tipo HP.5082 o 7731
R1 R8 R9 R10
1 5 4 3 11 2 8 9 10 6 7
Fig.2 Se allinterno del micro ST62E10 avete memorizzato il programma CONTA o LOT-
TO, per poterlo controllare dovrete realizzare questo circuito elettrico. La scheda dei dio-
di led o dei display andr inserita nel connettore dellLX.1171 (vedi figg.19-20).
73 - 72 - 71 - ecc., fino a 00, dopodich il conteg-
gio riprender da 99 per tornare a 00 e cos allin-
finito.
Premendo in qualunque momento il tasto P1 il con-
teggio proseguir di nuovo in avanti e cos pure
premendo in qualsiasi momento il pulsante P2 il
conteggio riprender allindietro.
Infine potrete riprendere lesecuzione del program-
ma da capo premendo il pulsante P3 (RESET), per-
ch in tal modo sar come se aveste appena ali-
mentato il circuito.
In questo caso il conteggio ripartir da 00 e verr
effettuato in avanti.
COLLAUDO PROGRAMMA LOTTO Fig.3 Per poter vedere il listato dei pro-
grammi, quando sullo schermo appare il
Dopo aver programmato il microprocessore con il menu principale, pigiate F3 quindi sceglie-
te quello che vi interessa, cio Conta, Led
programma Lotto ed averlo inserito nel circuito
o Lotto e premete Enter.
stampato siglato LX.1171, dovete innestare il con-
nettore maschio del circuito a display nel connet-
tore femmina presente sul circuito test, poi dove-
te alimentare questultimo con una tensione di 5
volt stabilizzati.
C:\>
digitate:
CONTA.ASM
LED.ASM
LOTTO.ASM
STANDARD.ASM
Fig.12 Schema pratico di montaggio della Fig.13 Foto del circuito LX.1171 come si
scheda sperimentale LX.1171. Lintegrato presenta a montaggio ultimato. Si noti nel-
IC1 il microprocessore ST62E10 che vi ab- lo zoccolo IC1 il microprocessore ST62E10
biamo fatto programmare con il progetto provvisto della finestra di cancellazione ed
pubblicato a pag.26. I pulsanti P1 - P2 vi ser- in alto il connettore per poter inserire la
viranno per modificare le funzioni o la ve- scheda con i diodi led (vedi fig.14) o con i
locit (leggere articolo), mentre il pulsante display (vedi fig.15) Il circuito va alimenta-
P3 serve per resettare il circuito. to con una tensione di 5 volt.
Fig.14 Schema pratico di montaggio della Fig.15 Schema pratico della scheda display
scheda a diodi led da usare se avete me- da usare se nellST62E10 avete memoriz-
morizzato nellST62E10 il programma LED. zato il programma CONTA oppure LOTTO.
Fig.16 Foto della scheda LX.1171/B dei dio- Fig.17 Foto della scheda LX.1171/D dei di-
di Led a montaggio ultimato. splay a montaggio ultimato.
a A a
A K +V 19 18 17 16 15 14 13 12 11
b f
f g b
A
g
DIODO
A K
e
d c
c
LED
dp dp
B
d e
E C 1 2 3 4 5 6 7 8 9 GND
Fig.18 Connessioni dei display viste da dietro, del transistor BC.327 viste da sotto e dellin-
tegrato 74LS244 viste da sopra. Il terminale pi lungo presente nei diodi led lAnodo.
Se nelle diverse righe di istruzione si scrivono dif- sostituire portate il cursore su quella cifra e pre-
ferenti numeri binari, il microprocessore accender mete il tasto Canc.
ogni volta dei diodi led diversi, ed in questo modo
potrete creare differenti giochi di luce.
Ricordate che ogni numero binario deve essere
composto da non pi di 8 cifre, altrimenti il pro-
Se ad esempio considerate le istruzioni del lam-
gramma non funzioner.
peggio chiamato lamp1, vedete che quando viene
Se scrivete un numero di cifre inferiori ad 8 il pro-
eseguita la prima istruzione si accende solo il dio-
gramma funzioner ugualmente, ma i diodi corri-
do DL1, perch solo la cifra pi a destra uno 0,
spondenti alle cifre non utilizzate rimarranno sem-
poi quando viene eseguita la seconda istruzione
pre accesi. Ad esempio, scrivendo 11010b, cio
si accende solo DL2 e cos via. In questo modo si
tralasciando le tre cifre corrispondenti ai diodi DL6
realizzata una semplice accensione in sequenza
- DL7 - DL8, questi diodi rimarranno sempre ac-
di un solo diodo alla volta.
cesi.
Cambiando le cifre 1 e 0 che compongono i vari
numeri binari potete realizzare con un po di fanta- Se volete potete cambiare le cifre binarie di tutti i
sia tutti i giochi di lampeggio che vorrete. 5 giochi proposti, quindi potete modificare anche
le istruzioni scritte dopo le etichette lamp2 - lamp3
Per cambiare le cifre che compongono i numeri bi- - lamp4 - lamp5. Troverete queste scritte scorren-
nari sufficiente che vi portiate col cursore sulla ci- do con il cursore il listato del programma.
fra che volete modificare, dopodich potete scrive- I giochi di luce supportati da questo programma so-
re 1 o 0.Per cancellare la cifra binaria che volete no solo 5, quindi non aggiungete altre etichette del
tipo lamp6 - lamp7 ecc. seguite dalle istruzioni .by- Senza uscire dal listato del programma, dopo aver
te, perch il programma non funzionerebbe. apportato le modifiche ed averle salvate con il ta-
sto F2, premete i tasti Alt+T e di seguito A (vedi
NOTA IMPORTANTE: Come avrete notato, le i- fig.6).
struzioni di tipo .byte per accendere i led, che se- In questo modo lo schermo del vostro computer di-
guono le cinque etichette lamp1 - lamp2 - ecc., venter tutto nero e dopo alcuni secondi vedrete
sono 8, e cos devono sempre rimanere. Se can- apparire questa scritta:
cellate alcune di queste istruzioni oppure ne ag- *** SUCCESS ***
giungete altre analoghe, il programma non fun-
zioner. che conferma che lassemblaggio stato com-
pletato senza errori.
Eseguite le vostre modifiche dovete salvarle, altri- Finita loperazione di assemblaggio, premendo un
menti anche se leggerete sul monitor le istruzioni tasto qualsiasi tornerete al listato del programma.
che avete appena scritto, il programma non risul-
ter modificato. Se anzich apparire la scritta *** SUCCESS ***
compare ad esempio:
Per salvare le variazioni baster premere il tasto ERROR C:\ST62\LED.ASM 256:
F2: dopo pochi istanti vedrete accendersi la luce
dellHard-Disk, quindi sarete sicuri che il file modi- significa che nella riga 256 del file LED.ASM ave-
ficato stato aggiornato. te involontariamente inserito un errore.
Se non desiderate salvare le modifiche dovete te- Nota: Un errore molto comune nel quale si pu in-
nere premuto Alt e poi premere F3. cappare quello di scrivere un numero binario con
Comparir la finestra di fig.7 dove vi verr chiesto un numero di cifre superiore ad 8. Se per esem-
se volete salvare (tasto Y) oppure no (tasto N) le pio scrivete un numero binario a 9 cifre del tipo:
modifiche apportate.
Premendo uno qualsiasi di questi tasti tornerete nel .byte 110101001b ; Seconda istruzione
menu di fig.3.
dopo aver lanciato il programma assembla com-
Una volta apportate e salvate le modifiche, prima parir il messaggio di errore:
di trasferire i dati del programma nelle memorie del
microprocessore dovete eseguire unoperazione ERROR C:\ST62\LED.ASM 256:
supplementare, cio lanciare il programma as- (81) 8-bit value overflow
sembla, che serve per convertire le istruzioni del
programma in dati che il microprocessore utilizza Il numero tra parentesi (81) identifica il tipo di er-
per eseguire il programma. rore e non vi interessa, mentre la scritta 8-bit va-
lue overflow significa che avete utilizzato un nu- ziare a riconoscere le istruzioni principali che ri-
mero binario con pi di 8 bit corrono in qualsiasi programma per ST62.
Probabilmente a molti di voi queste scritte appari-
Per correggere questo errore dovete tornare al li- ranno ancora oscure e prive di significato, quindi
stato del programma e per questo baster preme- non perdete il prossimo numero in cui vi spieghe-
re un tasto qualsiasi. remo il significato di tutte le istruzioni.
Una volta nel listato, poich lerrore era stato se- Per TORNARE al DOS
gnalato nella riga 256, dovete portarvi con il cur-
sore su questa riga e controllare che risulti effetti- Quando avete terminato le operazioni di program-
vamente scritto un numero di 8 bit (8 cifre). mazione potete uscire dal programma e ritornare
al DOS.
Questo errore si verificher raramente perch scri-
vere unistruzione cos semplice non sar per voi Se vi trovate nel menu di fig.3, baster tenere pre-
un problema, comunque lo abbiamo voluto segna- muto Alt e poi pigiare X e cos sul monitor com-
lare, perch se un domani dovesse apparire per un parir:
vostro programma un qualunque messaggio di er-
rore, sappiate che questo presente nella riga in- C:\ST6>
dicata prima dei due punti (:).
a questo punto per uscire dalla directory ST6 e lan-
Per uscire dal file LED.ASM dovete tenere pre- ciare altri programmi dovrete digitare:
muto Alt e poi premere F3. Se non avete ancora
salvato la correzione, comparir la finestra di fig.7, C:\ST6>CD \ poi Enter
in cui dovrete indicare se volete salvare (tasto Y)
oppure no (tasto N) le modifiche. e cos comparir:
Premendo Y registrerete queste modifiche, pre-
mendo N invece non le salverete. C:\>
Facciamo presente che premendo uno qualsiasi di
questi tasti, Y o N, il listato del file LED scompa- Arrivederci al prossimo numero.
rir e ritornerete nel menu principale.
Il FILE STANDARD.ASM
IMPARARE a programmare i
Evidenziamo questo perch non vogliamo com- 4K, dovete necessariamente adoperare un
portarci come tanti altri, che spiegano poco o nien- ST62E20.
te ed illudono i loro lettori sostenendo che non c Nelle Tabelle N.1-2 riportiamo per ogni micropro-
nulla di pi facile che programmare un ST6. cessore la memoria disponibile ed il massimo nu-
Prima di insegnarvi a programmare sar quindi u- mero di ingressi/uscite utilizzabili, cio il numero
tile spiegare, anche solo a grandi linee, cosa sono di piedini che potete adoperare per i segnali.
un registro e una subroutine, il significato di tut-
te le istruzioni, quali jp - jrr - jrs - ld - cp ecc., e
come si utilizza una memoria.
A questo proposito vogliamo sottolineare che non TABELLA N.1 micro NON CANCELLABILI
sufficiente imparare a memoria il significato di tut- Sigla memoria Ram zoccolo piedini utili
te le istruzioni, ma occorre anche sapere come - Micro utile utile piedini per i segnali
dove - quando utilizzarle, se si vuole che il pro- ST62T.10 2 K 64 byte 20 pin 12
gramma funzioni correttamente. ST62T.15 2 K 64 byte 28 pin 20
Non illudetevi pensando di diventare esperti pro- ST62T.20 4 K 64 byte 20 pin 12
grammatori in pochi giorni, perch andreste incon- ST62T.25 4 K 64 byte 28 pin 20
tro ad una delusione: sono necessari infatti alcuni
mesi di pratica per acquisire una sufficiente pa-
dronanza della materia.
Per accelerare lapprendimento vi suggeriamo di i- TABELLA N.2 micro CANCELLABILI
niziare a leggere i programmi gi funzionanti, per-
Sigla memoria Ram zoccolo piedini utili
ch studiare le soluzioni adottate per scrivere una
Micro utile utile piedini per i segnali
subroutine, utilizzare un interrupt, o ancora vedere
come si sfrutta la memoria, vi sar di valido aiuto. ST62E.10 2 K 64 byte 20 pin 12
In altre parole, anche se sapete scrivere una lette- ST62E.15 2 K 64 byte 28 pin 20
ra o una cartolina, non detto che siate capaci di ST62E.20 4 K 64 byte 20 pin 12
scrivere un libro giallo o un bel romanzo di avven- ST62E.25 4 K 64 byte 28 pin 20
tura, quindi se decidete di dedicarvi allattivit di
scrittore, dovete prima acquisire un po di espe-
rienza facendovi seguire da un letterato o leggen- Quando scrivete un programma, dovete inserire
do testi dautore per apprendere come impostare i tutte le istruzioni nella sequenza in cui volete che
vari capitoli. siano eseguite dal microprocessore.
Chi sa gi programmare in Basic - Fortran - Pa- Ad esempio, se voleste programmare un robot per
MICROPROCESSORI ST6
Dopo avervi presentato sul N.172/173 un programmatore per micropro-
cessori ST6 ed un circuito per i test, sarete curiosi di conoscere le pro-
cedure per scrivere i vostri programmi, ad esempio per realizzare un o-
rologio, per pilotare dei display alfanumerici LCD, per realizzare gene-
ratori dimpulsi ecc. Se ci seguirete, cercheremo di spiegarvi con facili
esempi tutte le istruzioni necessarie per scrivere i programmi per lST6.
cuocere degli spaghetti, dovreste fornirgli nellordi- Come aprire un file per il programma
ne queste istruzioni: Come scrivere le istruzioni richieste
Come impostare il programma
- Prendi una pentola Come utilizzare la memoria
- Riempila per met di acqua
- Metti il tutto sul fornello
- Accendi il gas sotto la pentola COME CREARE un FILE SORGENTE
- Attendi che lacqua bolla
- Versaci un po di sale Chi ha gi richiesto il kit LX.1170 del Program-
- Immergi gli spaghetti nellacqua matore per ST6 pubblicato sulla rivista N.172/173
- Attendi 5-6 minuti avr ricevuto un dischetto floppy, che oltre a ser-
- Spegni il fornello vire per trasferire un programma dallHard-Disk nel-
- Togli la pentola dal fornello la memoria di un microprocessore ST6, serve per
- Scola la pasta creare i files sorgenti necessari per scrivere qual-
siasi vostro programma.
Se vi dimenticate anche una sola di queste istru- Infatti in questo dischetto stato memorizzato un
zioni, quale ad esempio quella di accendere il for- ottimo editor, corredato di tantissime opzioni che
nello, non riuscirete mai a cuocere gli spaghetti. vi saranno utili per scrivere le istruzioni, per dupli-
E cos se vi dimenticate di inserire listruzione riem- carle, per cancellarle ed anche per salvare i files
pi la pentola con acqua, non potrete mai arriva- modificati; nel floppy stato inoltre incluso un as-
re alla condizione di vedere lacqua bollire. semblatore.
Nella rivista precedente (se non ne siete in pos-
Dunque prima di apprestarvi a scrivere un pro- sesso potete richiedercela, perch abbiamo anco-
gramma dovete sapere: ra delle copie disponibili), vi abbiamo spiegato co-
me caricare il programma ST6 nel vostro compu-
ter.
LED.ASM
Fig.3 Per ricopiare la SORGENTE STAN- LOTTO.ASM
DARD dovete assegnarle un altro nome. Per OROLOGIO.ASM
fare questo dovete premere i tasti ALT+F TIMER.ASM ecc.
poi premere il tasto A. Da questa figura si
passer alla fig.4. 4 - Dopo aver scritto il nome per esteso (ad e-
sempio, C:\ST6\TIMER.ASM) premete Enter, ed in
alto, nella pagina delleditor visibile in fig.5, vedre-
te apparire la scritta:
C:\ST6\TIMER.ASM
Quando scrivete un programma dovete rispettare Fig.5 Una volta creato il file TIMER vedrete
alcune semplici regole che ora vi indicheremo, al- apparire nella prima riga in alto della fine-
trimenti quando lassemblerete compariranno dei stra blu delleditor C:\ST6\TIMER.ASM. A
messaggi relativi agli errori, che dovrete correg- questo punto potete iniziare a scrivere il vo-
gere per poter proseguire. stro nuovo programma.
Ogni istruzione deve essere scritta su una diversa
riga di programma e deve essere composta da
unetichetta, da unistruzione e da un operando
dellistruzione.
Ad esempio nella riga di programma:
pippo letichetta
ldi listruzione
a,10h loperando dellistruzione
ETICHETTA
Fig.6 Una volta completato il programma
Letichetta un riferimento non obbligatorio che prima di memorizzarlo nellST6 lo dovete
deve partire sempre dallestremo sinistro della ri- Assemblare. Premete quindi i tasti ALT+T
ga. poi il tasto A. Se avete commesso un erro-
Unetichetta serve come punto di riferimento per re nel programma, vi verr segnalato.
poter ritornare nuovamente, tramite listruzione di
salto (indicata con la sigla jp, abbreviazione di Se gi presente il nome delletichetta, dovete co-
jump), su quella riga di programma. munque separare listruzione con uno spazio.
Quando scrivete unetichetta dovete rispettare Quindi se avete letichetta pippo1 e listruzione
queste regole: ldi x,10, dovete scrivere:
Fig.7 Dovrete sempre ricordare che ogni riga di programma composta da quattro bloc-
chi principali: Etichetta - Istruzione - Operando - Commento. I primi tre blocchi andranno
tenuti separati tra loro da uno o pi SPAZI (o ancora meglio usate il tasto TAB della ta-
stiera), mentre lultimo blocco del COMMENTO dovr essere separato da un punto e vir-
gola. Se non userete lETICHETTA dovrete comunque lasciare uno o pi spazi, mentre se
non scriverete il COMMENTO non dovrete mettere il punto e virgola.
Questo deve essere sempre preceduto da un pun- I numeri ottali
to e virgola (;), diversamente il computer segna- iniziano da 0 e terminano a 377
ler errore.
Utilizzando listruzione precedente potete scrivere: I numeri esadecimali
iniziano da 0 e terminano a FF
Idi x,10 ; inserire 10 in x
I numero binari
iniziano da 0 e terminano a 11111111
I commenti possono essere scritti anche allinizio
di una riga, ma senza lasciare spazi e ricordando
di mettere sempre prima un punto e virgola (;). STRUTTURA di un PROGRAMMA
Ogni volta che completate unistruzione dovete Per scrivere un programma per ST6 si devono se-
sempre e necessariamente andare a capo pre- guire delle precise regole che sono:
mendo il tasto Enter. Definire lo spazio in MEMORIA
Tenete presente che le istruzioni possono essere Definire le VARIABILI
scritte sia in minuscolo sia in maiuscolo: Definire i REGISTRI
Scrivere il PROGRAMMA PRINCIPALE
Idi x,10 oppure LDI X,10 Scrivere le SUBROUTINE
Scrivere eventuali subroutine di INTERRUPT
Definire i VETTORI di INTERRUPT
2
DEFINIZIONE delle VARIABILI TIMER
lare istruzione.
TIMER 2 19 P A0 ST 62 E 10
OSC. INP 3 18 P A1
Le variabili non vengono inserite nella memoria OSC. OUT 4 17 P A2
ST 62 T 10
ROM, ma sempre e solo nella memoria RAM; in NMI 5 16 P A3
Vpp 6 15 P B0
questo modo possibile variare questi numeri se- ST 62 E 20
RESET 7 14 P B1
condo le diverse esigenze. P B7 8 13 P B2
Ad esempio, per realizzare un orologio servono 3 P B6 9 12 P B3 ST 62 T 20
variabili, una per le ore, una per i minuti ed una P B5 10 11 P B4
In ogni programma potete inserire un massimo di Ricordate che il nome che assegnate alla variabi-
60 variabili e poich queste sono situate nelle cel- le deve sempre essere scritto partendo da sinistra,
le della memoria RAM, dovete dare ad ogni cella senza lasciare nessuno spazio, ed a questo no-
un numero di riferimento, cos da poter ritrovare me deve seguire, spaziandola, la dicitura .def. Do-
la variabile. po questa abbreviazione, dovete lasciare un altro
secondi .def 132
minuti .def 133
Vcc GND Vpp ore .def 134
1 28 10
11
RESET RESET PORTA C Come ultima indicazione, tenete presente che le
variabili vanno definite fin dal principio, vanno cio
OSC. INP
3
inserite allinizio del programma e non a met o al-
OXILL. A/D CONVERTER TIMER
OSC. OUT
4
la fine.
Vi consigliamo di scrivere il nome delle variabili
2
sempre in minuscolo.
TIMER
Vcc 1 28 GND
2
TIMER 27 P A0
I REGISTRI del MICROPROCESSORE
OSC. INP 3 26 P A1
OSC. OUT 4 25 P A2 ST 62 E 15
NMI 5 24 P A3 Nella memoria RAM del microprocessore ST6, ol-
P C7 6 23 P A4
ST 62 T 15 tre allo spazio riservato alle variabili in preceden-
P C6 7 22 P A5
za descritte, sono presenti delle altre celle di me-
P C5 8 21 P A6
P C4 9 20 P A7 ST 62 E 25 moria chiamate registri, che permettono di ese-
Vpp 10 19 P B0 guire precise funzioni gi definite.
RESET 11 18 P B1 ST 62 T 25 Ad esempio, c un registro che permette di defi-
P B7 12 17 P B2
P B6 13 16 P B3
nire quali piedini delle porte A - B - C vanno utiliz-
P B5 14 15 P B4 zati come ingressi e quali come uscite (vedi figg.
8-9).
Questi indirizzi devono essere definiti sempre alli-
nizio di ogni programma. Questa unoperazione
Fig.9 Nei microprocessori ST6 tipo E15-T15 che non dovete eseguire se utilizzate, come ab-
ed E25-T25 sono disponibili tre porte, la A,
biamo spiegato, il file STANDARD.ASM, perch
la B e la C. La porta A siglata A0-A1-A2-
abbiamo gi definito noi tutti i registri, cos da e-
A3-A4-A5-A6-A7, la porta B siglata B0-B1-
vitarvi errori.
B2-B3-B4-B5-B6-B7, mentre la porta C si-
glata C4-C5-C6-C7. Anche tutti questi pie-
dini possono essere utilizzati sia come En- IL REGISTRO ACCUMULATORE
trate sia come Uscite.
Nel microprocessore ST6 c un particolare regi-
stro chiamato accumulatore ed indicato sempre
con la lettera a, molto importante, perch esegue
le seguenti operazioni matematiche:
spazio e poi scrivere il numero, che rappresenta
lindirizzo della cella di memoria in cui volete allo- fa la somma
care questo dato. fa la sottrazione
fa la tavola della verit di un AND
Ricordatevi inoltre che se assegnate la stessa cella fa una comparazione tra due numeri
di memoria a due diverse variabili, il microproces- fa il complemento di un numero
sore non segnaler nessun errore, ma in questo ca-
so il programma funzioner in modo anomalo e voi Tutte queste operazioni matematiche si possono
non otterrete le funzioni che vi eravate prefissati. eseguire solo con il numero che avete provvedu-
to ad inserire nellaccumulatore; il risultato otte-
Per il programma che serve a far funzionare un o- nuto subentra poi automaticamente a sostituire il
rologio, potete definire nel seguente modo le 3 va- numero prima presente nel registro accumulato-
riabili: re.
Ritorniamo allesempio dellorologio e supponia- 2 ARITMETICHE
mo che siano le 10:25:30.
Poich la funzione dellorologio presuppone che si ADD - somma tra variabile e accumulatore
debba sempre sommare 1, tramite listruzione ld ADDI - somma tra numero e accumulatore
(load) spostiamo nellaccumulatore a il numero pre- AND - funzione And tra variabile e accumulatore
sente nella variabile dei secondi, cio 30. A que- ANDI - funzione And tra numero e accumulatore
sto punto possiamo sommare a questo il numero CLR - azzera una variabile
1, ottenendo 31. COM - complementa i bit nellaccumulatore
Ora sempre con listruzione ld, spostiamo nuova- CP - comparazione tra variabile e accumulatore
mente il risultato dal registro accumulatore alla va- CPI - comparazione tra numero e accumulatore
riabile dei secondi, che di conseguenza risulta o- DEC - sottrae 1 ad una variabile
ra 31. INC - somma 1 ad una variabile
Trascorso un secondo, si ripete il ciclo di istruzio- RLC - sposta una variabile a sinistra con riporto
ni: spostiamo il numero dalla variabile dei secon- SLA - sposta una variabile a sinistra senza riporto
di nel registro accumulatore, sommiamo a que- SUB - sottrazione tra variabile e accumulatore
sto 1 ed il nuovo risultato, 32, lo spostiamo nuo- SUBI - sottrazione tra accumulatore e numero
vamente nella variabile dei secondi.
3 SALTI CONDIZIONATI sullETICHETTA
Lintero ciclo appena descritto si riduce a tre istru-
zioni:
JRC - salta se c un riporto
ld a,secondi ; carica i secondi in a JRNC - salta se non c un riporto
addi a,1 ; somma ad a il numero 1 JRZ - salta se loperazione d 0
ld secondi,a ; carica somma nella variabile JRNZ - salta se loperazione non d 0
JRR - salta se un bit 0
JRS - salta se un bit 1
REGISTRI SPECIALIZZATI
Allinterno del microprocessore ST6 ci sono dei re- 4 SALTI INCONDIZIONATI sullETICHETTA
gistri specializzati che noi abbiamo definito nel no-
stro file STANDARD.ASM con le lettere x - y - v - CALL - esegui una subroutine
w e che vi potrebbero servire per semplificare par- JP - salta sempre sulletichetta
ticolari operazioni.
Ad esempio se voleste ottenere un impulso della 5 SETTAGGIO dei BIT
durata di 1 millisecondo potreste eseguire queste
istruzioni: SET - metti un bit a 1
RES - metti un bit a 0
set 0,port_b ; metti a 1 il piedino PB0
Idi x,103 ; assegna 103 a x
6 CONTROLLO CPU
ripeti dec x ; sottrai 1 a x
jrnz ripeti ; ripeti se x non a 0
NOP - serve per ottenere dei ritardi
res 0,port_b ; metti a 0 il piedino PB0
RET - ritorna da una subroutine
RETI - ritorna da un interrupt
Questa sequenza di istruzioni fa s che, iniziando STOP - blocca tutte le funzioni del micro
dal numero 103 e continuando a sottrargli 1 fino a WAIT - arresta lesecuzione del programma
quando non si raggiunto lo 0, passi esattamente
1 millisecondo.
TEMPI di ESECUZIONE
microsecondi = (13 : MHz quarzo) x N cicli Questa istruzione identica alla precedente con la
sola differenza che il numero da sommare a quel-
Ad esempio, se usate un quarzo da 2 MHz per e- lo presente nel registro accumulatore non pre-
seguire unistruzione aritmetica che necessita di 4 so dalla variabile, ma immesso direttamente da voi.
cicli, il microprocessore per svolgerla impiegher: Ad esempio, se al numero presente nellaccumu-
latore, che potrebbe essere 37, volete sommare il
(13 : 2) x 4 = 26 microsecondi numero 30, dovrete scrivere:
and a,secondi
ADD
Per eseguire una somma tra il numero presente Se nella variabile secondi presente il numero
nella variabile ed il numero presente nellaccu- decimale 30, che convertito in binario uguale a
mulatore, dovete scrivere listruzione in questo 00011110, e nellaccumulatore presente il nu-
modo: mero decimale 25, che convertito in binario u-
guale a 00011001, il risultato delloperazione AND
add a,secondi tra questi numeri :
JRZ
In questo caso il salto viene effettuato sulleti-
chetta siglata funz solo se la temperatura mag-
Questa istruzione viene sempre inserita in un pro-
giore o uguale a 20 gradi.
gramma dopo unistruzione CP o CPI per effettuare
In pratica si ottiene la funzione opposta quella che
un salto condizionato.
si otteneva con listruzione jrc.
Se dalla comparazione il microprocessore rileva
che il numero presente nellaccumulatore u-
Nota importante: Il salto jrnc riesce a raggiunge- guale a quello presente nella variabile, viene ef-
re unetichetta solo se questa si trova ad una di- fettuato un salto sulletichetta.
stanza pari a circa 8 righe di programma.
Se eseguite un salto jrnc su unetichetta che di-
Lesempio riportato nellistruzione DEC permette-
sta pi di 15 righe, quando assemblerete il pro-
va di diseccitare un rel dopo 40 minuti.
gramma, vi verr segnalato errore con la scritta 5-
Di seguito potete vedere le modifiche che abbiamo
bit displacement overflow.
apportato al programma per usare listruzione JRZ.
Questa istruzione serve per controllare se una ci- Questa istruzione serve per caricare il numero
fra di un numero binario si trova a livello logico contenuto in una variabile nellaccumulatore o vi-
1 e quando si rileva questa condizione viene effet- ceversa.
tuato un salto. Nella funzione CPI, in cui abbiamo riportato un e-
Listruzione JRS pu essere utile per controllare se sempio per far diseccitare un rel quando la tem-
il piedino dingresso di una qualsiasi porta A-B- peratura supera i 20 gradi, la comparazione vie-
C si trova a livello logico 0 o a livello logico 1 ne effettuata solo con il numero presente nellac-
(vedi figg.10-11). cumulatore, quindi abbiamo dovuto inserire allin-
Se volete controllare che linterruttore posto sulla terno dellaccumulatore il numero che era presen-
porta 6B risulti chiuso (vedi fig.13) e quando si ri- te nella variabile chiamata gradi:
scontra questa condizione, eccitare un rel di al- ld a,gradi ; carica nellaccumul. i gradi
larme posto sulla porta duscita 2A, dovete scri- cpi a,20 ; compara i gradi con numero 20
vere listruzione in questo modo: jrnc funz ; salta a funz se maggiore di 20
res 7,port_b ; diseccita il rel
funz ; non diseccitare il rel
jrs 6,port_b,eccita ;controlla porta 6B Se la variabile gradi contiene il numero 15, dopo
jp fine ; va a fine se 6B a 0 listruzione ld a,gradi anche il numero presente
eccita ; etichetta per proseguire
set 2,port_a ; eccita il rel su 2A nellaccumulatore avr un valore di 15.
fine ; non eccitare il rel
LDI
In questa istruzione necessario compiere un dop-
Questa istruzione serve per caricare in una varia-
pio salto: il primo serve ad eccitare il rel se lin-
bile oppure nellaccumulatore un qualsiasi nu-
terruttore applicato sulla porta 6B chiuso, il se-
mero da voi prescelto e compreso tra 0 e 255.
condo (jp fine) serve a non eccitare il rel nel ca-
Nellistruzione DEC abbiamo riportato un esempio
so in cui linterruttore non risulti chiuso.
per diseccitare un rel dopo 40 minuti. Questo
Se non avessimo inserito listruzione jp fine, il mi-
numero va quindi inserito nella variabile tempo co-
croprocessore avrebbe proseguito con le istruzio-
me qui sotto riportato:
ni successive ed avrebbe ugualmente eccitato il
rel anche se linterruttore non fosse stato chiuso. ldi tempo,40 ; carica in tempo il numero 40
...... ......
dec tempo ; decrementa la variabile tempo
ld a,tempo ; carica in a la variabile tempo
Nota importante: Il salto jrs riesce a raggiungere cpi a,0 ; confronta a con il numero 0
jrnz funz ; se diverso salta in funz
unetichetta solo se questa si trova ad una distanza res 7,port_b ; diseccita rel
pari a circa 60 righe di programma. funz ; non diseccitare il rel
ST6 ST6
C C
B B
6B 2A 6B 2A
E E
Fig.12 Nel programma riportato al paragrafo Fig.13 Nel programma riportato al paragrafo
JRR il rel si eccita ogni volta che corto- JRS il rel si eccita ogni volta che collega-
circuitate verso massa linterruttore po- te verso il positivo linterruttore posto
sto sulla porta 6B. In questo modo sulla sulla porta 6B. In questo modo sulla porta
porta di uscita 2A ritroverete un livello lo- di uscita 2A ritroverete un livello logico 1
gico 1 che polarizzer il transistor. che polarizzer il transistor.
Dopo listruzione ldi tempo,40 scritta nella prima SET
riga, la variabile tempo uguale a 40.
Questa istruzione serve per forzare ad un livello
NOP logico 1 il bit di una variabile.
Nellistruzione JRS abbiamo riportato un esempio
Questa istruzione viene usata pochissimo, perch per eccitare un rel ogni volta che il pulsante po-
serve solamente per ottenere un ritardo di qual- sto sulla porta 6B viene pigiato.
che microsecondo. Infatti fa eseguire al micro- Nella riga in cui posta la funzione set 2,port_a,
processore 2 cicli macchina a vuoto. viene forzata luscita 2 della porta A a livello lo-
Per eseguire questa funzione sufficiente scrive- gico 1, in modo che provveda ad eccitare il rel.
re, dopo aver lasciato uno spazio, la parola NOP;
scrivendola pi volte aumenterete il ritardo. jrs 6, port_b,eccita ; controlla porta 6B
jp fine ; va a fine se 6B a 0
Se nel microprocessore avete utilizzato un quarzo eccita ; etichetta per proseguire
da 8 MHz, che esegue 1 ciclo macchina in un tem- set 2,port_a ; eccita il rel su 2A
po di 1,625 microsecondi, e scrivete: fine ; non eccitare il rel
nop ; ritardo 3,25 microsec. In pratica listruzione SET compie loperazione in-
nop ; ritardo 3,25 microsec. versa allistruzione RES.
nop ; ritardo 3,25 microsec.
01111111
RETI
Se voleste azzerare oltre il piedino 7 della porta B
Questa istruzione viene utilizzata alla fine di parti-
anche i piedini 6 - 5, dovreste scrivere:
colari tipi di subroutine che si chiamano interrupt
res 7,port_b e che sono identificati con le etichette:
res 6,port_b
res 5,port_b ad_int ; serve per il convertitore A/D
tim_int ; serve per il timer
BC_int ; serve per le porte B-C
Vi ricordiamo che il numero di bit per ogni porta va A_int ; serve per la porta A
da 0 a 7. nmi_int ; serve per il piedino nmi
Dopo una di queste etichette, si interrompono mo- zione eseguita ha un riporto, in altre parole quan-
mentaneamente le funzioni del programma princi- do il risultato superiore a 255.
pale e vengono eseguite le istruzioni che si trova- Ad esempio, se il valore nellaccumulatore 250,
no dopo linterrupt. dopo aver eseguito listruzione:
Alla fine di questa subroutine di interrupt dovre-
addi a,100
te inserire listruzione RETI per ritornare al pro-
gramma principale, nel punto in cui si trovava pri- il valore del carry 1.
ma dellinterruzione forzata.
Come noterete, nel microprocessore ST6 c un Tornando allistruzione RLC, se allinterno dellac-
piedino chiamato appunto nmi (corrisponde al pie- cumulatore presente il numero binario
dino 5) sul quale potete collegare un pulsante (ve- 00000100 e nel carry presente un 1, scrivendo
di fig.14) che potrete usare per interrompere for- listruzione:
zatamente una funzione.
Ammettiamo che abbiate scritto un programma per rlc a
lautomazione di un trapano e mentre questo sta
ritroverete nellaccumulatore questo numero bina-
eseguendo la foratura, si spezzi la punta.
rio:
In questo caso dovete immediatamente interrom-
pere il programma e togliere la tensione di alimen-
00001001
tazione dal trapano per sostituire la punta.
Il programma va scritto nel seguente modo:
Se nel carry fosse parcheggiato uno 0, nellaccu-
nmi_int ; etichetta nmi di interrupt mulatore ritrovereste questo numero binario:
res 5,port_b ; resetta la porta 5B
reti ; termine subroutine 00001000
La porta 5B quella che eccita o diseccita il tele-
La funzione RLC potrebbe risultarvi utile per ac-
ruttore che alimenta il trapano.
cendere in sequenza a ciclo continuo dei diodi
led. Infatti il numero che perdete sulla sinistra en-
tra nel carry per rientrare poi sulla destra.
RLC
SLA
Questa istruzione serve per spostare verso sini-
stra tutte le cifre di un numero binario presente
Anche questa istruzione serve per spostare verso
nellaccumulatore.
sinistra tutte le cifre di un numero binario pre-
Sulla destra di tale numero entrer un 1 o uno 0,
sente nellaccumulatore, con la sola differenza
che risulta parcheggiato in una particolare cella di
che, non utilizzando il carry, sulla destra entra sem-
memoria RAM chiamata CARRY, presente allin-
pre uno 0 ed il numero che fuoriesce a sinistra va
terno del microprocessore.
perso.
Il valore del carry 1 solo quando lultima opera-
Listruzione SLA pu essere utile per ottenere una
moltiplicazione per 2.
Ad esempio, se nellaccumulatore presente que-
sto numero binario
ST6
00010111
NMI B
C
che corrisponde al numero decimale 23, scriven-
56B 5B do:
E
sla a
IMPARARE a programmare
NOTA IMPORTANTE WATCHDOG
Negli articoli precedenti (vedi riviste N.172/173 e Il watchdog un contatore pilotato dalla frequen-
174) vi abbiamo consigliato di scrivere tutte le za di clock del quarzo, che, iniziando dal numero
istruzioni in minuscolo sottolineando nel frattem- che avete inserito nel registro wdog ( sempre be-
po che non cambia assolutamente nulla se utiliz- ne inserire un numero alto, ad esempio 255), con-
zate la forma maiuscola. ta a rovescio fino ad arrivare a 0.
Abbiamo tuttavia notato che la tipografia quando Quando raggiunge lo 0, il watchdog resetta auto-
trascrive questi testi in minuscolo compie pi fre- maticamente il microprocessore, che in questo mo-
quentemente errori tipografici; infatti confonde la do non potr pi proseguire con il programma che
lettera i con la lettera l e viceversa, la lettera r per stava eseguendo.
la n, e spesso trascrive cos vicino le due lettere r Il watchdog impedisce che eventuali disturbi pre-
n da farle sembrare una m. senti sulla tensione di rete dei 220 volt o generati
Proprio per evitare questo tipo di errori da adesso da altri fonti, entrando involontariamente nel mi-
in poi scriveremo le righe dei programmi un po in croprocessore lo predispongano per eseguire fun-
maiuscolo ed un po in minuscolo. zioni non previste.
Ripetiamo nuovamente che ogni riga di program- Tanto per portare un esempio, supponiamo di aver
ma composta da quattro blocchi chiamati Eti- programmato un ST6 per far eseguire ad un tor-
chetta - Istruzione - Operando ; Commento (ve- nio automatico delle viti filettate lunghe 10 milli-
di fig.1), che dovrete tenere distanziati gli uni dagli metri.
altri con un carattere di tabulazione. Pu verificarsi il caso in cui un disturbo, entrando
In questo modo avrete tutte le istruzioni perfetta- nel micro, lo predisponga per togliere la filettatura
Fig.1 Ogni riga di programma composta da quattro blocchi che occorre tenere distan-
ziati da uno spazio. Potrete anche non inserire lultimo blocco del COMMENTO, ma se
lo utilizzate, dovrete farlo precedere da un punto e virgola. Se nella riga di un programma
mancasse lETICHETTA, dovrete lasciare uno SPAZIO prima di scrivere lISTRUZIONE.
i microprocessori ST6
Poich ci siamo ripromessi di insegnarvi a programmare correttamen-
te un ST6, nostra intenzione spiegarvi in modo molto semplice e con
numerosi esempi tutti i passi che bisogna compiere, per evitare che
commettiate quei comuni ed involontari piccoli errori, che potrebbero
impedire il regolare funzionamento del microprocessore.
o per fare delle viti lunghe 10 centimetri. ritenendolo difettoso oppure cercavano nel pro-
Per evitare che, in assenza di disturbi, il contato- gramma un errore, che in realt non esisteva.
re del watchdog possa raggiungere lo 0 e quindi A chi ci ha interpellato per queste anomalie ab-
resettare il microprocessore mentre sta eseguen- biamo chiesto se vicino ad unetichetta ripeti o ad
do le istruzioni del programma, dovrete sempre ri- una funzione che il programma eseguiva diverse
cordarvi di inserire ogni 20 - 30 - 40 righe di pro- volte era stata riportata la riga LDI wdog,255, e
gramma questa scritta: quasi sempre abbiamo ricevuto una risposta ne-
gativa.
LDI wdog,255 Dopo aver spiegato che il watchdog si pu para-
gonare ad una pila ricaricabile e, come tale, ogni
Conviene inserire questa istruzione dopo uneti- tanto occorre ricaricarla per evitare che arrivi a 0
chetta che faccia ripetere alcune righe di pro- volt, tutti hanno capito limportanza di questa
gramma diverse volte, perch in questi casi che funzione e dopo averla inserita nel loro program-
il contatore del watchdog pu pi facilmente sca- ma gli inconvenienti lamentati sono spariti.
ricarsi, cio raggiungere lo 0.
Se ci avviene, il microprocessore si resetta, in al- Negli esempi che trovate in questo articolo trove-
tre parole non pu pi proseguire con le successi- rete spesso questa istruzione:
ve istruzioni ed il programma riparte dallinizio.
Molti programmatori principianti non trovando ripeti LDI wdog,255 ; carica il watchdog
unesauriente spiegazione e nemmeno nessun e- ..... ; programma
sempio su come utilizzarla, non inserivano que- JP ripeti ; salta a ripeti
sta istruzione, e quando il programma si blocca-
va perch il watchdog arrivava a 0, non sapen- che in pratica serve a ricaricare questa pila sul
do trovare unaltra spiegazione, cambiavano lST6 numero massimo che possiamo inserire, cio 255.
TABELLA N.1 per ST62/E10 - ST62/T10 - ST62/E20 - ST62/T20
porta A0 A1 A2 A3 B0 B1 B2 B3 B4 B5 B6 B7
piedino 19 18 17 16 15 14 13 12 11 10 9 8
1 20
Fig.2 Allinterno dei micro-
2 19 A0
3 18 A1
processori ST62 della se-
A0 4 17 A2 rie 10-20 sono presenti
PORTA A A1 5 16 A3 due PORTE chiamate A-B.
A2 6 15 B0 Nella porta A troviamo so-
A3 7 14 B1
13
lo quattro piedini Ingres-
B7 8 B2
B6 9 12 B3
si/Uscita siglati A0-A1-A2-
B5 10 11 B4 A3, mentre nella porta B
troviamo otto piedini si-
B0
B1 glati da B0 a B7.
B2 ST 62 E 10 Nella Tabella sopra ripor-
B3 ST 62 T 10 tata abbiamo indicato a
PORTA B B4 quale piedino dellST6 cor-
B5 ST 62 E 20 rispondono i piedini di
B6
ST 62 T 20 queste due PORTE.
B7
porta A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7
piedino 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 9 8 7 6
A0 1 28
A1 2 27 A0
A2 3 26 A1
Fig.3 Allinterno dei micro-
A3 processori ST62 della se-
PORTA A A4
4 25 A2
5 24 A3 rie 15-25 sono presenti tre
A5 C7 6 23 A4 PORTE chiamate A-B-C.
A6 C6 7 22 A5
A7 C5
Nelle due porte A-B sono
8 21 A6
C4 9 20 A7 presenti otto piedini In-
10 19 B0 gressi/Uscita siglati da A0
B0
B1
11 18 B1 a A7 e da B0 a B7, mentre
B7 12 17 B2
B2 nella porta C troviamo so-
B6 13 16 B3
B3 lo quattro piedini siglati
PORTA B B4
B5 14 15 B4
C4-C5-C6-C7.
B5 Nella Tabella sopra ripor-
B6
tata abbiamo indicato a
B7 ST 62 E 15
quale piedino dellST6 cor-
C4 ST 62 T 15 rispondono i piedini di
C5 queste tre PORTE.
PORTA C C6
ST 62 E 25
C7 ST 62 T 25
LE PORTE sui piedini
del MICROPROCESSORE
INGRESSI USCITE
con senza con per segnali open uscita
pull-up pull-up interrupt analogici collector push-pull
pdir 0 0 0 0 1 1
popt 0 0 1 1 0 1
port 0 1 0 1 0 0
Fig.5 Per predisporre il piedino di una Porta a funzione come Ingresso oppure come U-
scita, bisogna scrivere nei tre registri PDIR - POPT - PORT gli 0 o gli 1 nellordine ripor-
tato in questa Tabella. Nellarticolo trovate molti esempi su come settare queste Porte.
NOTA IMPORTANTE: Non tutti i piedini delle por- Ogni terminale di queste porte viene definito da
te si possono settare come ingresso per segnali uno degli otto numeri posti dopo la virgola, ricor-
analogici, quindi per evitare errori ricordatevi che dando che il terminale 7 la prima cifra a sinistra
di tutti i microprocessori riportati sia nella Tabella ed il terminale 0 lultima cifra a destra, come qui
N.1 sia nella Tabella N.2, non potrete mai utilizza- sotto riportato:
re come ingressi analogici i piedini A0 - A1 - A2
- A3. TABELLA N.4
Queste porte potranno invece essere settate per cifra 1 2 3 4 5 6 7 8
tutti gli altri tipi di ingresso, cio con pull-up - sen- piedino A7 A6 A5 A4 A3 A2 A1 A0
za pull-up - con interrupt. piedino B7 B6 B5 B4 B3 B2 B1 B0
Al contrario tutti i piedini di tutte le porte possono piedino C7 C6 C5 C4
essere settati come uscite, tenendo presente che
luscita pi comunemente utilizzata il push-pull,
che si ottiene ponendo a 1-1-0 i tre registri pdir, Quindi se volessimo caricare un 1 nel registro pdir
popt e port. di A7 dovremmo scrivere:
LDI pdir_a,00001111B pdir - popt - port = sono i tre registri necessari per
LDI popt_a,00001111B settare una porta.
LDI port_a,00000000B
_a e _b = sono le porte A e B ed il numero che
segue dopo la virgola indica quale degli otto pie-
Allo stesso modo, se volessimo predisporre come dini, 7-6-5-4-3-2-1-0, vogliamo settare come in-
uscite push-pull tutti i quattro piedini dei micro- gresso o come uscita.
processori che hanno anche la porta C (C4 - C5 -
C6 - C7) dovremmo scrivere: B = questa lettera posta sullestrema destra indica
che il numero a otto cifre un Binario.
LDI pdir_c,11110000B
LDI popt_c,11110000B Esempio N.2 = Disponendo di un ST6 del tipo ri-
LDI port_c,00000000B portato nella Tabella N.2, ad esempio un ST62E15,
vorremmo programmare tutti i piedini delle porte
A-B-C come ingressi pull-up.
Ogni piedino di ogni porta pu essere singolar-
mente settato come ingresso o come uscita e Soluzione: Controlliamo nella Tabella N.3 se dob-
persino in maniera differente. biamo mettere uno 0 o un 1 nei tre registri pdir -
Ad esempio, possiamo settare il piedino B1 della popt - port per poterli settare come ingressi pull-
porta B come uscita push-pull, il piedino B2 co- up, quindi poich in tutti va inserito uno 0 scrivia-
me ingresso pull-up, il piedino B3 come ingres- mo:
so analogico ed il piedino B4 come uscita open
collector.
LDI pdir_a,00000000B
LDI popt_a,00000000B
ESEMPI di SETTAGGIO piedini LDI port_a,00000000B
LDI pdir_b,00000000B
LDI popt_b,00000010B
LDI port_b,00000010B
LDI pdir_a,00000100B ; con queste tre righe abbiamo settato la porta A1 come
LDI popt_a,00000100B ; ingresso e la porta A2 come uscita
LDI port_a,00000000B ;
ripeti LDI wdog,255 ; ricarica il watchdog
JRS 1,port_a,eccita ; se in A1 ci sono 5 Volt salta a eccita
JRR 1,port_a,spegni ; se in A1 ci sono 0 Volt salta a spegni
eccita SET 2,port_a ; setta a 5 volt luscita di A2
JP ripeti ; salta alletichetta ripeti
spegni RES 2,port_a ; setta a 0 volt luscita di A2
JP ripeti ; salta alletichetta ripeti
Esempio N.5 = Abbiamo realizzato lo schema di quella di settare il piedino A1 come ingresso ed
fig.7 e vorremmo che, quando linterruttore corto- il piedino A2 come uscita.
circuita verso massa il piedino dingresso A1, si In questo caso, dovendo ottenere una funzione op-
eccitasse il rel collegato sulluscita A2. posta a quella dellesempio N.4, dovremo scrive-
Soluzione: La prima operazione da compiere re il programma come indicato di seguito:
LDI pdir_a,00000100B ; con queste tre righe abbiamo settato la porta A1 come
LDI popt_a,00000100B ; ingresso e la porta A2 come uscita
LDI port_a,00000000B ;
ripeti LDI wdog,255 ; ricarica il watchdog
JRR 1,port_a,eccita ; se in A1 ci sono 0 Volt salta a eccita
JRS 1,port_a,spegni ; se in A1 ci sono 5 Volt salta a spegni
eccita SET 2,port_a ; setta a 5 volt luscita di A2
JP ripeti ; salta alletichetta ripeti
spegni RES 2,port_a ; setta a 0 volt luscita di A2
JP ripeti ; salta alletichetta ripeti
Esempio N.6 = Ammettiamo di voler predisporre quelli della porta C come uscite push-pull.
tutti i piedini della porta A e della porta B come u- In questo caso dovremo scrivere:
scite in push-pull.
LDI pdir_a,00000000B
Soluzione: Per ottenere questa condizione dob- LDI popt_a,00000000B
biamo scrivere solo 1 per i due registri pdir - popt LDI port_a,00000000B
e solo 0 per il terzo registro port (vedi Tabella N.3).
Esempio N.7 = Supponiamo di voler predisporre i LInterrupt serve per interrompere momentanea-
piedini A0 - A1 - A2 - A3 e B0 - B1 come ingres- mente lesecuzione delle istruzioni principali affin-
si pull-up e i piedini A4 - A5 - A6 - A7 e B2 - B3 ch il microprocessore possa eseguire altre istru-
- B4 - B5 - B6 - B7 come uscite push-pull. zioni, che si trovano inserite tra una delle cinque e-
In questo caso dovremo scrivere: tichette qui sotto riportate e la scritta reti.
LDI pdir_b,11111100B
tim_int ; etichetta
LDI popt_b,11111100B
..... ; programma da eseguire
LDI port_b,00000000B
reti ; fine interrupt
Esempio N.8 = Abbiamo un microprocessore del
tipo riportato nella Tabella N.2, con a disposizione BC_int ; etichetta
le tre porte A-B-C, e vorremmo predisporre tutte i ..... ; programma da eseguire
piedini della porta A-B come ingressi pull-up e reti ; fine interrupt
A_int ; etichetta zione si preferisce scrivere questa riga di pro-
..... ; programma da eseguire gramma.
reti ; fine interrupt
attendi JRR 6,adcr,attendi
nmi_int ; etichetta
..... ; programma da eseguire Etichetta tim_int
reti ; fine interrupt
Questa etichetta viene utilizzata nelle funzioni ti-
Nota: la funzione di interrupt viene abilitata ed mer. In pratica quando il registro tcr (vedi para-
eseguita dal microprocessore solo se nel pro- grafo Timer) arriva a 0, il microprocessore esegue
gramma stata scritta la seguente istruzione: tutte le istruzioni che sono state scritte tra tim_int
e reti.
SET 4,ior
Etichetta BC_int
Dopo aver scritto le righe di programma da ese-
guire con la funzione interrupt necessario com- Questa etichetta viene utilizzata per fare eseguire
pletarle con la scritta reti, perch quando il micro- tutte le istruzioni che abbiamo scritto tra BC_int e
processore arriva ad eseguire listruzione reti ri- reti quando su uno dei piedini da noi scelto delle
torna al programma principale nel punto in cui era porte B o C la tensione cambia di stato, in altre pa-
stato momentaneamente interrotto. role quando passa dal livello logico 0 al livello lo-
Linterrupt viene utilizzato per far eseguire al mi- gico 1 (fronte di salita) o quando passa dal livel-
croprocessore unistruzione che in quel momento lo logico 1 al livello logico 0 (fronte di discesa).
pi importante di quella che stava eseguendo.
Ad esempio, se avessimo programmato un micro- Nota: per la funzione ingresso con interrupt pos-
processore per aprire e chiudere il cancello scor- siamo abilitare un solo piedino di una delle due
revole del nostro giardino, dovremmo utilizzare la porte B o C.
funzione interrupt applicata alla fotocellula per fa-
re in modo che in fase di chiusura se un bambino Esempio N.9 = Supponiamo di voler settare il
o il nostro cane attraversa improvvisamente la fo- piedino B2 come ingresso con interrupt che in-
tocellula, il cancello si blocchi. tervenga sul fronte di salita e tutti gli altri pie-
dini della porta B come ingresso in pull-up. Co-
Etichetta ad_int me prima operazione controlliamo nella Tabel-
la N.3 come vanno settati i registri pdir - popt
Questa etichetta serve per riconoscere quando il - port per lingresso con interrupt, dopodich
convertitore A/D ha terminato la conversione. Nor- possiamo scrivere il programma indicato
malmente non si usa mai perch in sua sostitu- Esempio n.9.
Questa etichetta viene utilizzata per fare eseguire Come prima operazione settiamo i piedini A0 - A1
tutte le istruzioni che abbiamo scritto tra A_int e - A2 - A3 come uscite push-pull prelevando dal-
reti quando sul piedino della porta A da noi scelto la Tabella N.3 i dati da inserire nelle righe pdir -
la tensione passa dal livello logico 1 al livello lo- popt - port e a questo punto possiamo scrivere il
gico 0 (fronte di discesa). programma indicato Esempio n.12.
Nota: per la funzione ingresso con interrupt pos- NOTA IMPORTANTE: se nelle righe del program-
siamo abilitare un solo piedino della porta A. ma dellinterrupt fossero presenti delle istruzioni
che utilizzano laccumulatore A, ad esempio:
Esempio N.11 = Ammettiamo di voler settare il
piedino A5 come ingresso con interrupt che in- CPI a,10 ; confronta A con il numero 10
tervenga quando il livello logico 1 cambia a livello ADDI a,10 ; somma ad A il numero 10
logico 0. Come prima operazione controlliamo nel- LDI a,10 ; metti in A il numero 10
la Tabella N.3 come dobbiamo settare i registri
pdir - popt - port per lingresso con interrupt, do- bisogner inserire in una variabile, che potremo
podich possiamo scrivere il programma indicato chiamare salva, il valore dellaccumulatore A su-
Esempio n.11. bito dopo letichetta dellinterrupt e, prima di ter-
minare con listruzione RETI, lo dovremo reinseri-
Etichetta nmi_int re nellaccumulatore A.
In questo modo quando il microprocessore torner
Questa etichetta viene utilizzata per fare eseguire ad eseguire il programma principale, nellaccumu-
tutte le istruzioni che abbiamo scritto tra nmi_int e latore si avr lo stesso valore che cera prima
reti quando sul piedino siglato NMI (piedino 5 di dellinterrupt.
NMI
A1 Pertanto se applichiamo sul piedino dingresso
5 una tensione di 4 volt otteniamo un numero de-
A2
cimale di:
A3
(4 x 255) : 5 = 204
Allinterno di ogni microprocessore ST6 presen- Anche con larrotondamento del numero si ottiene
te un A/D converter, cio un circuito in grado di sempre unelevata precisione in quanto la diffe-
convertire una tensione analogica compresa tra 0 renza risulta di sole poche decine di millivolt.
e 5 volt in un numero decimale compreso tra 0 e Ad esempio, prendendo sempre la tensione di 4
255. volt, per ogni variazione di 0,01 volt otterremo que-
Per ottenere questa condizione occorre settare il sti numeri decimali:
piedino della porta in cui viene applicata questa
tensione come ingresso analogico. 3,96 volt = 202
Ricordatevi che in tutti i microprocessori della se- 3,97 volt = 202
rie ST6 (vedi Tabelle N.1 - N.2) non possono es- 3,98 volt = 203
sere mai utilizzati come ingressi per segnali ana- 3,99 volt = 203
logici i piedini A0 - A1 - A2 - A3. 4,00 volt = 204
La massima tensione che si pu applicare su que- 4,01 volt = 205
sti ingressi non deve mai superare i 5 volt positivi. 4,02 volt = 205
Il valore numerico che otteniamo applicando una 4,03 volt = 206
tensione al piedino che abbiamo settato come in- 4,04 volt = 206
PROGRAMMA per Esempio n.13
LDI pdir_a,00001111B ; con queste tre righe abbiamo settato come uscite
LDI popt_a,00001111B ; push-pull i piedini A0 - A1 - A2 - A3
LDI port_a,00000000B ;
mni_int ; etichetta dinizio dellinterrupt
LD salva,a ; copia nella variabile salva il valore di A
LDI a,00001111B ; carica in A il numero binario 00001111
LD port_a,a ; copia il valore A nel registro della porta a
LD a,salva ; copia nellaccumulatore A il valore di salva
RETI ; istruzione fine interrupt
Conoscendo il numero decimale possibile cal- Esempio N.14 = Vogliamo realizzare un circuito
colare il valore della tensione in volt utilizzando che accenda un diodo led quando la tensione ap-
questa formula: plicata sul piedino prescelto supera i 3 volt. Per
lingresso si potrebbe decidere di utilizzare il pie-
volt = (decimale x 5) : 255 dino B1 e come uscita il piedino A0 (vedi fig.9).
C C
B B
B0 B0
E E
ST6 C
ST6 C
B B
B1 B1
E E
C C
B B
A7 B2 A7 B2
E E
C C
B B
B3 B3
E E
C C
B B
B4 B4
E E
Fig.10 Volendo realizzare un Level-Meter Fig.11 Se vorrete eccitare dei rel dovrete
che accenda una fila di 4 led allaumentare modificare lo schema come qui sopra ripor-
della tensione continua, applicata sul pie- tato. Per motivi di spazio abbiamo inserito il
dino A7 settato come Ingresso, dovrete u- rel solo sul primo transistor in alto. Modifi-
tilizzare il programma dellEsempio N.15 ri- cando il programma potrete utilizzare come
portato sulla pagina in basso a sinistra. uscite anche tutti gli 8 piedini della Porta B.
5 V.
100.000 ohm
100.000 ohm
5 V.
Vcc 1 28 GND
100.000 ohm
100.000 ohm
TIMER 2 27
TABELLA N.5 Registro tscr Esempio N.16 = Vorremmo prelevare dal piedino
A7 degli impulsi di 1 millisecondo, quindi vor-
01011000 divide x 1 remmo sapere come impostare il programma.
01011001 divide x 2
01011010 divide x 4
Soluzione: Come prima operazione convertiamo i
01011011 divide x 8
01011100 divide x 16
millisecondi in secondi dividendoli per 1.000 e co-
01011101 divide x 32 s otteniamo:
01011110 divide x 64 1 : 1.000 = 0,001 secondo
01011111 divide x 128
Quindi calcoliamo quale numero dobbiamo mette-
Ammesso di voler far dividere il prescaler per 128 re nel registro tcr con la formula:
dovremo scrivere questa riga di programma:
tcr = [(Xtal Hz : 12) : tscr] x secondi
LDI tscr,01011111B
Tenete presente che il numero del tcr non deve
Alla fine della riga non dobbiamo dimenticarci di in- mai risultare maggiore di 255 quindi se questo si
poich questo numero maggiore di 255 dovre- Soluzione: Come prima operazione dobbiamo cal-
mo scegliere per tscr un numero maggiore, ad e- colare il tempo in secondi corrispondente alla fre-
sempio 4 e cos otterremo: quenza di 1.200 Hz e per ottenere questo dato u-
siamo la formula:
[(8.000.000 : 12) : 4] x 0,001 = 166,66 tcr
secondi = (1 : Hz) : 2
Poich il microprocessore lavora solo con numeri
interi, dovremo arrotondarlo sul numero pi pros- Nel nostro caso otteniamo:
simo che nel nostro caso 167.
Noi abbiamo scelto per tscr il numero 4, ma pote- (1 : 1.200) : 2 = 0,0004 secondi
vamo anche scegliere 8 - 16 - 32 ecc. tenendo co-
munque presente che pi alto il numero del tscr Quindi calcoliamo qual il numero che dobbiamo
minore risulter la precisione sul tempo. mettere nel registro tcr con la formula:
Disponendo dei valori richiesti cio:
tcr = [(Xtal Hz : 12) : tscr] x secondi
tscr = 4
tcr = 167 Poich nella formula manca il valore del tscr, con-
sultiamo la Tabella N.5 scegliendo uno di questi
possiamo calcolare il tempo con la formula: numeri 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128.
Facciamo presente che il valore di tcr che ricave-
secondi = (12 x tscr x tcr) : Xtal in Hz remo da questa formula non dovr mai superare il
numero 255 quindi se risultasse maggiore dovre-
ottenendo: mo usare un tscr maggiore, cio 4 - 8 - 16 ecc.
(vedi Tabella N.5).
(12 x 4 x 167) : 8.000.000 = 0,001002 secondi Nel nostro esempio abbiamo scelto per tscr il
numero 2 perch otteniamo un valore minore
che corrispondono a: di 255.
tscr = 2
tcr = 133
BUS per
1 6 20
7 2
3 ST62 / 10 - ST62 / 20 GND GND GND
4 5 5 V. 5 V. 5 V.
19 18 17 16 15 14 13 12 11 10 9 8
12 V. 12 V. 12 V.
A0 A0 A0
A1 A1 A1
A2 A2 A2
A3 A3 A3
A4 A4 A4
A5 A5 A5
A6 A6 A6
A7 A7 A7
B0 B0 B0
B1 B1 B1
B2 B2 B2
B3 B3 B3
B4 B4 B4
B5 B5 B5
B6 B6 B6
B7 B7 B7
27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12
1 9 C4 C4 C4
8 C5 C5 C5
C1 11 7 C6 C6 C6
ST62 / 15 - ST62 / 25 6 C7 C7 C7
3
2
4 5 NMI NMI NMI
XTAL 10 28
P1 C2
C3 C4 CONN. 1 CONN. 2 CONN. 3
Fig.2 Schema elettrico del circuito bus progettato per testare i programmi per i mi-
croprocessori ST6. Anche se nel bus sono presenti due zoccoli, dovrete sempre uti-
lizzarne uno SOLO alla volta, quindi prima di inserire un micro in uno zoccolo dovre-
te togliere quello presente sullaltro zoccolo.
Il bus andr alimentato con lo stadio di alimentazione visibile nelle figg.4-7 cercando
di non invertire i due fili dei 5,6 e 12,6 volt.
Fig.3 Schema pratico di montaggio del bus. Potete sostituire i due comuni zoccoli per
i microprocessori ST6 con i pi comodi, ma costosi textool (vedi fig.1).
T1
14 V. 14 V.
E U
RS1 IC1 12,6 V.
S1
M
C1 C2 DS1 C3 C4
RETE 8 V.
220 V.
E U
RS2 IC2 5,6 V.
M
Massa
C5 C6 DS2 C7 C8
REALIZZAZIONE PRATICA
Con queste tabelle potrete sapere quali bit devono giungere sul piedino 22 dellintegrato
M.5450 (vedi fig.4) per accendere i sette segmenti dei quattro display ed i due diodi led.
CLOCK
PIN 21
START 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 RESET
DATA
PIN 22
LOAD
CLOCK
PIN 21
START 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 RESET
DATA
PIN 22
N. 7 SU DISPLAY 4
Fig.2 Per accendere il numero 7 sul display 4 dovrete far giungere sullintegrato M.5450
questa sequenza di bit seriali. Con i bit 9-10-11 verranno alimentati i soli segmenti A-B-C
del display n.4 (vedi Tabella posta sulla sinistra).
CLOCK
PIN 21
START 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 RESET
DATA
PIN 22
LOAD
N. 7 SU DISPLAY 1
Fig.3 Per accendere il numero 7 sul display 1 dovrete far giungere sullintegrato M.5450
questa sequenza di bit seriali. Con i bit 17-18-19 verranno alimentati i soli segmenti A-B-
C del display n.1 (vedi Tabella posta sulla sinistra).
Vcc
M 5450
Fig.4 Schema a blocchi dellintegrato M.5450 e connessioni dei piedini sullo zoccolo vi-
ste da sopra. Entrando con un segnale seriale nel piedino 22 di questo integrato voi po-
trete accendere i segmenti dei 4 display (vedi fig.6).
Fig.5 Foto della scheda di-
splay notevolmente rimpic-
ciolita per motivi di spazio.
A A A A
DL1
DL2 C1
a b c d e f g dp a b c d e f g dp a b c d e f g dp a b c d e f g dp
2 39 37 35 33 31 29 27 25 24 18 16 14 14 10 8 6 4
40 38 36 34 32 30 28 26 17 15 13 11 9 7 5 3 20
IC1 R1
19
22 21 1 23
D CK C2
R2 R3
C3 P1 C4 P2
CONN. 1 / 2
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI + 5 V. GND + 12 V.
Fig.6 Schema elettrico della scheda display. I segmenti dei display si accendo-
no quando il piedino duscita dellintegrato si porta a livello logico 0.
Fig.7 Schema pratico di montaggio della scheda display siglata LX.1204. Quando inseri-
te i display rivolgete il loro punto decimale verso lintegrato IC1.
Fig.8 Foto ridotta
della scheda rel.
USCITA 1
C C C C
R1 R4 R7 R10
B B B B
R2 E R5 E R8 E R11 E
TR1 TR2 TR3 TR4
C1 P1 C2 P2 C3 P3 C4 P4
B
CONN. 1 / 2
E C A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI GND + 5 V. + 12 V.
BC 547
Fig.9 Schema elettrico della scheda rel siglata LX.1205 e connessioni del transistor
BC.547 viste da sotto. Potrete utilizzare i rel per alimentare motorini o lampade.
Una volta inserito il dischetto nel drive floppy, per Nel dischetto che vi abbiamo preparato, abbiamo
trasferire tutti i suoi files nellHard-Disk dovete scri- incluso un semplice Editor che vi sar molto utile
vere: per visualizzare tutte le righe di ogni programma,
e, se lo desiderate, per modificarle.
C:\>A: poi Enter Potrete usare lo stesso Editor per scrivere nuovi
A:\>INSTALLA poi Enter programmi, ed anche per assemblarli prima di tra-
sferirli nella memoria del microprocessore ST6 tra-
Non usate mai listruzione Copy del Dos o altri co- mite il nostro programmatore siglato LX.1170 pre-
mandi analoghi del PCshell - PCtools - Norton o sentato sulla rivista N.172/173.
il File Manager di Windows, perch il programma
INSTALLA presente nel dischetto provvede a Tutte le istruzioni per utilizzare lEditor sono state
scompattare automaticamente i files inseriti. gi descritte nella rivista N.172/173, in particolare
Dopo aver pigiato Enter apparir la scritta: nellarticolo sul Circuito Test a pag.56, quindi vi
consigliamo di rileggere attentamente questo arti-
Directory C:\ST6 colo.
Fig.10 Schema pratico di montaggio della scheda LX.1205. Potrete modificare il pro-
gramma di base che troverete nel dischetto in modo da adattarlo alle vostre esigenze.
Nelle pagine seguenti ci limiteremo infatti a descri-
vervi le istruzioni pi importanti.
Ora con il tasto funzione F3 potrete richiamare il fi- Se nel programma che avete modificato o riscritto
le DPLPROVA sul quale potrete apportare tutte le non presente nessun errore, dopo pochi secon-
modifiche che riterrete opportune. di comparir sul monitor la scritta:
Premendo il tasto funzione F3, quando siete nel Se avete commesso qualche errore, apparir in
menu principale, appare sul monitor una finestra basso a sinistra sul monitor un numero, che corri-
con lintero elenco dei programmi. sponde alla riga in cui c un errore.
Premendo prima il tasto TAB e poi i tasti freccia Dovrete allora riaprire il file ed andare sulla riga
potrete portare il cursore sui nomi dei programmi. che vi stata segnalata per scoprire quale errore
Quando il cursore si trova sul programma che vo- avete commesso.
lete modificare, premete Enter ed apparir il lista- Terminata la correzione, dovrete nuovamente sal-
to completo del programma selezionato. vare il programma premendo il tasto F2, dopodi-
ch potrete ripetere i comandi gi descritti per as-
Per cancellare una sola parola semblare il vostro programma.
pigiate i tasti CTRL+T.
Subito abbiamo pensato che avessero acquistato Importante = Se il vostro programmatore funzio-
dei microprocessori ST6 difettosi gi allorigine. na correttamente non necessario che inseriate
Per risolvere tale problema ci siamo fatti inviare questo condensatore, comunque se qualche volta
questi ST6 insieme al programmatore per con- vi capita di non riuscire a programmare un ST6,
trollare entrambi in laboratorio. provate a collocare questo condensatore da 470
Appena arrivati, li abbiamo provati su 8 diversi com- pF tra la R7 e la massa ed il difetto sparir.
puter e tutti gli ST6 che ci sono stati inviati si sono Come potete constatare, quando ci imbattiamo in
regolarmente programmati, senza errori. qualche anomalia, facciamo tutto il possibile per
Rispediti i programmatori a questi lettori, tutti e 16 eliminarla, ma se i due lettori di Ravenna e Ferra-
ci hanno risposto che appariva nuovamente il me- ra non ci avessero portato il loro computer, forse
desimo errore. questo caso sarebbe rientrato negli insoluti, per-
Se non ci chiamassimo Nuova Elettronica, a que- ch nessuno poteva supporre che il segnale che
sto punto avremmo abbandonato questi 16 lettori usciva dalla loro presa parallela fosse fuori stan-
con i loro ST6 difettosi, ma per seriet ed anche dard.
Fig.1 Se constatate che il vo-
stro programmatore LX.1170
non sempre riesce a pro-
grammare un ST6, potrete ri-
solvere questo problema col-
legando tra il piedino 1 dellin-
tegrato IC1-E e la massa dello
stampato, un condensatore
da 470 picoFarad.
6 2 19 6
23
R7 14 ST 62 / 10 - 20
D2 1 2
4 7 3 18 22
470 pF
IC1 - A 8 4 17 21
R5 IC1 - E
D4 5 6
6 9 5 16 20
IC1 -C
10 11 10 6 15 19
BUSY
11 11 7 14 18
12 13
12 8 13 17
D3
R6 3 4
IC1 - D
5 13 9 12 16
IC1 - B IC1 - F 14 10 11 15
D5 R8
9 8
7
7
Fig.2 Questo condensatore, collegato dopo la resistenza R7, serve per allargare quegli
impulsi che giungono troppo stretti sullingresso dellinverter IC1-E.
A pag.124 della rivista N.175/176 abbiamo riporta- no dovute aggiungere delle altre righe di program-
to il programma N.15 che consente di accendere 5 ma e poich le istruzioni JRC - JRNC - JRZ - JRNZ
diodi led variando la tensione dingresso da 1 a 5 possono fare solo dei salti limitati ad un certo nu-
volt. mero di righe, se queste sono maggiori del richie-
Molti lettori sulla base di questo esempio hanno u- sto appare il messaggio di errore menzionato.
tilizzato i micro ST62E15 o ST62E25, poi hanno In presenza di salti molto lunghi necessario mo-
cercato di modificare il programma per far accen- dificare listruzione presente con quella inversa,
dere 8 diodi led e quando sono andati ad assem- poi scrivere nella riga successiva listruzione JP
blarlo, il computer ha segnalato questo errore: che in grado di fare un salto in qualsiasi punto
del programma anche se molto distante.
5-bit displacement overlow
Le istruzioni andranno quindi modificate:
Con tale indicazione il microprocessore segnala
che non pu fare un salto alletichetta richiesta
perch sono troppe le righe che lo separano da es- da JRC a JRNC
sa. da JRNC a JRC
Nel nostro esempio avevamo usato soltanto 5 dio- da JRZ a JRNZ
di led, quindi utilizzando degli altri diodi led si so- da JRNZ a JRZ
PROGRAMMA A/D
LDI pdir_b,00000000B ; nelle prime cinque righe
LDI popt_b,00000000B ; abbiamo settato il piedino B7
LDI port_b,00000000B ; come ingresso analogico
LDI port_b,10000000B ;
LDI popt_b,10000000B ;
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
AD1 JRR 6,adcr,AD1 ; attendere che avvenga la conversione A/D
LD a,ADDR ; copia in A il valore dellA/D
LD VOLT1,a ; copia in VOLT1 il valore di a
LDI pdir_b,00000000B ; nelle prime cinque righe
LDI popt_b,00000000B ; abbiamo settato il piedino B6
LDI port_b,00000000B ; come ingresso analogico
LDI port_b,01000000B ;
LDI popt_b,01000000B ;
LDI adcr, 00110000B ; provvedi a convertire da analogico a digitale
AD2 JRR 6,adcr,AD2 ; attendere che avvenga la conversione A/D
LD a,ADDR ; copia in A il valore dellA/D
LD VOLT2,a ; copia in VOLT2 il valore di a
LDI pdir_b,00000000B ; nelle prime cinque righe
LDI popt_b,00000000B ; abbiamo settato il piedino B5
LDI port_b,00000000B ; come ingresso analogico
LDI port_b,00100000B ;
LDI popt_b,00100000B ;
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
JRR 6,adcr,AD3 ; attendere che avvenga la conversione A/D
LD a,ADDR ; copia in A il valore dellA/D
LD VOLT3,a ; copia in VOLT3 il valore di a
Se avete gi acquistato il kit per testare gli ST6 si- I tre programmi CONTA-LED-LOTTO che sono as-
glato LX.1202 e le due schede, una con quattro di- semblati in .HEX sono gi pronti per essere cari-
splay siglata LX.1204 e laltra con quattro rel si- cati allinterno della memoria dellST6.
glata LX.1205 pubblicate nella rivista N.179, avre- Tutti gli altri programmi che terminano con .ASM li
te ricevuto anche un dischetto con codice potrete tranquillamente modificare, ampliare e, co-
DF.1202/3 = DF.1170/3 contenente diversi pro- me gi accennato, prima di passarli nella memoria
grammi formato .ASM che, caricati nellhard-disk, di un ST6 li dovrete assemblare per convertirli in
vi serviranno per gestire le due schede sperimen- files .HEX.
tali apparse nella rivista N.179 e quella che appa-
re su questo numero con quattro triac siglata Le modifiche in questi programmi sono sempre ne-
LX.1206. cessarie per adattarli alle vostre esigenze. Ad e-
Prossimamente vi forniremo altre due schede per sempio, noi abbiamo predisposto i programmi TI-
display LCD alfanumerici ed altri nuovi program- MER.ASM e TEMPOR.ASM per eccitare un rel o
mi. un Triac in un tempo di 3 minuti sia contando allin-
Anche se lo abbiamo gi precisato negli articoli pre- dietro (TEMPOR.ASM) che in avanti (TIMER.ASM)
cedenti, vi ricordiamo che i programmi .ASM li po- e poich questo tempo non vi servir per nessuna
trete trasferire singolarmente nella memoria di un delle vostre applicazioni, baster leggere allinter-
microprocessore ST6 solo dopo averli assembla- no del programma i vari commenti per sapere qua-
ti, cio convertiti in files formato .HEX. le riga dovrete correggere e quale numero inse-
IL SORGENTE STANDARD.ASM
Fig.3 Portate il cursore sulla riga SAVE as
... poi premete Enter. Per duplicare questo Ritenevamo di aver spiegato abbastanza bene a
file con un nome diverso ripremete i due cosa serva il file STANDARD.ASM, ma leggendo
tasti ALT F e, in tal modo, vi apparir la fi- i quesiti che ci sono pervenuti in proposito abbia-
nestra di fig.4. mo capito di non essere stati sufficientemente e-
saurienti.
Per riparare, ve lo rispiegheremo proponendovi an-
che qualche esempio.
Quando si scrive un programma, occorre sempre
iniziare con dei dati ripetitivi che non varino mai
da un programma ad un altro, quindi per non ri-
scriverli ogni volta con il rischio di commettere de-
gli errori, ve li ritroverete gi tutti impostati nel pro-
gramma STANDARD.ASM con una nota relativa
a cosa dovrete modificare.
Ad esempio, quando arriverete al paragrafo SET-
TAGGIO INIZIALE, subito dopo INIZIO PRO-
GRAMMA troverete tra le prime righe listruzione:
.org 0880h
Fig.4 Per cambiare il nome del file STAN-
Se usate un micro da 2K di memoria, cio un DARD.ASM con ALIBABA dovrete scrivere
ST62E10 - ST62T10 - ST62E15 - ST62T15, non C:\ST6\ALIBABA.ASM e poi premere ALT
dovrete modificare questo numero. F3. Se desiderate cambiare il listato del file
TIMER dovrete scrivere C:\ST6\TIMER.ASM.
Se usate un micro da 4K, cio un ST62E20 -
ST62T20 - ST62E25 - ST62T25, dovrete invece
modificare questo numero come segue:
.org 080h
C:\ST6>
ENTRATA
TENSIONE
ALTERNATA
TRC1 A2
TRC2 A2
TRC3 A2
TRC4 A2
R1 R3 R5 R7
C1 G C2 G C3 G C4 G
A1 A1 A1 A1
6 5 4
R2 R4 R6 R8
6 4 6 4 6 4 6 4
C5 P1 C6 P2 C7 P3 C8 P4
BT 137
CONN. 1 / 2
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI GND + 5 V. + 12 V.
Fig.7 Schema elettrico della scheda Triac siglata LX.1206 e connessioni del fototriac vi-
sto da sopra e del triac BT.137. Sulle uscite dei Triac dovrete collegare delle lampadi-
ne o altre apparecchiature elettriche che funzionino con il valore della tensione alternata
che applicherete sulla morsettiera dingresso (vedi fig.8).
volte che eseguirete una variazione o farete unag- Se, in sostituzione di questa scritta, vi apparir un
giunta nel programma, diversamente queste non numero in basso a sinistra sul monitor, significa
verranno memorizzate. che nella riga del programma che avete modifica-
Una volta memorizzato, lo dovrete anche assem- to o variato avete commesso un errore, ad esem-
blare premendo i tasti: pio avete scritto lp anzich ld.
ALT T poi il tasto A (vedi fig.6) Un errore che molti commettono quello di cari-
care direttamente nel registro Y il contenuto del
Se non avrete commesso degli errori nello scrive- registro X scrivendo:
re unistruzione, sul monitor vi apparir la scritta:
***success*** ld y,x
Per caricare il contenuto del registro X nel registro REALIZZAZIONE PRATICA
Y dovrete prima caricare il registro X nellaccumu-
latore A, poi caricare su questo il registro Y, quin- Sul circuito stampato siglato LX.1206 dovrete mon-
di questa istruzione andr scritta su due righe: tare tutti i componenti visibili in fig.8.
Per il montaggio vi consigliamo di saldare sul la-
ld a,x to opposto di questo stampato il connettore ma-
ld y,a schio a 1 fila provvisto di 24 terminali (vedi
CONN 1-2) e vicino alle due morsettiere Uscita 1
e Uscita 4 i due connettori a 1 fila provvisti di so-
Tutti i files una volta assemblati diventeranno dei li 4 terminali, che vi serviranno per innestare i
.HEX, cio convertiti in esadecimale, perch que- connettori femmina presenti sulla scheda bus
sto il solo linguaggio che il microprocessore in siglata LX.1202.
grado di interpretare. Nella parte di stampato visibile in fig.8 inserirete i
Vi ricordiamo che i files .HEX non potranno pi es- quattro zoccoli per i fotoaccoppiatori, tutte le re-
sere modificati. sistenze, poi condensatori e le 5 morsettiere a
due poli.
Proseguendo nel montaggio, inserirete i 4 Triac si-
SCHEMA ELETTRICO glati TRC1-TRC2-TRC3-TRC4, rivolgendo la parte
metallica del loro corpo verso destra come visibi-
Lo schema elettrico di questa scheda per Triac le nello schema pratico di fig.8.
visibile in fig.7.
In teoria, potevamo sfruttare tutte le porte A-B-C Completata questa operazione, potrete inserire ne-
del microprocessore ST6 come uscite ed in tal mo- gli zoccoli i quattro fotoaccoppiatori rivolgendo
do potevamo inserire in questa scheda ben 20 verso sinistra il lato del loro corpo provvisto del
Triac con il micro da 28 piedini e 12 Triac con il piccolo foro di riferimento.
micro da 20 piedini.
Fig.9 Foto della scheda LX.1206 come si presenter a montaggio ultimato. Questa sche-
da andr posta sul Bus siglato LX.1202 (vedi fig.10) assieme al microprocessore ST6 che
avrete gi programmato con uno dei programmi necessari per gestirlo. Consigliamo di ri-
leggere le riviste N.172/173 - 174 - N.175/176 - N.179 per sapere come si deve procede-
re per memorizzare un micro e per settare tutte le PORTE.
INSTALLAZIONE programmi nellHARD-DISK Per copiare il dischetto relativo allST6 nellHard-
Disk di un computer dovrete procedere come se-
Riportiamo in forma condensata quanto gi scritto gue:
nelle riviste numero 172/173 - 174 - 175/176 - 179,
perch ad alcuni lettori potrebbe essere sfuggito u- 1 - Uscite da qualsiasi programma tipo Windows
no o pi di questi numeri in cui sono apparsi i se- - Pcshell - Norton, ecc.
guenti articoli:
2 - Quando sul monitor apparir il prompt C:\>, in-
Programmatore per micro ST6 serite nel drive floppy A il dischetto contenente i
Circuito test per microprocessore ST62E10 programmi, poi digitate:
Impariamo a programmare i micro ST6
Lampada per cancellare Eprom C:\>A: poi premete il tasto Enter
Impariamo a programmare i micro ST6
Bus per testare i micro ST6 e vi apparir A:\>
Scheda test per Rel
Scheda test per display A questo punto potrete scrivere:
Facciamo presente che sono ancora reperibili pres- A:\>installa poi premete Enter
so la nostra Sede alcune centinaia di copie delle
riviste sopra elencate, quindi chi ne fosse sprovvi- Subito vi apparir sul monitor la richiesta su quale
sto e volesse avere la serie completa di articoli i- directory volete installare il contenuto del disco.
nerenti il microprocessore ST6, potr richieder- La directory da noi predefinita ST6, quindi se di-
cele fino al loro esaurimento. giterete Enter (vedi fig.11) il programma creer u-
C:\ST6
C:\>CD ST6 poi premete Enter LX.1170 = Questo kit, pubblicato nella rivista
N.172/173, serve per trasferire i programmi che ab-
Quando vi apparir C:\ST6>, scrivete: biamo assemblato e convertito da .ASM in .HEX
dallHard-disk del computer alla memoria di un ST6
C:\ST6>installa poi premete Enter vergine. Questo kit va collegato alla presa uscita
parallela del computer.
Non appena premerete il tasto Enter, sul monitor
vi apparir la scritta che questa directory esiste
LX.1202 = Questo kit, pubblicato nella rivista
gi, ma di ci non preoccupatevi e premete nuo-
N.179, serve per ricevere tutte le schede speri-
vamente Enter e quando vi sar chiesta la con-
mentali che abbiamo gi pubblicato e quelle che
ferma premete per una seconda volta il tasto En-
pubblicheremo in seguito. Questa scheda, che non
ter.
va collegata al computer, andr alimentata con il
kit LX.1203.
Subito vedrete sul monitor tutti i nomi dei files che,
abbastanza velocemente, si stanno scompattan-
do (vedi fig.12). LX.1203 = Questo kit, pubblicato nella rivista
N.179, serve per alimentare la scheda LX.1202 e
tutte le schede sperimentali che inserirete in que-
sta stessa scheda.
12:34 RELE.HEX
02:59 - 02:58 - 02:57 ecc. loop3 set 4,port_b ; 262 accende RL1
Quando apparir il numero 00:00, si ecciter il so- sostituendo dopo il set il numero 4 con il numero
lo rel 1 presente nella scheda LX.1205 oppure il 5 come qui sotto riportato:
solo triac 1 presente nella scheda LX.1206.
Per ricominciare il ciclo baster premere il pulsan- loop3 set 5,port_b ; 262 eccita RL2
te P1 presente sulla scheda bus LX.1202.
Tutti i pulsanti presenti sulla scheda del rel o del Se volete eccitare il rel RL3, dovrete sostituire il
triac non risultano attivati. numero 4 con il numero 6:
PER cambiare i TEMPI Se volete eccitare il rel RL4 dovete sostituire il nu-
mero 4 con il numero 7:
Per cambiare il tempo da noi prefissato 03:00 ba-
ster modificare i valori impostati sulle righe 239 e loop3 set 7,port_b ; 262 eccita RL4
240 nel listato del programma TEMPOR.ASM.
Come tempo massimo potrete partire da 99 mi-
nuti e 59 secondi. Se volete eccitare contemporaneamente tutti e 4 i
Attualmente sulla riga 240 che la riga dei minu- rel, dovrete aggiungere tutte queste righe:
ti troverete riportato il numero 3:
loop3 set 4,port_b ; 262 eccita RL1
ldi minuti,3 ; 240 carica 3 minuti set 5,port_b ; 262.1 eccita RL2
set 6,port_b ; 262.2 eccita RL3
quindi se volete partire da 12 minuti baster sem- set 7,port_b ;262.3 eccita RL4
In pratica, se vi interessa eccitare i soli rel RL1, Attualmente sulla riga 248, che la riga dei se-
RL3 ed RL4 dovrete scrivere queste tre righe: condi, troverete riportato il numero 0:
loop3 set 4, port_b ; 262 eccita RL1 cpi a,0 ; 248 compara con zero
set 6, port_b ; 262.1 eccita RL3
set 7, port_b ; 262.2 eccita RL4
e nella riga 252, che quella dei minuti, trovere-
te riportato:
Vi ricordiamo che tutte le volte che modificherete
un programma, lo dovrete salvare digitando il ta-
cpi a,3 ; 252 compara con 3
sto F2, poi lo dovrete riassemblare premendo i ta-
sti ALT T, poi il tasto A, dopodich lo potrete tra-
sferire nella memoria di un ST6. Se volete ad esempio eccitare il rel RL1 dopo 15
secondi dallaccensione, baster inserire nella ri-
ga 248:
Questo programma un semplice temporizzato- ed inserire il numero 0 nella riga 252 dei minuti:
re con conteggio in avanti.
Nel bus LX.1202 dovrete inserire oltre alla scheda
cpi a,0 ; 252 compara con 0 minuti
display siglata LX.1204, anche la scheda rel si-
glata LX.1205, oppure la scheda triac siglata
LX.1206. Con queste modifiche, quando sul display apparir
Una volta caricato su un micro ST6 vergine il pro- il numero 00:15 il rel RL1 si ecciter.
gramma TIMER.HEX ed inserito nello zoccolo pre- Se volete far eccitare il rel dopo 30 minuti e
sente sulla scheda bus LX.1202, non appena ali- 5 secondi baster inserire il numero 5 nella ri-
menterete il circuito, tutti i rel o i triac risulteran- ga 248:
no diseccitati e sui 4 display vedrete apparire il
numero: cpi a,5 ; 248 compara con 5 secondi
Immediatamente, partendo da questo numero, il cpi a,30 ; 252 compara con 30 minuti
conteggio inizier a contare in avanti con una ca-
denza di un secondo, quindi sui display vedrete i
numeri salire: Con queste modifiche, quando sul display apparir
il numero 30:05 il rel RL1 si ecciter.
00:01 - 00:02 - 00:03 ecc.
Nota = Anche se nella riga 256 troverete riportato:
e quando raggiungerete il numero 03:00, corri-
spondente a 3 minuti e 00 secondi, subito si ec- Idi ore,0 ; 256 carica 0 ore
citer il rel 1 presente nella scheda LX.1205 op-
pure il solo triac 1 presente nella scheda LX.1206.
questo parametro ore non viene utilizzato, per-
Per ricominciare il ciclo baster premere il pulsan-
tanto non dovrete mai modificare questa istru-
te P1 presente sulla scheda bus LX.1202.
zione.
Tutti i pulsanti presenti sulla scheda dei rel o dei
triac non risultano attivati.
Se in sostituzione del rel 1 volete eccitare un al-
tro rel, ad esempio il rel 2, o un corrispondente
triac, dovrete modificare la riga 259:
PER cambiare i TEMPI
loop3 set 4,port_b ; 259 eccita RL1
loop3 set 4,port_b ; 259 eccita RL1 Come noterete, dopo la dicitura port_b ci sono ot-
set 5,port_b ; 259.1 eccita RL2 to numeri, ma quelli che dovrete modificare sono
set 6,port_b ; 259.2 eccita RL3 solo i primi quattro, cio 1000 - 0100 - 0010 - 0001.
set 7,port_b ; 259.3 eccita RL4 Se nella riga 88 sostituirete i quattro 0000 con 1111,
tutti i quattro triac si ecciteranno anzich disecci-
Se vi interessa eccitare i soli rel RL1, RL3 ed RL4, tarsi.
dovrete scrivere queste tre righe: Per far lampeggiare per una infinit di volte il so-
lo TRC4, dovrete scrivere in tutte le righe 74-76-
loop3 set 4,port_b ; 259 eccita RL1 78-80-82-84-86 solo 1000.
set 6,port_b ; 259.1 eccita RL3 Per accendere contemporaneamente TRC4-TRC3
set 7,port_b ; 259.2 eccita RL4 dovrete scrivere nelle righe 74-76 il numero 1100.
Per farvi capire come modificare tutti questi nume- Avendo utilizzato solo 7 cicli degli 8 disponibili, se
ri vi faremo un semplice esempio. lultimo non vi interessa lo potrete cancellare op-
Ammesso che alle 06,10 desideriate eccitare i rel pure inibire, mettendo davanti alle righe 358 - 359
RL2-RL1, scriverete nelle righe 309 - 310 - 311 (1 - 360 un punto e virgola o mettendo sulla terza ri-
ciclo) questi numeri: ga 000000b.
Potrete aggiungere altri cicli se 8 risultassero in-
.byte 06 ; 309 riga delle ore sufficienti.
.byte 10 ; 310 riga dei minuti
.byte 00110000b ; 311 riga per comando rel Facciamo presente che questi cicli si ripeteranno
automaticamente allinfinito agli stessi orari tutti i
Se alle 09,30 vorrete diseccitare ed eccitare il so- giorni.
lo rel RL4, dovrete scrivere nelle righe 316 - 317
- 318 (2 ciclo) questi numeri:
Se alle 22,30 vorrete diseccitare i rel RL4-RL3, Nota = Il pulsante P2 di reset sar attivo solamente
dovrete scrivere nelle righe 337 - 338- 339 (5 ci- se avrete fermato il conteggio con P1. Se preme-
clo) questi numeri: rete P2 mentre attivo il conteggio, questo non si
azzerer.
.byte 22 ; 337 riga delle ore I pulsanti presenti sulle schede Triac e Rel non ri-
.byte 30 ; 338 riga dei minuti sultano attivati.
.byte 00110000b ; 339 riga per comando rel Il conteggio del display arriva ad un massimo di 89
minuti e 59 secondi.
Se alle 23,40 vorrete lasciare eccitato il solo rel
RL1, dovrete scrivere nelle righe 344 - 345 - 346 Il programma TIME90.ASM, come potrete notare,
(6 ciclo) questi numeri: dispone di 4 cicli perch quattro sono i rel e i
triac presenti sulle schede sperimentali.
.byte 23 ; 344 riga delle ore
.byte 40 ; 345 riga dei minuti 1 ciclo = Dopo 20 secondi dallaccensione si ec-
.byte 00010000b ;346 riga per comando rel citer il solo rel RL1.
Ovviamente sui display vedrete apparire 19 e, Nelle righe 292/293 - 298/299 - 304/305 - 310/311
quando questo numero raggiunger 00:00, il rel sono riportate le sigle dei rel che volete eccitare
si ecciter. e di quelli che volete rimangano diseccitati.
Guardando lesempio riportato nel programma
2 ciclo = Passando al secondo ciclo, questo rel CLOCK.ASM saprete gi che scrivendo questa i-
rimarr eccitato per un tempo da noi prefissato in struzione:
1 minuto e 30 secondi e raggiunto questo tempo
il rel RL1 si disecciter e automaticamente si ec- Idi port_b,11110011b
citer il rel RL2.
Il rel RL2 si ecciter un secondo dopo che sui di- potrete eccitare ad ogni ciclo anche pi rel a vo-
splay sar apparso il numero 01:29 che cambier stra scelta.
in 00:00. Nei primi quattro numeri di sinistra (vedi 1111) do-
vrete mettere un 1 sul rel che volete far eccitare
3 ciclo = Dopo 47 secondi, cio quando sul di- ed uno 0 se non lo volete eccitare.
splay il numero 46 passer sullo 00, il rel RL2 si
disecciter e si ecciter il terzo rel RL3.
Se volete che il 3 ciclo abbia una durata di 15 mi- Nota = Il pulsante P2 di reset sar attivo solamente
nuti e 20 secondi, dovrete inserire nelle sue righe se avrete fermato il conteggio con P1. Se preme-
questi numeri: rete P2 mentre attivo il conteggio, questo non si
azzerer. Premendo P2 per resettarlo, intuitivo
Idi stsex,20 ; 301 secondi per RL1 che contando allindietro sul display ritorni il tem-
Idi stmix,15 ; 302 minuti per RL1 po di partenza, cio 00:20.
Se volete che il 4 ciclo abbia una durata di 2 mi- Nei 4 cicli impostati otterrete queste condizioni:
nuti e 10 secondi, dovrete inserire nelle sue righe
questi numeri: 1 ciclo = Allaccensione si ecciter il solo rel RL1
e sui display apparir 00:20 e a questo punto avr
Idi stsex,10 ; 307 secondi per RL1 inizio il conteggio alla rovescia che si fermer sul-
Idi stmix,2 ;308 minuti per RL1 lo 00:00.
2 ciclo = Dopo un secondo si ecciter il rel RL2 sono riportate le sigle dei rel che si ecciteranno
e a questo punto inizier il secondo ciclo, che far e di quelli che si disecciteranno.
apparire sui display 01:30 (tempo 1 minuto e 30 Anche in questo programma possiamo sostituire le
secondi) che, secondo per secondo, decremen- righe sopra menzionate con questa sola riga di-
ter fino ad arrivare a 00:00. struzione:
minimo 32 piedini duscita, infatti oltre ai 7 seg- 0) e due impulsi, uno di Load (bit 35) ed uno di Re-
menti presenti su ogni display per un totale di 4 x set (bit 36)(vedi fig.2).
7 = 28 terminali, essendo presente su ognuno di A questo punto potremo assegnare ciascuno di
questi il punto decimale, dovremo aggiungere al- questi 34 bit ad un singolo segmento presente in
tri 4 terminali e, in tal modo, otterremo un totale di ogni display come visibile in fig.2 e come riportato
32 piedini. nella Tabella N.1).
Come gi saprete, per accendere uno o pi seg-
Se in questi 4 display volessimo accendere il nu-
menti baster alimentarli con una tensione che po-
mero 1 0 3 2 tramite il programma software, do-
tremo prelevare da una normale pila.
vremmo portare a livello logico 1 tutti i bit corri-
Per pilotare 4 display esistono degli integrati prov-
spondenti ai segmenti che desideriamo accendere.
visti di 34 piedini duscita necessari per accende-
re tutti i vari segmenti. Sul display N.1, dovendo accendere i segmenti B-
Per lingresso troviamo invece solo 3 piedini per- C, dovremo portare a livello logico 1 i bit 2-3.
ch questi lavorano in modo seriale. Sul display N.2, dovendo accendere i segmenti A-
Questi 3 piedini dingresso sono chiamati: B-C-D-E-F, dovremo portare a livello logico 1 i bit
9-10-11-12-13-14.
Enable Sul display N.3, dovendo accendere i segmenti A-
Data B-C-D-G, dovremo portare a livello logico 1 i bit
Clock 17-18-19-20-23.
Sul display N.4, dovendo accendere i segmenti A-
Nellintegrato driver tipo M.5450 in grado di pilo- B-G-E-D, dovremo portare a livello logico 1 i bit
tare 4 display a 7 segmenti: 25-26-31-29-28 (vedi fig.3).
LCD pilotata con un ST6
TABELLA N.1
BIT segmento piedino BIT segmento piedino
comando DISPLAY 1 INTEGRATO comando DISPLAY 3 INTEGRATO
1 A 18 17 A 2
2 B 17 18 B 40
3 C 16 19 C 39
4 D 15 20 D 38
5 E 14 21 E 37
6 F 13 22 F 36
7 G 12 23 G 35
8 punto 11 24 punto 34
Vcc
1
USCITE PER DISPLAY 34
GND 1 40 BIT 18 = B1
20 BIT 17 = A1 2 39 BIT 19 = C1
BIT 16 = DP4 3 38 BIT 20 = D1
BIT 15 = G4 4 37 BIT 21 = E1
LUMIN. 19 BIT 14 = F4 5 36 BIT 22 = F1
34 OUTPUT BUFFER BIT 13 = E4 6 35 BIT 23 = G1
BIT 12 = D4 7 34 BIT 24 = DP1
BIT 11 = C4 8 33 BIT 25 = A2
BIT 10 = B4 9 32 BIT 26 = B2
BIT 9 = A4 10 31 BIT 27 = C2
LOAD
34 LATCHES BIT 8 = DP3 11 30 BIT 28 = D2
BIT 7 = G3 12 29 BIT 29 = E2
ENABLE 23 BIT 6 = F3 13 28 BIT 30 = F2
BIT 5 = E3 14 27 BIT 31 = G2
DATA 22 BIT 4 = D3 15 26 BIT 32 = DP2
34 BIT SHIFT REGISTER BIT 3 = C3 16 25 BIT 33 = DL1
BIT 2 = B3 17 24 BIT 34 = DL2
BIT 1 = A3 18 23 ENABLE
CLOCK 21
LUMIN. 19 22 DATA
RESET + Vcc 20 21 CLOCK
1
M 5450
Fig.1 Per pilotare 4 display a 7 segmenti occorre un integrato drive tipo M.5450 o altri equiva-
lenti. Dei tre piedini dingresso, quello indicato Enable viene collegato a massa, e quelli indica-
ti Data e Clock vengono utilizzati per ricevere i dati seriali e i segnali di sincronismo.
DISPLAY 1 DISPLAY 2 DISPLAY 3 DISPLAY 4 LED
a a a a
f g b f g b f g b f g b
e c e c e c e c
d d d d
dp dp dp dp
CLOCK
PIN 21
START 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 RESET
DATA
PIN 22
LOAD
BIT
Fig.2 Poich per ogni display sono necessari 8 bit (uno serve per il punto decimale - ve-
di Tabella N.1), lintegrato drive M.5450 convertir i dati seriali applicati sugli ingressi in
dati paralleli a 34 bit. Oltre a questi 34 bit lintegrato invia in uscita un bit di Start, uno di
Load (carica dati) ed uno di Reset.
f g b f g b f g b f g b
e c e c e c e c
d d d d
dp dp dp dp
CLOCK
PIN 21
START 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 RESET
DATA
PIN 22
LOAD
BIT
Fig.3 Per accendere il numero 1032, sul primo display dovremo portare a livello logico
1 i bit 2-3, sul secondo display i bit 9-10-11-12-13-14, sul terzo display i bit 17-18-19-20-23
e sullultimo display i bit 25-26-28-29-31. Non confondete il livello logico del bit con quel-
lo che apparir sul piedino duscita che risulta invertito.
Vcc 1 40 CLOCK
40 STROBE 2 39 BIT 25 = A4
BIT 32 = DP4 3 38 BIT 26 = B4
BACK/ P
BIT 7 = G1 4 37 BIT 27 = C4
1 32 BIT 6 = F1 5 36 GND
Vcc BIT 5 = E1 6 35 D OUT
BIT 4 = D1 7 34 DATA
BIT 3 = C1 8 33 BIT 28 = D4
BIT 2 = B1 9 32 BIT 29 = E4
BIT 1 = A1 10 31 OSC.
31 BIT 8 = DP1 11 30 BACK/P
LCD 1 BIT 15 = G2
OSCIL.
32 OUTPUT BUFFER 12 29 BIT 30 = F4
BIT 14 = F2 13 28 BIT 31 = G4
BIT 13 = E2 14 27 BIT 24 = DP3
BIT 12 = D2 15 26 BIT 17 = A3
BIT 11 = C2 16 25 BIT 18 = B3
32 LATCHES BIT 10 = B2 17 24 BIT 19 = C3
BIT 9 = A2 18 23 BIT 20 = D3
STROBE 2 BIT 16 = DP2 19 22 BIT 21 = E3
BIT 23 = G3 20 21 BIT 22 = F3
DATA 34
32 BIT SHIFT REGISTER
M 8438
CLOCK 40
36
Fig.5 Per pilotare 4 display LCD occorre un integrato drive tipo M.8438 o altri equivalen-
ti. Dei tre piedini dingresso, quello indicato Strobe si porta a livello logico 1 quando de-
ve caricare i dati, quelli indicati Data e Clock vengono utilizzati per ricevere i dati seriali
e i segnali di sincronismo. Il display LCD viene alimentato direttamente dallintegrato
M.8438 tramite il piedino Back/Plane.
f g b f g b f g b f g b
e c e c e c e c
d d d d
dp 1 dp 2 dp 3 dp 4
STROBE
PIN 2
CLOCK
PIN 40
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
DATA
PIN 34
BIT
Fig.6 Ogni bit corrisponde ad un singolo segmento di ogni display (vedi Tabella N.2) e
per agevolarvi abbiamo riportato su ogni piedino dellintegrato M.8438 (vedi fig.5) sia il
numero del bit sia quale segmento si accender sui display 1-2-3-4.
vremo controllare a quali piedini fanno capo i seg-
menti A-B-C-D-E-F-G del primo, del secondo, del
terzo e del quarto display, per collegarli in ordine
BACK / PLANE
ai piedini duscita dellintegrato drive.
SCHEMA ELETTRICO
A SPENTO
Dopo avervi spiegato la differenza che esiste tra
un display a 7 segmenti a led ed uno a LCD pos-
siamo passare a presentarvi lo schema elettrico. B ACCESO
Guardando la fig.9 possibile notare che dal con-
nettore siglato CONN. 1/2 preleviamo:
C ACCESO
piedino 2 di IC1.
- dal piedino +5V la tensione di alimentazione per F SPENTO
lintegrato.
BACK/P F1 B1 F2 B2 G3 A3 G4 A4
G1 A1 G2 A2 DP4 F3 B3 F4 LC 513040 o S 5126
LC 513040 o S 5126
1 2 3 4
A
RIF. DP4
F B
DP1 DP2 DP3 G
E C
E1 C1 E2 C2 E3 C3 E4 C4
BACK/P D1 DP1 D2 DP2 D3 DP3 D4 B4 D DP
Fig.8 Connessioni del display LCD. Su ogni terminale abbiamo riportato la lettera dei set-
te segmenti A-B-C ecc. seguita dai numeri del display cio 1-2-3-4. La tacca di riferimen-
to costituita da una goccia di vetro o dal segno > posto da un lato del corpo.
LCD
40
BACK / PLANE
35 34 7 6 5 36 37 8 30 29 11 10 9 31 32 12 25 24 15 14 13 26 27 16 21 20 19 18 17 22 23 28
10 8 6 4 11 18 16 14 12 19 26 24 22 20 27 39 37 32 28 3 OSCILLATORE
30 9 7 5 17 15 13 25 23 21 38 33 29 31
1
IC1 C2
C1
36 34 40 2
STROBE
CLOCK
DATA
R1 R2
C3 P1 C4 P2
CONN. 1 / 2
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI + 5 V. GND + 12 V.
PROGRAMMI
Per far funzionare questa scheda display LCD ab- Fig.14 Nel nuovo dischetto LX1207 non tro-
biamo preparato 5 programmi che troverete inse- verete nessuno dei vecchi programmi (ve-
riti in un dischetto floppy da 3 pollici siglato di foto), ma i soli programmi da utilizzare
DF1207.3. per questa scheda con display LCD.
Una volta in possesso del dischetto, per caricarlo
nellHard-Disk dovrete procedere come di seguito
spiegato.
In questo modo vedrete via via comparire sul mo- Premendo Enter rientrerete nel programma LCD-
nitor i nomi dei files che si stanno scompattando. CLOCK.
Per uscire dovrete premere ALT+F3.
Vedrete nuovamente la maschera dellEditor e a
questo punto premendo i tasti:
CONVERTIRE i files .ASM in .HEX
ALT+F poi F3 poi Enter
Prima di trasferire un file nella memoria di un ST6
occorre, come abbiamo precisato nei precedenti apparir nuovamente la maschera di tutti i files con
numeri, assemblarlo in modo da ottenere un se- estensione .ASM.
condo ed identico file, ma con lestensione .HEX. Nella riga in alto dovrete sostituire la scritta .ASM
Se tenterete di trasferire un file .ASM nella memo- con la scritta .HEX poi premere Enter.
ria del micro vi verr segnalato error. In questo modo apparir lelenco dei files conver-
Il micro da usare per i display LCD deve necessa- titi in .HEX, e poich stato convertito il solo file
riamente avere 28 piedini, quindi potrete adopera- LCDCLOCK comparir:
re un ST62.E25 se volete riprogrammarlo e cancel-
larlo pi volte, oppure un ST62.T15 o un ST62.T25 LCDCLOCK.HEX
che come sapete non sono cancellabili.
Anche se nei precedenti articoli vi abbiamo spie- Vi ricordiamo che per modificare le righe di un pro-
gato come procedere per trasformare un file .ASM gramma dovrete sempre lavorare nellestensione
in un file .HEX, lo ripeteremo nuovamente. .ASM. Dopo aver fatto le modifiche le dovrete sal-
vare premendo il tasto F2, poi dovrete assembla-
Quando sul monitor appare C:\LX1207> dovete re il programma per convertirlo in un file .HEX co-
scrivere: me pocanzi vi abbiamo spiegato.
I 5 programmi che abbiamo inserito in questo di- inserire nel bus LX.1202 la sola scheda dei display
schetto hanno le stesse funzioni dei programmi che siglata LX.1207.
vi abbiamo presentato per i display a 7 segmenti, Se nel bus inserirete le schede dei rel o dei triac,
ma sono stati riscritti e adattati per pilotare in se- non potrete renderle attive, perch nel program-
riale lintegrato M.8438/B6, quindi le righe che po- ma non presente nessuna istruzione per gestir-
trete modificare hanno un diverso numero. le.
Una volta caricato su un micro ST6 vergine il pro-
gramma LCDOROLO.HEX ed inserito nello zoc-
colo presente nella scheda bus LX.1202, non ap-
LCDCRONO.HEX pena alimenterete il circuito sui 4 display apparir
il numero:
Questo programma un semplice cronometro,
quindi per visualizzare i tempi occorre inserire nel 00:00
bus LX.1202 la sola scheda dei display siglata
LX.1207. I primi due display di sinistra segneranno le ore,
Se nel bus inserirete le schede dei rel o dei triac, mentre i due di destra i minuti.
non potrete renderle attive perch nel programma I due punti che separano i due display lampegge-
non presente nessuna istruzione per gestirle. ranno con una cadenza di 1 secondo.
Una volta caricato su un micro ST62.E25 ripro- Come noterete, raggiunte le ore 23 ed i 59 minu-
grammabile vergine il programma LCDCRO- ti, dopo 1 minuto si passer alle 24 ore che ver-
NO.HEX ed inserito nello zoccolo presente sulla ranno visualizzate con 00:00.
scheda bus LX.1207, appena alimenterete il cir- Per mettere a punto le ore dellorologio si utiliz-
cuito sui 4 display apparir il numero: zer il pulsante P2 e, per mettere a punto i minu-
ti, il pulsante P1.
00:00 Facciamo presente che potrete solo far avanzare
i numeri e non indietreggiare.
Premendo il pulsante P1 il micro comincer a con-
tare in avanti ad intervalli di tempo di un secondo,
quindi sui display vedrete apparire i numeri:
Sui primi due display di sinistra vedrete i minuti e Questo programma totalmente diverso dal pre-
sui display di destra i secondi. cedente programma LCDOROLO, perch oltre a
I due punti che separano i display dei minuti e dei visualizzare le ore e i minuti permette di eccitare
secondi lampeggeranno con una cadenza di un se- un rel o un triac ad unora prestabilita e di di-
condo. seccitarlo dopo un tempo che voi stessi potrete
Come noterete, quando si raggiunto un tempo di prefissare modificando alcune righe del program-
00:59 secondi, subito dopo si passer al tempo ma.
successivo di 01:00, cio 1 minuto e 00 secondi. Per farlo funzionare occorre inserire nel bus
Il massimo numero che potrete visualizzare sar LX.1202 la scheda dei display siglata LX.1207 e
quindi di 99 minuti e 59 secondi, dopodich ap- quella dei rel siglata LX.1205, oppure quella dei
parir 00:00. triac siglata LX.1206.
Se in fase di conteggio premerete P1, il conteggio Prima di spiegarvi quali righe dovrete modificare,
si bloccher sul tempo raggiunto e premendolo consigliamo ai meno esperti di leggere attenta-
nuovamente ripartir dal numero sul quale si era mente tutto larticolo, dopodich potranno modifi-
fermato. care i parametri nelle sole righe che noi indiche-
Se invece premerete il pulsante P2, il conteggio ri- remo.
partir da zero, cio il tempo visualizzato si azze- Come abbiamo accennato, il programma LCD-
rer. CLOCK.HEX ci d la possibilit di eccitare o di-
seccitare uno o pi rel anche contemporanea-
mente, su orari che noi stessi potremo stabilire, pur-
ch non si superino pi di 8 cicli o periodi nellar-
LCDOROLO.HEX co delle 24 ore.
Questo programma potr servire per accendere o
Questo programma un semplice orologio. spegnere una o pi caldaie, delle insegne lumino-
Per poter visualizzare le ore ed i minuti dovrete se ad orari prestabiliti, ecc.
Per mettere a punto le ore dellorologio si utiliz-
zer il pulsante P2 e per mettere a punto i minuti
il pulsante P1.
Facciamo presente che possibile soltanto far a-
vanzare i numeri e non indietreggiare.
Appena accenderete lorologio tutti i 4 rel o triac
partiranno eccitati.
Se volete che allaccensione dellorologio tutti i rel
risultino diseccitati, dovrete andare alla riga N.57
dove troverete questa istruzione:
Idi port_b,11110011b
Idi port_b,10000011
1 ciclo = Dopo 20 secondi dallaccensione si ec- Idi stsex,10 ; 310 secondi per RL1
citer il solo rel RL1. Idi stmix,2 ; 311 minuti per RL1
Ovviamente sui display vedrete apparire 19 e,
quando questo numero raggiunger 00:00, il rel
si ecciter. Nelle righe 295/296 - 301/302 - 307/308 - 313/314
sono riportate le sigle dei rel che volete eccitare
2 ciclo = Passando al secondo ciclo, questo rel e di quelli che volete rimangano diseccitati.
rimarr eccitato per un tempo da noi prefissato in Guardando lesempio riportato nel programma
1 minuto e 30 secondi e raggiunto questo tempo LCDCLOCK.ASM saprete gi che scrivendo que-
il rel RL1 si disecciter e automaticamente si ec- sta istruzione:
citer il rel RL2.
Idi port_b,11110011b
Il rel RL2 si ecciter un secondo dopo che sui di-
splay sar apparso il numero 01:29 che cambier
in 00:00. potrete eccitare ad ogni ciclo anche pi rel a vo-
stra scelta.
3 ciclo = Dopo 47 secondi, cio quando sul di- Nei primi quattro numeri di sinistra (vedi 1111) do-
splay il numero 46 passer sullo 00, il rel RL2 si vrete mettere un 1 sul rel che volete far eccitare
disecciter e si ecciter il terzo rel RL3. ed uno 0 se non lo volete eccitare.
Se volete che il 2 ciclo abbia una durata di 50 se- Premendo P1 il conteggio si ferma.
condi, dovrete inserire nelle sue righe questi numeri: Premendo nuovamente P1 il conteggio riparte dal
numero sul quale si era fermato.
Idi stsex,50 ; 298 secondi per RL1 Premendo P2 il contatore si resetta.
Idi stmix,00 ; 299 minuti per RL1 Premendo P1 il contatore riparte dal tempo che a-
vete impostato come partenza per il conteggio
allindietro.
Se volete che il 3 ciclo abbia una durata di 15 mi-
nuti e 20 secondi, dovrete inserire nelle sue righe
questi numeri: Nota = Il pulsante P2 di reset sar attivo solamente
se avrete fermato il conteggio con P1. Se preme-
Idi stsex,20 ; 304 secondi per RL1 rete P2 mentre attivo il conteggio, questo non si
Idi stmix,15 ; 305 minuti per RL1 azzerer. Premendo P2 per resettarlo, intuitivo
che contando allindietro sul display ritorni il tem-
Se volete che il 4 ciclo abbia una durata di 2 mi- po di partenza, cio 00:20.
Nei 4 cicli impostati otterrete queste condizioni:
Se volete che il 4 ciclo abbia una durata di 2 mi-
nuti e 10 secondi, dovrete inserire nelle sue righe
1 ciclo = Allaccensione si ecciter il solo rel RL1 questi numeri:
e sui display apparir 00:20 e a questo punto avr
inizio il conteggio alla rovescia che si fermer sul- Idi stsex,10 ; 313 secondi per RL1
lo 00:00. Idi stmix,2 ; 314 minuti per RL1
2 ciclo = Dopo un secondo si ecciter il rel RL2 Nelle righe 297/298 - 303/304 - 309/310 - 315/316
e a questo punto inizier il secondo ciclo, che far sono riportate le sigle dei rel che si ecciteranno
apparire sui display 01:30 (tempo 1 minuto e 30 e di quelli che si disecciteranno.
secondi) che, secondo per secondo, decremen- Anche in questo programma possiamo sostituire le
ter fino ad arrivare a 00:00. righe sopra menzionate con questa sola riga di-
struzione:
3 ciclo = A questo punto si ecciter il rel RL3 e
sui display apparir 00:47 che decrementer fino Idi port_b,11110011b
ad arrivare allo 00:00.
Nei primi quattro numeri di sinistra (vedi 1111) do-
4 ciclo = Lultimo ciclo far eccitare il rel RL4 e ve metterete 1 il rel si ecciter, dove metterete 0
far apparire sui display il numero 03:00 (3 minu- si disecciter.
ti). Quando con il conteggio alla rovescia si arri-
ver al numero 00:00, questo rel si disecciter e
contemporaneamente si disecciter il rel RL1, NOTA
cio si ritorner al 1 ciclo per ripetere allinfinito i
quattro cicli. Per imparare a programmare i microprocessori ST6
vi consigliamo di rileggere tutti i precedenti articoli
riportati sulle riviste N.172/173 - 174 - 175/176 -
Per variare i tempi prefissati dovrete modificare 179 - 180, perch da oggi in avanti non ripeteremo
queste righe: pi quello che vi abbiamo gi spiegato.
Sul prossimo numero vi presenteremo un progetto
1 ciclo = righe 295 - 296 completo dei relativi programmi per gestire un di-
2 ciclo = righe 301 - 302 splay LCD ALFANUMERICO a pi righe, quindi
3 ciclo = righe 307 - 308 proseguiremo spiegandovi come si dovr proce-
4 ciclo = righe 313 - 314 dere per ottenere dei programmi sempre pi per-
fetti e funzionali.
Se volete che il 1 ciclo abbia una durata di 1 mi-
nuto e 30 secondi, dovrete inserire nelle sue ri-
ghe questi numeri: KIT ESAURITO
perch lintegrato M.8438/AB6
Idi stsex,30 ; 295 secondi per RL1
fuori produzione
Idi stmix,1 ; 296 minuti per RL1
Per questi Display alfanumerici si sfrutta la stes- re tutti i punti necessari per far apparire sul Display
sa tecnica utilizzata per far apparire sul monitor la lettera o il simbolo da noi prescelti, il micropro-
del vostro computer tutte le lettere e i numeri pre- cessore HD.44780 attender una conferma dal se-
senti sulla tastiera. condo integrato siglato HD.44100.
Quando sulla tastiera digitiamo la lettera A ge- Detto questo, molti potrebbero pensare che sia suf-
neriamo un codice che, entrando in un integrato ficiente applicare sui piedini DB0 - DB1 - DB2 -
generatore di caratteri, viene trasformato in un DB3 - DB4 - DB5 - DB6 - DB7 dei livelli logici 1-0
codice ASCII che provvede a far accendere sul per far apparire una lettera o un numero.
monitor tutti i punti richiesti per creare il simbo- Chi tentasse di farlo non vedrebbe accendersi
lo A. nessun punto, perch i due integrati HD.44780 e
Lo stesso avviene in questi Display, i quali vengo- HD.44100 devono essere gestiti con un comples-
no gestiti da un codice di 8 bit che, applicato sui so set di istruzioni che potremo ottenere solo u-
piedini DB0 - DB1 - DB2 - DB3 - DB4 - DB5 - DB6 tilizzando un microprocessore esterno apposita-
- DB7 (piedini dal numero 7 al numero 14), entrer mente programmato.
negli ingressi del microprocessore siglato
HD.44780 (presente sul retro del display) al cui in- - Di questo set di istruzioni una parte viene utiliz-
terno presente una CGROM. zata per inizializzare il microprocessore esterno,
La parola CGROM significa Characters Generator cio lST6.
Read Only Memory, cio lista di caratteri gi me- Le rimanenti istruzioni sono necessarie al Display
morizzati al suo interno. per prepararsi a ricevere tutti i nostri dati, cio per
Allinterno di questa CGROM sono memorizzate tut- configurarsi correttamente per ricevere i dati in 8
te le lettere e i simboli visibili nella Tabella N . 1, bit oppure in 4+4 bit.
quindi, se sui suoi piedini dingresso faremo giun-
gere un codice composto da livelli logici 0-1, se- Se non utilizzeremo questo set di istruzioni non
lezioneremo nella sua memoria la lettera o il sim- riusciremo mai a visualizzare sul Display alcun ca-
bolo abbinati a questo codice; per poter accende- rattere.
Fig.3 In un display 16 x 2 sono presenti 2 colonne di 16 caselle. In ogni casella vi sono
40 punti per accendere i quali occorrerebbe un microprocessore da 1.280 bit.
Per comunicare con il Display con 8 bit si utilizza- Questi Display vengono chiamati intelligenti, solo
no tutti i piedini siglati da DB0 a DB7, mentre per perch dispongono di una memoria con un archi-
comunicare con 4+4 bit si utilizzano i soli piedini vio di caratteri, ma per poter funzionare necessi-
siglati da DB4 a DB7 (gli altri piedini da DB0 a DB3 tano sempre di un microprocessore esterno (nel
non vengono utilizzati). nostro caso un ST62/E25 con 28 piedini) che in-
Usando 4+4 bit, verranno inviati al Display i primi dichi loro quali caratteri desideriamo far apparire
4 bit, poi i successivi 4 bit. nelle 32 caselle.
Nota = Nei nostri programmi abbiamo utilizzato il
sistema dei 4+4 bit.
TABELLA dei CARATTERI PREDEFINITI
- Come abbiamo detto, quando invieremo un co-
dice allHD.44780 per far apparire un carattere, Nella Tabella N.1 abbiamo riprodotto tutti i carat-
per poterlo visualizzare questo attender tutta una teri presenti allinterno della CGROM.
serie di istruzioni, ad esempio in quale delle 32 Come potrete notare, sul lato destro sono presenti
caselle presenti nel Display vogliamo far apparire 4 bit indicati con x x x x seguiti da altri 4 bit pre-
il segno grafico, se desideriamo utilizzare en- definiti con 0 e 1, ad esempio:
trambe le righe del Display oppure 1 sola, ecc.
Queste istruzioni verranno accettate solo quando xxxx0001
sul piedino 4 del display, denominato R/S, sar
presente un livello logico 0. In alto sono riportati altri 4 bit predefiniti con 0 e 1,
ad esempio:
- Dopo aver inserito tutte le istruzioni richieste, do-
vremo mettere a livello logico 1 il piedino 4 del di- 0011
splay e solo a questo punto potremo inviare i da-
ti, cio la lettera - numero - simbolo che deside- Questa Tabella si usa come una Tavola Pitago-
riamo far apparire. rica, quindi se volessimo far apparire sul display
la lettera A, dovremmo sostituire le x presenti sul
- Ai due integrati HD.44780 - HD.44100 occorre un lato destro con i bit riportati nella casella in al-
certo tempo per eseguire tutte queste operazioni to.
e questo tempo di lavoro lo dovremo considerare In questo esempio dovremo scrivere:
e rispettare anche se si tratta di pochi millise-
condi, diversamente nella casella interessata po- 0100-0001
trebbero apparire dei caratteri strani e non signi-
ficativi. Nota = Abbiamo messo un segno - tra i primi quat-
tro bit e i secondi quattro, solo per rendere le-
Nei programmi dei vari esempi che troverete nel sempio pi chiaro, ma questo segno non dovrete
dischetto DF1208 troverete tutte queste istruzioni mai inserirlo.
di ritardo, che dovrete necessariamente rispettare
quando vi accingerete a scrivere dei vostri perso- Se volessimo far apparire una a (minuscola) do-
nali programmi. vremmo scrivere:
Se non le rispetterete, non riuscirete mai a far fun-
zionare un qualsiasi Display alfanumerico. 0110-0001
DISPLAY
6 4 5 7 8 9 10 11 12 13 14 15 2 3 1
ENABLE
R/S
R3
DB4
DB5
DB6
DB7
R1 R2 C3
P1 C1 P2 C2
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI + 5 V. GND + 12 V.
CONN. 1 / 2
C4 C5
IC1 - A DS1
5 R4
8
7
6
4 C6 R5 V. INP.
DS2
+ 5 V.
ENABLE
Massa
Massa
LUMINOSITA'
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
R/S
car .ascii A
ISTRUZIONI di INIZIALIZZAZIONE
Tra i programmi dimostrativi riportati nel dischetto
DF1208 ne abbiamo inseriti diversi utilizzando que- Come abbiamo gi detto, quando scriverete dei
sti tre diversi codici, quindi leggeteli attentamente nuovi programmi dovrete sempre iniziare con tut-
perch con le istruzioni riportate comprenderete ta una serie di istruzioni di inizializzazione.
con estrema facilit quello che risulterebbe assai Nei due programmi che troverete nel dischetto
pi complesso spiegare a parole. DF1208 questo set di istruzioni sono riportate:
Molti si trovano in difficolt con le operazioni ma- In questi due programmi questo set di istruzioni
tematiche, perch non pensano che il numero che posizionato nelle righe 77-109 e nelle righe 81-113
desiderano far apparire un carattere grafico che solo perch prima di queste abbiamo dovuto ripor-
verr prelevato allinterno della CGROM. tare due diverse serie di variabili necessarie per
Nel caso della somma 3+2 che ci d come risulta- far funzionare i due programmi.
to 5, consultando la Tabella N. 1 vedremo che sot-
to al numero 5 indicato il numero 53. Come noterete questi due set di istruzioni, anche se
posti in righe diverse, sono perfettamente identici.
Per far apparire sul display il segno grafico 5, a Dovrete sempre riportare nei vostri programmi per-
questo numero dovremo sommare la costante 48 sonalizzati tutte queste righe senza apportare al-
e cos facendo otterremo 5+48 = 53 e se andiamo cuna modifica, dopo tutte le vostre variabili.
TABELLA n. 1
0010 0011 0100 0101 0110 0111 1010 1011 1100 1101 1110 1111
xxxx0000
32 48 64 80 96 112 160 176 192 208 224 240
xxxx0001
33 49 65 81 97 113 161 177 193 209 225 241
xxxx0010
34 50 66 82 98 114 162 178 194 210 226 242
xxxx0011
35 51 67 83 99 115 163 179 195 211 227 243
xxxx0100
36 52 68 84 100 116 164 180 196 212 228 244
xxxx0101
37 53 69 85 101 117 165 181 197 213 229 245
xxxx0110
38 54 70 86 102 118 166 182 198 214 230 246
xxxx0111
39 55 71 87 103 119 167 183 199 215 231 247
xxxx1000
40 56 72 88 104 120 168 184 200 216 232 248
xxxx1001
41 57 73 89 105 121 169 185 201 217 233 249
xxxx1010
42 58 74 90 106 122 170 186 202 218 234 250
xxxx1011
43 59 75 91 107 123 171 187 203 219 235 251
xxxx1100
44 60 76 92 108 124 172 188 204 220 236 252
xxxx1101
45 61 77 93 109 125 173 189 205 221 237 253
xxxx1110
46 62 78 94 110 126 174 190 206 222 238 254
xxxx1111
47 63 79 95 111 127 175 191 207 223 239 255
PER PASSARE dalla 1 alla 2 RIGA NOTA per lEDIT dellST6
Poich normalmente si scrive partendo dalla 1 ri- Dobbiamo precisare che lEDIT, che vi avevamo
ga per poi passare alla 2 riga, le prime istruzioni fornito nei precedenti dischetti LX.1207 con lin-
che dovrete scrivere saranno: tento di semplificare tutte le operazioni, risulta in-
sufficiente per programmi molto lunghi come
res 1,port_b prepararsi per listruzione quelli utilizzati per questo Display alfanumerico si-
ldi ddata,00000010b istruzione per la 1 riga glato LX.1208.
call dsend subroutine per invio dati Infatti questo EDIT accetta solo programmi che non
superino i 30 Kilobyte quindi, quando li andrete a
Continuerete quindi con le istruzioni che servono salvare, tutto quello che eccede i 30 K verr ine-
ad incrementare di una casella, cio a far s che sorabilmente cancellato.
la prima lettera o numero che vorrete far apparire Se perci vorrete modificare e trasferire nella me-
si posizioni automaticamente nella prima casella, moria dellST6 un programma per questo Display
la seconda lettera nella seconda casella, ecc. alfanumerico o altri che superino i 30 K, dovrete
Ammesso di voler scrivere A, dovrete scrivere il necessariamente utilizzare lEditor del DOS pre-
suo numero decimale, quindi: sente nel vostro computer.
ldi ddata,00000110b incrementa di una casella Per caricare i due programmi presenti nel dischet-
call dsend subroutine per invio dati to DF1208 dovrete procedere come segue:
set 1,port_b fine set istruzioni
ldi ddata,65 trasferisci A in ddata Quando sul monitor appare C:\> dovrete inserire il
call dsend subroutine per invio dati dischetto nel drive A e scrivere:
Per scrivere 16 caratteri in ogni riga si potrebbe C:\>A: poi premete Enter
scrivere 16 volte questa istruzione, mettendo nella A:\> installa poi premete Enter
riga ldi ddata il numero decimale che si desidera
far apparire, ma poich questa soluzione risulta po- Il programma vi chieder su quale directory vole-
co pratica, vi consigliamo di andare a vedere nel te installare il contenuto del dischetto e, poich noi
programma DISP093 come abbiamo risolto in mo- labbiamo gi definita LX1208, dovrete solo pre-
do pi elegante il problema per far apparire sul Di- mere il tasto Enter.
splay la parola N.ELETTRONICA.
Si creer cos automaticamente la directory
Per scrivere nella 2 riga posta sotto la 1, dovre- LX1208 e mentre verranno trasferiti nellHard-Disk
te scrivere queste istruzioni: tutti i programmi presenti nel dischetto floppy ver-
ranno anche scompattati.
res 1,port_b prepararsi per listruzione
ldi ddata,11000000b posizionamento in 2 riga Se usando questo metodo vi apparir la scritta er-
call dsend subroutine per invio dati ror, vi consigliamo di ricaricare il dischetto
set 1,port_b fine set istruzioni nellHard-Disk utilizzando questo secondo metodo:
Ammesso di voler far apparire nella seconda ca- C:\>MD LX1208 poi premete Enter
sella la lettera B, dovrete scrivere: C:\>COPY A:*.* C:\LX1208 poi premete Enter
C:\>CD LX1208 poi premete Enter
ldi ddata,66 trasferisci B in ddata C:\LX1208>installa poi premete Enter
call dsend subroutine per invio dati
Nota = Per agevolarvi a rispettare le spaziature,
Vorremmo aggiungere che anche se sul display so- abbiamo utilizzato una barra in colore che corri-
no visibili solo 16 caselle per riga, in pratica ve sponde ad uno spazio.
ne sono per ogni riga altre 24 nascoste e queste
righe nascoste possono servire nel caso si desi- Ammesso che desideriate modificare il programma
derino far scorrere sul display delle scritture da TESTER presente nel disco DF.1208, quando sul
destra verso sinistra o viceversa. monitor appare C:\> scrivete:
Nel programma DISP093 che troverete nel di-
schetto DF1208, oltre a tutte le sorgenti abbiamo C:\>CD LX1208 (chiama la directory)
riportato anche degli esempi per ottenere questa C:\LX1028>Edit TESTER.ASM (chiama Editor del
funzione. Dos)
Fig.6 La scheda di questo di-
play andr inserita nel Bus si-
glato LX.1202, non dimenti-
cando di innestare nello zoc-
colo textool un micro ST6 tipo
ST6/E25 per trasferire il pro-
gramma DISP093.HEX oppure
il TESTER.HEX.
Dopo aver eseguito tutte le modifiche sui pro- Per trasferire i programmi gi compilati in .HEX nel
grammi dovrete premere i tasti ALT F, poi portare microprocessore posto sullinterfaccia LX.1202,
il cursore sulla riga SALVA e premere Enter ed in- dovrete richiamare la directory LX1208 e poi scri-
fine sulla riga ESCI e premere Enter. vere semplicemente:
V. INPUT
R5
P1
8021 XL
15 1
C1 C6
R4
R1 P2
R2 DS2
C2
DS1
IC1
R3
C3 C4
DISTANZIATORE
C5
CONN. 1/2
+V 7 6 5
LM 358
Fig.8 Foto dello stampato LX.1208 con sopra gi montati tutti i componenti richiesti. No-
ta = Nel kit, anzich trovare un connettore maschio da 24 poli e due da 4 poli potreste tro-
varne uno solo da 32 terminali, che dovrete tagliare per ottenere i tre pezzi richiesti.
SM, il compilatore andr a ricercare il file: Queste scritte rimarranno visualizzate per circa 3
secondi, dopodich apparir:
TB_CGR01.ASM
[P1] >
e lo inglober al suo interno, formando cos un u- PER PROCEDERE
nico file che si chiamer: DISP093.HEX.
Se non premerete il pulsante P1 vedrete alternar-
Quando assemblerete il programma TESTER.A- si le due scritte sopra riportate con una cadenza di
SM, il compilatore andr a ricercare il file TB_C- circa 1 secondo.
GR02.ASM e lo inglober al suo interno, forman-
do cos un unico file che si chiamer: Se invece premerete il pulsante P1 per pi di 3 se-
TESTER.HEX. condi circa, apparir questa nuova scritta:
1-MAIUSC.> minus
Programma DISP093.HEX 2-ROTAZIONE
Questo programma, che utilizza i soli pulsanti P1 Questa rimarr visualizzata per circa 6 secondi,
- P2 presenti nella scheda LX.1208, vi permet- dopodich apparir:
ter di visualizzare il vostro nome e cognome o
qualsiasi altra scritta sul display, a condizione 3-SCOMPOSIZIONE
di utilizzare un massimo di 16 caratteri per ri- 4-VISUAL.CG RAM
ga.
Facciamo presente che necessario considerare e nuovamente vedrete apparire:
gli spazi come caratteri.
[P1] >
Il vostro nome e cognome o una qualsiasi al- PER PROCEDERE
tra scritta, dovr essere scritto allinterno del
programma .ASM nelle righe che vi indichere- Come noterete, sulla base delle scritte apparse, po-
mo. trete ottenere 4 diverse funzioni che sono nume-
Dopo aver scritto le parole che dovranno apparire rate 1-2-3-4.
sul display, dovrete riassemblare il programma ed Solo dopo che saranno apparse tutte le scritte che
infine caricarlo nel micro ST62/E25, che andr in- vi abbiamo sopra indicato, potrete utilizzare il ta-
serito nello zoccolo textool presente nella scheda sto P1 per selezionare una della 4 funzioni.
bus LX.1202. Se non premerete il pulsante P1 vedrete nuova-
Se caricherete nel micro ST62/E25 il programma mente ripetersi allinfinito le stesse scritte.
DISP093.ASM, ovviamente dopo averlo assem- Quando apparir P1 > PER PROCEDERE dovre-
blato in DISP093.HEX, sul display vedrete appari- te tenere premuto questo tasto per almeno 3 se-
re in ordine alcune scritte: condi e apparir la scritta:
Questa scritta rimarr sui display fino a quando non SCELTA FUNZIONE
premerete il pulsante P2. ......[?] [P2] >
Se terrete premuto per almeno 3 secondi il pul-
sante P2, apparir questa scritta: Se ora premerete il tasto P2 per tre volte conse-
cutive, sceglierete la funzione 3-SCOMPOSIZIO-
SCELTA FUNZIONE NE, quindi quando apparir:
......[1] [P2] >
SCELTA FUNZIONE
Come potete vedere, nelle due parentesi quadre ......[3] [P2] >
sparito il ? ed apparso il numero 1.
Premendo per una seconda volta P2 apparir il dovrete tenere premuto il pulsante P1 per circa 3
numero 2, premendo una terza volta P2 apparir secondi e rilasciandolo vedrete che i caratteri ri-
il numero 3 e premendolo per la quarta volta ap- portati nella sola prima riga cominceranno a scom-
parir il numero 4. porsi, cio vedrete i caratteri della prima riga al-
Fate attenzione a premerlo per la quinta volta, per- lontanarsi ad uno ad uno scorrendo verso destra,
ch se sul display apparir il numero 5 uscirete dal fino a scomparire totalmente, poi li vedrete ritorna-
menu. re da destra verso sinistra fino a ricostruire linte-
ra parola.
Ammesso di voler visualizzare la funzione 1-MAIU- Una volta ricostruiti i 16 caratteri sulla prima riga,
SC.> minus quando appare: nuovamente vedrete apparire la scritta:
dovrete premere per circa 3 secondi il pulsante P1 Se ora premerete il tasto P2 per quattro volte con-
e comparir la scritta: secutive, sceglierete la funzione 4-VISUAL.CG
RAM quindi quando apparir:
-NOME-NOME-NOME-
-COGNOME-COGNOME SCELTA FUNZIONE
......[4] [P2] >
dopo circa 5 secondi vi apparir la stessa scritta
ma in minuscolo, ovvero: dovrete sempre tenere premuto il tasto P1 per al-
meno 3 secondi e sulla prima riga del display ve-
-nome-nome-nome- drete apparire 8 simboli grafici generati apposi-
-cognome-cognome tamente a scopo didattico, pi un cursore non lam-
peggiante.
Tale scritta in minuscolo rester visualizzata per
circa 5 secondi, dopodich vi riapparir nuova- I programmi inseriti nel dischetto DF.1208 servono
mente la scritta: principalmente per farvi vedere come si debbano
scrivere le varie istruzioni per far funzionare que-
SCELTA FUNZIONE sto display alfanumerico.
......[?] [P2] > Solo dopo che avrete preso una certa confi-
denza con questi programmi, potrete modificar-
A questo punto, se premerete il tasto P2 per due li, o prelevare direttamente dalle nostre sor-
volte consecutive, sceglierete la funzione 2-RO- genti tutte le righe che potrebbero interessar-
TAZIONE, quindi quando apparir: vi.
Una modifica molto semplice che potrete appor-
SCELTA FUNZIONE tare quella di far apparire sui display il vostro no-
......[2] [P2] > me e cognome o qualsiasi altra scritta.
tenendo premuto per 3 secondi il tasto P1, vedre- Se sulla prima riga volete far apparire il vostro no-
te apparire un divertente effetto perch il vostro no- me che potrebbe essere ALESSANDRO - MAR-
me partir dalla seconda riga, scorrendo da sini- CO - VINCENZO, ecc. dovrete andare alla riga
N.684 posta allinterno del programma sorgente DI- Sulla prima riga faremo apparire il valore della
SP093.ASM e sostituire la scritta da noi inserita tensione in numero, mentre sulla seconda riga
con il vostro nome. faremo apparire una barra che si allungher di
1 riga ogni 0,1 volt e di 1 quadretto ogni 0,5
Se in corrispondenza della seconda riga volete far volt.
apparire il vostro cognome che potrebbe essere Chi fosse interessato a comprendere come siamo
BIANCHI - ALBERTAZZI - FANTOZZI, ecc., do- riusciti ad ottenere queste due condizioni, dovr
vrete andare alla riga N.685 e sostituire la scritta leggere attentamente il programma TESTER.ASM
da noi inserita con il vostro cognome. e i commenti riportati su ogni riga.
Vogliamo subito far presente che il massimo va-
Nota importante = Qualsiasi cosa scriverete nel- lore di tensione che potremo leggere con questo
le righe 684 e 685, dovrete sempre farlo in carat- voltmetro di soli 5 volt, quindi non applicate
teri maiuscoli e non superare mai i 16 caratteri sullingresso delloperazionale IC1/A tensioni mag-
per riga compresi gli spazi. giori.
Dopo aver eseguito queste modifiche dovrete pre- Per leggere tensioni di 50 volt fondo scala, do-
mere i tasti ALT F, poi portare il cursore sulla riga vrete necessariamente utilizzare dei partitori resi-
SALVA e premere Enter ed infine sulla riga ESCI stivi come illustrato nelle figg.10-11.
e premere Enter.
Dopodich dovrete richiamare il programma La tensione da misurare, applicata sullingresso
LX1208 scrivendo: delloperazionale IC1/A, verr prelevata dal suo
piedino duscita 7 ed inviata allA/D converter pre-
C:\>CD LX1208 poi premere Enter sente allinterno del microprocessore ST6/E25, che
la convertir in un numero decimale compreso tra
e scrivere: 0 e 255.
Con questo programma dimostrativo desideria- Per ottenere una maggiore precisione nel nostro
mo insegnarvi ad utilizzare lA/D converter pre- programma leggeremo i numeri decimali che lA/D
sente allinterno del microprocessore ST6/E25 e converter ci fornir per ben 32 volte, poi una vol-
per farlo abbiamo realizzato con questo display ta sommati li divideremo per 32.
alfanumerico un semplice voltmetro elettroni- Per far apparire il numero 2,5 metteremo il nu-
co utilizzando entrambe le righe presenti nel di- mero 2 in un byte e il numero 5 in un altro by-
splay. te.
R5
P1 10.000 ohm
18.000 ohm
R5
1.000 ohm
50 V.
P1
1.000 ohm
C6
Fig.10 Volendo utilizzare la funzione
R4
Voltmetro per leggere tensioni maggio-
ri, dovrete applicare sullingresso un P2
DS2
partitore resistivo composto da tre sole
resistenze. DS1
IC1
Con questo partitore potrete leggere fi-
no ad un valore massimo di 50 volt.
R3
C4
C5
15.000 ohm
50 V.
R5
2.200 ohm
P1
C5
Come vi abbiamo gi spiegato in precedenza, per- massa, lo ruoterete lentamente in senso inverso fi-
ch il display intelligente faccia apparire un qual- no a leggere lesatta tensione applicata sullin-
siasi segno grafico contenuto allinterno della sua gresso.
CGROM, gli deve giungere un numero ben diver- Ammesso di aver scelto una tensione di 28 volt,
so dal 2 e dal 5 inseriti in questi due byte, per cui dovrete ruotare questo trimmer fino a leggere sui
dovremo sommare questi due numeri alla co- display il numero 2,8 volt.
stante 48.
Otterremo cos:
NOTA IMPORTANTE
2 + 48 = 50
5 + 48 = 53 Non invertite la polarit della tensione sullingres-
so delloperazionale IC1/A, perch sui display ve-
Consultando la Tabella N.1 vedremo che il nume- drete sempre apparire 0,0 volt.
ro 50 corrisponde al simbolo grafico 2 ed il nu- Non applicate sullingresso tensioni maggiori di 5
mero 53 al simbolo grafico 5. volt (per pochi istanti lintegrato accetta anche 9
volt), diversamente si potrebbe danneggiare il mi-
Per visualizzare la barra che appare sulla secon- croprocessore ST6/E25.
da riga utilizziamo i due numeri 2 e 5, che abbia- Al programma TESTER.ASM, che funziona solo co-
mo messo in precedenza nei due byte, e con que- me voltmetro per leggere una tensione di 5 volt mas-
sti due numeri andiamo nel file TB_CGR02.ASM simi, non possibile apportare alcuna modifica.
per prelevare i simboli grafici che ci serviranno Questo programma, come gi vi abbiamo accen-
per accendere tutte le caselle interessate. nato, un dimostrativo che vi permetter di vede-
Poich con 5 volt si accendono 10 caselle oriz- re tutte le varie soluzioni che abbiamo adottato per
zontali, ovvio che disponendo di una tensione di far apparire un numero proporzionale alla tensione
2,5 volt si accenderanno solo 5 caselle. e come si utilizzano le tabelle del TB_CGR02.A-
SM e lA/D converter.
Per provare questo voltmetro potrete procurarvi un Come gi saprete, per poter memorizzare il pro-
trimmer da 10.000 ohm, pi una pila da 4,5 volt, gramma TESTER.ASM allinterno del micro ST6,
collegandoli come visibile in fig.9. lo dovrete prima convertire in .HEX e per farlo do-
Ruotando il cursore del trimmer da un estremo vrete digitare:
allaltro, vedrete variare sulla prima riga del display
il numero da 0 volt fino ad un massimo di 4,5 volt C:\>CD LX1208 poi premete Enter
e sulla seconda riga la barra aumentare progres- C:\LX1208>A TESTER.ASM poi premete Enter
sivamente fino a raggiungere un massimo di 9 qua-
dretti. Per poter trasferire il programma convertito in .HEX
sul micro ST6 dovrete semplicemente scrivere:
Volendo utilizzare questo tester per misurare ten-
sioni superiori a 5 volt, dovrete applicare sullin- C:\LX1208>ST6PGM poi premere Enter
gresso un partitore resistivo con i valori riportati in
fig.10 e, in tal modo, otterrete un fondo scala di e rispondere, come gi sapete, a tutte le domande
50 volt. che appariranno sul monitor del computer.
Non possibile utilizzare dei partitori resistivi che KIT ESAURITO
diano dei valori di fondo scala di 10-100-200 volt, vedi LX.1208/N nelle pagine seguenti
perch il programma impostato per leggere un
massimo di 5 volt. COSTO DI REALIZZAZIONE
Come noterete, tra le due cifre rimane sempre in-
serita la virgola, quindi se avete utilizzato il parti- Tutti i componenti necessari per la realizzazione di
tore di fig.10 e sullingresso inserite 18 volt, sul di- questo progetto per Display alfanumerico, che po-
splay apparir il numero 1,8 volt. tete vedere riprodotti in fig.7 (Escluso il disco
Poich le resistenze hanno una loro tolleranza, il DF.1208) ...................................................L.78.500
partitore di fig.10 potrebbe non fornirvi lesatto va-
lore di tensione; per risolvere questo problema la Il programma DF.1208..............................L.12.000
soluzione migliore sarebbe quella di utilizzare lo
schema riprodotto in fig.11. Costo dello stampato LX.1208 .................L.10.000
Per tarare il trimmer potrete prendere una esatta
tensione continua che non risulti maggiore di 50 Ai prezzi riportati, gi comprensivi di IVA, andranno
volt e partendo con il cursore tutto ruotato verso aggiunte le sole spese di spedizione a domicilio.
126
.
Poich il display alfanumerico LM.093LN non vie- nato, mentre il trimmer R4 collegato al piedino 3
ne pi fabbricato, ci siamo dati da fare per cerca- consente di regolarne il contrasto.
re un sostituto che lo rimpiazzasse nel kit LX.1208.
Per la descrizione dello schema elettrico e per il
Dopo unaccurata ricerca, abbiamo scelto il display montaggio dei componenti sul circuito stampato, ri-
WH.1602A della Hitachi, che equivalente al di- mandiamo a quanto gi descritto nelle pagine pre-
splay LM.093N, eccetto che nella disposizione di cedenti, perch il funzionamento del circuito non
alcuni piedini e nella definizione di alcuni caratteri cambiato.
alfanumerici (vedi tabella nelle pagine seguenti). Per quanto riguarda lelenco componenti e i di-
segni degli schemi elettrico e pratico, tenete in-
Proprio perch la piedinatura del display vece presenti quelli riportati in queste pagine.
WH.1602A non collima perfettamente con quella
del display LM.093N (se confrontate la fig.5 con la
fig.12 vi accorgerete subito che il display della Hi- IL SET dei CARATTERI ALFANUMERICI
tachi ha un piedino in pi), abbiamo pensato noi a
disegnare e a fare incidere un nuovo circuito stam- Nella pagina seguente abbiamo riportato anche la
pato al quale abbiamo dato la sigla LX.1208/N. tabella relativa ai caratteri alfanumerici gestiti dal
display WH.1602A, che, come vi dicevamo, non
In questo modo non incontrerete alcuna difficolt coincide perfettamente con il set di caratteri che ve-
nel realizzare la scheda e soprattutto nel montare niva gestito dal vecchio display. Infatti se la con-
il nuovo display alfanumerico. frontate con la Tabella N.1 di questo articolo, ve-
Inoltre, come siamo soliti fare per tutti i nostri kit, drete che alcuni caratteri sono diversi.
abbiamo gi montato e collaudato questa scheda,
e quindi possiamo assicurarvi che il circuito fun- In particolare, il display WH.1602A non ha tra i suoi
ziona esattamente come funzionava laltro. caratteri le due frecce che nella Tabella N.1 si tro-
vano alle posizioni 126 e 127.
Vale la pena sottolineare che il display WH.1602A
utilizzato, un display LCD alfanumerico compo- Per questo motivo alcune delle istruzioni presenti
sto da due righe di 16 caratteri. nei programmi DISP093.ASM e TESTER.ASM
vanno modificate, come ora vi spieghiamo.
Come vi abbiamo anticipato, rispetto al display
LM.093LN, che aveva solo un piedino per regola- Dopo la modifica, al posto delle frecce alle posi-
re la luminosit, il display WH.1602A ha due con- zioni 126 e 127 della Tabella N.1, appariranno le
trolli: con i collegamenti al positivo di alimentazio- frecce alle posizioni 62 e 60 della tabella del set di
ne e a massa dei piedini 15-16 viene retro illumi- caratteri del display WH.1602A.
KATODO
ENABLE
ANODO
+ 5 V.
R/W
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
Massa
RS
WH 1602A-YYH-EP
.
DISPLAY
6 4 5 7 8 9 10 11 12 13 14 16 15 2 3 1
K A
ENABLE
R/S
R3
R4
DB4
DB5
DB6
DB7
R1 R2 C3
P1 C1 P2 C2
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7 NMI + 5 V. GND + 12 V.
CONN. 1 / 2
C4 C5
IC1 - A DS1
5 R5
8
7
6
4 C6 R6 V. INP.
DS2
DISPLAY = WH 1602A
V. INPUT
R6
14 13 12 11 10 9 8 7 6 5 4 3 2 1 16 15
P1
1
C1 C6
R5
R1 P2
DS2
R2
C2
DS1
IC1
R3 R4
C3 C4
14 13 12 11 10 9 8 7 6 5 4 3 2 1 16 15
C5
CONN. 1/2
Fig.15 Schema pratico di montaggio della scheda LX.1208/N. Il montaggio di questo cir-
cuito non presenta particolari difficolt e se rispetterete la polarit del condensatore e-
lettrolitico C5 e dei due diodi al silicio DS1-DS2, il circuito funzioner senza problemi. Sul
lato opposto a quello visibile, vanno saldati i connettori a 4 terminali che, insieme al con-
nettore CONN.1/2, vi serviranno per innestare la scheda nel Bus siglato LX.1202.
Nel programma DISP093.ASM alle righe 672 - 685 e infine sostituire listruzione:
- 692, dovete sostituire listruzione:
.byte 01111111b
.byte 01111110b
con listruzione:
con listruzione:
.byte 00111100b
.byte 00111110b
COSTO di REALIZZAZIONE
Nel programma TESTER.ASM dovete invece an-
dare dopo la riga 454 e nella tabella riportata, so- Costo dei componenti necessari per la realizzazio-
stituire listruzione: ne del kit con display alfanumerico WH.1602A, si-
glato LX.1208/N, visibile in fig.15, escluso solo il
.byte 01111110b dischetto DF.1208
Euro 26,00
con listruzione:
Costo del solo circuito stampato LX.1208/N
.byte 00111110b Euro 5,20
Poi dovete lasciare invariata listruzione: Costo del dischetto DF.1208 con i programmi per
display alfanumerico con micro ST6
.byte 32,32,32 Euro 6,20
.
Quando si scrivono programmi per qualsiasi mi- cucina e quella della camera da letto e se non in-
croprocessore anche i pi esperti possono com- dichiamo nel programma quale porta deve essere
mettere degli errori di sintassi oppure logici. aperta, si aprir una porta qualsiasi e non quella
I primi, cio quelli di sintassi, vengono gi rilevati dingresso come noi volevamo.
in fase di compilazione, perci abbastanza faci-
le scoprirli e correggerli; i secondi, cio quelli logi- Un emulatore ci offre parecchi vantaggi.
ci, possono essere scoperti solo se si dispone di Prima di tutto quello di non dover pi acquistare un
un emulatore real-time. certo numero di ST6 riprogrammabili e, poich il
Se non si possiede un emulatore il solo sistema loro prezzo salito alle stelle, si risparmier una
per verificare che il programma risulti corretto cifra considerevole.
quello di trasferirlo in un micro ST6 riprogramma- Inoltre potendo controllare prima il programma, non
bile, cio provvisto di una finestra. si perder del tempo per programmarli, cancellarli
Se, dopo averlo collocato nel circuito che dovr ge- e riprogrammarli.
stire, si verifica che non funziona, bisogna ricon-
trollare il programma istruzione per istruzione, Infatti dopo aver eseguito un test completo sul vo-
correggere gli errori commessi, sempre che si rie- stro programma, se non rileverete delle anomalie
sca a trovarli, ricompilare il programma con las- potrete tranquillamente trasferirlo su un ST6 non
sembler, cancellare lST6, ed infine riprogram- riprogrammabile perch, avendolo gi testato,
marlo e testarlo nuovamente, perch non det- avrete la matematica certezza che funzioner.
INSTALLARE il SOFTWARE
sotto WINDOWS 3.1
C:\ST6
atest.asm
btest.asm
setup.exe
Infatti dei tre tasti selezionabili in questa finestra, cliccare - definiamo cos lazione che si effettua
Retry - Demo - Parameters, baster cliccare sul premendo il tasto del Mouse sulla scritta o icona
tasto Demo per iniziare a testare il programma. indicata.
COMPILARE in ASSEMBLER
Fig.23 Finestra dialogo ADD TOOL. il programma ATEST.ASM
Fig.27 Finestra di sviluppo per micro ST6. Quando appare la finestra di fig.32, digitate nella
riga Project name il nome del file ATEST (non
necessario riportare dopo il nome lestensione
.PRJ).
Tenete presente che potete anche cambiare nome
al file project, cio dargli un nome differente dal
source file.
In altre parole potrete ad esempio cambiare il no-
me ATEST in BAUBAU o PLUTO, ma se volete e-
vitare che un domani non vi ricordiate pi quale no-
me avevate scelto, vi consigliamo di mantenere lo
stesso nome del programma assemblato, cio nel
nostro caso ATEST.
Dopo aver digitato il nome portate il cursore sulla
parola Create (vedi fig.33) e cliccate.
Fig.28 Aprite un programma pigiando F3.
Fig.30 Cliccate sul sottomenu Assembla. Fig.33 Scegliete Create e vedrete la fig.34.
Apparir la finestra di dialogo Edit Project (vedi In questo modo indicate al programma di visualiz-
fig.34) in cui molto importante inserire le specifi- zare i soli files con estensione .HEX.
che richieste senza commettere errori.
A questo punto cliccate sulla scritta Browse in mo-
do che appaia la finestra di dialogo di fig.38.
Fig.36 Scegliete la frequenza del quarzo. Fig.40 Nel riga Filename apparir il nome
del file selezionato nella finestra Browse.
Fig.42 Per creare un file con estensione source file not found
.PRJ, cliccate sulla scritta OK. symbol table file not found
debugger file not found
ESEMPI di EMULAZIONE
Fig.58 Selezionate la variabile che volete. - Cliccate sulla scritta Watch e selezionate la scrit-
ta Add Watch (vedi fig.56) in modo da far appari-
re la finestra di dialogo visibile in fig.57.
- Andate con il cursore sulla freccia posta a destra
della scritta Variable e vedrete apparire in ordine
alfabetico lelenco delle variabili presenti nel pro-
gramma ATEST (vedi fig.58).
IMPORTANTE
Per la porta B, che dispone di 8 piedini PB0 - PB1 PDIR corrisponde a DDR
- PB2 - PB3 - PB4 - PB5 - PB6 - PB7, vedrete 8 PORT corrisponde a DR
caselle su 3 file indicate 7 - 6 - 5 - 4 - 3 - 2 - 1 - POTP corrisponde a OR
0 che possono essere vuote o contrassegnate da
una V. Se rileggerete tutti gli articoli precedenti riguardan-
ti lST6 (vedi Riviste N.172/173 - 174 - 175/176) tro-
caselle DDR - (Data Direction Register) Se que- verete molti esempi su come procedere per setta-
ste caselle risultano vuote significa che abbiamo re le porte come ingressi e uscite.
definito i piedini input (ingressi), quelle contrasse-
gnate con una V indicano che li abbiamo definiti
output (uscite). Potendo vedere tramite la finestra visibile in fig.75
tutti i livelli logici presenti su questi piedini, pote-
caselle DR - (Data Register) Se queste caselle ri- te comprendere quanto risulti semplice accorgersi
sultano vuote significa che sui piedini presente degli errori, anche perch proseguendo passo x
un livello logico 0, se sono contrassegnate da u- passo potete subito verificare come cambiamo i li-
na V significa che presente un livello logico 1. velli logici sia sugli ingressi sia sulle uscite.
ripeti
main00 - mains1 - main01 - mains2
main02 - mains3 - main03 - mains4
perch non trova premuto nessuno dei quattro in- Fig.78 Cliccate 2 volte per vedere la fig.79.
terruttori presenti sulla porta A.
Quando appare la finestra Edit Data (fig.79) do- Poich avevamo bloccato il programma pigiando
vete cliccare sulla scritta Bits in modo da far ap- Stop (icona con mano) per farlo ripartire dovete ri-
parire la finestra di fig.80. cercare letichetta ripeti procedendo come segue:
port_b C1 04 4
Quando appare la maschera Edit Data (vedi fig.87) Con questo articolo abbiamo riportato solo una con-
cliccate su Bits e comparir la finestra di dialogo densata panoramica di quello che riesce a fare que-
di fig.88 dove potrete vedere che nella casella sot- sto sofisticato software di simulazione.
to il numero 2 del piedino PB2 c una V ad indi- Per spiegarvi tutto, cio insegnarvi a capire come
care che questo piedino a livello logico 1. scoprire gli errori, come correggerli ecc., dovre-
mo portarvi tanti altri esempi, e per questo vi ri-
mandiamo al prossimo numero.
Comunque quando avrete a disposizione questo
software, scoprirete voi stessi molte cose ed an-
che facilmente tramite la funzione di Help.
Per settare un bit dellaccumulatore A dobbiamo Nella quarta colonna (ciclo) sono riportati i nume-
guardare la colonna opcode, in cui viene riportata ri di passi necessari al microprocessore per ese-
la sua configurazione in formato intel.hex. guire listruzione.
Tutta listruzione viene visualizzata sul monitor dal Il secondo numero binario, cio 11000000 (esade-
simulatore non in numero binario, ma in un nu- cimale C0), corrisponde allindirizzo di port_a.
mero esadecimale, cio:
Tutta listruzione viene visualizzata sul monitor dal
FB FF simulatore non in numero binario, ma in un nu-
mero esadecimale, cio :
Esempio di SET b,rr
5B C0
Per settare un bit della Variabile rr dobbiamo guar-
dare la colonna opcode, in cui viene riportata la Di seguito trovate tutte le Tabelle della guida ra-
sua configurazione in formato intel.hex. pida in ordine alfabetico.
b11011 rr ADD Addition
b = la combinazione di tre bit utilizzati per defi-
Formato opcode bytes cicli flags
nire in binario un numero decimale da 0 a 7.
ADD dst,src Z C
11011 = la combinazione binaria che il micro- ADD A,A 5F FF 2 4
processore riconosce come listruzione Set, quindi ADD A,X 5F 80 2 4
non deve essere mai modificata. ADD A,Y 5F 81 2 4
ADD A,V 5F 82 2 4
b+11011 = dunque un numero binario di 8 bit ADD A,W 5F 83 2 4
ADD A,(X) 47 1 4
che il computer utilizza per sapere quale bit della
ADD A,(Y) 4F 1 4
variabile rr deve settare. Questo numero binario
ADD A,rr 5F rr 2 4
occupa 1 byte.
rr = lindirizzo di memoria della Variabile di Da- Operazione: il contenuto di una variabile viene
ta Space. Questo indirizzo di 1 byte. sommato al contenuto dellAccumulatore ed il ri-
sultato delloperazione memorizzato nellAccu-
Tutta listruzione b11011rr occupa un totale di 2 mulatore.
byte, come potete vedere nella terza colonna de-
nominata bytes. A = registro dellAccumulatore.
X-Y-V-W = registri del micro.
Nella quarta colonna (ciclo) sono riportati i nume- rr = 1 byte di indirizzo di una Variabile.
ri di passi necessari al microprocessore per ese- = Z settato se il risultato 0, resettato se di-
guire listruzione. verso da 0.
= C resettato prima delloperazione e si setta
Nella quinta colonna (Flags Z - C) trovate degli a- automaticamente se laddizione genera overflow.
ADDI Addition Immediate CALL Call Subroutine
Formato opcode bytes cicli flags Formato opcode bytes cicli flags
ADDI dst,src Z C CALL dst Z C
ADDI A,nn 57 nn 2 4 CALL abc c0001 ab 2 4 * *
Operazione: un numero viene sommato al conte- Operazione: viene utilizzata per chiamare una su-
nuto dellAccumulatore ed il risultato dellopera- broutine. Ogni volta che viene eseguita una Call
zione memorizzato nellAccumulatore. il Program Counter viene memorizzato nel livello
corrente di Stack e questultimo si alza di un livel-
A = registro dellAccumulatore. lo. Nel micro ST62 il numero massimo dei livelli di
nn = numero di 1 byte (da 0 a 255). Stack 6.
= Z settato se il risultato 0, resettato se di-
verso da 0. abc = etichetta della subroutine da eseguire e-
= C resettato prima delloperazione e si setta spressa in 3 semibytes per un totale di 12 bit.
automaticamente se laddizione genera overflow. * = Z - C non influenzati.
Formato opcode bytes cicli flags Formato opcode bytes cicli flags
AND dst,src Z C CLR dst Z C
AND A,A BF FF 2 4 * CLR A DF FF 2 4
AND A,X BF 80 2 4 * CLR X 0D 80 00 3 4 * *
AND A,Y BF 81 2 4 * CLR Y 0D 81 00 3 4 * *
AND A,V BF 82 2 4 * CLR V 0D 82 00 3 4 * *
AND A,W BF 83 2 4 * CLR W 0D 83 00 3 4 * *
AND A,(X) A7 1 4 * CLR rr 0D rr 00 3 4 * *
AND A,(Y) AF 1 4 *
AND A,rr BF rr 2 4 * Operazione: serve per resettare lAccumulatore,
un Registro o una Variabile.
Operazione: funzione di And tra lAccumulatore
ed una Variabile. Il risultato della funzione me- A = registro dellAccumulatore.
morizzato nellAccumulatore. X-Y-V-W = registri del micro.
rr = 1 byte di indirizzo di una Variabile.
A = registro dellAccumulatore. = Z settato.
X-Y-V-W = registri del micro. = C resettato.
rr = 1 byte di indirizzo di una Variabile. * = Z - C non influenzati.
= Z settato se il risultato 0, resettato se di-
verso da 0. COM Complement
* = C non influenzato.
Formato opcode bytes cicli flags Formato opcode bytes cicli flags
Z C Z C
JRC e e110 1 2 * * JRR b,rr,ee b00011 rree 3 5 *
Operazione: viene utilizzata per fare un salto con- Operazione: viene utilizzata per fare un salto con-
dizionato dal Carry Flag quando questo setta- dizionato dal bit di una Variabile quando questo
to. resettato.
e = numero che rappresenta la distanza di byte b = numero binario di tre bit di indirizzo.
delletichetta di salto rispetto al Program Counter. rr = 1 byte di indirizzo di una Variabile.
Il numero possibile di bytes di salto 15 prima e ee = numero che rappresenta la distanza di byte
16 dopo rispetto al Program Counter. delletichetta di salto rispetto al Program Counter.
* = Z e C non vengono in alcun modo influenzati, Il numero possibile di bytes di salto 126 prima
quindi mantengono lo stesso stato, livello logico 0 e 129 dopo rispetto al Program Counter.
o livello logico 1, in cui si trovavano prima delli- * = Z non viene in alcun modo influenzato, quindi
struzione. mantiene lo stesso stato, livello logico 0 o livello lo-
gico 1, in cui si trovava prima dellistruzione.
= C contiene il valore del bit testato.
JRNC Jump Relative on Non Carry Flag
JRS Jump Relative if Set
Formato opcode bytes cicli flags
Z C Formato opcode bytes cicli flags
JRNC e e010 1 2 * * Z C
JRS b,rr,ee b10011 rree 3 5 *
Operazione: viene utilizzata per fare un salto con-
dizionato dal Carry Flag quando questo reset- Operazione: viene utilizzata per fare un salto con-
tato. dizionato dal bit di una Variabile quando questo
settato.
e = numero che rappresenta la distanza di byte
delletichetta di salto rispetto al Program Counter. b = numero binario di tre bit di indirizzo.
Il numero possibile di bytes di salto 15 prima e rr = 1 byte di indirizzo di una Variabile.
16 dopo rispetto al Program Counter. ee = numero che rappresenta la distanza di byte
* = Z e C non vengono in alcun modo influenzati, delletichetta di salto rispetto al Program Counter.
quindi mantengono lo stesso stato, livello logico 0 Il numero possibile di bytes di salto 126 prima
o livello logico 1, in cui si trovavano prima delli- e 129 dopo rispetto al Program Counter.
struzione. * = Z non viene in alcun modo influenzato, quindi
mantiene lo stesso stato, livello logico 0 o livello lo-
gico 1, in cui si trovava prima dellistruzione.
JRNZ Jump Relative on Non Zero Flag = C contiene il valore del bit testato.
Formato opcode bytes cicli flags JRZ Jump Relative on Zero Flag
Z C
JRNZ e e000 1 2 * * Formato opcode bytes cicli flags
Z C
Operazione: viene utilizzata per fare un salto con- JRZ e e100 1 2 * *
dizionato dal Zero Flag quando questo reset-
tato. Operazione: viene utilizzata per fare un salto con-
dizionato dal Zero Flag quando questo settato.
e = numero che rappresenta la distanza di by-
te delletichetta di salto rispetto al Program e = numero che rappresenta la distanza di byte
Counter. Il numero possibile di bytes di salto delletichetta di salto rispetto al Program Counter.
15 prima e 16 dopo rispetto al Program Coun- Il numero possibile di bytes di salto 15 prima e
ter. 16 dopo rispetto al Program Counter.
* = Z e C non influenzati. * = Z e C non influenzati.
LD Load NOP No Operation
Formato opcode bytes cicli flags Formato opcode bytes cicli flags
LD dst,src Z C Z C
LD A,X 35 1 4 * NOP 04 1 2 * *
LD A,Y 75 1 4 *
LD A,V B5 1 4 * Operazione: viene normalmente utilizzata per
LD A,W F5 1 4 * creare dei piccoli ritardi. Ogni NOP crea un ritar-
LD X,A 3D 1 4 * do di 2 cicli.
LD Y,A 7D 1 4 *
LD V,A BD 1 4 * * = Z - C non influenzati.
LD W,A FD 1 4 *
LD A,(X) 07 1 4 * RES Reset Bit
LD (X),A 87 1 4 *
LD A,(Y) 0F 1 4 * Formato opcode bytes cicli flags
LD (Y),A 8F 1 4 * RES bit, dst Z C
LD A,rr 1F rr 2 4 * RES b,A b01011 FF 2 4 * *
LD rr,A 9F rr 2 4 * RES b,rr b01011 rr 2 4 * *
Operazione: serve per caricare il valore contenu- Operazione: serve per resettare uno degli 8 bit
to in una Variabile, nellAccumulatore o in un Re- della Variabile o dellAccumulatore di destinazio-
gistro. Pu caricare il valore anche tra Registro ne.
ed Accumulatore Per questa istruzione bisogna
sempre utilizzare lAccumulatore. A = registro dellAccumulatore
b = numero binario di tre bit di indirizzo.
A = registro dellAccumulatore.
rr = 1 byte di indirizzo di una Variabile.
X-Y-V-W = registri del micro.
* = Z - C non influenzati.
rr = 1 byte di indirizzo di una Variabile.
= Z settato se il risultato 0, resettato se di-
RET Return from Subroutine
verso da 0.
* = C non viene in alcun modo influenzato, quindi
mantiene lo stesso stato, livello logico 0 o livello lo- Formato opcode bytes cicli flags
gico 1, che aveva prima dellistruzione. Z C
RET CD 1 2 * *
LDI Load Immediate Operazione: viene utilizzata per ritornare da una
subroutine al punto della chiamata Call. Quando
Formato opcode bytes cicli flags viene eseguita una RET si abbassa di un livello lo
LDI dst,src Z C Stack ed il Program Counter assume il valore re-
LDI A,nn 17 nn 2 4 * lativo al livello corrente di Stack.
LDI X,nn 0D 80 nn 3 4 * *
LDI Y,nn 0D 81 nn 3 4 * * * = Z e C non influenzati.
LDI V,nn 0D 82 nn 3 4 * *
LDI W,nn 0D 83 nn 3 4 * * RETI Return from Interrupt
LDI rr,nn 0D rr nn 3 4 * *
Formato opcode bytes cicli flags
Operazione: serve per caricare un numero da 0 a Z C
255 in una Variabile, nellAccumulatore o in un RETI 4D 1 2
Registro.
Operazione: viene utilizzata per ritornare da una
A = registro dellAccumulatore. routine di interrupt al punto precedente allevento
X-Y-V-W = registri del micro. di interrupt. Quando viene eseguita una RETI si ab-
nn = numero di 1 byte (da 0 a 255). bassa di un livello lo Stack ed il Program Counter
rr = 1 byte di indirizzo di una Variabile. assume il valore relativo al livello corrente di Stack.
= Z settato se il risultato 0, resettato se di-
verso da 0. = Z e C vengono riportati alla condizione logica
* = Z - C non influenzati. in cui si trovavano prima dellinterrupt.
RLC Rotate Left Through Carry SUB Subtraction
Formato opcode bytes cicli flags Formato opcode bytes cicli flags
Z C SUB dst,src Z C
RLC A AD 1 4 SUB A,A DF FF 2 4
SUB A,X DF 80 2 4
Operazione: serve per spostare di un posto verso SUB A,Y DF 81 2 4
sinistra gli 8 bit dellAccumulatore. Il bit 7 passa SUB A,V DF 82 2 4
nel Carry spostando il valore che si trovava sul SUB A,W DF 83 2 4
Carry sul bit 0 dellAccumulatore. SUB A,(X) C7 1 4
SUB A,(Y) CF 1 4
A = registro dellAccumulatore. SUB A,rr DF rr 2 4
= Z settato se il risultato 0, resettato se di-
verso da 0. Operazione: il contenuto di una variabile viene
= C riporta il valore del bit 7. sottratto allAccumulatore ed il risultato dello-
perazione viene memorizzato nellAccumulato-
SET Set Bit re.
Nella rivista N.184 vi abbiamo detto che il file *.PRJ Fig.90 Se in fase di compilazione non sta-
utilizzato dal simulatore per testare il programma to creato il file *.SYM, nel file .PRJ le eti-
formato: chette sono codificate in esadecimale.
ast6 -s %1
correggere in maniera temporanea il file .PRJ jrz mains1 ;(istruzione lunga 1 byte)
correggere in maniera definitiva il file .ASM
poich mancano 2 bytes dovremo aggiungere due
Le correzioni temporanee riguardano il solo file istruzioni Nop per avere di nuovo 3 bytes:
.PRJ, quindi spegnendo il computer o comunque
uscendo dal programma DSE622 vengono tutte jrz mains1 nop nop
perdute.
Ad ogni modo ricordatevi di non eccedere con i
Le correzioni definitive possono essere portate so- NOP perch occupereste solo della memoria per
lo sul file .ASM, ma spegnendo il computer o u- eseguire istruzioni a vuoto.
scendo dal programma rimangono in memoria. Quindi se questo vi accadesse vi converr correg-
gere e rivedere tutto il programma direttamente nel
Leggendo quanto sopra sembrerebbe pi logico fa- sorgente.
re le correzioni direttamente nel sorgente, cio nel Per conoscere la lunghezza in byte di tutte le i-
file con estensione .ASM, ma non sempre convie- struzioni potete consultare le tabelle della guida
ne andare in questa direzione per i seguenti sem- pratica che trovate allinizio dellarticolo.
plici motivi:
GLI errori nel programma BTEST
potrebbero esserci altri errori oltre a quello che
avete corretto, Come vi abbiamo spiegato nella rivista N.184, nel
potreste inserirne uno proprio durante la corre- programma BTEST.ASM abbiamo inserito degli er-
zione. rori, per la precisione tre, al fine di mostrarvi co-
me procedere per poterli individuare e di conse-
Inoltre per ricontrollare il programma dovreste nuo- guenza correggere.
vamente compilare il file .ASM, creare il file .PRJ La tipologia degli errori che vi proponiamo con
e settare daccapo i piedini per effettuare una cor- questo esempio pratico ci permette di spiegarvi
retta simulazione. quali test vanno eseguiti e come vanno eseguiti
per trovare gli errori.
E quindi consigliabile apportare, dove possibile, le Inoltre vi spiegheremo come apportare le modifi-
correzioni in modo temporaneo sul file .PRJ, poi che temporanee e definitive in qualsiasi program-
simulare lesecuzione del programma e, una volta ma in linguaggio Assembler per micro ST6.
verificato che tutto funziona regolarmente, potrete
correggere definitivamente il sorgente. Per simulare il programma BTEST prima neces-
sario che lo compiliate in Assembler, in modo da
Tuttavia non tutte le correzioni si possono appor- creare il file BTEST.HEX, e che generiate il rispet-
tare nel file .PRJ. tivo project, cio il file BTEST.PRJ, che viene uti-
Ad esempio non si pu sostituire unistruzione lun- lizzato dal simulatore per testare il programma.
ga 2 bytes con una lunga 3 bytes, perch il byte Per eseguire tutte queste operazioni rimandiamo a
in eccesso andrebbe a ricoprire il primo byte delli- quanto gi ampiamente descritto nel paragrafo
struzione successiva sconvolgendo completa- Compilare in assembler il programma atest.asm
mente le funzioni del programma. riportate a pag.112 e seguenti della rivista N.184.
Quindi prima di sostituire unistruzione con unaltra
bisogna sempre controllare che la nuova istruzio- Quando appare la finestra di fig.97, aprite il file se-
ne non risulti pi lunga di quella da sostituire. lezionando dal menu Project, in alto a sinistra sul-
Ad esempio listruzione JRZ (che lunga 1 byte) la barra del menu, il comando Open Project.
Si aprir cos la finestra di dialogo File Open visi- Prima di testare il programma dovete inserire le
bile in fig.98. variabili della porta A e della porta B nella finestra
Nella finestra a sinistra selezionate la scritta Watch.
BTEST.PRJ quindi cliccate su OK. Anche per questa operazione vi consigliamo di ri-
A video compariranno tutte le finestre visibili in leggere quanto spiegato nella rivista precedente
fig.99, che vi consentono di controllare istruzione sotto il paragrafo Inserire una variabile nella fine-
per istruzione il programma. stra Watch.
In questo modo potrete verificare per ogni istru-
zione lo stato logico dei piedini dingresso (porta
A) e duscita (porta B).
PRIMO TEST
FFE 09 88 jp inizio
Fig.97 Dopo il nome del DSE, nella prima ri- visibile anche in fig.99.
ga in alto trovate la barra dei menu a ten-
dina, nella riga immediatamente sotto tro- Cliccate sullicona passo-passo (la 5 posta sul ri-
vate la barra delle icone o degli strumenti ghello in alto vedi fig.100) fino ad arrivare alleti-
che vi consente di accedere rapidamente ai chetta ripeti visibile in fig.101 cio:
comandi di frequente utilizzo.
8B6 0D D8 FE ripeti ldi wdog,FEH
Attivate la finestra Data cliccando sulla scritta cor- Innanzitutto se nella finestra Disassembler non
rispondente, quindi cliccate sul menu Data della viene evidenziata letichetta ripeti, cliccate sulla
barra dei menu e selezionate Goto Address. scritta Disassembler nella barra dei menu e sele-
Nella finestra di dialogo che appare cercate la va- zionate Set New PC (vedi fig.111).
riabile port_b, selezionatela e quindi cliccate su Nella finestra di dialogo che appare cercate leti-
OK. chetta ripeti cliccando sulla freccia gi e quando
Nella finestra Data verr evidenziato il valore esa- lavrete trovata selezionatela quindi cliccate su OK
decimale 0F che corrisponde al contenuto della va- (vedi fig.112).
riabile port_b.
Cliccate nuovamente sul menu Data e questa vol- Per resettare i piedini della porta A attivate la fi-
ta selezionate Edit Data. nestra Data cliccando sul nome corrispondente.
Nella finestra di dialogo che appare cliccate sulla Cliccate sulla scritta Data della barra dei menu in
scritta Bits per aprire la finestra di dialogo visibile modo che appaia la piccola finestra visibile in
in fig.123. fig.124 e selezionate Goto Address.
Se nella finestra di dialogo non compare C0, digi-
tate manualmente questo indirizzo (vedi fig.125) e
cliccate su OK.
Ora cliccate due volte sul valore 0F evidenziato
nella finestra Data e nella finestra di dialogo che
appare cliccate su Bits.
Cliccando nelle caselle in cui appare la V, riporta-
te tutti i piedini dingresso di port_a a livello logi-
co 0 (le caselle 0 - 1 - 2 - 3 devono essere vuote)
come visibile in fig.126.
A questo punto cliccate su OK per tornare alla fi-
Fig.123 Come potete vedere tutti i piedini del- nestra principale del DSE.
la porta B sono settati, cio sono a livello lo-
gico 1. Uscite cliccando su Cancel.
Questa istruzione significa: salta a mains3 se il pie- Poich dovete resettare il bit 2, per trasformare
dino 2 di port_b resettato, cio se PB2 a li- questo numero decimale in un numero binario po-
vello logico 0. tete utilizzare la Tabella sotto riportata.
In altre parole verifica lo stato logico del piedino
2 di port_b, perch se questo risulta gi a livello Tabella N.1
logico 0 non lo resetta nuovamente.
Tuttavia noi sappiamo gi che questo piedino ri- DECIMALE BINARIO
masto a livello logico 1, perch labbiamo con- 0 0 0 0
trollato tramite la finestra Watch (vedi figg.127 e 1 0 0 1
129). 2 0 1 0
Di conseguenza cliccando su passo-passo il 3 0 1 1
programma non salta a mains3, ma prosegue 4 1 0 0
allistruzione successiva che resetta il piedino 5 1 0 1
PB2: 6 1 1 0
7 1 1 1
8EA 5B C1 set 2,port_b Come potete vedere il numero decimale 2 corri-
sponde al numero binario 0 1 0.
Ecco dov lerrore: infatti il piedino non deve es- Pertanto per trasformare listruzione Set 2, che
sere settato, ma resettato quindi listruzione er- errata, cio:
rata set e quella giusta : res 2,port_b
010 11011 (i 3 bit di sinistra sono b dellopcode)
Su questa istruzione possiamo apportare una
correzione temporanea anche se la correzione nella corretta istruzione Res 2, dobbiamo conside-
risulta un poco pi complessa, perch, come a- rare questo numero binario:
vrete gi intuito, non dobbiamo modificare la
parte dellopcode che si riferisce alloperando, 010 01011
ma quella che contiene listruzione vera e pro-
pria. Per convertire questo numero binario in un numero
esadecimale potete utilizzare le tabelle di conver-
Lopcode dellistruzione SET (vedi tabella a sione a pag.381 del nostro volume Handbook.
pag.103): Se non disponete di questo Handbook vi convie-
ne procurarvelo perch troverete spiegato come si
b11011 rr (Setta un piedino) fa a convertire un numero binario in un numero
decimale o esadecimale.
Lopcode dellistruzione RES (vedi tabella a
pag.102) invece: Nelle Tabelle dellHandbook potete vedere che li-
struzione Set 2:
b01011 rr (Resetta un piedino)
0101-1011 equivale al numero esadecimale 5B
Il secondo byte di queste istruzioni dato da rr,
che corrisponde allindirizzo delloperando, nel no- e che listruzione di Res 2:
stro caso port_b, cio C1.
Il primo byte dellistruzione RES dato da 0100-1011 equivale al numero esadecimale 4B
b+01011, dove b equivale a 3 bit che definiscono
quale bit delloperando da 0 a 7 deve essere re- Ora che sapete come correggere listruzione, atti-
settato mentre 01011 equivale allistruzione res in vate la finestra Code quindi dal menu Code sele-
binario. zionate il comando Goto Address e nella finestra
di dialogo che appare digitate 8EA (vedi fig.131), Cliccate sullicona passo-passo per far ese-
che lindirizzo di memoria Program Space corri- guire listruzione e nella finestra Watch vedre-
spondente allistruzione set 2, port_b. te che il valore esadecimale di port_b diven-
Potete vedere questo indirizzo nella finestra Di- tato 00.
sassembler sotto la colonna Add.
Se cliccate su OK, nella finestra Code verr evi- Cliccate ora sullicona esecuzione automatica
denziato il numero 5B (vedi fig.132). (vedi fig.115) ed il programma, eseguita qual-
Cliccate due volte su questo numero quindi nella che istruzione, si fermer di nuovo al break-
finestra di dialogo che appare scrivete il nuovo va- point.
lore, cio 4B (vedi fig.133). Per essere sicuri di non aver variato altri valori men-
tre correggevate listruzione, meglio far eseguire
il programma un paio di volte cliccando sempre su
esecuzione automatica.
Se non esistono altri errori il programma eseguir
un ciclo completo e si fermer sempre al break-
point.
Durante questa fase potrete osservare nella fine-
stra Watch che le variabili port_a e port_b non
cambiano di valore.
Fig.131 Poich dovete correggere listru-
zione set 2, port_b, nella finestra Goto Ad- Anche se il programma ci conferma che non esi-
dress digitate 8EA, che lindirizzo di me- stono altri errori e tutto procede regolarmente, sap-
moria Program Space di questa istruzione. piamo che esiste un altro errore, che noi abbiamo
Quindi cliccate su OK. volutamente inserito nel file BTEST.ASM.
Per poter scoprire questultimo errore occorre ne-
cessariamente fare un quarto test.
QUARTO TEST
Fig.132 Nella finestra Code viene eviden- Il terzo errore da noi inserito riguarda un passag-
ziato 5B, che il valore esadecimale corri- gio insidioso e molto subdolo, perch non cambia
spondente allistruzione set 2. Cliccate due la logica dellesecuzione quindi potrebbe non es-
volte su questo valore, per aprire la finestra
sere mai trovato da chi non ha molta esperienza.
di dialogo visibile in fig.133.
Infatti malgrado ci sia questo errore il programma
funziona correttamente.
8EC 0D D8 FE mains3 ldi wdog, FEH Poich il piedino PA3 sempre settato cliccando
passo-passo il programma prosegue allistruzione
che serve a caricare il watchdog. successiva:
Premete ancora sullicona passo-passo per pas-
sare alla istruzione successiva: 8F2 D3 C1 09 jrs 3, port_b, mains4
8EF C3 C0 07 jrr 3,port_a, main03 A questo punto per PB3 gi stato settato, quin-
di premendo passo-passo il programma prosegue
Questa istruzione significa: se il piedino 3 di allistruzione con etichetta mains4 per controllare
port_a resettato, cio a livello logico 0, il pro- lo stato logico degli ultimi piedini.
gramma deve saltare allistruzione con etichetta
main03. In pratica il programma esegue due volte una
Poich abbiamo appena posto questo piedino a li- serie distruzioni per controllare i piedini PA3 e
vello logico 1, il programma non salta a main03 PB3.
ma prosegue allistruzione successiva ed infatti Questo doppio controllo non crea nessun pro-
cliccando sullicona passo-passo viene evidenzia- blema sulla funzionalit, per se un domani ap-
ta: porterete delle modifiche al programma inserendo
altre istruzioni proprio tra queste ultime righe che
8F2 D3 C1 09 jrs 3, port_b, mains4 abbiamo analizzato, questo potrebbe crearvi dei
grossi problemi e potrebbe diventare difficile indi-
Questa istruzione dice che se il piedino 3 di port_b viduare lerrore.
settato, cio a livello logico 1, il programma
deve saltare allistruzione con etichetta mains4. Ad esempio se inserite un contatore che si incre-
Poich questo piedino a livello logico 0 (come menta di una unit ogni volta che il programma
possiamo vedere nella finestra Watch), cliccando controlla i quattro piedini, constaterete che men-
passo-passo il programma prosegue allistruzione tre per gli altri piedini la somma si incrementa di
successiva: una unit, per la routine del piedino PA3 si incre-
menta di due unit perch esegue per due volte
8F5 DB C1 set 3, port_b consecutive questa routine.
Questa istruzione setta il piedino duscita PB3 e Per rintracciare questo errore non necessario
cliccando su passo-passo viene evidenziata: che chi scrive il programma sappia a memoria tut-
te le istruzioni, ma importante che abbia ben chia-
8F7 C9 8E jp mains3 ro lo schema logico.
E per questo motivo che questi tipi di errori sono
difficili da individuare.
8F7 C9 8E jp mains3
Fig.135 Per correggere in maniera definiti-
che fa ripetere per due volte consecutive questa
va il programma BTEST necessario ap-
routine.
portare le correzioni nel sorgente, cio nel
Listruzione va corretta con jp mains4. file BTEST.ASM. Dal DSE possibile acce-
dere direttamente alleditor dellST6, sce-
Conoscendo i 3 errori da noi inseriti nel program- gliendo ST6 dal menu Tools.
ma BTEST.PRJ, possiamo andare direttamente
nel file BTEST.ASM per correggerli tutti definitiva-
mente.
Nel caso voleste conservare gli errori presenti in
questo programma per eventuali test, prima di ap-
portare le modifiche copiate il file BTEST.ASM con
un altro nome, ad esempio CTEST.ASM, utiliz-
zando le funzioni di copia di Windows.
Infine andate al terzo asterisco *92 (che corri- Fig.137 In questa figura potete vedere la
sponde a 154:1) e modificate jp mains3 in jp parte del programma BTEST.ASM con le i-
mains4. struzioni gi corrette.
Windows 95 e ST6
Sulla rivista N.183 vi avevamo proposto una velo-
ce soluzione per riuscire a caricare ed utilizzare,
pur avendo installato WINDOWS 95, i programmi
che utilizzano il sistema operativo MS-DOS 6.2.
Fig. 7
Fig. 4
Fig. 8
Fig. 9
Fig. 5
Nel menu che appare cliccate sulla scritta Pro-
priet (vedi fig.6) e quando appare la finestra di
dialogo visibile in fig.7 controllate che non siano
selezionate le opzioni solo lettura e nascosto, nel
qual caso cliccate nelle rispettive caselle per to-
gliere la selezione.
Fig. 14
Fig. 17
Fig. 15
Fig. 18
Fig. 16 Fig. 19
Apparir la finestra di dialogo Apri con (vedi Noi abbiamo scelto un tempo di 10 secondi, ma
fig.20) in cui dovrete selezionare uno di questi pro- potete dare a questa variabile un altro valore.
grammi di gestione testi, EDIT, NOTEPAD, Scaduto questo tempo, se non avete scelto nes-
WINWORD. Poich questi programmi sono equi- suna modalit, viene automaticamente avviato
valenti potrete indifferentemente scegliere luno o Windows 95 in modalit normale.
laltro cliccando due volte sul nome corrisponden-
te. Noi abbiamo usato Edit. Nota: se non desiderate far apparire il logo di Win-
dows 95 inserite in coda alle altre la scritta Logo=0
(vedi fig.22).
Fig. 22
Salvate il file utilizzando il comando Salva dal me-
nu File ed uscite.
Se non compare BootMulti=1 dovete necessaria- Ora cliccate sulla scritta Visualizza del menu di
mente inserirla. Le altre scritte che dovete inserire Gestione Risorse e selezionate Opzioni (vedi
come visibile in fig.21 sono: fig.15).
Fig. 21
Lopzione BootMenu=1 ci mostra automaticamen-
te ad ogni avvio il menu delle modalit di carica-
Fig. 23
mento di MS-DOS e di Windows 95 senza pre-
mere F8. Uscite dal programma Gestione Risorse, chiu-
Lopzione BootMenuDelay stabilisce per quanto dete Windows 95 quindi ricaricatelo.
tempo, espresso in secondi, questo menu deve ri- A questo punto la modifica proposta dal Sig. Chi-
manere a video. ribiri sar operativa.
Anche se negli ultimi numeri della rivista non sono level (vedi Riv.184).
apparsi degli articoli relativi al microprocessore
ST6, non pensate volessimo abbandonarlo. 3 passo o ciclo il microprocessore memorizza
Purtroppo dobbiamo accontentare anche quei let- nel registro di Stack 1 lindirizzo di Program Spa-
tori che non vogliono sentir parlare di computer, di ce nellistruzione che si trova immediatamente do-
software e di microprocessori, ma solamente di pro- po listruzione call.
getti Hi-Fi, oppure di ricevitori, microspie, strumenti
di misura, ecc. 4 passo o ciclo il microprocessore muove nel
PC (Program Counter) lindirizzo della subroutine
Ad ogni modo durante questa pausa forzata ci so- della call.
no state richieste da parte di Istituti Tecnici e pic-
cole Industrie una infinit di spiegazioni supple- Listruzione ret esegue 2 cicli macchina, vale a di-
mentari e ci significa che abbiamo spiegato poco re che il microprocessore quando esegue questa i-
o in modo non sufficientemente comprensibile. struzione compie 2 passi:
Prendendo spunto da tutte le domande ricevute og- 1passo o ciclo il microprocessore riconosce il
gi vogliamo tentare di darvi delle spiegazioni pi codice operativo opcode della istruzione ret.
chiare, avvertendovi al tempo stesso di non fare
troppo affidamento in quanto riportato nei diversi 2 ciclo il microprocessore sposta il contenuto
manuali per ST6. del registro Stack 1 nel PC (Program Counter) tra-
PER PROGRAMMARE
In questultimi infatti vi sono molti errori e nessuna sferendo ad un livello pi basso i valori contenuti
errata corrige, quindi in presenza di un insucces- nei rimanenti Stack (vedi Riv.184).
so si indotti ad autoaccusarsi di incapacit, men- Molti ci hanno chiesto quanto tempo dura un ciclo
tre la colpa di chi pubblica questi manuali senza macchina e, poich questo dipende dalla fre-
aver mai visto o utilizzato in pratica un solo ST6. quenza del quarzo, riportiamo la semplice opera-
zione necessaria per ricavarlo:
Nella rivista N.185 vi abbiamo spiegato che per ci- Se usiamo un quarzo da 8 MHz, per una istruzio-
cli macchina si intende il numero di passi neces- ne call occorre un tempo di:
sari al micro per eseguire unistruzione.
Poich questa nostra spiegazione non stata per (13 : 8) x 4 = 6,5 microsecondi
tutti sufficientemente chiara, cercheremo di illu-
strarvela meglio con un semplice esempio. e per una istruzione ret un tempo di:
Il micro si posiziona in questa locazione di memo- Se volete sapere qualcosa di pi sugli interrupts
ria quando si verificano queste tre condizioni: vi consigliamo di rileggere la rivista N.175/176.
1 2 4 8 16 32 RESET Wdg
Quindi nel calcolo del tempo totale dovremo som- Poich sappiamo che un ciclo di Watchdog dura
mare due volte il tempo di esecuzione della su- 384 microsec., per evitare che il Watchdog vada a
broutine delay. 0 prima di 737,75 microsecondi dovremo neces-
Iniziamo ora il conteggio dei tempi. sariamente fargli fare 2 cicli in modo da ottenere
un tempo totale di 384 x 2 = 768 microsecondi.
- In rout01 vi sono 3 istruzioni di 4 cicli macchina
per un totale di 3 x 4 = 12 cicli, quindi otterremo A questo punto sembrerebbe logico che per fare e-
un tempo totale di: seguire 2 cicli al Watchdog occorra caricare sul
suo registro il numero 2, invece dovremo carica-
12 x 1,625 microsec. = 19,50 microsec. re un numero inferiore di una unit, cio 2-1 = 1
essendo necessario conteggiare anche il ciclo 0.
- rout01 richiama anche la call dsend, quindi nel Al valore cos ottenuto dobbiamo poi sempre som-
calcolo dovremo sommare anche i tempi di dsend. mare 2, perch il bit SR del Watchdog Register
deve essere sempre a 1 altrimenti il microproces-
- Nel dsend vi sono 18 istruzioni: di queste ve ne sore si resetta.
sono 17 di 4 cicli macchina (17 x 4 = 68 cicli) ed Quindi nella prima istruzione per far eseguire 2 ci-
una istruzione di 2 cicli macchina (1 x 2 = 2 cicli), cli dovremo scrivere:
quindi otterremo un tempo totale di:
rout01 ldi wdog,130
(68 + 2) x 1,625 microsec. = 113,75 microsec.
Se volessimo eseguire 4 cicli dovremmo scrivere:
Anche se nella subroutine delay vi sono 2 istruzio-
rout01 ldi wdog,194
ni di 4 cicli macchina, occorre far presente che le
due istruzioni delay_A e delay_B vengono esegui-
Per eseguire 11 cicli dovremmo scrivere:
te 30 volte. Svolgendo i nostri calcoli otterremo:
rout01 ldi wdog,82
delay = 4 cicli macchina
delay_A = 4 x 30 =120 cicli macchina A questo punto vi chiederete perch per 2 cicli ab-
delay_B = 2 x 30 = 60 cicli macchina biamo scritto wdog,130, per 4 cicli abbiamo scrit-
delay_C = 2 cicli macchina to wdog,194, mentre per 11 cicli abbiamo scritto
wdog,82.
Facendo la somma otterremo un totale di 186 ci-
cli macchina, quindi un tempo di: Per farvelo capire utilizziamo la tabella qui sotto ri-
portata:
186 x 1,625 microsec. = 302,25 microsec.
Tabella di corrispondenza Pesi/Cicli
Poich questa subroutine viene eseguita due vol-
te questo tempo raddoppier in 604,50 microsec. 128 64 32 16 8 4 2 1 peso Binario
1 2 4 8 16 32 SR C Wdog
Sommando tutti i tempi parziali otterremo un tem-
po totale di esecuzione di:
Poich per ottenere 2 cicli dobbiamo fare 2-1= 1,
basta guardare nella riga sotto per scoprire che il
tempo rout01 19,50
numero 1 corrisponde ad peso binario 128.
tempo dsend 113,75
Al valore ottenuto ora dobbiamo sommare 2 per-
tempo delay 604,50
ch il bit SR sia sempre settato a 1, perci avremo
tempo totale 737,75 microsecondi 128+2 = 130.
Per ottenere 4 cicli dobbiamo fare 4-1= 3, ma guar- guenza dei singoli loro piedini, avviene tramite u-
dando la riga sotto non troveremo questo nume- na serie di tre registri chiamati:
ro, quindi per ottenerlo dovremo necessariamente
sommare 1+2 = 3 e poich il numero 1 corrispon- pdir_a popt_a port_a (per la Porta A)
de ad un peso binario di 128 e il numero 2 ad un pdir_b popt_b port_b (per la Porta B)
peso binario di 64, dovremo fare la somma di que- pdir_c popt_c port_c (per la Porta C)
sti due pesi (128+64 = 192).
A questo valore andiamo ora ad aggiungere sem- Nella Tabella N.3 riportiamo cosa bisogna scrive-
pre 2 e a questo punto avrete certamente compreso re nei tre registri pdir - popt - port per predispor-
perch abbiamo scritto wdog,194. re questi piedini come Ingressi o come Uscite.
Per ottenere 11 cicli dobbiamo fare 11-1= 10 che, Quando si scrive un programma, si dovrebbe cer-
non essendo presente nella riga sotto, potremo ot- care di utilizzare i piedini di ogni singola porta tut-
tenere soltanto sommando 2+8 = 10. ti come Ingressi oppure tutti come Uscite.
Poich 2 corrisponde ad un peso binario di 64 e
8 corrisponde ad un peso binario di 16 dovremo Poich spesso ci si trova nella necessit di utiliz-
calcolare la somma dei due pesi 64+16 = 80, ag- zare i piedini della stessa porta alcuni come In-
giungere sempre il valore 2 e di conseguenza scri- gressi e altri come Uscite, non consigliabile u-
vere wdog,82. sare le istruzioni SET(Set Bits) e RES(Reset Bits)
direttamente sulla porta che stiamo gestendo, per-
Per ottenere 51 cicli dovremo fare 51-1 = 50, poi ch il microprocessore potrebbe generare dei falsi
vedere nella colonna del wdog quali numeri do- impulsi sui piedini compromettendo la corretta e-
vremo sommare per ottenere 50 e qui avremo una secuzione del programma.
sola possibilit:
Un piccolo stratagemma per ovviare a questo in-
32 + 16 + 2 = 50 conveniente quello di utilizzare una variabile de-
finita in Data Space come area di parcheggio, ca-
Se sommeremo i pesi binari corrispondenti ai nu- ricare al suo interno il contenuto del registro della
meri sopra riportati otterremo 4+8+64 = 76, valore porta, settare o resettare il bit relativo e infine co-
al quale andremo ad aggiungere 2 e quindi nel re- piare nuovamente il contenuto nel registro della
gistro di Watchdog scriveremo wdog,78. porta come qui sotto riportato:
porta A0 A1 A2 A3 B0 B1 B2 B3 B4 B5 B6 B7
piedino 19 18 17 16 15 14 13 12 11 10 9 8
TABELLA N.2 per micro ST62/E15 - ST62/E25 e per micro ST62/T15 - ST62/T25
porta A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C4 C5 C6 C7
piedino 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 9 8 7 6
A0
A1
A2
A3
PORTA A A4
1 28
A5 Fig.3 Allinterno dei micro della
2 27 A0
A6
A7
3 26 A1 serie T15-T25 non riprogramma-
4 25 A2
5 24 A3 bili e della serie E15-E25 che so-
B0 C7 6 23 A4 no riprogrammabili, troviamo tre
B1 C6 7 22 A5
B2 C5 8 21 A6 porte indicate A-B-C.
PORTA B B3 C4 9 20 A7 Nella Tabella soprariportata ab-
B4 10 19 B0
B5 11 18 B1 biamo indicato a quale numero di
B6 B7 12 17 B2
B3
piedino corrispondono le tre por-
B6 13 16
B7
B5 14 15 B4 te A-B-C.
C4
C5
PORTA C C6
C7
INGRESSI USCITE
Registri
Fig.4 In questa Tabella indichiamo il numero che occorre scrivere nei tre registri pdir-popt-port
per far funzionare una porta come Ingresso o come Uscita. Per settare un piedino come IN-
GRESSO con PULL-UP dovremo scrivere nei tre registri 0-0-0.
Per spiegarci meglio, se dalla configurazione:
- Ingresso Pull-Up 000 Operatori Funzione Priorit
volessimo passare alla configurazione:
valore negativo 1
- Uscita Push-Pull 111
~ inversione di bit 1
dovremmo effettuare questi passaggi di configura-
* moltiplicazione 2
zione:
/ divisione 2
000-100-110-111 oppure 000-001-101-111 % modulo 2
>> sposta a destra 2
Se passeremo direttamente da 000 a 111 o se fa- << sposta a sinistra 2
remo 000-100-111, ci ritroveremo con un pro- + somma 3
gramma che potrebbe generare delle anomalie. sottrazione 3
Se da unUscita Push-Pull 111 volessimo passa- & funzione And 4
re direttamente ad un Ingresso Pull-up con Inter- | funzione Or 6
rupt 010 dovremmo effettuare queste configura-
zioni:
111-101-001-000-010 Dobbiamo far presente che se mettiamo delle pa-
oppure seguire laltra configurazione, cio: rentesi in una istruzione, ad esempio:
111-110-100-000-010
Osservando le frecce presenti nella fig.5 in cia- ldi var1,(seg1 - offset) /4
scuna di queste configurazioni, si pu facilmente
comprendere qual la strada da seguire per pas- nonostante la divisione /4 abbia una priorit 2, vie-
sare da una configurazione allaltra. ne eseguita prima loperazione seg1 offset an-
che se ha una priorit 3.
Fig.5 In questo disegno indichiamo i pas- LOperando pu essere costituito da una Variabi-
saggi ottimali per portarsi da una configu- le, un Registro, una Etichetta, un valore assolu-
razione ad unaltra (vedi Tabella N.4). Se to, cio un numero che pu essere espresso in
non seguirete questi passaggi obbligati ot- Binario, in Esadecimale o in Decimale.
terrete delle anomalie.
Anche una espressione pu essere utilizzata co-
me operando, ottenendo in questo modo il van-
ESPRESSIONI taggio di poter spostare dei blocchi di variabili da
un punto ad un altro di una memoria con una so-
Una Espressione costituita da numeri, da va- la operazione, riducendo cos eventuali errori.
riabili e da operatori.
Qui sotto riportiamo la priorit di questi operato- Sempre utilizzando una espressione come ope-
ri, che ci sar utile per stabilire lordine di esecu- rando, daremo al compilatore la possibilit di se-
zione di calcolo nel caso fossero presenti espres- lezionare i blocchi di istruzioni di una macro e di
sioni con pi operatori. includerli in un nuovo programma.
Ad esempio, se nella stessa espressione troviamo
una somma, una And e una inversione di bit, il Per farvi capire come usare una espressione co-
compilatore eseguir prima linversione di bit, poi me operando vi proponiamo alcuni esempi che po-
la somma e per ultima la funzione And. trete inserire in un qualsiasi vostro programma di
prova, verificandone il risultato con il software si- Nella prima istruzione la Direttiva .def associa la
mulatore che vi abbiamo presentato nelle riviste variabile seg1 allindirizzo di Data Space 088h.
N.184 e N.185.
Nella seconda istruzione la Direttiva .def associa
1 Esempio il valore risultante della Espressione seg1+1 al-
la variabile seg2.
In questo esempio vi facciamo vedere come si pu Essendo seg1 definito allindirizzo di memoria
utilizzare una espressione con la funzione valore 088h, lespressione seg1+1 viene semplificata du-
negativo. rante la compilazione in Assembler nel numero
esadecimale 088h + 1 = 089h.
Etichetta Istruzione Operando Questa variabile seg2 viene perci associata
allindirizzo di Data Space 089h.
seg1 .def 088h
offset .set -20h Nella terza istruzione la Direttiva .def associa il va-
inizio ldi seg1, offset lore risultante dalla Espressione seg2+1 alla va-
ldi x,-40h riabile seg3. Essendo seg2 definito allindirizzo di
ldi a,-offset memoria 089h, lespressione seg2+1 viene sem-
plificata in 089h + 1 = 08Ah.
Come si potr notare, nella prima istruzione la Di- Dichiarando le Variabili come qui sopra riportato,
rettiva .def associa la variabile seg1 allindirizzo di ridurremo lerrore di definire due o pi variabili nel-
Data Space 088h. la stessa cella di memoria.
Nella seconda istruzione la Direttiva .set associa Nellesempio qui sotto riportato si pu notare che
alla costante definita offset il valore risultante dall per errore la seg4 = 08ah risulta collocata nella
Espressione 20h (32 decimale) e il compilato- stessa cella di memoria di seg3.
re lo converte in E0h (224 decimale): questo per-
ch la funzione valore negativo genera il com- seg1 .def 088h
plemento a 256 di 32 che corrisponde a 224. seg2 .def 089h
seg3 .def 08ah
Nella terza istruzione, alletichetta inizio, ldi carica seg4 .def 08ah
nella variabile seg1 il valore associato a offset e
e questo errore non viene segnalato dal Compi-
cio E0h.
latore.
Nella quarta, listruzione ldi carica nel registro x il Un altro vantaggio che deriva dallutilizzo della so-
valore risultante dalla Espressione 40h (64 in luzione sopra consigliata si presenta nel caso vo-
decimale) e il compilatore lo converte in C0h (192 lessimo spostare la variabile di memoria seg1 in
decimale), perch anche in questo caso genera il un altra cella mantenendo sempre la successione
complemento a 256 di 64 che corrisponde a 192. di seg2 e seg3.
Infatti non saremo pi costretti a modificare tutte
Nella quinta, listruzione ldi carica nellaccumula- tre le istruzioni, perch baster cambiare soltanto
tore a il valore risultante dalla Espressione off- la prima .def, mentre le successive si rilocano au-
set (224 in decimale) e il compilatore lo conver- tomaticamente.
te in 20h (32 decimale), perch anche in questo I vantaggi pi evidenti per li otterremo con le Di-
caso si ottiene il complemento a 256 di 224 che rettive .macro e .input per lutilizzo di moduli e di
corrisponde a 32. macro-routines.
3 Esempio
2 Esempio
In questo esempio vi facciamo vedere come si pu
In questo esempio vi facciamo vedere come si pu utilizzare una espressione con le funzioni divi-
utilizzare una espressione con la funzione somma. sione e sottrazione.
Se, ad esempio, nella espressione (valtst>>1) scri- In questo esempio vi facciamo vedere come si pu
veremo per errore (valtst>>10), come risultato ot- utilizzare una espressione con le funzioni Or e
terremo 0. sposta i bits a sinistra.
Convertendo in binario il valore esadecimale 02h Nella prima istruzione la Direttiva .def associa la
questo calcolo diventer pi comprensibile: variabile seg1 allindirizzo di Data Space 088h.
Se riconvertiremo questo nuovo numero da bina- Nella quarta, alletichetta inizio, listruzione ldi ca-
rio in esadecimale otterremo FDh. rica nella Variabile seg1 il risultato della espres-
sione offset(1<<valtst).
Quindi lespressione offset&(02h) verr semplifi-
cata in offset&FDh. Analizziamo ora questa Espressione per capire o-
gni singola funzione.
Il compilatore Assembler eseguendo la funzione
AND (si noti il segno &) tra offset (che vale 0Fh)e Viene data la priorit a (1<<valtst) essendo rac-
FDh otterr come risultato 0Dh. chiusa fra parentesi e viene semplificata in 20h.
Convertendo in binario questi due numeri esade- Attenzione = Con questa istruzione molti cadono
cimali ed eseguendo poi la funzione And otterre- in inganno perch pensano che si sposti di 1 bit
mo: verso sinistra il valore di valtst.
Invece il valore valtst che dice di quanti bits oc-
0Fh = 00001111b corre spostare verso sinistra il numero decimale 1.
FDh = 11111101b
Convertendo in binario il numero decimale 1 ot-
risultato = 00001101b terremo:
Etichetta Istruzione Operando Come risultato finale questa direttiva definir una-
rea di 44 byte in Program Space a partire dallin-
.block 64-$%64 dirizzo 894h.
disp01 .ascii PROVA Vale a dire che vengono lasciati liberi 44 bytes in
modo da posizionare il 1 byte della successiva di- Tutte queste operazioni sono indispensabili perch il
rettiva: microprocessore non permette di utilizzare diretta-
mente le stringhe di dati definite in Program Space.
disp01 .ascii PROVA
Quindi se vogliamo utilizzarle dobbiamo trasferirle
nel 1 byte del blocco successivo di 64 bytes del tramite un apposito registro, in unarea di memo-
Program Space. ria di 64 bytes definita Data Rom Window.
Poich questarea ha una capacit di soli 64 by-
La direttiva .ascii definisce una stringa di caratte- tes, caricando una seconda stringa questa can-
re ASCII in Program Space la cui lunghezza in by- celler quella precedente e la sostituir con i nuo-
tes definita dal numero di caratteri inseriti tra le vi dati.
virgolette, e vi associa una etichetta.
A questo punto cercheremo di spiegarvi con un sem-
Nel nostro esempio la stringa PROVA lunga 5 plice esempio perch occorre far rientrare le strin-
bytes, e disp01 letichetta associata. ghe di dati allinizio di ogni blocco da 64 bytes.
DATA ROM WIN. DATA ROM WIN. DATA ROM WIN. DATA ROM WIN.
A A A A
B B B B
C C C C
D D D D
Fig.6 Con questo esempio dei vassoi contenenti 64 pedine vogliamo spiegarvi perch
necessario collocare la stringa .ASCII allinizio del blocco successivo in cui terminano le
istruzioni del programma. Poich il micro per poter utilizzare la stringa di dati nel Pro-
gram Space la deve prelevare da uno dei vassoi e caricare nel primo vassoio in alto del-
la Data Rom Window, occorre che il primo byte di questa stringa (quadrettini azzurri) ini-
zi da un blocco da 64 bytes. Listruzione .block serve proprio per posizionare questa
stringa nel vassoio successivo da 64 byte. Come vedesi nella seconda e terza colonna
verticale dove non si usato il .block, se trasferiamo il vassoio C o D nella Data Rom
Window la stringa dei dati risulter incompleta, mentre usando il .block (vedi ultima co-
lonna di destra) riusciremo a portare nel vassoio della Data Rom Window la stringa com-
pleta dei dati presenti nel vassoio D.
Ammettiamo di avere un certo numero di vassoi in portare tutte le pedine della stringa nel blocco D,
grado di contenere ciascuno un massimo di 64 pe- lasciando inutilizzate le caselle dalla 36 fino alla 64
dine, che nel nostro esempio sarebbero i bytes. del blocco C, inserendo questa solo espressione:
Non possiamo iniziare questo articolo senza prima I segnali dingresso possono poi essere memoriz-
ringraziare pubblicamente il Sig. Cesarin Ivano di zati sui files con estensione .CMD, mentre i segnali
Porpetto (Udine) che ha realizzato questo softwa- duscita sui files con estensione .DAT.
re simulatore per i micro ST62 tipo 10-15-20-25
che, oltre alle funzioni presenti normalmente nei Facciamo presente che le restanti funzioni risulta-
software in circolazione, offre la possibilit di in- no pressoch identiche a quanto gi descritto nel-
serire - variare e soprattutto memorizzare tutti i le riviste N.184 e N.185, quindi non dovete fare al-
segnali sia sui piedini dingresso che su quelli di tro che rileggerle attentamente insieme a tutti gli e-
uscita compresi i piedini del Timer e dellNMI. sempi riportati.
Con questo simulatore infatti possibile memoriz- Chi non dispone di queste riviste potr richiederle
zare sui piedini dingresso di ogni singola porta, quando ordiner il dischetto software.
compresi quelli del Timer e dellNMI, degli stati di-
gitali e analogici con dei precisi tempi che possia- Per spiegarvi come usare questo software inizia-
mo noi stessi prefissare da 0 fino ad un massimo mo dalla videata principale di un test di esempio
di 500.000 microsecondi, condizione questa che inserito dallAutore, che apparir chiamando il file
consentir di lanciare delle simulazioni Batch. PEDALI.PROG.
Inoltre permette di visualizzare questi segnali me- Tralasciamo di spiegare come si deve procedere
morizzati su una valida finestra grafica e di ve- per far apparire la finestra di dialogo dellEdit Da-
dere cos sul monitor tutti gli eventi che si sono ve- ta (vedi fig.1), comunque se non lo ricordate vi con-
rificati sui piedini del micro nellarco di tempo di sigliamo di prendere la rivista N.184 e di rileggere
500.000 microsecondi. quanto scritto.
Come noterete, sullEdit Data di fig.1 appare il re-
gistro dati di Port_B. Cliccando sui Bits apparir
la nuova finestra di fig.2 con la mappa binaria com-
pleta di questa porta.
Dati in ingresso
Scrivi File Dati in ingresso
Scrivi File Dati in Uscita
Cronologia Porte
Scrivi Dati in Uscita
Test I/O Fig.3 Ecco la finestra che apparir attivan-
do o disattivando un BreakPoint.
Se si attiva la funzione Dati in ingresso il pro-
gramma accetta la selezione di un file solo con e-
stensione .CMD come visibile in fig.8.
piedino PB0
a livello logico 1 da 0 a 25 msec.
a livello logico 0 da 26 a 50 msec.
a livello logico 1 da 51 a 75 msec.
a livello logico 0 da 76 a 84 msec.
a livello logico 1 da 85 msec. in poi
Fig.7 Cliccando Finestre potrete scegliere
quali funzioni visualizzare. piedino PB1
a livello logico 0 da 0 a 37 msec.
a livello logico 1 da 38 a 81 msec.
a livello logico 0 da 82 msec. in poi
255 : 5 = 51
Se porterete il cursore sulla riga orizzontale in cor- Fig.10 Se un piedino della porta configu-
rispondenza della scritta PA4 e poi vi sposterete fi- rato Analog In, apparir una finestra con un
no ad incontrare la riga verticale in corrisponden- valore che potrete modificare.
za dei 125 msec e qui cliccherete il mouse, appa-
rir la finestra centrale visibile in fig.10.
Portando il cursore sullicona File e cliccando En- Fig.11 Videata principale delle quattro fine-
ter apparir la finestra di fig.4 e a questo punto sar stre Assembler - Registri - Variabili - Me-
sufficiente cliccare sulla scritta: moria attivabili tramite la fig.7.
Scrivi File Dati in ingresso.
Una volta memorizzati i dati, se si rilancia la si-
mulazione del programma selezionando la funzio-
ne Dati in ingresso, il simulatore, leggendo il file
.CMD prelever i segnali modificati e li inserir in
automatico nei piedini da voi assegnati senza in-
terrompere la simulazione.
Fig.12 Portando nella Cronologia Porte di Portando il cursore sul menu Porte e cliccando En-
fig.9 la riga verticale su un segnale potrete ter apparir la finestra di fig.6 e ovviamente qui do-
leggere il suo tempo esatto. vrete selezionare la riga con la scritta:
INGRESSI USCITE
Registri
DDR 0 0 0 0 1 1 1 1
OR 0 0 1 1 0 0 1 1
DR 0 1 0 1 0 1 0 1
TABELLA N.1 = Per modificare la configurazione di una porta dingresso o di uscita do-
vrete rispettare questi livelli logici. Quindi per un ingresso SENZA PULL UP dovrete as-
segnare il registro DDR a 0, il registro OR a 0 e il registro DR a 1.
INSTALLAZIONE del SOFTWARE
sotto WINDOWS 95
CONCLUSIONE
In questo caso il Compilatore Assembler che Direttive usate per il Correlatore di Moduli
esegue il comando .display e non lST6. definito anche con il nome di Linker:
A questo punto apriamo una parentesi per parlare Nota: dopo ldi appare la variabile drw che abbia-
di Data Rom Window e del suo corretto utilizzo mo utilizzato per definire il Data Window Register.
tramite .w e .d. sottointeso che possiamo sostituire drw con
qualsiasi altra sigla, ad esempio pippo, oppure
Gi nella precedente rivista N.189 abbiamo ac- reg01 ed anche kkkk, importante non superare
cennato che per poter utilizzare una stringa di da- 8 caratteri.
ti, sia alfanumerici che numerici, definiti nel Pro-
gram Space, occorre prima caricarli nella Data
Come noterete letichetta test01, che corrisponde
Rom Window (che unarea di Data Space lun-
al bytes di inizio della stringa, termina con .w.
ga 64 bytes che inizia dalla locazione 40h) trami-
te il Data Window Register, che un registro a 8
Se per errore scriviamo letichetta test01 senza in-
bits definito alla locazione di Data Space C9h.
serire il .w come qui sottoriportato:
Supponiamo quindi di avere un programma in cui
abbiamo definito una serie di stringhe dati nella lo- ldi drw,test01
cazione A40h di Program Space come qui sot-
toriportato: il compilatore ci segnaler questo errore:
bit 11 10 9 8 7 6 5 4 3 2 1 0
binario 1 0 1 0 0 1 0 0 0 0 0 0
bit 11 10 9 8 7 6 5 4 3 2 1 0
binario 0 0 0 0 0 0 1 0 1 0 0 1
I primi 6 numeri del codice binario 101001 sono spostati tutti verso destra.
Fig.1 Con il software si-
mulatore potrete notare
nella finestra del Disas-
sembler, che listruzione:
ldi drw,test01.w
si sar tramutata in:
ldi drw,29H
Se invece le stringhe di test01 risultano inserite pri- Nota = I pesi da sommare sono solo quelli che si
ma delle istruzioni del programma, apparir questa trovano a livello logico 1.
diversa scritta:
Se ora proviamo a dividere la somma dei pesi del-
- operand may not reference program la Tabella N.1 per la somma dei pesi della Tabel-
space simbol test01 la N.2 otterremo:
Se prendiamo i 6 bits di sinistra della Tabella N.1, In pratica lindirizzo di test01 allinterno del registro
cio 101001, e li spostiamo tutti verso destra co- drw viene espresso in 64esimi.
me possiamo vedere nella Tabella N.2 e sommia-
mo i suoi pesi otterremo: Il microprocessore inoltre riconosce che il registro
drw, definito alla locazione di memoria C9h, il
32 + 8 + 1 = 41 Data Window Register, quindi carica nella Data
Fig.2 Il risultato della istruzione ldi drw,29H verr memorizzato nella locazione C9h.
che corrisponde al numero esadecimale A40h che quando verr eseguita questa istruzione, nel regi-
esattamente lindirizzo di: stro x verr caricato lindirizzo di Data Rom Win-
dow di test01 e cio 40h.
A40h test01 .ascii TESTO DI PROVA
.ascii PER VISUALIZZARE Se notate abbiamo detto Data Rom Window e non
.ascii CARATTERI ALFAN Program Space come dovrebbe essere dal mo-
.ascii UMERICI - FINE - mento che test01 (e la relativa stringa di dati)
stato definito inizialmente allindirizzo A40h di Pro-
Nota = Nel nostro esempio abbiamo volutamente gram Space.
dichiarato test01 in un indirizzo di memoria Pro-
gram Space esattamente divisibile per 64, quindi,
Quindi quando il Compilatore assembla questa i-
seguendo quanto detto sopra, test01 inizia esatta-
struzione:
mente nel primo byte del 41 blocco; pertanto il pri-
mo byte della stringa di dati che inizia con test01,
verr posizionato nel primo byte della Data Rom ldi x,test01.d
Window.
divide lindirizzo di Program Space di test01 per
Giunti a questo punto abbiamo memorizzato i 64 64, preleva il resto di questa divisione, somma a
bytes della stringa dei dati nella Data Rom Win- questo resto il valore dicimale 64 e lo memorizza
dow, ma per poterli utilizzare dovremo eseguire nellistruzione stessa al posto delloperando te-
unaltra operazione, cio caricare lindirizzo del pri- st01.d.
mo byte di questa stringa (nel nostro esempio sa-
rebbe la T affinch la nostra stringa inizi con TE- Nel nostro caso, poich test01 stato definito allin-
STO) in un registro (x , y, ecc.). dirizzo di Program Space A40h che corrisponde
al valore decimale 2624, avremo:
Se useremo il registro x, ogni volta che vorremo vi-
sualizzare questo testo dovremo come prima i- 2624 : 64 = 41 con un resto = 0
struzione scrivere: resto 0 + 64 = 64
Come noterete letichetta test01 seguita da .d. Utilizzando il software simulatore possiamo anda-
Fig.3 Con il software si-
mulatore potrete notare
nella finestra del Disas-
sembler, che listruzione:
ldi X,test01.d
si sar tramutata in:
ldi X,40H
re nella finestra Disassembler (vedi fig.3) e qui ve- Infatti in entrambi i casi nel registro x verrebbe sem-
dere che listruzione: pre caricato lindirizzo iniziale della Data Rom Win-
dow.
ldi x,test01.d
La soluzione di scrivere ldi x,40h che sembrereb-
sar diventata: be anche la pi semplice, da scartare e con gli
esempi che ora riporteremo ne capirete il motivo.
ldi x,40h
Ammettiamo di avere un programma che utilizza
Quando verr lanciato il programma assemblato, un display alfanumerico composto di 2 righe di 16
nel registro x verr caricato il valore 40h che cor- caratteri cadauna e che allinizio occorra visualiz-
risponde esattamente allindirizzo di inizio della Da- zare:
ta Rom Window (vedi fig.4) che, nel nostro caso,
corrisponde al primo byte della stringa:
INSERIMENTO DATI
-PROVA DISPLAY-
TESTO DI PROVA
PER VISUALIZZARE
CARATTERI ALFAN poi successivamente:
UMERICI - FINE -
PREMI PULSANTE
A questo punto con una routine ciclica che voi stes-
-SPEGNI DISPLAY-
si potrete creare, sar possibile muovere la strin-
ga sul display e visualizzarla.
Il testo da visualizzare lo abbiamo definito cos
Molti si domanderanno che utilit pratica offre la si- allinterno del programma:
gla .d cio:
A40h test01 .ascii INSERIMENTO DATI
ldi x,test01.d
A50h .ascii -PROVA DISPLAY-
A60h test02 .ascii PREMI PULSANTE
quando per caricare nel registro x il valore 40h lo
A70h .ascii -SPEGNI DISPLAY-
stesso risultato lo potremmo ottenere scrivendo
semplicemente:
In questo caso abbiamo 4 direttive .ascii lunghe
ldi x,40h ciascuna 16 bytes.
Fig.4 Nel registro X verr caricato il valore di 40H che contiene il nostro testo.
Abbiamo aggiunto a sinistra le locazioni di memo- sar sufficiente scrivere:
ria Program Space di queste direttive, cio:
ldi x,test02.d
A40h - A50h - A60h - A70h
e, cos facendo, nel registro x verr caricato lindi-
Come noterete vi sono anche 2 etichette test01 e rizzo di memoria della Data Rom Window corri-
test02 associate rispettivamente alle locazioni Pro- spondente al primo byte del secondo testo (eti-
gram Space A40h e A60h. chetta test02) e cio 60h.
a partire dalletichetta test01 verranno caricati in divide lindirizzo di Program Space di test02 per
Data Rom Window tutti i 64 bytes. 64, poi al resto di questa divisione somma 64 e
memorizza il risultato cos ottenuto nellistruzione
Se si dispone di un software simulatore che per- stessa al posto delloperando test02.d.
mette di visualizzare la Data Rom Window si po-
tr infatti vedere memorizzato (vedi fig.5): Nel nostro caso, siccome test02 stato definito
allindirizzo di Program Space A60h che corri-
INSERIMENTO DATI sponde al valore decimale 2656, avremo:
-PROVA DISPLAY-
PREMI PULSANTE 2656 : 64 = 41,5 (rimane 0,5)
-SPEGNI DISPLAY- 64 x 0,5 = 32 sarebbe il resto
resto 32 + 64 = 96
Se noi scriviamo:
che in esadecimale corrisponde a 60h.
ldi x,test01.d
Se disponete di un software simulatore potrete ve-
nel registro x verr caricato lindirizzo 40h. rificare nella finestra Disassembler, che la nostra
istruzione:
A questo punto vi sar una routine che provveder
a portare i 32 caratteri del primo testo da visualiz- ldi x,test02.d
zare, pertanto sul display comparir la scritta:
dopo la compilazione (vedi fig.6) sar diventata:
INSERIMENTO DATI
-PROVA DISPLAY- ldi x,60h
Siccome questo programma non prevede lutilizzo Quando verr lanciato il programma assemblato,
di altri dati da caricare in Data Rom Window, i 64 eseguendo questa istruzione nel registro x verr
bytes inizialmente caricati sono ancora memoriz- caricato il valore 60h che corrisponde esattamen-
zati in questa area, pertanto per far apparire sui di- te allindirizzo di inizio del secondo testo (etichetta
splay il secondo testo: test02) in Data Rom Window e cio:
e una successiva routine provveder a visualizza- Nellultima istruzione del programma che termina
re sui display i 32 caratteri di questo testo. allindirizzo di Program Space C03h abbiamo de-
finito le stringhe da visualizzare direttamente al by-
Questo vi fa capire limportanza dellutilizzo della te successivo senza utilizzare la direttiva .block 64-
sigla .d, che permette di caricare nel registro volu- $%64 (vedi rivista 189):
to lindirizzo di inizio di una stringa di dati memo-
rizzati in Data Rom Window, quando al suo inter- C04h test01 .ascii INIZIO
no vi sono pi stringhe indirizzabili. C0Ah test02 .ascii INIZIALIZZAZIONE
C1Ah test03 .ascii ATTIVAZIONE
Nel prossimo esempio vi spieghiamo cosa succe- C26h test04 .ascii BOX OK
de se i dati definiti in Program Space non inizia- C2Ch test05 .ascii -ATTENDERE FASE-
no esattamente con un indirizzo che non esat- C3Ch .ascii -DI SPEGNIMENTO-
tamente un multiplo di 64.
Tralasciamo tutte le istruzioni del programma che
In questo esempio infatti abbiamo volutamente in- non sono strettamente legate allargomento che
serito un errore nella definizione delle stringhe. stiamo trattando ed arriviamo subito alla fase in cui
il programma deve visualizzare sul display queste
Prendiamo sempre come esempio un programma scritte.
che deve gestire un display alfanumerico compo-
sto di 2 righe di 16 caratteri, che faccia apparire Innanzitutto il programma le carica in Data Rom
sulla prima riga del display la scritta: Window con listruzione che gi conoscete:
ldi drw,test01.w
INIZIO
Poich, contrariamente agli esempi precedenti, te-
Supponiamo che in un secondo tempo questa scrit-
st01 stato definito volutamente ad un indirizzo
ta scompaia e in sua sostituzione appaia:
C04h di Program Space che in decimale corri-
sponde a 3.076, valore non divisibile per 64, avre-
INIZIALIZZAZIONE
mo dei decimali:
che poi anche questa scritta scompaia per essere 3.076 : 64 = 48,0625
sostituita dalla scritta:
Quando il Compilatore assembla questa istruzione
ATTIVAZIONE BOX con .w, in pratica divide lindirizzo di Program Spa-
ce delletichetta per 64, perdendo il resto e me-
che, dopo pochi secondi, anche la scritta sopra ri- morizza il risultato della divisione nellistruzione
portata scompaia per essere sostituita da: stessa al posto delloperando test01.w.
Eseguendo una simulazione di questo programma Se disponete di software simulatore potrete nota-
nella finestra di Data Rom Window (vedi fig.7), ve- re che nella finestra Disassembler (vedi fig.8) la
drete nella parte di sinistra le locazioni di memo- nostra istruzione:
ria e il contenuto espresso in esadecimale, mentre
nella parte destra la relativa decodifica in caratte- ldi x,test01.d
ri ASCII.
si sar convertita in:
Negli indirizzi da 40h a 43h saranno entrati dei va-
lori che nulla hanno a che vedere con le nostre ldi x,44h
Fig.7 Sulla sinistra della finestra Data troverete la decodifica esadecimale del nostro te-
sto e sulla destra la decodifica ASCII (49 = I, 4E = N, 5A = Z, 4F = O).
Fig.8 Se controllate con il
software la finestra del Di-
sassembler, potrete nota-
re che listruzione:
ldi X,test01.d
si sar tramutata in:
ldi X,44H
Quando verr lanciato il programma assemblato, Quando verr lanciato il programma assemblato,
nel registro x verr caricato il valore 44h. listruzione soprariportata caricher nel registro x il
valore 4Ah.
Se guardate la fig.7 potrete constatare che in Da-
ta Rom Window lindirizzo 44h corrisponde in ef- Se guardate in fig.7 potrete constatare che in Data
fetti al primo byte della stringa INIZIO. Rom Window lindirizzo 4Ah corrisponde in effetti
A questo punto occorre soltanto inserire una routi- al primo byte della stringa INIZIALIZZAZIONE.
ne ciclica che provveder a portare i 6 caratteri del
testo INIZIO sul display. A questo punto dovremo creare una routine ciclica
che provveda a portare i 16 caratteri del testo INI-
Successivamente il programma deve visualizzare ZIALIZZAZIONE sul display.
la scritta:
Proseguendo, dopo un certo tempo il programma
INIZIALIZZAZIONE deve visualizzare la scritta:
ATTIVAZIONE BOX
e se guardate in fig.7 vedrete che anche la stringa
INIZIALIZZAZIONE completa e quindi per vi-
Anche questa stringa ATTIVAZIONE BOX com-
sualizzarla si dovr digitare:
pleta in Data Rom Window, perci alla istruzione:
ldi x,test02.d ldi x,test03.d
Quando il Compilatore assembla questa istruzio- quando il Compilatore assembla questa istruzione
ne, divide lindirizzo di Program Space di test02 divide lindirizzo di Program Space di test03 per
per 64, preleva il resto di questa divisione, somma 64, preleva il resto di questa divisione, somma a
a questo resto il valore decimale 64 e lo memoriz- questo resto il valore decimale 64 e lo memorizza
za nellistruzione al posto delloperando test02.d. nellistruzione al posto delloperando test03.d.
Nel nostro caso, poich test02 stato definito allin- Nel nostro caso, poich test03 stato definito allin-
dirizzo di Program Space C0Ah che corrisponde dirizzo di Program Space C1Ah che corrisponde
al valore decimale 3082, avremo: al valore decimale 3098, avremo:
che corrisponde al numero esadecimale 4Ah. che in esadecimale corrisponde al numero 5Ah.
Fig.9 Nella Data Rom Window non si pos- Fig.10 Per non perdere i bytes eccedenti do-
sono inserire pi di 64 bytes. Tutti i bytes po il primo blocco si deve inserire la di-
in eccesso verranno persi. rettiva .block 64-$%64.
e poi indirizzarla nel registro x scrivendo: Infatti, come gi saprete, con listruzione:
TEST02
I N I Z I O I
TEST01
N I Z I A L I Z TEST03
Z A Z I O N E A
T T I V A Z I O
.block 64
Fig.11 Se lindirizzo di Program Space di te- Fig.12 Inserendo.block 64-$%64 prima di te-
st01 si dovesse spostare, noi perderemmo st01, questo testo si posizioner sul 1 by-
tutte le parole che fuoriescono dallarea del te di memoria del secondo blocco da 64 e
primo blocco da 64. test05 sul terzo blocco da 64.
Nel nostro caso test05 stato definito allindirizzo In pratica, quando il programma sar Compilato in
di Program Space C2Ch che, convertito in deci- Assembler, la direttiva:
male, corrisponde al numero 3116.
Se divideremo questo numero per 64 otterremo: .block 64 - $%64
3116 : 64 = 48,6875 (rimane 0,6875) definir unarea di 20 bytes vuota a partire dalla
64 x 0,6875 = 44 (che sarebbe il resto) locazione di Program Space C2Ch cos che la suc-
cessiva definizione:
Poich in questo caso perdiamo il resto 44, ci ri-
mane il solo numero 48 che verr caricato nel Da-
test05 .ascii ATTENDERE FASE
ta Window Register.
.ascii DI SPEGNIMENTO
Se moltiplichiamo 48 per 64 bytes otterremo sem-
pre il numero: inizi dalla locazione di memoria Program Space
C40h corrispondente al valore decimale 3136.
48 x 64 = 3072
A questo punto listruzione:
che corrisponde al valore esadecimale C00h, quin-
di come risultato finale listruzione: ldi drw,test05.w
Fig.13 Se la stringa di dati inizia esatta- Fig.14 Infatti, inserendo .block 64-$%64 in
mente da un indirizzo di memoria Program una locazione di memoria divisibile per 64
Space divisibile per 64 senza resto, non senza resto, il testo viene posto nel blocco
necessario inserire .block 64-$%64. seguente sprecando larea del primo.
Questo spreco blocchi si verifica ogniqualvolta la
C40h .block 64 direttiva .block 64 - $%64 viene inserita in una lo-
cazione di memoria di Program Space perfetta-
mente divisibile per 64 senza resto.
Ammettiamo di avere una stringa di dati lunga e-
sattamente 64 bytes (vedi fig.13) che inizia da
C40h, cio:
necat01 .ascii IMPOSTARE PARA
.ascii METRI DI CONFIGU
.ascii RAZIONE E PROSEG
.ascii UIRE CON IL TEST
Durante la stesura del programma, se non esegui-
C80h
remo dei calcoli, non sapremo mai se questa strin-
ga inizia esattamente da C40h; pertanto se, per e-
I M P O S T A R vitare errori, prima di questa stringa inseriamo
E I P A R A .block64-$%64, il Compilatore provveder a collo-
care questa stringa allindirizzo C80h sprecando i
M E T R I D I
precedenti 64 bytes come illustrato in fig.14.
C O N F I G U
Poich di questi casi se ne potrebbero presentare
R A Z I O N E diversi, sprecheremo inutilmente molti blocchi di
E P R O S E G memoria (vedi fig.15).
Gi saprete che la memoria dellST6 suddivisa in: In pratica questa direttiva viene utilizzata per defi-
nire nella Program Space delle stringhe di carat-
Memoria Ram = definita anche Data Space teri alfanumerici e per associare eventuali eti-
Memoria Rom = definita anche Program Space chette in quei programmi che generano messaggi
o scritte di vario genere su video o su stampa.
La Memoria Ram riscrivibile, quindi si utilizza
nei programmi come memoria dinamica per me- Ogni tentativo di utilizzarla per definire dati nella
morizzare risultati di calcoli o di dati variabili in ap- Data Space dar un errore di compilazione.
posite celle e, poich di tipo volatile, quando vie-
ne tolta tensione al microprocessore questi dati La lunghezza in bytes definita dal numero di ca-
vengono automaticamente cancellati. ratteri ascii inseriti fra le virgolette.
La Memoria Rom (Read only memory) si utilizza Chiaramente queste stringhe cos definite non so-
per inserire le istruzioni del programma, quindi u- no modificabili durante il corso del programma per-
na volta che queste risultano memorizzate nel mi- ch definite nella memoria ROM.
croprocessore non si possono pi modificare n
cancellare. Per poterle utilizzare dovremo caricarle in Data
Rom Window con le stesse modalit e gli stessi
LA DIRETTIVA chiamata .ASCII accorgimenti gi spiegati nella rivista N.190 nel pa-
ragrafo riguardante la direttiva .w_on.
La direttiva .ascii serve per definire dei dati nella
Program Space che larea Rom riservata alle i- Anche per la loro definizione, in fase di stesura del
struzioni del programma. programma, bisogner attenersi a quanto riportato
nella parte riguardante la direttiva .block sempre Perci se scriviamo:
descritta nella rivista N.190.
scritta1 .asciz /*-INIZIO-*\
Il suo utilizzo permette di usufruire di una notevo- .asciz /*-Premi-P1 > per uscire
le quantit di messaggi in Program Space senza
riempire inutilmente larea di Data Space che, di- la prima stringa risulter composta da:
sponendo di soli 60 bytes, potremo sfruttare per 12 bytes + 1 = 13
delle Variabili tramite la direttiva .def. mentre la seconda stringa sar composta da:
24 bytes +1 = 25
Il formato logico della direttiva .ascii il seguente:
In fase di compilazione verr definita nella Pro-
[etichetta] .ascii stringa gram Space la seguente stringa:
[etichetta] = Nome delletichetta che si vuole as- /*-INIZIO-*\(null)/*-Premi P1 > per uscire (null)
sociare al primo byte della stringa. Questo nome
opzionale quindi pu essere anche omesso. dove (null) rappresenta 1 byte contenente 00h che
non rappresentabile in formato ASCII, pertanto
stringa = In tale stringa si inseriscono i caratte- questa stringa risulter lunga:
ri alfanumerici che si vogliono definire in Program
Space, racchiudendoli sempre fra virgolette. 12 + 1 + 24 + 1 = 38 bytes
Per rendere pi chiaro quanto detto finora vi pro- Quindi per definire delle stringhe di dati in Pro-
poniamo questo semplice esempio: gram Space ogni programmatore potr scegliere
indifferentemente sia .ascii che .asciz.
scritta1 .ascii /*-INIZIO-*\
.ascii /*-Premi-P1 > per uscire Scegliendo .ascii il compilatore Assembler defini-
sce nella Program Space la seguente stringa:
La prima stringa di caratteri /*-INIZIO-*\ compo-
sta da 12 bytes, mentre la seconda stringa di ca- /*-INIZIO-*\/*-Premi T1 > per uscire
ratteri, cio /*-Premi-P1 > per uscire, composta
da 24 bytes. Facciamo presente che gli spazi so- Se, per esempio, si desidera far apparire sul mo-
no anche questi dei caratteri alfanumerici, quindi nitor la parola della prima stringa /*-INIZIO-*\ com-
vanno conteggiati. posta di 12 caratteri, dovremo realizzare una rou-
tine che conti esattamente i 12 caratteri da invia-
In fase di Compilazione lAssembler definisce nel- re sul video, altrimenti si correr il rischio di veder
la Program Space la seguente stringa: apparire anche caratteri della seconda stringa.
[etich] = nome della variabile che si vuole asso- [etich] .def indiriz,[R-mask],[W-ask],[value],[M]
ciare allindirizzo di memoria.
la potremo semplificare omettendo value, scriven-
indir, = lindirizzo della cella di memoria Data do quindi soltanto:
Space. Questo valore pu essere in Binario, De-
cimale, Esadecimale o una Espressione. [etich] .def indiriz,[R-mask],[W-ask],[M]
[R-mask] = utilizzando questo operando potremo [M] = questo operando (potremo anche scriverlo in
definire quale degli 8 bits della variabile pu risul- minuscolo), se inserito, mette un marker nella va-
tare leggibile (R sta per READ = leggi). riabile [etich] nel file .DSD (vedi fig.1).
Questo marker ci sar utile in fase di Debug, per-
Se ad esempio scriviamo: ch potremo automaticamente vedere su video, u-
tilizzando ovviamente un Simulatore, tutte le va-
pippo .def 08Dh,00100000b, riabili a cui stato associato appunto un marker:
ci ci consentir di controllarne il valore in tempo
sapremo gi che la variabile pippo risulta colloca- reale (vedi fig.2).
ta nella locazione di Program Space 08Dh e che
loperando che segue, cio 00100000b, R-mask.
Se ad esempio scriviamo:
Dopo avervi spiegato il formato della direttiva .def
pippo .def 08Dh,00100000b,10000000b ed il significato dei suoi operandi dovremo chiarire
che cosa sintende per bit leggibili e bit scrivibi-
sapremo gi che la variabile pippo risulta colloca- li ed indicare tutti i vantaggi di R-mask e W-mask.
ta nella locazione di Program Space 08Dh e che
loperando 00100000b R-mask e quello che se- Ad esempio se scriviamo questa istruzione:
gue, cio 10000000b W-mask.
prova jrs 3,store,finepr
Di questa variabile risulta scrivibile solo il 7 bit per-
ch settato a 1 (bit di sinistra), mentre gli altri non il programma salter (jrs) alletichetta finepr solo
risultano scrivibili perch settati a 0. se il bit 3 della variabile store settato.
Se nellistruzione vogliamo omettere R-mask ed u- In pratica listruzione jrs (jump relative set) deve
tilizzare solo W-mask dovremo riportare due vir- quindi leggere lo stato del bit 3 e se, per ipotesi,
Se poi il programma che stiamo scrivendo molto
complesso, oppure richiama molti moduli o ma-
cro, questo tipo di errore sul test o sul settaggio
dei bits delle variabili sar pi frequente di quan-
to si possa supporre.
jrs 1,status,flag1
jrs 4,status,flag4
jrs 6,status,flag6
jrs 1,status,flag1
jrs 3,status,flag4 (errore)
jrs 6,status,flag6
Lo stesso dicasi per W-mask quando si utilizzano Fig.3 In questa figura vi facciamo vedere
le istruzioni che scrivono (set , res ,ldi ecc.) nei come appariranno sul monitor le cinque ri-
ghe delle istruzioni del 1 esempio . Come
diversi bits.
potete notare, a fianco di ogni istruzione ab-
In questi casi il compilatore non assembler il pro-
biamo riportato dopo il ; il numero della re-
gramma, quindi durante la simulazione eviteremo lativa riga.
di trovare delle condizioni logiche non desiderate
sui piedini del microprocessore.
Fig.4 Inserendo R-MASK nella
variabile STATUS, se commet-
terete un errore involontario
(ad esempio jrs 3,status,flag4)
il compilatore lo segnaler im-
mediatamente (vedi fig.5).
ldi a,32
La sesta istruzione:
Fig.7 In questa figura vi facciamo vedere
come si presentano sul monitor le sette ri- ld storex,a
ghe delle istruzioni del 2 esempio. Di fian-
co ad ogni istruzione abbiamo riportato do- significa carica nella variabile storex il valore con-
po il ; il numero di riga. tenuto nellaccumulatore a che, nel nostro esem-
pio, corrisponde al numero 32.
Questa istruzione verr compilata anche se sap-
Con la seconda istruzione: piamo, per averlo spiegato nella quarta istruzione,
che non possibile caricare il valore 32 in storex
storex .def 084h,00000000b,00000111b perch in W-mask sono stati configurati scrivibili
i soli bits 0-1-2.
il compilatore associa la variabile storex alla cel-
la di memoria 084h di Data Space e in pi defini- Il compilatore non pu segnalare questo errore
sce non leggibili gli 8 bits della variabile R-mask e perch, quando compila, non in grado di con-
scrivibili nella variabile W-mask i soli bits 0-1-2. trollare il contenuto nellaccumulatore a.
cp a,storex 3) Esempio
significa confronta il valore di a con il valore di Se vogliamo rendere leggibili tutti i bits di R-mask
storex. anzich scrivere 11111111b potremo mettere due
sole virgole come qui sotto riportato:
Questa istruzione ci segnaler errore (vedi ASM
78 in fig.8), perch per eseguire un confronto fra i storex .def 084h, ,00001111b
due valori listruzione cp deve leggerli, ma poich
in R-mask di storex riportato 00000000b, nes- oppure inserire 0ffh tra le due virgole:
suno dei suoi bits leggibile.
storex .def 084h,0ffh,00001111b
Come gi vi abbiamo accennato, il numero binario
di 32 00100000b, quindi giustamente potreste pen- Se vogliamo rendere leggibili e scrivibili tutti i bits
sare che si possa evitare lerrore rendendo leggibi- di una variabile mask dovremo semplicemente
le il quinto bit della R-mask di storex. Purtroppo scrivere:
se ci sbagliamo e rendiamo leggibile il quarto bit o
un qualsiasi altro bit, il compilatore non segnaler storex .def 084h
piu nessun errore perch, non essendo in grado
di controllare il contenuto nellaccumulatore a,
sufficiente che un qualsiasi bit di R-mask risulti leg- 4) Esempio
gibile perch esso ritenga valida listruzione.
storex .def 084h,0ffh,00001111b
Se ne volete una conferma inserite le istruzioni di campo .def storex+1, 0ffh,00010000b
questo nostro esempio in un qualsiasi vostro pro- verfin .def campo+1,m
gramma di prova, poi andate a modificare la R.ma- valfix .set storex+2
sk di storex da: inizio cp a,storex
cp a,campo
storex .def 084,00000000b,00000111b cp a,verfin
clr campo
in una delle due istruzioni qui sotto riportate: ldi campo,valfix
ldi verfin,valfix
storex .def 084,11000000b,00000111b
storex .def 084,00000011b,00000111b La prima istruzione:
La successiva istruzione:
clr campo
La penultima istruzione:
ldi campo,valfix
Fig.9 In questa figura vi facciamo vedere significa carica nella variabile campo il valore as-
come si presentano sul monitor le dieci ri-
sociato a valfix e non, come molti ritengono, il va-
ghe delle istruzioni del 4 esempio. Anche
in questo caso accanto ad ogni istruzione lore contenuto in valfix.
abbiamo riportato dopo il ; il numero di ri- Poich il compilatore controlla il valore da caricare
ga per ritrovarle pi facilmente. nella variabile campo, in fase di compilazione se-
gnaler un errore perch nel nostro esempio val-
fix vale 086h (il suo numero binario 10000110b)
La terza istruzione: e nella W-mask di campo abbiamo definito scrivi-
bile il solo bit 4 e non i bits 1-2-7.
verfin .def campo+1,m
Lultima istruzione:
associa la variabile verfin alla cella di memoria
086h (campo + 1) e omette sia R-mask che W- ldi verfin,valfix
mask, ma inserisce un marker alla variabile ver-
fin.
significa carica nella variabile verfin il valore as-
Per omettere R-mask e W-mask non necessa-
sociato a valfix e viene regolarmente compilata
rio scrivere come molti potrebbero supporre:
senza segnalare errori perch in verfin non sta-
verfin .def campo+1,0ffh,0ffh,m ta definita la W-mask, pertanto viene eseguita sen-
za effettuare alcun controllo.
Per la quarta istruzione:
CONTINUA
valfix .set storex+2
Nella rivista precedente abbiamo preso in esame
come gi vi abbiamo spiegato nel capitolo riguar- la direttiva .W_ON, in questo numero le direttive
dante le Espressioni, la direttiva .set associa una .ASCII - .ASCIZ - .DEF, mentre nelle riviste suc-
etichetta ad un valore e non ad un indirizzo di Me- cessive passeremo a considerare tutte le direttive
moria Data Space come avviene con .def. mancanti.
Fig.1 Il programmatore per
micro ST62/60-65 rac-
chiuso dentro un elegante
mobile a consolle.
PROGRAMMATORE
Molti softwaristi dopo aver acquistato i program- Quindi se il vostro computer ha la stampante col-
matori commerciali per la nuova famiglia di micro legata sulla porta LPT1, dovrete spostarla sulla
ST62/60 - ST62/65, pagandoli pi di 650.000 lire, porta LPT2.
si sono accorti che oltre ad essere troppo compli-
cati da utilizzare (qualcuno ha bruciato diversi mi- Lasciando infatti la stampante sulla porta LPT1 e
cro), presentano il difetto di non funzionare su tut- collegando il programmatore sulla porta LPT2, po-
ti i computer, tra i quali anche il Pentium. treste non riuscire a farlo funzionare.
Tutti i softwaristi, che hanno acquistato il nostro A coloro che ci hanno chiesto se questa nuova fa-
programmatore per micro ST62/10-15-20-25, sono miglia di microprocessori sostituir i precedenti
rimasti a tal punto soddisfatti, da richiedercene u- ST6, assicuriamo che anche questi continueranno
no identico per questa nuova famiglia, che sia in ad essere prodotti, ad esclusione del solo
grado di funzionare su tutti i tipi di computer IBM e ST62E10 cancellabile. LST62T10 tipo OTP rima-
compatibili, compreso ovviamente il Pentium. ne invece in commercio.
Prima di passare alla descrizione dello schema e- Ci stato inoltre domandato che cosa ha in pi
lettrico vogliamo svelare a coloro che usano qual- questo nuova famiglia ST62/60 e ST62/65 rispetto
siasi tipo di programmatore, compresi i nostri, un alla precedente. Rispondiamo accennando veloce-
piccolo segreto che, da quanto ci risulta, nessuno mente alle novit di questi microprocessori:
ha mai reso pubblico.
Un banco di memoria RAM di 128 K, cio il dop-
Ormai tutti sanno che i computer hanno due por- pio dei precedenti ST6.
te parallele denominate LPT1 - LPT2, ma nessu-
no si mai preoccupato di precisare che il pro- Un supplementare banco di 128 bytes di me-
grammatore deve essere obbligatoriamente colle- moria EEprom (si pronuncia E-quadroprom e la
gato sulla porta LPT1. sigla sta per Electrically Erasable Programmable
Read Only Memory). Questa memoria cancella- Un Timer identico ai precedenti micro ST6.
bile e riscrivibile elettricamente diverse migliaia di
volte. Una volta scritti i dati nella EEprom, rimar- Una funzione PWM (Pulse Width Modulation),
ranno memorizzati anche se toglieremo la tensio- che ci permette di ottenere in uscita delle onde
ne di alimentazione; ovviamente riappariranno quadre con duty-cycle variabile, utilizzabili per ri-
quando il micro verr nuovamente alimentato. cavare delle tensioni variabili oppure delle forme
La EEprom permette di risolvere molti problemi. donda sinusoidali o triangolari con limpiego di po-
Ad esempio, noi stessi ci siamo serviti di questi 128 chi componenti esterni.
bytes in pi presenti nel micro ST62/T65, per te-
nere in memoria le posizioni dei satelliti TV nel kit Nella Tabella N.1 riportiamo le caratteristiche pi
Box per posizionare le parabole TV (kit LX.1195) interessanti di questa nuova famiglia.
apparso sulla rivista N.177-178.
Per programmare la nuova famiglia di micropro-
Una Interfaccia Seriale SPI (Synchronous Pe- cessori abbiamo progettato il programmatore si-
ripheral Interface) in grado di trasmettere e riceve- glato LX.1325 (vedi fig.1), che risulta ben diverso
re dei dati seriali. dal precedente LX.1170.
Un Timer Autoreload autoricaricabile che serve Il programmatore LX.1325 serve solo per i micro
anche per gestire la funzione PWM. ST62/60-65 e poich il procedimento di program-
Tabella N.1
La tensione continua di circa 20 volt che prelevia- Durante queste fasi di controllo linverter IC1/C
mo dallalimentatore siglato LX.1170/B, passando provvede ad inviare sui piedini di RESET (piedino
attraverso il diodo DS1, raggiunge lintegrato IC2, 22 per gli ST62/65 e piedino 16 per gli ST62/60) u-
che provvede a stabilizzarla sul valore di 5 volt. na tensione di 5 volt.
Questa tensione alimenta lintegrato IC1, un C/Mos
tipo SN.74HC14 composto da 6 Inverter a trigger Sebbene lintegrato stabilizzatore IC4 sia da 5 volt,
di Schmitt. d in uscita una tensione di 13,2 volt perch sul
suo piedino M collegato un diodo zener da 8,2
La tensione di 20 volt raggiunge anche il termina- volt (vedi DZ1): infatti 8,2 + 5 = 13,2 volt.
le Emettitore del transistor TR1, un PNP utilizzato
come interruttore elettronico e come circuito di La tensione di 13,2 volt circa raggiunge il solo pie-
protezione. Grazie a questo transistor non dan- dino Vpp quando il transistor PNP siglato TR3 vie-
Fig.2 Schema elettrico del programmatore. Questo circuito
T1 F1
viene alimentato con il kit LX.1170/B visibile in fig.3.
AI + 5 V. S1
DI IC1 DS1
U E
IC2 RS1
R9 RETE
M DS2
C1 C2 C3 C7 220 Volt
DL1
DS3 R1
DS4
E
CONN. 1 B
TR1 E U Vcc
GND C
IC3 11
18 M
19 R2 C4 C5 C6
20 C
21 B DS5
23 TR2
24 E U TR3 Vpp
25
E IC4 3
E C
R3 M
C7 C8 R6
DZ1 B C9
D0 R4
13 12
2
R7
R5 IC1 - A 20
5 V.
TR4 5
14
C 22 GND
R9 R10 ST 62/65
D1 11 10 B 4 12
3
7
R8 E
IC1 - B
9
D2 R11 OSC. IN.
3
4 14
R12
D3 PB3
5 5
IC1 - C
D4 R14 3 4 RESET
6 16
R13
IC1 -D IC1 - E
BUSY R15 PB2
6 5 8 9 GND
11 4 10
ST 62/60
T1 F1 R9 = 1.500 ohm
C7 = 1.000 mF elettrolitico
LX 1170 B DL1 = diodo led
S1
RS1 = ponte raddriz. 100 V 1 A
RS1 F1 = fusibile 145 mA
USCITA
R9 RETE T1 = trasform. 3 watt (TN00.01)
220 Volt
DL1
C7 sec. 15 volt 0,2 amper
S1 = interruttore
Fig.3 Schema elettrico dello stadio di alimentazione pubblicato sulla rivista N.172/173.
A K
La tensione di 13,2 volt non pu raggiungere il pie-
dino Vcc per la presenza del diodo DS5, quindi su DIODO
A K
questo piedino ritroveremo sempre 5 volt anche se LED
1 2 3 4 5 6 GND
sul piedino Vpp vi sono 13,2 volt.
74 HC 14 B
Il programma viene inviato dal computer verso il
micro in forma seriale tramite il piedino 5 (D3) del E C
CONN.1.
BC328 - BC547
Tramite il piedino 4 (D2) del CONN.1 il computer E C B
invia sul piedino OSC.IN. del micro un impulso di M
clock che, in fase di programmazione, sincroniz-
za i dati inviati sul piedino 5 (PB3) del micro. E U
BD 140 uA 78L05
In fase di lettura, che serve per verificare se tutti i
dati contenuti nel micro sono stati correttamente Fig.5 Connessioni dellintegrato 74HC14 vi-
memorizzati, i dati vengono prelevati in forma se- ste da sopra e dei transistor BC.328, BC.547
riale dal piedino 4 (PB2) ed inviati verso il compu- ed integrato 78L05 viste da sotto.
ter tramite il piedino 11 (BUSY) del CONN.1.
Vcc GND TEST/Vpp
9 10 3
P B0 1 20 P C2
P B1 2 19 P C3
EEPROM
ALIMENTAZIONE TEST TEST/Vpp 3 18 P C4
P B2 4 17 NMI
RAM P B3 5 16 RESET
P B6 6 15 OSC. OUT.
WATCH
DOG P B7 7 14 OSC. INP.
PORTA A P A0 8 13 P A3
Vcc 9 12 P A2
17 GND 10 11 P A1
NMI NMI CPU
PORTA B
ST 62/60
16
RESET RESET
PORTA C
14 AUTORELOAD
OSC. INP SPI INTERFACE
TIMER
OXILL.
OSC. OUT
15
A/D CONVERTER TIMER
Fig.6 Entrambi i microprocessori tipo ST62T60 (non cancellabili) e gli ST62E60, che ri-
sultano cancellabili, hanno 20 piedini. Questi micro hanno 4K di memoria program-
mabile e 128 bytes di memoria EEprom, pi tre porte indicate A-B-C. La porta A ha 4
entrate/uscite, la porta B ha 6 entrate/uscite e la porta C ha 3 entrate/uscite.
11 12 3 P B0 1 28 P C0
P B1 2 27 P C1
EEPROM TEST/Vpp 3 26 P C2
ALIMENTAZIONE TEST
P B2 4 25 P C3
P B3 5 24 P C4
RAM
P B4 6 23 NMI
WATCH P B5 7 22 RESET
DOG P B6 8 21 OSC. OUT.
PORTA A P B7 9 20 OSC. INP.
P A0 10 19 P A7
23
NMI NMI CPU Vcc 11 18 P A6
PORTA B GND 12 17 P A5
P A1 13 16 P A4
P A2 14 15 P A3
22
RESET RESET
PORTA C
ST 62/65
20 AUTORELOAD
OSC. INP SPI INTERFACE
TIMER
OXILL.
OSC. OUT
21
A/D CONVERTER TIMER
Fig.7 Entrambi i microprocessori tipo ST62T65 (non cancellabili) e gli ST62E65, che ri-
sultano cancellabili, hanno 28 piedini. Questi micro hanno 4K di memoria program-
mabile e 128 bytes di memoria EEprom, pi tre porte indicate A-B-C. La porta A ha 8
entrate/uscite, la porta B ha 8 entrate/uscite e la porta C ha 5 entrate/uscite.
REALIZZAZIONE PRATICA Proseguendo nel montaggio inserite tutte le resi-
stenze e, dopo queste, tutti i diodi rispettando la
Per realizzare questo programmatore oltre al kit si- loro polarit.
glato LX.1325 dovete procuravi anche il kit di ali- La fascia bianca del diodo DS1 con corpo plasti-
mentazione siglato LX.1170/B, che lo stesso u- co deve essere rivolta verso sinistra.
tilizzato per il precedente programmatore presen- Il diodo zener DZ1, riconoscibile perch sul suo
tato sulla rivista N.172/173. corpo stampigliato il numero 8,2, deve avere la
fascia bianca rivolta verso lalto.
Sul circuito stampato LX.1325 dovete montare tut- La fascia nera dei diodi al silicio siglati DS2 - DS3
ti i componenti disponendoli come visibile in fig.10. - DS4 deve essere rivolta come risulta bel visibile
Quando si effettuano questi montaggi si inizia nor- nello schema pratico di fig.10.
malmente dagli zoccoli e dai connettori perch la La fascia nera del diodo schottky DS5, che si ri-
vista non ancora affaticata e pertanto ci possia- conosce dagli altri perch il suo corpo di colore
mo accorgere senza difficolt se ci siamo dimenti- blu, va rivolta verso sinistra.
cati una stagnatura o se una grossa goccia di sta- Completato il montaggio di questi componenti sta-
gno ha cortocircuitato assieme due piedini. gnate tutti i condensatori poliesteri, ricordandovi
Fig.8 In questa foto visibile lo stampato Fig.9 Lo stesso circuito visto dal lato op-
del programmatore LX.1325 visto dal lato posto. Notate i due condensatori C6-C9 fis-
sul quale sono montati tutti i componenti. sati vicino ai due zoccoli textool.
RETE 220 V.
CONN . 1
( MASCHIO 25 POLI )
RS1 T1
R12 R11 R15 R14 R9 R4 R5 R8 R13 ( TN00.01 )
C3
DS1
C2
R1
C1
IC2 DS3
IC1 TR1
DS2
C7 F1
DS4
R2
C7 C4
R3
IC4
DZ1
IC3 R9
C8 C5
ST 62/65
ST 62/60 A
DL1 S1
C6 C9
Fig.10 Schema pratico di montaggio della
scheda LX.1325 da utilizzare per la pro-
grammazione dei micro ST62/60-65. Fac-
ciamo presente che questo programmatore
NON pu essere usato per i normali micro
della famiglia ST62T10-15-20-25 e nemme-
no per i micro ST62E15-20-25.
Fig.11 Aperto il mobile plastico a consolle visibile in fig.1, fissate sulla base del semico-
perchio lo stadio di alimentazione LX.1170/B con quattro distanziatori autoadesivi, e sullal-
tro semicoperchio lo stampato LX.1325 avvitandolo con quattro viti.
NOTA = sul pannello frontale fissate le quattro viti con i loro dadi, in modo da creare un
piccolo spessore che terr distanziato lo stampato dal pannello frontale.
Fig.12 Sul pannello di
alluminio posto sul re-
tro del mobile verr fis-
sato il connettore di u-
scita per il computer.
Il programma una volta caricato occupa circa 1 Me- Completata loperazione dinstallazione potrete to-
gabyte di memoria. gliere il dischetto dal drive e porlo in un cassetto.
I 6 PROGRAMMI di TEST
selezionate quale dei sei programmi-test volete u- scheda LX.1206, pubblicata sulla rivista N.180,
tilizzare pigiando il tasto funzione F3. provvista di quattro Triac.
Sul monitor appariranno i nomi dei files di test: Il Bus deve essere alimentato con lalimentatore si-
glato LX.1203 pubblicato sulla rivista N.179, lo
PWM60.ASM stesso che usate per alimentare il Bus del prece-
PWM65.ASM dente programmatore LX.1170.
EEPROM60.ASM Su questa stessa rivista trovate la spiegazione
EEPROM65.ASM dello schema elettrico e dello schema pratico del
EEPR60T.ASM Bus LX.1329 e tutte le istruzioni per eseguire i no-
EEPR65T.ASM stri test.
Selezionate il file PWM60 o EEPROM60 o EE- Tutti i componenti necessari alla realizzazione del
PR60T solo se avete inserito nello zoccolo textool kit LX.1325 (vedi fig.10) completo di circuito stam-
il micro ST62E60 o ST62T60. pato, zoccoli textool, transistor, integrati, pi il di-
Selezionate il file PWM65 o EEPROM65 o EE- schetto floppy DF.1325 contenente i programmi
PR60T solo se avete inserito nello zoccolo textool per la programmazione degli ST62/60-65 e quelli
il micro ST62E65 o ST62T65. di test per EEPROM e PWM, ma Esclusi il mobi-
le e lalimentatore LX.1170 ....................... 51,65
Potete memorizzare nel micro uno solo di questi
sei programmi, perci se volete testare pi pro- Il solo mobile MO.1325 completo di due mascheri-
grammi dovrete utilizzare un secondo micro oppu- ne forate a serigrafate .............................. 16,01
re cancellare con una lampada ultravioletta ci
che gi avete memorizzato. Costo dello stadio di alimentazione LX.1170/B pub-
Il kit di questa lampada riportato sulla rivista blicato sulla rivista N.172/173 .................. 11,60
N.174 e la sua sigla LX.1183.
Costo del solo stampato LX.1325 ............. 7,49
Per vedere come funzionano i programmi di test
dovete necessariamente realizzare il nuovo Bus Costo di un cavo parallelo tipo CA.05 completo di
LX.1329, che pu ricevere le schede gi usate per connettori maschio e femmina .................... 4,13
il precedente programmatore per ST6, cio:
I prezzi riportati sono compresi di IVA, ma non del-
scheda LX.1204, pubblicata sulla rivista N.179, le spese postali che verranno addebitate solo a chi
provvista di quattro display. richieder il materiale in contrassegno.
BUS per TESTARE le
Per impratichirvi con la funzione PWM e la memoria EEPROM presenti
nei micro della famiglia ST62/60-65 realizzate il Bus che vi presentiamo
ed utilizzatelo insieme alla scheda Display LX.1204 oppure alla scheda
Triac LX.1206, che vi sono servite per il precedente programmatore.
Per poter usare al meglio una nuova famiglia di mi- piedino 14 del micro ST62/60 e con il Nand IC1/D
cro indispensabile fare un po di pratica, e poich sul piedino 20 del micro ST62/65.
sappiamo che non troverete in nessun manuale un Questi due micro sono quelli che, una volta pro-
valido aiuto (quelli da noi personalmente visionati grammati, dovranno essere inseriti nei due zoccoli
sono pieni di errori o informazioni inesatte) abbia- presenti sullo stampato del Bus (vedi fig.1).
mo ritenuto opportuno aggiungere ai files per la pro- Le due tensioni dei 12,6 volt e dei 5,6 volt ven-
grammazione, che trovate nel dischetto DF.1325, i gono prelevate dallalimentatore LX.1203, pubbli-
programmi di test per provare la memoria EEprom cato sulla rivista N.179, di cui riportiamo nuova-
e la funzione PWM. mente in fig.29 lelettrico nel caso in cui non ave-
Poich in commercio non facile trovare Bus per ste questo numero della rivista.
i micro ST62/60-65 a prezzi contenuti, noi abbia-
mo risolto questo problema con il kit LX.1329, che REALIZZAZIONE PRATICA
potete alimentare con il kit siglato LX.1203, pub-
blicato sulla rivista N.179. In possesso dello stampato LX.1329 potete inizia-
re il montaggio inserendo i due zoccoli da 28 e 20
piedini per i micro ST62/65 ed ST62/60, poi quel-
SCHEMA ELETTRICO del BUS lo da 14 piedini per lintegrato IC1 (vedi fig.4).
Dopo gli zoccoli fissate il connettore a 24 pin si-
Lo stadio oscillatore ottenuto con il Nand siglato glato CONN.1 ed i due connettori a 4 pin che ser-
IC1/B ci permette di ottenere la frequenza di clock viranno per innestare le tre schede sperimentali
di 8 MHz che viene trasferita con il Nand IC1/C sul LX.1204 - LX.1206 - LX.1329/B.
Vicino allintegrato IC1 inserite il quarzo da 8 MHz Prima di trasferire allinterno della memoria vergi-
fissando il suo corpo in posizione orizzontale. ne di un micro ST62/60 o ST62/65 uno dei 6 pro-
Sul lato destro dello stampato inserite il pulsante grammi di test, inserite il micro nel suo zoccolo
P1, poi la morsettiera a 3 poli e vicino a questa i textool poi bloccatelo con la sua levetta.
due diodi al silicio DS1 - DS2 rivolgendo la loro fa-
scia di riferimento di colore bianco verso sinistra. Quando sul monitor appare la finestra di fig.5 do-
Completato il montaggio inserite nel suo zoccolo vete premere il tasto funzione F3.
lintegrato IC1 rivolgendo la tacca di riferimento a
forma di U verso lalto. Sullo schermo vengono visualizzati i nomi dei no-
Se in sostituzione dei normali zoccoli per i due mi- stri programmi di test (vedi fig.6).
cro ST62/60 e ST62/65 utilizzate due zoccoli tex-
tool, risulter pi facile inserirli ed estrarli, ma co- EEPR60T.ASM per i micro ST62/60
me saprete, questi zoccoli sono molto costosi. EEPR65T.ASM per i micro ST62/65
EEPROM60.ASM per i micro ST62/60
PER RICHIAMARE il PROGRAMMA EEPROM65.ASM per i micro ST62/65
PWM60.ASM per i micro ST62/60
Dopo aver memorizzato nellhard-disk il program- PWM65.ASM per i micro ST62/65
ma, per richiamarlo dovete semplicemente digita-
re due sole istruzioni: In ogni micro potete inserire uno solo programma,
quindi per provare un secondo programma dovete
C:\>CD ST626 premete Enter cancellare la sua memoria con una lampada ul-
C:\ST626>ST6 premete Enter travioletta oppure utilizzare un altro micro.
Fig.1 Applicando in
questo nuovo Bus si-
glato LX.1329 le sche-
de Display e Triac gi
utilizzate per il prece-
dente Bus potrete ve-
dere come funzionano
la EEPROM ed il PWM.
Negli zoccoli andr in-
serito un micro pro-
grammato con i nostri
programmi di test.
DS1
12,6 V.
DS2
5,6 V.
C1 C2 C7
R3
Massa
14
4
6 9 3 10 17
14
18
5
IC1-A ST62/60 19
GND
7 16 5 V.
20
8 11 12 13 1 2 4 5 6 7
12 V.
8 A0
A1
A2
IC1-C
A3
A4
10 9
A5
IC1-B
2 A6
3 A7
1
IC1-D B0
R1 B1
12 13
B2
B3
XTAL R2 B4
B5
11 B6
C3 C4 B7
10 13 14 15 16 17 18 19 1 2 4 5 6 7 8 9
28 C0
20
27 C1
26 C2
22 ST62/65 25 C3
24 C4
RESET 11 23 NMI
3 12
P1 C5
C6
CONN. 1
Fig.2 Schema elettrico del Bus LX.1329 da usare per i soli micro della serie ST62/60 e
ST62/65. Questo Bus deve essere alimentato con il circuito LX.1203, che abbiamo gi pre-
sentato sulla rivista N.179, riportato nelle figg.29-31. Se possedete gi questo alimenta-
tore non sar necessario montarne un secondo. I due rettangoli NERI con sopra stampi-
gliato ST62/60-ST62/65 sono i due zoccoli (vedi fig.4) nei quali dovrete inserire i due mi-
cro che avrete programmato con i programmi test per EEPROM e PWM.
9231 XL
C4
CONN. 1
R3 DS1
12,6 V.
XTAL DS2
R2
5,6 V.
C3
Massa
R1 VERSO
C1
C7 LX 1203
IC1 C2
P1
C6
ST 62/60 C5
ST 62/65
TEST con EEPROM tipo ST62E60
ST62E60
ST62E60B
ST62T60
ST62T60B
ST62E65
ST62E65B
ST62T65
ST65T65B
Se sul corpo del vostro micro stampigliata la si- Fig.6 Pigiando F3 apparir la finestra con i
gla ST62E60/B dovete selezionare ST62E60. nomi dei 6 files dei programmi di test. In un
micro potete inserire 1 solo programma,
quindi per provarne un secondo dovrete
Se sul corpo del vostro micro stampigliata la si-
prima cancellare la sua memoria.
gla ST62E60/BB dovete selezionare ST62E60B.
Quello che abbiamo voluto mettere in evidenza con Fig.11 Il programma EEPR65T.ASM deve
questo programma la funzione della memoria essere memorizzato nei micro ST62/65.
EEprom.
Se togliamo di proposito la tensione di alimenta-
zione al Bus quando sui display appare il numero
01:34 o qualsiasi altro numero, il numero rimarr
comunque memorizzato nella EEprom.
Infatti alimentandolo nuovamente dopo 10 minuti,
oppure dopo 3 ore o anche dopo 1 mese, vedre-
te riapparire sui display lo stesso numero che ri-
sultava presente al momento dello spegnimento e,
da questo numero, ripartir il conteggio allindietro.
Fig.12 Per vedere il contenuto di una EE-
Per variare i tempi da noi prefissati, nel program- PROM pigiate sulla casella LOAD.
ma dovrete modificare queste righe:
I PULSANTI P1 - P2
Se volete variare i tempi di accensione e spegni- Posizionatevi nella directory C:\ST626> e digi-
mento delle lampade dovete modificare queste ri- tate quanto sotto riportato:
ghe del programma:
C\ST626>ST626xPG premete Enter
1 ciclo = righe 626-627
2 ciclo = righe 635-636 Nella finestra che appare (vedi fig.9) scegliete il
3 ciclo = righe 643-644 tipo di micro inserito nel programmatore poi pigia-
4 ciclo = righe 651-652 te il tasto Enter.
5 V.
10
0
0
0 C1
10
0
0
(vedi fig.16). 0 C1
Per Cancellare o Modificare la EEPROM Fig.24 Se londa quadra rimane a livello lo-
gico 1 per 200 step su 256 step totali, ot-
Andate sulla scritta Fill poi pigiate Enter. terrete una tensione di soli 3,9 volt.
10
0
0
0 C1
In sostituzione di FF potreste anche scrivere 00,
ma consigliabile usare FF perch le celle dei mi-
cro OTP sono tutte FF.
Nota: se volete cancellare o modificare una sola Fig.25 Se londa quadra rimane a livello lo-
cella dovete selezionare Edit. gico 1 per 128 step, otterrete in uscita una
Spostando il cursore potrete cos portarvi sulla cel- tensione di soli 2,5 volt.
la che vi interessa modificare.
0
0
0 C1
Queste note, che non troverete in nessun manua- Fig.26 Riducendo a soli 20 step il livello lo-
le, vi saranno molto utili perch vi permetteranno gico 1 dellonda quadra, otterrete in uscita
di vedere concretamente e, volendo di modifica- una tensione di soli 0,39 volt.
re manualmente, il contenuto delle EEprom.
TEST PWM con ST62/60-65 Considerando i valori riportati nelle figg.23-26 ot-
terrete queste esatte tensione:
Per questo programma-test si pu usare sia un
micro ST62E60 sia un micro ST62E65. (5 : 256) x 256 = 5,0 volt
(5 : 256) x 200 = 3,9 volt
Prima di presentarvi il nostro programma, ne- (5 : 256) x 128 = 2,5 volt
cessario spiegare come si fa con la tecnica PWM (5 : 256) x 20 = 0,39 volt
a trasformare i livello logici 1 - 0 in un valore di
tensione continua variabile. Il condensatore C1 posto dopo la resistenza R1
permette di ottenere una tensione continua effi-
Come gi sapete il livello logico 1 corrisponde ad cace del treno di onde quadre con il duty-cycle
una tensione di 5 volt positivi ed il livello logico variabile che fuoriesce dal PWM.
0 ad una tensione di zero volt.
Vi starete chiedendo ora a cosa serve una tensio-
Poich il minimo numero decimale che possiamo ne variabile da 0 a 5 volt se a lato pratico serve u-
usare 0 ed il massimo numero 255, agendo sul na tensione variabile da 0 a 24 volt oppure da 0 a
registro PWM tramite software si potr decidere di 220 volt.
quanti step da 0 a 255 il segnale dovr rimanere a
livello logico 1 e di quanti step dovr rimanere a Anche se vi servisse una tensione variabile da 0 a
livello logico 0. 5 volt per accendere una piccola lampadina non
potremmo mai utilizzarla perch la tensione forni-
Se programmate il registro PWM in modo che ri- ta dal PWM non ha potenza.
manga a livello logico 1 da 0 fino a 255, in usci-
ta otterrete la tensione massima di 5 volt (vedi Come potete vedere anche dalla nostra scheda
fig.23). sperimentale siglata LX.1329/B, che andr inne-
stata nel Bus, i 5 volt vengono utilizzati per pilota-
Se programmate il registro PWM in modo che ri- re la Base di un transistor di potenza sul cui Col-
manga a livello logico 1 dallo step 0 fino a 200 e lettore abbiamo inserito una lampadina da 12 volt
rimanga da questo numero fino a 255 a livello lo- 3 watt.
gico 0, in uscita otterrete una tensione di soli di 3,9
volt (vedi fig.24). Inserendo questa scheda nel Bus, nel quale andr
inserito anche un micro ST62E60 programmato
Se programmate il registro PWM in modo che ri- con il programma:
manga a livello logico 1 dallo step 0 fino a 128 e
rimanga da questo numero fino a 255 a livello lo- PWM60.ASM
gico 0, in uscita otterrete met tensione, cio 2,5
volt (vedi fig.25). noterete quanto segue:
A questo punto abbastanza intuitivo che se pro- Alimentando il Bus la lampadina si accender per
grammate il registro PWM in modo che rimanga a un 50% della sua luminosit.
livello logico 1 dallo step 0 fino a 20 e rimanga da
questo numero fino a 255 a livello logico 0, in u- Ogni volta che premete il tasto P2 la luminosit
scita otterrete una tensione di soli 0,39 volt (vedi della lampadina si attenua, perch la tensione
fig.26). scende di volta in volta di 0,5 volt.
Anche se il segnale ad onda quadra che fuoriesce Ogni volta che premete il tasto P1 la luminosit
dalla porta PB7 raggiunge sempre un picco mas- della lampadina aumenta, perch la tensione sale
simo di 5 volt, dovete considerare il valore dei volt di volta in volta di 0,5 volt.
efficaci, che risultano proporzionali al tempo che
londa quadra rimane a livello logico 1 e a livel- Per modificare il valore del salto di luminosit ogni
lo logico 0. volta che si premono i due pulsanti, dovete varia-
re questi righe di programma:
In linea di massima si potrebbe calcolare il valore
di questa tensione dividendo i 5 volt per i 256 li- STARTPW .EQU 5 riga 41
velli (da 0 a 255 i livelli sono 256), poi moltiplica- CAPTPW .EQU 130 riga 42
re il risultato per il numero degli step in cui londa MINPW .EQU 30 riga 43
quadra rimane a livello logico 1. STEPW .EQU 25 riga 44
LP1
OFF ON V HI LO
V 20 200 1000 750 200
20
2 2
200m 200m
20M 200
2M 2m
200K 20m
10A
A
20K
2K
2
2
200m
TR1
200Hi 200
2m 20m
200m
C
A
10A 10 A
R3 R4
V-A-
B
COM
E
C3
R1 R2
P1 C1 C2 P2
CONN. 1
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 NMI GND + 5 V. + 12 V.
P1 TR1
C1
LP1 C3
di montaggio della
TESTER
P2 scheda LX.1329/B da
R1 R4 usare per i test PWM.
C2
R2 R3
CONN. 1
In questo programma abbiamo diviso la frequenza STARTPW .EQU 5 (riga 41) = il valore degli
del quarzo da 8 MHz per 3 utilizzando il registro step definito in Auto - Reload - Timer, che come
ARS2, definito nella locazione 0D7H ottenendo co- gi abbiamo visto corrispondono ad un valore di
s una frequenza base di 2,667 MHz. tensione minima di 0,02 volt.
Quando lAuto-Reload Timer arriva al numero CAPTPW .EQU 130 (riga 42) = il valore del
255, ricarica il timer con il numero che abbiamo comparatore interno che utilizziamo per stabilire
messo nel registro ARRC, che si trova nella loca- da quale valore di tensione desideriamo partire.
zione di memoria 0D9H. Poich lo StartPW ha un valore di 5, noi partiamo
Se carichiamo il registro ARRC con il numero 0, il da un valore di tensione pari a:
timer partir da 0 per arrivare a 255 e raggiunto
questo valore massimo ripartir da 0. (130 5) x 0,02 = 2,5 volt
Se carichiamo il registro ARRC con il numero 127, MINPW .EQU 5 (riga 43) = definisce il valore mi-
il timer partir da 127 per arrivare a 255 e raggiunto nimo a cui vogliamo arrivare con la tensione.
questo valore massimo ripartir da 127. Sottraendo a 5 il valore dello StartPW noi riuscia-
mo a scendere fino ad un valore di:
Poich nel nostro programma abbiamo caricato il
registro ARRC con il numero 5, il timer ripartir (5 5) = 0 volt
sempre da questo valore e per arrivare a 255 noi
avremo disponibili 255 5 = 250 step. STEPW .EQU 25 (riga 44) = in questa riga ab-
biamo inserito il numero di salti di tensione che vo-
Questo significa che per ogni step potremo incre- gliamo ottenere ogni volta che andiamo a pigiare i
mentare il valore efficace dei nostri 5 volt di: pulsanti P1 o P2.
Questo numero va moltiplicato per il valore di ten-
5 : 250 = 0,02 volt sione corrispondenti ad uno step, cio a 0,02 volt.
Con il nostro programma facciamo dei salti di:
Conoscendo il valore degli step (250) e la fre- 25 x 0,02 = 0,5 volt
quenza base (2,667 MHz) possiamo ricavare la
frequenza di lavoro del PWM, che nel nostro caso Se ad esempio volessimo fare dei salti di 1 volt an-
sar pari a: zich di 0,5 volt, partendo dal valore minimo di 1
volt dovremmo modificare le righe 42-43-44 come
qui sotto riportato:
2,667 : 250 = 0,0106 MHz (10,6 KHz circa)
CAPTPW .EQU 55 riga 42
Se nel registro ARRC avessimo messo il numero
MINPW .EQU 5 riga 43
127, il timer sarebbe ripartito sempre da questo va-
STEPW .EQU 50 riga 44
lore, quindi per arrivare a 255 avremmo avuto di-
sponibili 255 127 = 128 step. Se volessimo fare dei salti di soli 0,04 volt parten-
do sempre da un valore minimo di 0 volt, dovrem-
Vale dire che per ogni step avremmo incrementa- mo modificare cos le righe:
to il valore efficace dei nostri 5 volt di:
CAPTPW .EQU 5 riga 42
5 : 128 = 0,039 volt MINPW .EQU 5 riga 43
STEPW .EQU 2 riga 44
Conoscendo il valore degli step (128) e la fre-
quenza base (2,667 MHz), possiamo ricavare la
frequenza di lavoro del PWM che nel nostro caso
sar pari a:
2,667 : 128 = 0,020 MHz (20 KHz circa) MEMORIZZARE un vostro PROGRAMMA
Quindi riducendo il numero degli step otterremmo Fino a qui vi abbiamo spiegato come trasferire i no-
un aumento della frequenza di lavoro. stri programmi di test nella memoria del micro.
Ovviamente i softwaristi vorranno memorizzare nel
Di seguito spieghiamo il significato di alcune righe micro i loro personali programmi e quindi non ci ri-
di programma. mane che darvi qualche piccola nota di aiuto.
T1
14 V. 14 V.
E U
RS1 IC1 12,6 V.
S1
M
C1 C2 DS1 C3 C4
RETE 8 V.
220 V.
E U
RS2 IC2 5,6 V.
M
Massa
C5 C6 DS2 C7 C8
Per modificare o salvare programmi che occupano C:\ST626>AST6 S L Pluto premete Enter
pi di 30 Kilobyte dovete obbligatoriamente utiliz-
zare lEDITOR del DOS presente nel vostro com-
Nota: dove noi abbiamo scritto Pluto voi dovete
puter.
scrivere il nome del vostro programma.
Per entrare nel menu principale delleditor digitate
queste istruzioni:
Dopo diversi secondi sul monitor apparir:
C:\>CD ST626 premete Enter
C:\ST626>Edit premete Enter ***SUCCESS***
Dopo aver corretto o modificato il vostro program- a conferma che lassemblaggio stato completa-
ma, prima di trasferirlo nella memoria del micro do- to senza riscontrare nessun errore.
RETE
220 V.
IC1
C1
T1
C4
mod.T025.01 RS1
C2 C3
DS1
12,6 V.
5,6 V.
3021.XL
RS2 C7 Massa
DS2
VERSO
C6
LX.1202
C8
IC2
C5
Pluto.DSD
Pluto.HEX COSTO di REALIZZAZIONE
Pluto.SYM
Pluto.LIS Tutti i componenti necessari per la realizzazione
del Bus LX.1329 (vedi figg.2-3-4) completo di cir-
Il file Pluto.SYM e il file Pluto.DSD serviranno per cuito stampato e del 74HC00 ................... 19,60
i programmi di simulazione, gi conosciuti con i
nomi di DSE622 e di ST622. Tutti i componenti necessari per la realizzazione
dellinterfaccia LX.1329/B (vedi figg.27-28) com-
Il file Pluto.LIS contiene il listato completo del pro- pleta di circuito stampato e di una lampadina da 12
gramma che potr risultarvi utile per una consulta- volt per testare il PWM ............................... 8,80
zione o come copia di salvataggio.
Costo del solo stampato LX.1329 ............ 11,10
Quando sul monitor vi appare: Costo del solo stampato LX.1329/B .......... 4,29
In questo modo apparir la finestra di fig.9 e a que- COSTO dei precedenti KIT per ST6
sto punto procedete con le istruzioni riportate a
pag.110, che vi spiegano come trasferire il pro- Costo dello stadio di alimentazione LX.1203 (vedi
gramma dal computer verso il micro. fig.30) pubblicato sulla rivista N.179, Escluso il mo-
bile plastico MTK06.22 ............................. 25,80
NOTA IMPORTANTE
Costo del mobile plastico MTK06.22 per lo stadio
Usando il sistema operativo Windows 3.1 non in- di alimentazione ......................................... 6,97
contrerete nessun problema, ma lo stesso non si
pu dire con Windows 95. Costo del Kit della scheda Display LX.1204 pub-
Se usando Windows 95 riscontrate dei problemi blicata sulla rivista N.179 ......................... 18,60
nel lanciate il programma ST626xPG, VI consi-
gliamo di inserire nellultima riga del file CON- Costo del Kit della scheda Triac LX.1206 pubbli-
FIG.SYS questa opzione utilizzando il programma cata sulla rivista N.180 ............................. 18,60
Edit oppure Notepad o Write o se siete esperti, il
comando Sysedit: I prezzi riportati sono compresi di IVA, ma non del-
le spese postali che verranno addebitate solo a chi
SWITCHES /C richieder il materiale in contrassegno.
LE DIRETTIVE dellassembler ST6
In questo articolo spieghiamo in maniera dettagliata la direttiva .BYTE,
usata per la definizione di dati nellarea del programma, e le direttive
.EQU e .SET, che servono per la definizione delle costanti simboliche.
In fase di stesura del programma bisogna attener- espress[,espress] = possono essere uno o pi va-
si a quanto riportato nel paragrafo riguardante la lori espressi in Decimale, Binario o Esadecimale
direttiva .block (vedi rivista N.190). separati ognuno da una virgola e non devono mai
superare la capacit di 8 bits; oppure possono es-
Lutilizzo della direttiva .byte ci permette di defini- sere delle espressioni (vedi rivista N.189) il cui ri-
re una notevole quantit di valori binari in Program sultato finale non deve comunque mai superare
la capacit di 8 bits, che corrisponde ad un valo- Il significato di queste istruzioni il seguente:
re di 255.
elisto .def 086h = definisce la variabile elisto
Limpiego della direttiva .byte risulta particolar- allindirizzo di memoria 086h di Data Space.
mente utile per effettuare conversioni, trasposizio-
ni, sostituzioni di valori o per realizzare delle tabelle costan .set 025h = associa il valore 025h alla
di comparazione. etichetta costan senza occupare nessuna aera di
Program Space.
1 Esempio
step01 .equ 020h = associa il valore 020h alle-
Con questo esempio vi insegniamo ad utilizzare i tichetta step01 senza occupare nessuna aera di
numeri decimali - esadecimali - binari o le e- Program Space.
spressioni per definire una serie di tabelle in Pro-
gram Space. .block 64-$%64 = questa funzione stata gi
Poich lesempio stato definito correttamente, in spiegata nelle riviste N.189 e N.190.
fase di Compilazione non si presenteranno errori.
venga a trovarsi nella locazione di memoria Pro- [etichetta] = va inserito il nome delletichetta da as-
gram Space 0A13h, che corrisponde al numero sociare al valore numerico definito nelloperando.
[operando] = va inserito il valore numerico o il ri- Se per qualche motivo volessimo modificare il va-
sultato di una espressione da associare alleti- lore da caricare nellaccumulatore a in modo da
chetta. Questo numero, che pu essere espresso scrivere 30 caratteri anzich 20, sar sufficiente
in esadecimale, binario o decimale non deve mai modificare la direttiva come sotto riportato:
superare la capacit di 2 bytes vale a dire:
scrivi .equ 01Eh
FFFFh in esadecimale
1111111111111111b in binario Questa direttiva semplifica notevolmente il nostro
65535 in decimale lavoro perch se nellesempio riportato le routines
sono poste una di seguito allaltra e quindi facil-
Per chiarire eventuali dubbi sulluso della direttiva mente individuabili e modificabili, immaginatevi un
.equ vi proponiamo alcuni semplici esempi. programma molto pi complesso che utilizzi pi
routines situate in punti diversi e distanti tra loro.
1 Esempio In questo caso si perderebbe tempo a scorrere tut-
to il programma nella ricerca del valore 014h per
Con questo esempio vi facciamo vedere come la modificarlo in 01Eh e si potrebbero introdurre in-
direttiva .equ faciliti la lettura del programma: volontariamente degli errori.
Nella prima istruzione letichetta scrivi stata as- ritardo .equ 150
sociata al valore 014h, che equivale al numero de- rout01 ldi a,ritardo
cimale 20. call ritardo1
Le tre routine rout00, rout01, rout02 caricano, per rout02 ldi a,ritardo+50
prima cosa, nellaccumulatore a il valore asso- call ritardo2
ciato alletichetta scrivi, poi eseguono le subrou- rout03 ldi a,ritardo*4
tine chiamate maiusc, minusc, corsivo. call ritardo3
rout04 ldi a,ritardo83
Queste subroutine potrebbero risultare utili per far call ritardo4
apparire sul monitor solo 20 caratteri (014h) in
maiuscolo oppure in minuscolo o corsivo. In questo esempio alletichetta ritardo stato as-
sociato il valore fisso 150.
In pratica noi abbiamo scritto:
La routine rout01 carica nellaccumulatore a il va-
scrivi .equ 014h lore associato alletichetta ritardo, cio 150, quin-
rout00 ldi a,scrivi di esegue la subroutine ritardo1.
call maiusc
La routine rout02 carica nellaccumulatore a il va-
ma pi semplicemente potevamo scrivere: lore 150 + 50 = 200, poi esegue la subroutine ri-
tardo2 con questo numero.
rout00 ldi a,014h
call maiusc La routine rout03 carica nellaccumulatore a il va-
lore 150 x 4 = 600, poi esegue la subroutine ritar-
Per la logica e lesecuzione del programma non do3 con questo numero.
cambia assolutamente nulla, ma in questo secon-
do caso rileggendo il programma a distanza di tem- La routine rout04 carica nellaccumulatore a il va-
po potremmo non ricordare a cosa serve questa i- lore 150 83 = 67, poi esegue la subroutine ritar-
struzione. do4 con questo numero.
Usando la direttiva .equ invece sapremo subito che
il valore caricato nellaccumulatore a serve per Se per qualche motivo volessimo modificare il va-
scrivere 20 caratteri sul monitor in maiuscolo. lore da caricare nellaccumulatore a, cos da al-
lungare o accorciare il ritardo in modo proporzio- Nella prima istruzione alletichetta ritardo viene as-
nale, sarebbe sufficiente modificare la sola diretti- sociato il valore 150.
va ritardo .equ con il numero desiderato.
In rout01 viene caricato nellaccumulatore a il va-
Avrete notato che in entrambi gli esempi abbiamo lore associato alletichetta ritardo cio 150.
utilizzato listruzione ldi (load immediate) e non ld
per caricare nellaccumulatore a il valore asso- In rout02 viene caricato nellaccumulatore a il ri-
ciato alle etichette scrivi e ritardo. sultato dellespressione ritardo+15 cio 165.
Se avessimo utilizzato ld avremmo caricato nellac- Proseguendo nella stesura del programma abbia-
cumulatore a il valore memorizzato allindirizzo mo previsto di aver bisogno di una nuova diretti-
di memoria 014h e 150 e non il numero 014h e va .set associata sempre alletichetta ritardo, ma
150 che a noi serve. con un diverso valore che nel nostro esempio 40.
Prima di proseguire con la spiegazione delle di- Innanzitutto, vi facciamo notare che davanti alla let-
rettive dellassembler per ST6 dobbiamo soffer- tera che contraddistingue le opzioni, in questo ca-
marci sulle opzioni del compilatore assembler. so L ed S, bisogna sempre inserire il segno , di-
Come abbiamo pi volte ricordato, durante la com- stanziando inoltre le diverse opzioni da uno spa-
pilazione il compilatore assembler genera sem- zio. Questo il solo modo corretto di scrittura.
pre due file, entrambi con lo stesso nome del pro-
gramma sorgente: uno con estensione .HEX in for- Le opzioni del compilatore assembler sono:
mato intel eseguibile e laltro con estensione .DSD
non eseguibile. L X M S O E D F W
Il file con estensione .dsd utile perch contiene
tutte le informazioni di Debug che verranno poi u- Premettiamo che utilizzando una qualsiasi di que-
tilizzate durante la simulazione del programma. ste opzioni verr generata una supplementare e-
stensione, oltre alle due .hex e .dsd gi esistenti.
Il compilatore assembler inoltre dotato di una se- Rimanendo nellesempio sopra riportato, noi avre-
rie di opzioni che, se inserite quando si lancia la mo un file .LIS ed uno .SYM.
compilazione, generano, oltre ai due gi descritti,
altri tipi di file che ci mettono a disposizione dati Di seguito vi spieghiamo a cosa servono le nove
supplementari ed ulteriori funzioni di controllo sul opzioni sopra riportate.
programma sorgente.
OPZIONE L
Supponendo di dover compilare il programma sor-
gente chiamato TESTER e di voler aggiungere le Aggiungendo questa opzione il compilatore gene-
opzioni L e S dobbiamo digitare: ra un file con lo stesso nome del programma sor-
gente, ma con estensione .LIS al cui interno viene
ast6 L S TESTER.ASM memorizzato il listato completo del programma.
In fig.1 riportiamo un esempio del listato del file te- Il numero 479 il numero della riga del listato del
ster.lis generato dalla compilazione del program- programma e, generalmente, corrisponde alla riga
ma tester.asm. del programma con estensione .asm.
Sulla sinistra troviamo dei valori numerici e sulla
parte destra le istruzioni del programma in for- STY = P00
mato simbolico.
Indica in quale numero di sezione/pagina di Pro-
Le istruzioni simboliche sono quelle che abbiamo gram Space si trova memorizzata listruzione do-
scritto realizzando il programma, quindi non hanno po la compilazione.
bisogno di ulteriori spiegazioni. Nel nostro esempio listruzione verr memorizza-
E invece importante chiarire il significato dei nu- ta alla Pagina 0 di Program Space.
meri che appaiono sulla sinistra. Normalmente le sezioni/pagine sono cos siglate:
Per rendere pi comprensibile la spiegazione, ab- Pnn La lettera P sta per Program Page, cio Pa-
biamo aggiunto nella prima riga in alto di fig.1 una gina di area di Programma, ed nn il numero di
serie di sigle corrispondenti ai dati incolonnati. pagina in cui si trova listruzione.
Ovviamente queste sigle non appaiono mai nei li- Questa pagina viene generata quando si compila
stati. in assembler e si vuole ottenere un programma e-
seguibile in formato .hex.
Analizziamo ora la prima riga:
Normalmente una Program Page di 2 kbytes
LIST = 479 (2048 bytes) per i micro ST6210 - ST6220 e di 4
LIST STY SCOU OPCODE ST2 SCO2 NLEV SNU LABEL INSTR OPERAND COMMENT
499 1 1 ;+
500 1 2 ;| TB_CGR02 Tabella dei caratteri per
501 1 3 ;+
502 1 4 ;
503 P00 0340 00 P00 0340 1 5 .byte 0,0,0,0 ;0
504 P00 0341 00 P00 0341 1 5
Fig.1 Esempio del file tester.lis generato dalla compilazione con lopzione L.
kbytes (4096 bytes) per i micro ST6215- ST6225, Se abbiamo suddiviso il programma in Program
e corrisponde sempre al numero P00. Section (vedi Snn) o in Window Section (vedi
Per i micro da 4 Kbytes esiste la possibilit di sud- Wnn), questo indirizzo corrisponder allindirizzo di
dividere la Program Page in due pagine, ognuna memoria relativo alla sezione o alla finestra. Se
di 2 Kbytes, inserendo la direttiva .pp_on nel pro- abbiano suddiviso il programma in Page Section,
gramma. corrisponder allindirizzo assoluto di memoria del
In questo caso il compilatore divide larea in due microprocessore.
sezioni da 2kbytes cadauna (2048 bytes) ed as- Ad esempio, se nel listato leggessimo:
segna il numero partendo da 0, quindi:
S01 0034h
P00 = parte da 0 e finisce a 7FFh
P01 = parte da 800h e finisce a FFFh significa che listruzione relativa allindirizzo 0034h
si trova nella Sezione 01 di Program Space.
Nel nostro esempio listruzione, una volta compila-
ta, partir dallindirizzo di program space che ap- Se nel listato del nostro programma leggessimo:
pare nella terza colonna, sotto la scritta Scou, cio
da 02DBh, inserita nella pagina P00. P00 0034h
NLEV SNU
Wnn Significa Window Section Number e vie-
ne generata quando si compila un programma che
Sotto la colonna NLEV il compilatore inserisce un
contiene la direttiva .window/.windowend.
valore che segnala il livello che ha listruzione che
Serve quando si utilizza il Linker per assemblare
sta compilando. Se non c nessun numero, si-
pi programmi rilocabili (.obj) che contengano o-
gnifica che listruzione fa parte del programma prin-
gnuno delle aree di dati definiti in Program Spa-
cipale (nel nostro esempio tester.asm).
ce (con .byte .ascii ecc.) e che utilizzino quindi la
Se c il numero 1 significa che listruzione fa par-
Data Rom Window.
te di un programma o di un modulo che a sua vol-
ta viene inserito in fase di compilazione nel pro-
SCOU = 02DB gramma principale.
Indica lindirizzo di Program Space in cui listru- Se c il numero 2 significa che listruzione fa par-
zione viene memorizzata dopo la compilazione. te di un programma o di un modulo che a sua vol-
ta viene inserito in un altro programma o modulo TB_CGR02.ASM, quindi nel caso volessimo mo-
che in fase di compilazione viene inserito nel pro- dificarle non dovremmo ricercarle nel programma
gramma principale. principale TESTER.ASM.
Questi due numeri non sempre corrispondono: ad drw 43* 254 300
esempio le righe 489 - 490 - 491 della colonna Li- dsend 164 166 168 170 172 185 191 202*
st corrispondono alle righe 489 - 489 - 489 della dvolt 67* 68 375 386 388 404 445
colonna SNU.
A sinistra riportato lelenco in ordine alfabetico di
Il perch presto detto: listruzione .byte 32,32,32 variabili, costanti simboliche ed etichette utiliz-
definita nel programma sorgente .asm alla riga zate nel programma ed in corrispondenza di ogni
489, ma siccome definisce 3 bytes, il compilatore voce dellelenco abbiamo una serie di numeri, uno
prosegue nella numerazione per altri due numeri. dei quali contraddistinto da un asterisco.
Per questo motivo la riga 492 della colonna List I numeri corrispondono alle righe del programma
corrisponde alla riga 490 della colonna SNU. .asm in cui variabili - costanti - etichette vengo-
no utilizzate e sono quelli che poi appaiono sotto
Spostatevi ora in basso, alla riga 498 della colon- la colonna LIST del file tester.lis (vedi fig.1).
na List, che corrisponde alla direttiva:
Il numero seguito da un asterisco (*) ci segnala la
.input TB_CGR02.ASM riga del programma sorgente in cui variabili, co-
stanti ed etichette vengono definite.
Quando il compilatore trova la direttiva .input, ca-
rica il file riportato nelle virgolette (nel nostro e- OPZIONE M
sempio TB_CGR02.ASM) e lo assembla inse-
rendolo allinterno del programma principale e se- Genera una mappa della memoria del programma
gnalandolo nel listato con la dicitura: compilato e la riporta in coda al listato nel file con
estensione .LIS (vedi fig.2).
SOURCE FILE : TB_CGR02.ASM Come avrete gi intuito, quando si usa questa op-
zione deve esserci anche lopzione L, altrimenti il
Ora ignoriamo le righe 499 fino alla 502, che sono compilatore segnala errore.
dei commenti, e passiamo direttamente alla riga
503 della colonna List relativa alla direttiva:
.byte 0,0,0,0
Tutte le istruzioni contraddistinte sotto la colonna Fig.2 Mappa della memoria nel file tester.lis.
NLEV con il numero 1 fanno parte del file
La scrittura corretta : OPZIONE S
ast6 L M TESTER. ASM Genera un file con lo stesso nome del programma,
ma con estensione .SYM, contenente un elenco
Nella parte superiore della mappa appare questa delle etichette definite in Program Space e delle
scritta: costanti simboliche utilizzate nel programma.
Digitando:
** SPACE PAGE_0 SECTION MAP **
ast6 S TESTER.ASM
che significa che la mappa stampata riguarda la
Program Page 0 (P00), di cui abbiamo gi parla- viene generato il file tester.sym.
to nel paragrafo dedicato allopzione L.
Nella colonna name della mappa vengono riporta- Di seguito vi riportiamo qualche riga di esempio del
te 3 aree di Program Page 0 con a fianco il tipo di file tester.sym:
istruzioni (text) e laera occupata in bytes espres-
sa in esadecimale. serout : EQU 00966H P
La Program Page 0 suddivisa in tre aree di me- outstart : EQU 00090H C
moria non consecutive, perch allinterno del pro- addr_10 : EQU 00915H P
gramma tester abbiamo utilizzato la direttiva .org, eti : EQU 00006H C
tre volte in punti non consecutivi, per posizionarci asci_r : EQU 00072H C
allinterno della Program Space. asci_w : EQU 00077H C
Pi precisamente: STOPBITS : EQU 00001H C
768 + 8 + 4 = 780 in decimale la lettera C indica che outstart una costante sim-
bolica definita nel programma tramite lutilizzo del-
Convertendo il risultato in esadecimale otteniamo la direttiva .set o .equ ed il valore 00090H, indica-
30Ch, che lo spazio occupato dalle sole istru- to dopo EQU, il valore a lei associato.
zioni del programma. Il file tester.sym di vitale importanza per la fase
Lo spazio occupato dallintero programma te- di Debug del programma, perch viene utilizzato,
ster.asm risulter maggiore, perch queste tre a- assieme al file .dsd, dal software di simulazione
ree non sono consecutive luna allaltra. per rendere leggibile il programma da testare.
Fig.3 Programma compilato senza lopzione S. Fig.4 Programma compilato con lopzione S.
Se in fase di simulazione venisse caricato il solo Questa opzione si utilizza quando si devono com-
programma in formato eseguibile, cio il program- pilare programmi contenenti delle macroroutine,
ma tester.hex che contiene le sole opcode, anche che possiamo unire in seguito ad altri programmi
i programmatori molto esperti avrebbero parecchie tramite il Linker per ottenere un unico programma
difficolt di lettura. eseguibile.
Utilizzando il file tester.sym, il software di simula- In pratica creiamo delle librerie utilizzabili ogni-
zione trasforma le opcode eseguibili in istruzioni qualvolta ne avremo bisogno.
leggibili, rendendo la fase di Debug molto pi sem-
plice. Ma che cosa significa programma rilocabile?
Quando si assembla un programma, il compilato-
In fig.3 potete vedere lesempio di un programma re assegna ad ogni variabile un indirizzo di Data
di simulazione durante la fase di Debug del pro- Space e ad ogni istruzione un indirizzo di Pro-
gramma tester.asm che stato compilato senza gram Space.
inserire lopzione S.
In fig.4 riportiamo lo stesso programma compilato Se si compilato un programma eseguibile, che
con lopzione S. come sappiamo genera i due file .hex e .dsd, gli
indirizzi di Program Space e Data Space assegnati
Come potete vedere, mancando il file tester.sym dal compilatore si posizionano allinterno del mi-
in fig.3 non appaiono tutte le etichette di salto che croprocessore esattamente nel punto di memoria
sono invece presenti nella fig.4. indicato (indirizzamento assoluto).
ldi x,in_start viene generato un file con lo stesso nome del pro-
gramma, ma con estensione .ERR.
S01 0000 lindirizzo di Program Section delli-
struzione, Questo file contiene lelenco di tutti gli errori ri-
0D8098 lopcode eseguibile dellistruzione, scontrati durante la compilazione assembler e ri-
51 il numero di riga di questa istruzione nel pro- porta sul monitor solo lindicazione (vedi fig.7):
gramma sorgente.
In pratica listruzione ldi x,in_start viene memo- nnn error detected
rizzata nel byte 0 di Program Section 1. No object created
Se tramite il Linker uniamo questo programma ad
un altro programma .obj, ad esempio reg_r.obj, ot- Il file con gli errori riscontrarti pu essere visualiz-
teniamo un programma eseguibile al quale va as- zato e stampato con un qualsiasi Editor.
segnato un nome, ad esempio pluto.hex.
Il comando di Linker utilizzato per eseguire que- Questa opzione ci offre molti vantaggi, perch se
sta unione il seguente: nel programma vi sono molti errori, sicuramente
molto utile averne a disposizione una stampa, an-
Lst6 -I -O PLUTO.HEX REG_R.OBJ SUB_IN.OBJ zich dover consultare su video i messaggi di er-
rore con il rischio che qualcuno sfugga.
A seguito di questa unione viene generato il pro-
gramma eseguibile pluto.hex, composto dai due In fig.8 riportiamo il listato ottenuto con un norma-
programmi reg_r.obj e sub_in.obj. le file tester.err.
Con questo listato ci sar possibile modificare e
In fig.6 riportiamo lo stesso listato di sub_in.obj correggere le istruzioni segnalate in modo da otte-
dopo lesecuzione Linker. nere una compilazione corretta.
P01 09CA 0D8098 S01 0000 51 Se non diversamente specificato, quando si com-
pila un programma ogni byte di area Program Spa-
P01 09CA lindirizzo di Program Page dove vie- ce non utilizzata viene riempito dal compilatore con
ne ora definitivamente memorizzata listruzione e il valore OFFh.
0D8098 lopcode eseguibile dellistruzione. Utilizzando lopzione D seguita da un valore nu-
merico possiamo riempire i byte non utilizzati con
Una volta linkata, questa istruzione risulta memo- un determinato valore.
rizzata definitivamente allindirizzo 09CAh di Pro-
gram Space del programma pluto.hex.
La scritta ERROR indica che lerrore molto gra- Se usate lopzione W non dovrete usare la S,
ve, tale da impedire la compilazione in assembler comunque se la inserite verr ignorata.
del programma. In questo caso necessario inter-
venire nel programma e correggere gli errori se- Se usate lopzione D non potete inserire nel pro-
gnalati prima di ricompilare il programma. gramma la direttiva .pp_on.
La scritta WARNING indica che lerrore riscontra- Se usate lopzione M dovrete usare sempre an-
to non grave, quindi la compilazione in assem- che la L; se non la inserite il compilatore segna-
bler riesce a proseguire. ler errore.
Dopo lultimo articolo dedicato alle opzioni del lin- Per ogni diversa funzione previsto un apposito
guaggio Assembler, avremmo dovuto continuare registro, che si trova in una ben determinata lo-
con le lezioni sulle direttive per poi arrivare al cazione di memoria Data Space. Per facilitare la
linker e completare cos la conoscenza di questo stesura del programma, ad ogni locazione di me-
linguaggio di programmazione. moria viene associata unetichetta.
Ma per venire incontro ai molti lettori che ci hanno Per quanto riguarda i micro della famiglia ST6 da
scritto per avere spiegazioni pi dettagliate sulle noi finora presi in esame, cio gli ST6210-15,
memorie Ram-EEprom dei micro ST6260 e ST6220-25 e gli ST6260-65, nelle Tabelle N.1 e
ST6265 (vedi nella rivista N.192 larticolo Bus per N.2 elenchiamo le definizioni di tutti i registri ed il
testare le funzioni Pwm e EEprom), in questo ar- loro indirizzo di Data Space. Per completezza ab-
ticolo tratteremo queste memorie. biamo riportato a fianco di ogni registro letichetta
da noi utilizzata nei nostri programmi.
Prima di entrare nellargomento vogliamo parlarvi
dei registri chiamati Write Only e Write Only Bits, Registri WRITE ONLY
perch se gestiti in maniera non corretta posso-
no provocare anomalie anche gravi durante lese- Nelle lezioni sul linguaggio di programmazione per
cuzione dei programmi. gli ST6 abbiamo pi volte ripetuto che le istruzio-
ni SET - RES - JRS - JRR consentono di acce-
I REGISTRI dere al singolo bit di una variabile o di un regi-
stro per settarlo a 0 o a 1 o per interrogare il suo
Con il termine generico di registri si intende una stato.
serie di indirizzi di memoria Ram Data Space, che Se queste istruzioni vengono utilizzate per modifi-
il micro utilizza per svolgere particolari funzioni. care i singoli bits dei registri Write Only possono
provocare malfunzionamenti del programma, ai
TABELLA N.2
quali difficile risalire.
Infatti, essendo istruzioni formalmente corrette, in Locazione dei registri nei micro ST6260-65
fase di compilazione il Compilatore Assembler non
segnala nessuna anomalia o errore. Data Ram area etichetta locazione
X register x 080h
Non solo, anche testando il programma con i pi Y register y 081h
diffusi software di simulazione non viene segnala- V register v 082h
ta nessuna anomalia, perch il settaggio del sin- W register w 083h
golo bit viene accettato ed eseguito correttamente.
Quando per inseriamo il micro sulla sua scheda port A data register port_a 0C0h
di utilizzo, il circuito non funziona e a questo pun- port B data register port_b 0C1h
to diventa difficile capire perch il micro non ese- port C data register port_c 0C2h
gue le istruzioni per cui stato programmato.
port A direction register pdir_a 0C4h
port B direction register pdir_b 0C5h
TABELLA N.1
port C direction register pdir_c 0C6h
Locazioni dei registri dei micro ST6210-15-20-25
Interrupt Option register ior 0C8h
Data Rom Window register drw 0C9h
Data Ram area etichetta locazione
X register x 080h port A option register pop_a 0CCh
Y register y 081h port B option register pop_b 0CDh
V register v 082h port C option register pop_c 0CEh
W register w 083h
A/D data register addr 0D0h
port A data register port_a 0C0h A/D control register adcr 0D1h
port B data register port_b 0C1h
port C data register port_c 0C2h Timer Prescaler register psc 0D2h
Timer counter register tcr 0D3h
port A direction register pdir_a 0C4h Timer status control register tscr 0D4h
port B direction register pdir_b 0C5h
port C direction register pdir_c 0C6h AR timer mode control register 1 armc 0D5h
AR timer status/control register 2 ars1 0D6h
Interrupt Option register ior 0C8h AR timer load register ars2 0D7h
Data Rom Window register drw 0C9h
Watchdog register wdog 0D8h
port A option register pop_a 0CCh
port B option register pop_b 0CDh AR timer reload/capture register arrc 0D9h
port C option register pop_c 0CEh AR timer compare register arcp 0DAh
AR timer load register arlr 0DBh
A/D data register addr 0D0h
A/D control register adcr 0D1h Oscillator control register ocr 0DCh
Interrupt option register 0C8h (ior) in quanto il numero binario 00010000 corrisponde
Data rom window register 0C9h (dwr) al numero decimale 16. Se anzich scrivere li-
struzione in binario o in decimale volessimo scri-
Nei micro ST6260-65 abbiamo in pi: verla in esadecimale dovremmo modificarla in:
Nella quasi totalit dei programmi, gli interrupt del ldi eedbr,2
micro sono inizialmente caricati a zero.
Per disattivare tutti gli interrupt listruzione corret- Ancora, per disattivare questa Eeprom Page 1
ta la seguente: molti commettono lerrore di scrivere:
Per attivare linterrupt GEN, cio il bit 4 del regi- invece occorre necessariamente scrivere:
stro ior, verrebbe logico scrivere:
ldi eedbr,0
set 4,ior
In fase di programmazione dovrete sempre ricor-
Con questa istruzione il programma non funziona. darvi di questi piccoli particolari per eliminare i
Essendo il registro di Interrupt un registro Write problemi che ora potreste riscontrare.
Registri WRITE ONLY BITS Fig.5 Formato del registro ARMC
In questi registri ci sono dei bits che non possia- Le MEMORIE EEprom e RAM addizionale
mo mai interrogare con istruzioni tipo JRS e JRR,
perch, qualunque sia il loro stato logico, ritornano Quando abbiamo presentato il programmatore
sempre il valore 0. LX.1325 per i micro della serie ST626065 (vedi ri-
vista N.192), ci siamo anche preoccupati di spie-
garvi con semplici esempi la logica del PWM e del-
Fig.3 Formato del registro ADCR
la memoria EEprom.
7 6 5 4 3 2 1 0 Proprio per questo motivo nel dischetto allegato al
EAI EOC STA PDS D3 D2 D1 D0 kit (siglato DF.1325) abbiamo fornito una serie di
programmi elementari, corredati di note a fianco di
In questo registro il Write Only Bit il 5, che tro- ogni istruzione, per rendere pi comprensibili luti-
viamo siglato STA. lizzo del PWM e della memoria EEPROM.
Quando settato a 1 indica linizio della conver- Data la novit dellargomento sono giunte in reda-
sione Analogico/Digitale. Se, dopo aver attivato zione richieste di approfondimento soprattutto
lA/D Converter con listruzione: sullutilizzo e la gestione della memoria EEprom.
Per venire incontro a questa esigenza, affrontiamo
ldi adcr,00110000b in questo paragrafo le memorie EEprom e RAM
addizionale dei micro ST6260 e ST6265.
scriviamo: Nella fig.6 riportato il diagramma a blocchi dei mi-
cro ST6210-15-20-25, mentre nella fig.7 potete ve-
jrs 5,adcr,start_c dere quello relativo ai micro ST6260-65.
Confrontando le due figure potete notare che i mi-
il programma non salter mai a start_c, perch, cro ST6260-65, riportati in fig.7, possiedono in pi
essendo il bit 5 di sola scrittura, e non di lettura, la funzione Autoreload Timer, un SPI (Serial Pe-
non riesce a vederlo settato e quindi il risultato del- ripheral Interface), una Data Ram di 128 bytes ed
la interrogazione sar sempre 0. una Data EEprom di 128 bytes.
Specifichiamo subito, per evitare equivoci, che la
Fig.4 Formato del registro EECR DATA RAM dei micro ST6260-65 data da un ban-
co di memoria RAM aggiuntivo di 64 bytes che,
7 6 5 4 3 2 1 0 sommato ai 64 bytes che tutti i micro della classe
D7 EEOFF D5 D4 EEPAR1 EEPAR2 EEBUSY EEENA ST62 possiedono (allindirizzo 84h-BFh), fa ap-
punto un totale di 128 bytes di RAM.
Nel registro EECR vi sono tre bits Write Only: Per quanto riguarda invece la memoria EEPROM
si tratta di due banchi di memoria di 64 bytes.
EEENA bit 0 I banchi aggiuntivi RAM ed EEPROM vengono con-
EEPAR1 bit 3 venzionalmente definiti pagine e possono esse-
EEOFF bit 6 re selezionati ed utilizzati solo uno per volta:
Naturalmente anche per questi bits vale quanto det- Eeprom Page 0 corrisponde al primo banco ag-
to sopra. Nel prossimo paragrafo spiegheremo lu- giuntivo di memoria EEprom,
tilizzo completo di questo registro. Eeprom Page 1 corrisponde al secondo banco ag-
giuntivo di memoria EEprom, LE 3 PAGINE di MEMORIA
Ram Page 2 corrisponde al banco di memoria RAM
aggiuntivo. Vediamo ora di spiegare come utilizzare in manie-
ra ottimale le tre pagine di memoria aggiuntiva dei
Come abbiamo gi avuto modo di ricordare, to- micro ST6260-65.
gliendo la tensione di alimentazione al micropro-
cessore, la memoria EEprom mantiene memoriz- La caratteristica comune a queste 3 pagine di me-
zati i dati in essa contenuti per circa 10 anni e per moria quella di avere una dislocazione paralle-
questo motivo si usa molto frequentemente. la, vale a dire che sono poste una sopra laltra co-
me le pagine di un libro, e ognuna di queste pagi-
Ci procura evidentemente dei vantaggi e perci si ne possiede unarea di 64 bytes che inizia dallin-
tende normalmente a sfruttare frequentemente dirizzo di memoria 000h e termina con lindirizzo di
questa importante caratteristica. memoria 03Fh.
Come in un libro per indicare un capitolo dobbia-
Dobbiamo comunque precisare che le memorie mo anche specificare in quale pagina si trova, co-
EEprom non hanno vita infinita, infatti la Casa Co- s per leggere e per scrivere in queste memorie
struttrice d una vita media di circa 1.000.000 di ci- dobbiamo indicare lindirizzo dei bytes che ci inte-
cli di scrittura o cancellazione. ressano e la loro pagina (Eeprom o Ram).
Per effettuare la selezione della pagina di memo-
Inoltre la fase di scrittura in una memoria EEPROM ria che si vuole utilizzare si usa un registro appo-
richiede una certa frazione di tempo (in condizioni sito che noi abbiamo chiamato EEDBR.
ottimali dai 10 ai 20 millisecondi), perch prima di Il Registro EEDBR o Data Ram-EEprom Register
registrare un dato viene effettuata la erase, cio la , come abbiamo gi detto, un registro Write Only
cancellazione dei dati che erano stati in prece- definito allindirizzo 0E8h di Data Space.
denza memorizzati.
Come potete vedere in fig.2, per selezionare le pa-
gine di memoria occorre usare:
La Ram Page 2 non presenta nessun problema in
fase di gestione, perch, una volta selezionata con bit 0 per la Eeprom Page 0
il registro EEDBR, si pu usare come una norma- bit 1 per la Eeprom Page 1
le area Data Ram per la gestione delle variabili. bit 4 per la Ram Page 2
8-BIT
TEST/Vpp TEST PORT A
A/D CONVERTER
STACK LEVEL 3
8 BIT CORE
STACK LEVEL 4
STACK LEVEL 5
STACK LEVEL 6
STACK LEVEL 3
8 BIT CORE
STACK LEVEL 4
DIGITAL
STACK LEVEL 5 WATCHDOG
STACK LEVEL 6
Byte INDIRIZZO DI
0 1 2 3 4 5 6 7 DATA SPACE EEPROM
PAGE 0 e 1
Fig.8 Con la scrittura in modalit
parallela i bytes vengono scritti
RIGA 7 38h-3Fh allinterno delle Eeprom Page a 8
RIGA 6 30h-37h alla volta. Qui a fianco potete ve-
dere la suddivisione logica delle
RIGA 5 28h-2Fh Eeprom Page in righe di 8 bytes
ciascuna. Come spiegato nellar-
RIGA 4 20h-27h
ticolo, per scrivere ad esempio 10
RIGA 3 18h-1Fh bytes a partire dallindirizzo 01Fh
(vedi pallini in nero) dovremo da-
RIGA 2 10h-17h re tre istruzioni di scrittura, per-
RIGA 1 08h-0Fh ch i 10 bytes occupano tre righe
di 8 bytes delle Eeprom Page.
RIGA 0 00h-07h
7 6 5 4 3 2 1 0
Fig.9 Formato logico del registro EECR definito allindirizzo 0EAh di Data Space.
Questo registro adibito alla gestione della scrittura nelle Eeprom Page.
Come abbiamo detto, il microprocessore, una vol- Si pu utilizzare questa opzione nel caso il pro-
ta avviata la procedura di scrittura, si posiziona gramma da eseguire non debba usare mai le Ee-
allindirizzo 01Fh, che si trova nella terza riga (ve- prom Page.
di in fig.8) e da qui inizia a scrivere. Attenzione, essendo un bit Write Only non con-
sigliabile interrogare il suo stato logico.
Poich deve scrivere 8 bytes alla volta in ogni ri-
ga, non gli bastano pi 2 T per scrivere 10 bytes, Bit 5 riservato e deve sempre essere a 0.
ma ne impiega 3, infatti:
Bit 4 riservato e deve sempre essere a 0.
Il primo dei 10 bytes viene scritto con un ciclo di
scrittura (1 T) nella riga che contiene lindirizzo
01Fh da cui vogliamo che parta, cio la terza. Bit 3, siglato EEPAR1, un bit Write Only defini-
Gli altri 8 bytes vengono scritti con un altro ciclo di to Parallel Start Bit.
scrittura (2 T) nella quarta riga, arrivando cos Quando settato il micro scrive in modalit paral-
allindirizzo 27h. lela 8 bytes adiacenti nelle Eeprom Page 0 o 1.
Lultimo dei 10 bytes viene scritto con un terzo ci- Fintanto che questo bit rimane settato non pos-
clo di scrittura (3 T) nella quinta riga. sibile effettuare altre istruzioni di scrittura.
Quando la fase di scrittura terminata il micropro-
Dunque nella modalit parallela necessario che cessore resetta automaticamente questo bit.
il programmatore tenga conto non solo di quanti by-
tes vanno scritti, ma anche della posizione in cui i Bit 2, siglato EEPAR2, un bit Write Only defini-
bytes vanno scritti per sapere quante istruzioni di to Parallel Mode Enable Bit.
scrittura in modalit parallela deve dare. Questo bit serve solamente per selezionare la mo-
dalit di scrittura.
Pi avanti troverete altri esempi su questa moda- Se settato attiva la modalit di scrittura parallela,
lit di scrittura, ma ora continuiamo con la spiega- se resettato attiva la modalit byte.
zione della gestione di queste memorie aggiuntive. Quando la fase di scrittura parallela terminata vie-
ne automaticamente resettato.
Risulta oramai evidente infatti che con il solo regi-
stro EEDBR non possibile gestire la fase di scrit- Bit 1, siglato EEBUSY, viene definito EEprom Bu-
tura delle Eeprom Page, perch non possiede nes- sy bit, cio bit di EEprom occupata.
sun bit che permetta di selezionare e gestire que- Questo bit viene gestito direttamente dal micro-
ste due modalit di scrittura. processore che lo setta ogniqualvolta si lancia un
Adibito a questa funzione c un secondo registro, ciclo di scrittura nelle Eeprom Page e lo resetta
che noi abbiamo chiamato EECR. quando questa fase terminata.
Il registro EECR o Eeprom Control Register, si tro- La funzione di questo bit quella di permettere a
va definito allindirizzo 0EAh di Data Space. chi scrive i programmi di poter interrogare la fine
Nella fig.9 potete vedere il suo formato, di cui a- della fase di scrittura, perch fintanto che in e-
nalizziamo ora ogni singolo bit. secuzione non consigliabile n lanciare unaltra
fase di scrittura n tantomeno selezionare una di-
Bit 7 non utilizzato. versa pagina di memoria.
Bit 6, siglato EEOFF, un bit Write Only e viene Bit 0, siglato EEENA, un bit Write Only definito
definito Stand-by Enable bit. EEprom Enable Bit.
Quando settato la memoria EEPROM disabi- Questo bit serve solo per abilitare la modalit scrit-
litata, di conseguenza non possibile leggere o tura. Solo quando risulta settato possibile scri-
scrivere in questa pagina; quando resettato la vere nelle Eeprom Page. Se resettato ogni tenta-
EEprom abilitata. tivo di scrittura sar ignorato.
Ora passiamo ad una serie di esempi per comple- Siccome sono 14 i bytes da trasferire dalla Ee-
tare e chiarire quanto detto sopra. prom Page 0 alla Data Ram e da memorizzare a
Il primo esempio riguarda la gestione della scrittu- partire dallindirizzo stramx, carichiamo i registri
ra in modalit parallela, il secondo un esempio necessari.
di scrittura in modalit byte, mentre il terzo un Nel registro w carico il numero 14 per effettuare 14
esempio sulla gestione del tempo durante la fase cicli di trasferimento:
di scrittura nella memoria EEprom.
Per vostra comodit, oltre a spiegare istruzione per ldi w,14
istruzione, abbiamo riportato lintero listato di ogni
esempio nelle figg.10-12. Nel registro x carichiamo lindirizzo di beep0, che
corrisponde in questo caso al primo byte di Eeprom
Page 0:
ESEMPI
ldi x,beep0
1 Esempio: Scrittura in Modalit Parallela
Nel registro y carico lindirizzo di stramx che cor-
Dobbiamo scrivere un programma che allinizio leg-
risponde alla locazione iniziale di memoria Data
ga 14 bytes della Eeprom Page 0 a partire dallin-
Ram dove verranno trasferiti i 14 bytes:
dirizzo 0 e poi li muova in altrettanti bytes della Da-
ta Ram per poterli elaborare.
ldi y,stramx
Dopodich li deve scrivere con modalit parallela
nella Eeprom Page 1 memorizzandoli dallindiriz- Assegniamo a questa fase letichetta ciclor e rica-
zo 012h in poi. rico il Watchdog.
In fig.10 riportiamo il listato del programma di cui
ora diamo una spiegazione dettagliata. ciclor ldi wdog,0FFh
Per comodit associamo allindirizzo 0 letichetta Ora tramite laccumulatore a trasferiamo i dati da
beep0 e allindirizzo 012h letichetta sceep1. Eeprom Page 0 a Data Ram un byte alla volta:
beep0 .def 000h ld a,(x)
sceep1 .def 012h ld (y),a
A questo punto definiamo tutte le nostre variabili e Decrementiamo quindi il registro w di uno:
lindirizzo di memoria Data Ram che ci serve per
memorizzare i 14 bytes letti da Eeprom Page 0: dec w
La scrittura dei 14 bytes deve partire dalla loca- Quando arriva a 0 significa che la prima volta ha
zione EEprom 012h, che equivale a 18 in deci- terminato di caricare i 6 bytes, perci eseguiamo
male, quindi dobbiamo iniziare a scrivere dal ter- il primo ciclo di scrittura e attendiamo che sia ter-
zo bytes della terza riga (vedi la suddivisione lo- minata la scrittura interrogando il bit 1 EEBUSY:
gica delle Eeprom Page in fig.8).
I 14 bytes saranno quindi registrati 6 nella riga 2 ldi eecr,00001101b
ed i restanti 8 nella riga successiva. jrs 1,eecr,$
Carichiamo pertanto il valore 6 nel registro v:
Riattiviamo quindi la modalit parallela:
ldi v,6
ldi eecr,00000101b
Nel registro x carichiamo lindirizzo di stramx, che perch restano ancora 8 bytes da trasferire. Rica-
corrisponde alla locazione iniziale di memoria Data richiamo quindi il registro v con questo valore:
Ram dove verranno prelevati i valori dei 14 bytes:
ldi v,8
ldi x,stramx
e saltiamo alletichetta ciclos:
Nel registro y carichiamo lindirizzo di sceep1, che
corrisponde allindirizzo di Eeprom Page 1 dove jp ciclos
verranno trasferiti i valori dei 14 bytes:
Quando il programma arriva a finwrp terminato
ldi y,sceep1 il trasferimento dei bytes, pertanto eseguiamo il se-
condo ciclo di scrittura e attendiamo che sia ter- Nel registro w carichiamo il numero 14 per effet-
minata la scrittura interrogando il bit EEBUSY: tuare 14 cicli di trasferimento:
Dobbiamo scrivere un programma che allinizio leg- Ora tramite laccumulatore a trasferiamo e scri-
ga 14 bytes della Eeprom Page 0 a partire dallin- viamo i dati da Data Ram a Eeprom Page 1 un
dirizzo 0 e poi li muova in altrettanti bytes della Da- byte alla volta:
ta Ram per poterli elaborare. Dopodich li deve
scrivere con modalit byte nella Eeprom Page 1 ld a,(x)
memorizzandoli dallindirizzo 012h in poi. ld (y),a
Abbiamo volutamente ripetuto il precedente esem-
pio cambiando solamente la modalit di scrittura In questo momento il dato viene scritto nella Ee-
per fare risaltare maggiormente le differenze di ge- prom Page 1.
stione delle due modalit di scrittura.
E perci evidente che la parte iniziale del pro- Ora gestiamo il tempo di attesa per la scrittura per
gramma identica al precedente esempio quindi evitare di attivare la scrittura di un altro byte prima
ci pare inutile rispiegarvela. che sia finita la scrittura dellaltro.
e ci posizioniamo nella Eeprom Page 1: Quando arriva a zero abbiamo completato il tra-
sferimento e la contemporanea scrittura dei 14
ldi eedbr,2 bytes, quindi saltiamo alletichetta finwrp:
009A reti
009B 04 nop
009C 04 nop
Cliccando sul pulsante Inserisci di fig.7, compare Fig.10 Nellesempio raffigurato, listruzione
la maschera di fig.11 in cui potete scrivere una nuo- LDI, lunga tre bytes, stata sostituita con
va istruzione che automaticamente il programma listruzione RETI pi due istruzioni NOP.
inserir prima dellistruzione che stava per essere
simulata. Naturalmente in questo caso bisogna fa-
re molta attenzione, perch inserendo una nuova
istruzione il Displacement viene variato e gli indi-
rizzi di salto potrebbero essere tutti falsati.
Dopo aver lanciato la simulazione, cliccate sul pul- Fig.13 Per non perdere il corretto Displace-
sante Cronologia Porte per far apparire la ma- ment, il simulatore vi chiede se deve rim-
schera di fig.16 in cui potete scegliere tra due mo- piazzare listruzione con altrettanti NOP.
dalit di visualizzazione: Grafica e Numerica.
Fig.18 Cliccando su PC2 si attiva la ma- Fig.22 Per generare unonda quadra con un
schera per selezionare il tipo di segnale in periodo di 1 ciclo digitiamo 1 in questa fi-
ingresso. Per selezionare un segnale cicli- nestra di dialogo e clicchiamo su OK. La
co utilizzate il pulsante con la lettera C. rappresentazione grafica appare in fig.23.
Fig.27 Esempio di uno dei numerosi con-
trolli inseriti dallAutore per annotare gli er-
rori. In questo caso il registro TSCR sta-
to caricato con un dato non valido.
Fig.32 Viene cos generata questa masche- Fig.35 Nella finestra di dialogo visibile in
ra in cui a sinistra ci sono i piedini con i se- questa figura necessario scrivere il nome
gnali da convertire e al centro lelenco com- del file che contiene la conversione. Nel no-
pleto dei piedini del micro. stro caso il file eet60.cmd.
Le operazioni per generare una forma donda qua- SEGNALI in USCITA e in INGRESSO
dra con un periodo di 10 cicli sul piedino PC2 so-
no visibili in sequenza nelle figg.18-20. Da ultimo, stata aggiunta la possibilit di con-
Le figg.21-22 illustrano invece le operazioni ese- vertire i segnali in uscita, ottenuti durante una si-
guite per generare una forma donda quadra con mulazione e memorizzati in un file .DAT, in segnali
un periodo di 1 ciclo sul piedino PC3. in ingresso, memorizzandoli in un file .CMD da u-
Infine in fig.23 potete vedere il risultato delle due tilizzare in una successiva simulazione.
operazioni in forma grafica. E inoltre possibile redirezionare i segnali da un pie-
dino ad un altro sia nei files .DAT sia nei .CMD.
Per visualizzare i segnali in modalit Numerica Questa possibilit di conversione molto utile per-
cliccate sullapposito pulsante visibile nella ma- ch permette, partendo da un unico file contenen-
schera di fig.16. Si apre cos la maschera di fig.24, te dei segnali, di generare numerosi files di se-
in cui riportato lesempio di una serie di segnali, gnali in ingresso che potranno cos essere utilizzati
rappresentati per lappunto in forma numerica, ri- in numerose simulazioni.
levati dopo la simulazione di un programma.
Per la spiegazione dei singoli simboli e numeri che Cliccando su Conv > CMD nella videata principa-
appaiono in questa figura, rimandiamo alla consul- le (vedi fig.1) si attiva la funzione di Conversione
tazione dellHelp contestuale fornito con questo ed appare la maschera visibile in fig.29.
software simulatore. Per selezionare il file da convertire, cliccate su
Apri File dal menu File di fig.30.
VISUALIZZARE le VARIABILI Nel nostro esempio abbiamo selezionato il file
eet60.dat (vedi fig.31) generato da una preceden-
Il contenuto delle variabili utilizzate nel program-
te simulazione.
ma che si sta simulando pu essere visualizzato
Cliccando su OK appare la maschera di fig.32, ge-
sia in codifica esadecimale sia in codifica binaria.
nerata dalla selezione del file.
Cliccando sul menu Variabili si apre una finestra Sulla sinistra sono riportate tante caselle allinter-
di dialogo che mostra, come nellesempio di fig.25, no delle quali sono elencate le sigle dei piedini che
lelenco di variabili inserite nella lista di visualizza- contengono i segnali da convertire.
zione durante la simulazione del programma. Al centro visibile una barra di scorrimento con le-
Come noterete subito il valore che contengono lenco completo di tutti i piedini del micro, mentre
espresso in Esadecimale sotto la colonna HEX e sulla destra vedete tante caselle vuote.
in Decimale sotto la colonna Dec. Cliccando rispettivamente nella casella di sinistra
Se a questo punto cliccate sopra il pulsante con- per selezionare il piedino e poi nella barra di cen-
trassegnato dalla lettera B, in alto a destra, lo stes- tro per indicare su quale piedino devono essere
so elenco viene visualizzato con il valore espresso trasferiti i segnali, si effettua la conversione.
in Binario (vedi fig.26). Se osservate la fig.33 vedrete che, per quanto ri-
Per tornare alla situazione di fig.25 bisogna clicca- guarda i primi tre piedini, abbiamo trasferito i se-
re sul pulsante contrassegnato dalla lettera H. gnali da .DAT a .CMD sugli stessi piedini, mentre
per quanto concerne il quarto piedino, cio PB7 (e-
RILEVAMENTO degli ERRORI videnziato in giallo dal programma stesso), abbia-
mo trasferito i suoi segnali sul piedino PC0.
Per facilitare il rilevamento di errori durante la si- Completato il trasferimento dei segnali, suffi-
mulazione sono stati aggiunti numerosi controlli ciente scegliere il comando Salva File CMD dal
sulla validit delle istruzioni che vengono via via menu File (vedi fig.34) per memorizzare la con-
eseguite e sono state previste segnalazioni ap- versione in un file che, sempre nel nostro esempio,
posite che informano il programmatore delle ano- abbiamo chiamato eet60.cmd (vedi fig.35).
malie riscontrate.
SPRUN
0
SCK
0
Fig.2 Diagramma di sincronismo SPI in cui stata ipotizzata una trasmissione di 8 bits
dal piedino Sout. Gli 8 cicli di trasmissione sono visibili sul piedino Sck, sul quale il se-
gnale di clock dal livello logico 0 si porta al livello logico 1 e poi torna sul livello logico
0 per 8 volte. Quando la forma donda quadra 0-1-0 la POLARITA del clock NORMA-
LE e poich la trasmissione inizia sul primo fronte di clock (fronte di salita), anche la FA-
SE NORMALE. Per avere una trasmissione con queste caratteristiche bisogna settare a
0 sia il bit cpol sia il bit cpha del registro spmc.
SPRUN
0
SCK
0
Fig.3 Diagramma di sincronismo SPI in cui stata ipotizzata una trasmissione di 8 bits
dal piedino Sout. Gli 8 cicli di trasmissione sono visibili sul piedino Sck, sul quale il se-
gnale di clock dal livello logico 0 si porta al livello logico 1 e poi torna sul livello logico
0 per 8 volte. Quando la forma donda quadra 0-1-0 la POLARITA del clock NORMA-
LE e poich la trasmissione inizia sul secondo fronte di clock (fronte di discesa), si ha u-
no SLITTAMENTO di FASE. Per avere una trasmissione con queste caratteristiche biso-
gna settare a 0 il bit cpol e settare a 1 il bit cpha del registro spmc.
1
SPRUN
0
SCK
0
Fig.4 Diagramma di sincronismo SPI in cui stata ipotizzata una trasmissione di 8 bits
dal piedino Sout. Gli 8 cicli di trasmissione sono visibili sul piedino Sck, sul quale il se-
gnale di clock dal livello logico 1 si porta al livello logico 0 e poi torna sul livello logico
1 per 8 volte. Quando la forma donda quadra 1-0-1 la POLARITA del clock INVERTI-
TA e poich la trasmissione inizia sul primo fronte di clock (fronte di discesa), la FASE
NORMALE. Per avere una trasmissione con queste caratteristiche bisogna settare a 1 il
bit cpol e settare a 0 il bit cpha del registro spmc.
SPRUN
0
SCK
0
Fig.5 Diagramma di sincronismo SPI in cui stata ipotizzata una trasmissione di 8 bits
dal piedino Sout. Gli 8 cicli di trasmissione sono visibili sul piedino Sck, sul quale il se-
gnale di clock dal livello logico 1 si porta al livello logico 0 e poi torna sul livello logico
1 per 8 volte. Quando la forma donda quadra 1-0-1 la POLARITA del clock INVERTI-
TA e poich la trasmissione inizia sul secondo fronte di clock (fronte di salita), si ha uno
SLITTAMENTO di FASE. Per avere una trasmissione con queste caratteristiche bisogna
settare a 1 sia il bit cpol sia il bit cpha del registro spmc.
Osservando le figg.2-5 si pu innanzitutto notare Quando la trasmissione e/o ricezione avviene sul
che il bit Sprun passa dallo stato logico 0 allo sta- 1 fronte di clock (che in polarit normale il fron-
to logico 1 (inizio della trasmissione o ricezione) e te di salita) si parla di fase normale, quando av-
mantiene questo stato per 8 cicli di trasmissione- viene sul 2 fronte di clock (che in polarit norma-
ricezione dati. Gli 8 cicli di clock sono visibili co- le il fronte di discesa) si parla di shift di fase.
me altrettante onde quadre sul piedino Sck. Se siamo in trasmissione viene prelevato il livello lo-
gico contenuto nel registro spda partendo dal bit 7
Nelle figg.2-3 il segnale di clock parte con un li- ed inviato sul piedino Sout. Se siamo in ricezione
vello logico 0, si porta a 1, mantiene questo sta- viene letto il livello logico presente sul piedino Sin e
to per un breve periodo dopodich si riporta a 0. memorizzato nel registro spda partendo dal bit 0.
Dopo 8 cicli, quando il piedino Sck passa dal li-
Quando si in presenza di questa forma donda vello logico 1 al livello logico 0, automaticamen-
quadra (0 - 1 - 0) si parla di polarit di clock nor- te termina la trasmissione o ricezione dei dati.
male. Ogni volta che il clock dal livello logico 0 si
porta sul livello logico 1 si ha un fronte di salita Nella fig.2 la trasmissione-ricezione dei dati avvie-
ed ogni volta che dal livello logico 1 si porta sul ne in polarit normale e ha inizio sul 1 fronte di
livello logico 0 si ha un fronte di discesa. clock, quindi in fase normale.
Ora osserviamo la fig.3 dove, come abbiamo ap- Dopo 8 cicli, quando il piedino Sck passa dal li-
pena detto, il segnale di clock sul piedino Sck par- vello logico 0 al livello logico 1, automaticamen-
te con un livello logico 0 e si porta a livello logi- te termina la trasmissione o ricezione dei dati.
co 1 (polarit normale), ma la trasmissione-rice-
zione non inizia sul 1 fronte, bens sul 2 fronte Nella fig.5 la trasmissione-ricezione dati avviene in
di clock, cio shiftata di fase. polarit invertita, ma ha inizio sul 2 fronte di
Se siamo in trasmissione viene prelevato il livello clock, quindi in slittamento di fase.
logico contenuto nel registro spda partendo dal bit
7 e inviato sul piedino Sout. Se siamo in ricezione
viene letto il livello logico presente sul piedino Sin CONFIGURAZIONE dei REGISTRI
e memorizzato nel registro spda partendo dal bit 0.
Dopo 8 cicli, quando il piedino Sck passa dal li- Il registro spmc (Spi Mode Register) quello che
vello logico 1 al livello logico 0, automaticamen- in pratica controlla tutta la gestione SPI.
te termina la trasmissione o ricezione dei dati.
7 6 5 4 3 2 1 0
Nella fig.3 la trasmissione-ricezione dati avviene in Sprun Spie Cpha Spclk Spin Spstrt Efilt Cpol
polarit normale, ma ha inizio sul 2 fronte di
clock quindi in slittamento di fase. Sprun bit 7 = Spi run. Quando viene posto a li-
vello logico 1 ha inizio la trasmissione dati (Ma-
Ora osserviamo le figg.4-5, in cui il segnale di clock ster Mode) o la ricezione dati (Slave Mode). Alla
sul piedino Sck parte dal livello logico 1, si porta fine della trasmissione o della ricezione questo bit
a 0 e poi ritorna a 1. Quando si in presenza di si porta automaticamente a livello logico 0.
questa forma donda quadra (1 - 0 - 1) si parla di Se viene forzato a livello logico 0 dal programma,
polarit di clock invertita. si interrompe la trasmissione o la ricezione.
Ogni volta che il clock dal livello logico 1 si porta Quando va a 0 pu generare una richiesta di In-
sul livello logico 0 si ha un fronte di discesa ed terrupt se il bit 6 (Spie) settato a 1 ed stata at-
ogni volta che dal livello logico 0 si porta sul li- tivata la routine di Interrupt di SPI nel registro ior.
vello logico 1 si ha un fronte di salita. Utilizzato assieme al bit 2 (Spstrt) stabilisce una
condizione di start in ricezione o trasmissione.
Quando la trasmissione e/o ricezione avviene sul In questo caso la trasmissione-ricezione dati ha i-
1 fronte di clock (che in polarit invertita il fron- nizio solo se viene rilevato un segnale esterno con
te di discesa) si parla di fase normale, quando av- un fronte di salita (rising edge) sul piedino PC2.
viene sul 2 fronte di clock (che in polarit inver-
tita il fronte di salita) si parla di shift di fase. Spie bit 6 = Spi Enable Interrupt. Quando questo
Se siamo in trasmissione viene prelevato il livello bit settato a 1 abilita linterrupt SPI; quando re-
logico contenuto nel registro spda partendo dal bit settato, cio posto a 0, lo disabilita.
7 e inviato sul piedino Sout. Se siamo in ricezione
viene letto il livello logico presente sul piedino Sin Cpha bit 5 = Clock Fase Selection. Quando set-
e memorizzato nel registro spda partendo dal bit 0. tato a 0 si ha una fase normale di clock (vedi figg.2
Dopo 8 cicli, quando il piedino Sck passa dal li- e 4), quando settato a 1 si ha lo slittamento di fa-
vello logico 0 al livello logico 1, automaticamen- se (vedi figg.3 e 5).
te termina la trasmissione o ricezione dei dati.
Spclk bit 4 = Base Clock Selection. Questo bit
Nella fig.4 la trasmissione-ricezione dati avviene in selezione il clock. In pratica dice al microcontrol-
polarit invertita e ha inizio sul 1 fronte di clock, lore se il clock sar interno o esterno.
quindi in fase normale. Se settato a 0 e nel contempo il PC4 Sck con-
figurato input, viene attivata la ricezione (Slave
Per finire passiamo alla fig.5 dove il segnale di Mode) pertanto il clock viene prelevato esterna-
clock sul piedino Sck parte sempre con un livel- mente dallintegrato che invia i dati.
lo logico 1 e si porta a livello logico 0, ma la tra- Se invece settato a 1 e contemporaneamente il
smissione-ricezione non inizia sul 1 fronte, bens PC4 Sck stato configurato in output push-pull,
sul 2 fronte di clock, cio shiftata di fase. viene attivata la trasmissione (Master Mode) per-
Se siamo in trasmissione viene prelevato il livello tanto il clock risulta interno.
logico contenuto nel registro spda partendo dal bit In questo caso il clock viene ricavato dalla fre-
7 e inviato sul piedino Sout. Se siamo in ricezione quenza del quarzo diviso 13 ed ulteriormente divi-
viene letto il livello logico presente sul piedino Sin so per il valore contenuto in alcuni bits del registro
e memorizzato nel registro spda partendo dal bit 0. spdv, come spiegheremo pi avanti.
Spin bit 3 = Input Selection. Questo bit gestisce lori in questo registro quando Sprun settato a 1,
la selezione di input. Se settato a 1 abilita il tra- vale a dire quando attiva la trasmissione o la ri-
sferimento dei dati ricevuti da PC2 Sin nello shift cezione dei dati.
register spda e quindi al termine della ricezione 7 6 5 4 3 2 1 0
questo registro conterr i dati ricevuti.
Se settato a 0 il trasferimento viene disabilitato e Spint Div6 Div5 Div4 Div3 CD2 CD1 CD0
i dati letti su PC2 Sin dovranno essere trattatati di-
rettamente dalle istruzioni di programma. In questo Spint bit 7 = Input Flag. Questo bit un read an
caso PC2 Sin si comporta praticamente come un clean only, ci significa che lo possiamo solo re-
normale piedino. settare a 0 o leggere. Infatti viene settato a 1 dal
micro solo quando viene riscontrata la fine della ri-
Spstrt bit 2 = Start Selection. Questo bit viene u- cezione o della trasmissione SPI ed stata attiva-
tilizzato per gestire la selezione di Start, possibilit ta una richiesta di Interrupt, come abbiamo spie-
questa che pu risultare molto utile in determinati gato nel registro spmc a proposito del bit 6.
casi. Infatti, se questo bit settato a 0, la fase di Questo bit deve poi essere azzerato dal program-
trasmissione o di ricezione SPI ha inizio quando ma una volta che sia stata eseguita la sub-routi-
viene posto a 1 il bit Sprun. ne attivata dallInterrupt sopracitato.
Se invece viene posto a 1 e contemporaneamen-
te si setta a 1 anche il bit Sprun, la ricezione o la Div6-Div3 bits 6-5-4-3 = Burstmode Bit Clock Pe-
trasmissione ha inizio solamente quando viene ri- riod. Questi bits servono per configurare il nume-
cevuto un fronte di salita esterno su PC2 Sin, cio ro dei bits per ogni ciclo di SPI da ricevere o tra-
un segnale rising edge. smettere. Naturalmente, siccome la trasmissione-
In questo modo possibile pilotare esternamente ricezione avviene sul fronte del clock, in pratica si
linizio di una trasmissione-ricezione SPI. Una vol- configura cos anche il numero dei clock per quel
ta che iniziata, la trasmissione-ricezione continua ciclo di trasmissione-ricezione.
anche se il segnale su PC2 Sin viene resettato. Nella Tabella N.1 riportata la loro configurazio-
ne. Per ogni ciclo possibile trasmettere-ricevere
Efilt bit 1 = Enable Filter. Questo bit serve per a- un massimo di 8 bits in quanto il registro dal qua-
bilitare o disabilitare un filtro anti-rumore sui piedi- le vengono trasmessi lungo solo 1 byte.
ni PC2 Sin e PC4 Sck. Se settato a 0 il filtro per possibile configurare la tabella per una tra-
disabilitato, se settato a 1 abilitato. smissione fino a 15 clock per ciclo, ma in questo
In fase di ricezione dati capita di frequente che sui caso sui fronti di clock eccedenti verranno inviati i
piedini interessati si trovino disturbi di qualsiasi na- livelli logici 0 subentrati ai valori presenti nel re-
tura che potrebbero falsare i dati ricevuti. gistro spda per effetto dello shiftamento durante la
Quando abilitato, questo filtro elimina ogni im- trasmissione.
pulso rilevato che sia pi piccolo di 1-2 periodi del
clock principale del micro. Ad esempio, se configuriamo questi piedini per in-
In pratica ad ogni clock interno del micro viene let- viare 11 clock per ciclo, con i primi 8 clock ver-
to una prima volta il dato sul piedino, il clock suc- ranno trasmessi i primi 8 bits cos come si trovano
cessivo viene riletto e se il dato lo stesso viene nel registro spda (vedi fig.6), mentre per i succes-
accettato. Se alla seconda lettura il dato risulta in- sivi 3 clock verranno trasmessi i livelli logici 0.
vece diverso, vengono ignorati entrambi perch Questo significa che se il contenuto del registro
considerati disturbi. spda del micro che trasmette era:
Cos, ad esempio, se il micro ST6265 lavora ad u-
7 6 5 4 3 2 1 0
na frequenza di 8 MHz, avremo un filtraggio ogni
125 nanosecondi ed un possibile ritardo sulla con- 1 1 0 0 1 1 1 1
ferma di un segnale fino a 250 nanosecondi.
dopo 11 clock di trasmissione, il registro spda del
Cpol bit 0 = Clock Polarity. Questo bit gestisce la micro che ha ricevuto i dati conterr questi valori:
polarit del clock sul piedino Sck. Se settato a
7 6 5 4 3 2 1 0
0 la polarit normale (vedi figg.2-3), se setta-
to a 1 la polarit invertita (vedi figg.4-5). 0 1 1 1 1 0 0 0
Il registro spdv o Spi Divide Register il registro perch, come abbiamo avuto gi modo di ricorda-
che gestisce il numero dei bits da inviare-ricevere re e come spiegheremo pi dettagliatamente in se-
e che permette di configurare la frequenza di tra- guito, i bits, man mano che vengono ricevuti, shif-
smissione. Non possibile scrivere o variare i va- tano verso sinistra nel registro spda.
1
SPRUN
0
SCK
0
DATO
0
1 1 0 0 1 1 1 1 0 0 0
Nota: ovviamente il registro spdv deve avere la CD2-CD0 bits 2-1-0 = Clock Rate Selection. Que-
stessa configurazione sia in master sia in slave, sti bits servono per ottenere il numero da utilizza-
cio il numero dei bits da inviare e ricevere deve re per configurare la frequenza di clock di trasmis-
essere lo stesso. sione. In sostanza dalla configurazione appropria-
ta di questi tre bits (vedi Tabella N.2) otteniamo il
TABELLA N.1 divisore.
DV6 DV5 DV4 DV3 numero bits TABELLA N.2
0 0 0 0 riservato
0 0 0 1 1 CD2 CD1 CD0 DIVISORE
0 0 1 0 2 0 0 0 divide x 1
0 0 1 1 3 0 0 1 divide x 2
0 1 0 0 4 0 1 0 divide x 4
0 1 0 1 5 0 1 1 divide x 8
0 1 1 0 6 1 0 0 divide x 16
0 1 1 1 7 1 0 1 divide x 32
1 0 0 0 8 1 1 0 divide x 64
1 0 0 1 9 1 1 1 divide x 256
1 0 1 0 10
1 0 1 1 11
1 1 0 0 12
Dividendo la frequenza del quarzo utilizzato dal
1 1 0 1 13
micro prima per 13 poi per questo divisore si ot-
1 1 1 1 14
tiene la frequenza di clock di trasmissione dati:
1 1 1 1 15
Fclock = (Fquarzo in Hz : 13) : N.Divis.
Nota: La quantit di bits da trasmettere o ricevere
ad ogni ciclo legata naturalmente al tipo di pro- dove:
blematica che si vuole risolvere ed al tipo di inte-
grati con i quali si vuole dialogare. perci ne- Fclock la frequenza del clock di trasmissione,
cessario consultare sempre i data-sheet degli in- Fquarzo la frequenza del quarzo in hertz,
tegrati o dei micro per non trovarsi poi in situazio- 13 un numero fisso,
ni imprevedibili da cui non si sa pi come uscire. N.Divis. il numero del divisore (vedi Tabella n.2).
Poniamo ad esempio il caso che un programma ri- Quando, al primo fronte di clock, inizia la trasmis-
chieda una frequenza di clock (Fclock) approssi- sione, il registro shifta di un bit verso sinistra, quin-
mativa di 9600 bit rate. di D0 assume valore 0 ed il valore contenuto in D7
Per trasmettere i dati da un micro ST6265 che u- viene inviato sul piedino PC3 sout, che lo trasmette
tilizza un quarzo da 8 MHz ad un dispositivo e- al micro slave.
sterno, potremo calcolare il numero del divisore
utilizzando questa seconda formula: Questo micro lo riceve sul piedino PC2 sin e lo
memorizza nel suo registro spda, partendo dal bit
N.Divis. = (Fquarzo in Hz : 13) : Fclock D0. Dopo la trasmissione del primo bit, la rappre-
(8.000.000 : 13) : 9600 = 64,10256 sentazione binaria del registro spda del micro ma-
ster diventer:
Poich i decimali non vanno considerati, per poter
ottenere una frequenza approssimativa di clock di D7 D6 D5 D4 D3 D2 D1 D0
9600 bit rate dovremo dividere la frequenza del
quarzo per 13 e successivamente per 64. 0 1 1 0 0 1 1 0
Consultando la Tabella N.2 siamo ora in grado di Mentre quella del registro spda del micro slave :
sapere che per ottenere il divisore 64, i tre bits de-
vono essere cos settati: D7 D6 D5 D4 D3 D2 D1 D0
CD2 CD1 CD0 0 0 0 0 0 0 0 1
1 1 0 Al secondo fronte di clock, il registro shifta nuova-
mente verso sinistra di un bit, quindi D0 assume
Nota: anche in questo caso, come nel preceden- nuovamente valore 0 e D7 (che aveva assunto il
te, sar necessario consultare attentamente i da- valore di D6 dopo il primo fronte di clock) viene in-
ta-sheet dei dispositivi usati per poter selezionare viato per essere trasmesso al piedino PC3 sout.
correttamente la frequenza di clock ottimale o ne- Il micro slave riceve il dato sul piedino PC2 sin e
cessaria con cui operare la trasmissione dati. lo memorizza nel registro spda sempre a partire
Il registro spda o Spi Data Register il registro in dal bit D0, shiftando in D1, cio verso sinistra, il va-
cui vengono memorizzati i dati ricevuti e i dati da lore prima contenuto in D0.
trasmettere. Il ciclo descritto per la trasmissione dei primi due
bits si ripete anche per i rimanenti 2 bits, come e-
7 6 5 4 3 2 1 0 semplificato in fig.7.
D7 D6 D5 D4 D3 D2 D1 D0 A fine trasmissione il registro spda del micro ma-
ster ha questa rappresentazione binaria:
Poich uno shift register, i dati vengono trasmessi
e ricevuti a cominciare sempre dal Msb, cio dal D7 D6 D5 D4 D3 D2 D1 D0
bit col valore significativo pi alto.
I dati vengono ricevuti e/o trasmessi da questo re- 0 0 1 1 0 0 0 0
gistro ad ogni fronte (edge) di clock compatibil-
Come potete vedere il contenuto di questo registro
mente a quanto settato come polarit e fase nei
ora 48. Avendo trasmesso 4 bits, il registro
bits Cpol (0) e Cpha (5) del registro spmc, di cui
shiftato di 4 posizioni verso sinistra e i bits a de-
gi abbiamo parlato. Non possibile modificare il
stra sono stati riempiti con degli 0.
contenuto di questo registro quando attiva una
trasmissione o una ricezione. A sua volta il registro spda del slave ha la seguente
D7-D0 bits 7-6-5-4-3-2-1-0 = Data Bits. Questi bits configurazione binaria:
contengono i valori ricevuti o da trasmettere. D7 D6 D5 D4 D3 D2 D1 D0
Poich il registro spda uno shift register, ne- 0 0 0 0 1 0 1 1
cessaria una certa cautela nellutilizzarlo.
Mettiamo ad esempio il caso che si vogliano tra- Avendo ricevuto 4 bits, i primi quattro bits a destra
smettere ad un altro micro solo 4 bits e che il va- hanno il valore indicato, che equivale a 11.
lore contenuto in spda prima della trasmissione sia
179. La rappresentazione binaria : Nel caso in cui si trasmetta un numero inferiore a
8 bits, ricordate di fare molta attenzione perch,
D7 D6 D5 D4 D3 D2 D1 D0 come avete visto dallesempio, i 4 bits trasmessi a-
vevano un valore di 88, mentre i 4 bits ricevuti han-
1 0 1 1 0 0 1 1
no un valore di 11.
Per concludere, nel caso in cui siate in modalit
TRASMISSIONE DI 4 BITS
master e dobbiate caricare un valore nel registro
spda, non usate listruzione LDI, perch non ver-
MASTER SLAVE
rebbe caricato nulla e trasmettereste 8 bits a zero.
SPDA = 179 SPDA = 0
E invece necessario caricare prima il valore nellac-
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
cumulatore A e successivamente muovere il con-
1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 tenuto dellaccumulatore in spda.
INIZIO TRASMISSIONE Se ad esempio volessimo trasmettere 139, la se-
quenza esatta delle istruzioni sarebbe:
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 1
1 CLOCK
ldi a,139
ld spda,a
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 0
Il registro misc o Miscellaneous Register un re-
0 1 1 0 0 1 1 0 0
gistro comune a molti livelli di micro ST6 e quindi
2 CLOCK
contiene dati per settare varie funzioni.
Per la SPI viene utilizzato solo il bit 0.
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
1 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 1
3 CLOCK
7 6 5 4 3 2 1 0
M0
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1
M0 bit 0 = Mode Sout. Se il piedino PC3 viene set-
4 CLOCK
tato a 1 come Sout per la funzione SPI sar attivo
FINE TRASMISSIONE
per la trasmissione dati. Se settato a 0 il PC3 di-
SPDA = 48 SPDA = 11 venta un normale piedino di I-O di Port_C.
D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 A questo punto, conclusa la trattazione teorica sul-
la SPI, non ci rimane che suggerirvi di realizzare
Fig.7 Esempio di trasmissione-ricezione di subito le tre semplici interfacce periferiche pub-
4 bits. I dati vengono inviati a partire dal bit blicate in questo stesso numero per poter provare
7 e ricevuti a partire dal bit 0. Ad ogni clock i programmi dimostrativi, da noi appositamente
i dati shiftano verso sinistra. scritti, sulla trasmissione e ricezione di dati con lo
standard SPI utilizzato dai micro ST62/65.
Come potete vedere dalla fig.4, linterfaccia Con questa scheda i dati trasmessi dal micro
LX.1380 molto semplice: sul suo circuito stam- ST62/65 inserito nel bus LX.1329 o nellinterfaccia
pato vanno infatti montati un solo dip-switch prov- LX.1381 vengono ricevuti dai quattro shift register
visto di 8 levette (vedi S1), un pulsante e due con- e visualizzati sui display e sui diodi led.
nettori maschi a 5+5 terminali che vi serviranno
per collegare, con le apposite piattine, le due in- REALIZZAZIONE PRATICA LX.1380
terfacce LX.1381 - LX1.382.
Sul circuito stampato siglato LX.1380 dovete mon-
Se non disponete ancora del bus siglato LX.1329, tare tutti i componenti come disposti nel disegno vi-
potrete richiederlo al nostro indirizzo assieme alla sibile in fig.4.
rivista N.192, nella quale potete trovare anche il Per iniziare vi consigliamo di inserire sul lato op-
Programmatore per i micro ST62/60 - ST62/65. posto dello stampato in basso il CONN.1 a 1 fila
24 terminali e in alto i due connettori a 1 fila 4 ter-
La seconda interfaccia, siglata LX.1381, va colle- minali, che vi consentiranno di collegare in modo
gata, sempre tramite la piattina che vi forniamo gi stabile questa scheda allinterfaccia bus LX.1329.
cablata e completa di connettori femmina, sulla pri- Proseguendo inserite anche i due connettori ma-
ma interfaccia siglata LX.1380. schi a 5+5 terminali (vedi CONN.2) rivolgendo la-
sola di riferimento verso lalto.
Come potete vedere dalla fig.7, sullinterfaccia Al centro stagnate il pulsante P1 e sotto questo il
LX.1381 vanno montati due zoccoli, uno per il mi- dip-switch siglato S1, rivolgendo il lato del corpo
cro ST62/65 e laltro per la rete resistiva R3, un che riporta la scritta ON verso lalto (vedi fig.4).
Fig.1 Sulla scheda bus LX.1329 presentata nella rivista N.192, che sicuramente avrete gi
montato, dovete inserire un micro ST62/65. Sopra a questa scheda andr innestata lin-
terfaccia LX.1380, che vi permetter di dialogare con le altre due interfacce siglate LX.1381-
LX.1382. La scheda LX.1329 va alimentata tramite la scheda LX.1203.
Le 8 levette del dip-switch equivalgono agli 8 bits REALIZZAZIONE PRATICA LX.1382
da configurare per la trasmissione dati.
A questo proposito ricordate che la levetta alle- Sul circuito stampato siglato LX.1382 inserite co-
strema destra rappresenta il bit 0 e quella alle- me primi componenti i 4 zoccoli per le reti resisti-
strema sinistra il bit 7. vi e i 4 zoccoli per gli integrati shift register.
In basso al centro inserite il CONN.2 rivolgendo la
REALIZZAZIONE PRATICA LX.1381 sua asola di riferimento verso lalto.
In alto stagnate gli 8 diodi led rivolgendo il termi-
Sul circuito stampato siglato LX.1381 vanno mon- nale pi corto (vedi K) verso i display.
tati tutti i componenti come visibile in fig.7. Come gi spiegato a proposito del circuito prece-
Iniziate inserendo i due zoccoli per la rete resiste- dente, anche in questo caso il diodo led pi a de-
va R3 e per il micro ST62/65 (vedi IC1), poi in bas- stra visualizza il dato corrispondente al bit 0 ed il
so a destra inserite il CONN.2 rivolgendo la sua a- diodo led pi a sinistra quello del bit 7.
sola di riferimento verso lalto. Per completare il montaggio innestate i tre display
In alto stagnate gli 8 diodi led rivolgendo il termi- rivolgendo il punto decimale verso il basso.
nale pi lungo (vedi Anodo) verso R3.
I PROGRAMMI nel DISCHETTO DF.1380
I dati ricevuti dal micro vengono visualizzati trami-
te gli 8 diodi led e, come gi spiegato a proposito Il dischetto siglato DF.1380, che forniamo a parte
dellinterfaccia LX.1380, tenete presente che il dio- su richiesta, contiene 5 programmi:
do led pi a destra corrisponde al bit 0 e il diodo
led pi a sinistra al bit 7. PROG01 questo programma contiene un esem-
Quindi il diodo led allestrema destra visualizzer il pio di trasmissione dati tramite SPI da un micro
dato configurato con la levetta pi a destra del dip- ST62/65 a 4 shift register a 8 bits. Il micro in cui
switch della scheda LX.1380, e cos via. stato caricato questo programma deve essere in-
nestato nella scheda LX.1329 e i dati trasmessi
Per completare il circuito stagnate il deviatore a le- vengono visualizzati sulla scheda LX.1382.
vetta S1, il pulsante P1, il quarzo, il trimmer R1, i
pochi condensatori e lunica resistenza, cos come TXPG02-RXPG02 questi programmi contengono
appare nel disegno in fig.7. un esempio molto semplice di trasmissione dati fra
Ricordatevi che le tacche di riferimento a U della 2 micro ST62/65 tramite funzione SPI. Il micro in
rete resistiva e del micro vanno rivolte a destra. cui stato caricato il programma Master (TXPG02)
va inserito nella scheda LX.1329, mentre il micro
Il trimmer R1 stato inserito per applicare sullin- in cui stato caricato il programma Slave
gresso analogico PA0 un valore di tensione varia- (RXPG02) nella scheda LX.1381.
bile da 0 a 5 volt, in modo da farvi vedere il valo-
re da 0 a 255 della conversione eseguita dallA/D TXPG03-RXPG03 questi programmi contengono
converter in un numero binario. un esempio abbastanza complesso di trasmissio-
S1
R1
R2
R3
R4 C1 P1
R5
R6
R7
R8
A0 A1 A2 A3 A4 A5 A6 A7 B0 B1 B2 B3 B4 B5 B6 B7 C0 C1 C2 C3 C4 NMI GND + 5 V. + 12 V.
CONN. 1
R4 R5
derate la numerazione S1
presente sul dip-switch.
CONN. 1
ne/ricezione dati tramite SPI che coinvolge due mi- Il programma PROG01 un esempio di come ri-
cro ST62/65 e 4 shift register. sulti possibile trasmettere dei dati tramite SPI da
In sostanza il micro contenente il programma Sla- un micro ST62/65 a 4 shift register a 8 bits di ti-
ve (RXPG03), innestato nella scheda LX.1329, rie- po HC/Mos 4094 collegati in serie.
sce a ricevere i dati dal micro contenente il pro-
gramma Master (TXPG03), innestato nella scheda Gli shift register (vedi IC1-IC2-IC3-IC4) pur non
LX.1381, e li ritrasmette, sfalsati da un solo ciclo disponendo della funzione SPI ricevono i dati in
di trasmissione, ai 4 shift register che si trovano modo seriale sul piedino 2 ed il segnale di clock
sulla scheda LX.1382 sfruttando lo stesso segna- sul piedino 3 (vedi fig.9).
le di clock trasmesso dal Master. Naturalmente lu- I dati ricevuti vengono successivamente memoriz-
nica condizione che i tre dispositivi abbiano il se- zati e visualizzati in questi registri solo inviando un
gnale del clock SPI in comune. segnale di latch (high) sul piedino 1.
Infatti, solamente quando questo piedino passa
Poich nel dischetto DF.1380 tutti questi program- dallo stato logico 0 allo stato logico 1, i dati pre-
mi sono in formato .ASM, dovrete necessariamen- senti in quellistante nel registro vengono memo-
te assemblarli in modo da ottenere dei files in for- rizzati e contemporaneamente inviati in modalit
mato .HEX (vedi rivista N.179), prima di poterli ca- parallela su 8 dei suoi piedini (per la precisione i
ricare sui micro ST62/65 tramite il programmatore piedini 4-5-6-7-14-13-12-11) per essere visualizza-
LX.1325 descritto nella rivista N.192. ti sui display e sui led della scheda.
Il collegamento in serie degli integrati 4094 sta-
Accanto ad ogni istruzione di programma abbiamo
to ottenuto collegando il piedino 9 del primo di-
inserito un commento chiarificatore, quindi se a-
spositivo al piedino 2 del secondo e cos via.
vete qualche dubbio potete aprire i files con un
I dati inviati passano perci di volta in volta dal pri-
qualsiasi editor e leggere le spiegazioni.
mo registro al secondo fino a quando non viene in-
sottinteso che per effettuare questi test consi- viato il segnale di latch.
gliabile usare dei micro ST62E65 provvisti di fine-
stra perch si possono cancellare e quindi riuti- I programmi TXPG02 - RXPG02
lizzare, mentre i micro ST62T65 si possono pro-
grammare una volta sola. Dopo aver assemblato il programma TXPG02.A-
SM ottenendo TXPG02.HEX ed il programma
La scheda LX.1380 va innestata sulla scheda bus RXPG02.ASM ottenendo RXPG02.HEX, dovrete
LX.1329 e dovrete necessariamente alimentarla caricarli su due micro cancellabili tipo ST62E65.
con una tensione stabilizzata di 5 volt.
La fig.1 potr chiarire su quale dei tre poli presen-
ti sulla morsettiera dovrete inserire il positivo ed il
negativo dei 5 volt.
Il programma PROG01
13 XTAL1
21
3 12 22
C7
P1 C2
C5
7 6 5 4 3 2 1 0 bit
ELENCO COMPONENTI LX.1381
11 12 3 PB0 1 28 PCO/Ain
PB1 2 27 PC1/TIM 1/Ain
EEPROM TEST/Vpp 3 26 PC2/S in/Ain
ALIMENTAZIONE TEST
PB2 4 25 PC3/S out/Ain
PB3 5 24 PC4/S CK/Ain
RAM
PB4 6 23 NMI
WATCH PB5 7 22 RESET
DOG ARTIMin/PB6 8 21 OSC. OUT.
PORTA A ARTIMout/PB7 9 20 OSC. INP.
Ain/PA0 10 19 PA7/Ain
23
NMI NMI CPU Vcc 11 18 PA6/Ain
PORTA B GND 12 17 PA5/Ain
Ain/PA1 13 16 PA4/Ain
Ain/PA2 14 15 PA3/Ain
22
RESET RESET
PORTA C
ST 62/65
20 AUTORELOAD
OSC. INP SPI INTERFACE
TIMER
OXILL.
OSC. OUT
Fig.8 A sinistra lo schema a blocchi de-
21 gli stadi presenti nel micro ST62/65 e a
A/D CONVERTER TIMER
destra la sua zoccolatura.
LX.1380 tramite piattina utilizzando a vostro pia- Lo stesso micro controlla inoltre che il numero bi-
cere il CONN.2 a destra o quello a sinistra. nario non superi una soglia che possiamo prefis-
Per finire collegate sempre tramite piattina anche sare tra 1 e 255: nel nostro esempio abbiamo pre-
la scheda LX.1382 alla scheda LX.1380 sul con- fissato la soglia a 230.
nettore rimasto libero. Se questo numero viene superato, il Master invia
un segnale di allarme sul piedino 14, corrispon-
IMPORTANTE: il deviatore S1 presente sul circui- dente al piedino logico PA2 di porta A del micro
to LX.1381 va posizionato verso B in modo da col- TX03 (vedi fig.8), collegato al piedino NMI del mi-
legare il piedino 26 (PC2) del micro TX03 con il pie- cro RX03, presente nella scheda LX.1329, e cari-
dino 27 (PC1) del micro RX03, diversamente non ca un livello logico 1 nella variabile nonesi, che
avverr nessuna trasmissione dati. normalmente a livello logico 0.
Anche in questo caso il pulsante P1 presente sul- Nel programma stata inserita una routine che si
la scheda LX.1380 inattivo e lo stesso dicasi per attiva quando viene letto un dato superiore a 230.
il pulsante P1 presente sulla scheda LX.1381. Con questa routine viene abbassato il tempo di ri-
Quello che risulta attivo il solo trimmer R1 che chiesta invio dati da 10 secondi ad 1 secondo, fi-
ci serve per variare la tensione sul piedino 10 uti- no a che il valore medio rilevato sul trimmer non
lizzato come A/D converter. torna sotto il limite dei 230.
Noi abbiamo utilizzato un trimmer, ma potrete en-
trare su questo piedino con qualsiasi tensione con- Il superamento del livello di soglia per noi anche
tinua da 0 a 5 volt massimi prelevabili da una sor- visivo perch il diodo led posto a sinistra comincia
gente qualsiasi, una fotoresistenza, una resisten- a lampeggiare molto pi velocemente, allincirca 1
za NTC, un alimentatore ecc. volta al secondo.
In pratica il programma Master rileva il valore di
tensione leggendolo sul piedino 10 del micro TX03 Il programma RX03, presente sulla scheda bus
e, passando attraverso il micro RX03 Slave situa- LX.1329, utilizza un orologio interno generato tra-
to sulla scheda LX.1329, lo visualizza sui diodi mite la funzione Timer e ogni 10 secondi invia al
led della scheda LX.1382 con un codice binario e micro TX03, presente sulla scheda LX.1381, una
sui tre display in un valore decimale da 0 a 255. richiesta di invio dati relativa appunto alla codifica
digitale della tensione rilevata sul trimmer R1.
In questo caso la trasmissione dati tra due micro
e tra il micro e gli shift register avviene utilizzando Pur essendo RX03 settato in ricezione, avendo ca-
lo stesso clock del micro Master. ricato il valore 1 sul registro misc, il suo piedino 25
Unica condizione , ovviamente, che i piedini PC4 diventa un piedino settato in trasmissione come
Sck dei micro ed i piedini 3 degli shift register sia- PC3 Sout.
no collegati insieme. Come gi sapete, questo significa che in presenza
di un clock SPI, il valore presente di volta in volta
Il micro TX03 legge per 32 volte la tensione pre- sul bit 7 del registro spda viene trasmesso su PC3
sente sul piedino dellA/D converter, ne fa il tota- Sout e nel nostro caso inviato agli shift register
le ed il numero binario che ne risulta lo divide per montati sulla scheda LX.1382.
32 in modo da ottenere un valore medio. Quindi ogni 10 secondi si ha una ricezione dati
Questo valore medio viene poi convertito in un co- suddivisi in 5 cicli di 8 bits ciascuno.
dice BCD da 3 bytes, che, inviato alla scheda
LX.1382, ci servir per far apparire sui display un Poich qualcuno si chieder perch occorrono 5
numero decimale. cicli cercheremo di spiegarvelo:
A differenza dei programmi precedenti, in questo al 1 ciclo gli 8 bits presenti nel registro spda
esempio non abbiamo attivato la Start Condition del micro TX03 vengono trasferiti nel registro sp-
tramite il registro Mode spmc, ma viene invece ef- da del micro RX03 e qui rimangono parcheggiati.
fettuato un controllo sul piedino PC2 di Port_C tra-
mite listruzione JRR. al 2 ciclo i successivi 8 bits presenti nel regi-
Infatti solo quando il micro TX03 riceve un impul- stro spda del micro TX03 vengono inviati nel regi-
so di reset sul suo piedino 26 (PC2 Sin), inizia a stro spda del micro RX03, mentre gli 8 bits del 1
trasmettere i dati per un totale di 5 cicli di tra- ciclo vengono inviati tramite PC3 Sout allintegra-
smissione di 8 bits ciascuno. to IC1 della scheda LX.1382.
Per tutta la durata della trasmissione si accende il Nel registro spda del micro RX03 risultano ora par-
diodo led posto a sinistra. cheggiati gli 8 bits del 2 ciclo.
DISPLAY1 DISPLAY2 DISPLAY3
7 6 5 4 3 2 1 0 bit
K K K
DIODI
LED
a b c d e f g dp a b c d e f g dp a b c d e f g dp
CONN.2 R1 R2 R3 R4
PC0
11 12 13 14 7 6 5 4 16 4 5 6 7 14 13 12 11 16 4 5 6 7 14 1312 11 16 4 5 6 7 14 13 12 11 16
2 3 1 8 9 2 3 1 8 9 2 3 1 8 9 2 3 1 8
C1 C2 C3 C4
PC3
PC4/S CK
Fig.9 Schema elettrico del circuito LX.1382. Con il programma PROG01 la configurazione
selezionata con il dip-switch S1 presente sulla scheda LX.1380 verr inviata su questa
scheda per essere visualizzata tramite gli otto diodi led e i tre display.
al 3 ciclo i successivi 8 bits presenti nel regi- Nel registro spda del micro RX03 risultano ora par-
stro spda del micro TX03 vengono inviati nel regi- cheggiati gli 8 bits del 4 ciclo.
stro spda del micro RX03, gli 8 bits del 2 ciclo
vengono inviati sempre con PC3 Sout allintegrato al 5 ciclo i successivi 8 bits presenti nel regi-
IC1 della scheda LX.1382 e gli 8 bits del 1 ciclo stro spda del micro TX03 vengono inviati nel regi-
vengono trasferiti ad IC2. stro spda del micro RX03, gli 8 bits del 4 ciclo
Nel registro spda del micro RX03 risultano ora par- vengono inviati con PC3 Sout allintegrato IC1 del-
cheggiati gli 8 bits del 3 ciclo. la scheda LX.1382, gli 8 bits del 3 ciclo vengono
trasferiti ad IC2, gli 8 bits del 2 ciclo vengono tra-
al 4 ciclo i successivi 8 bits presenti nel regi- sferiti ad IC3 e gli 8 bits del 1 ciclo vengono tra-
stro spda del micro TX03 vengono inviati nel regi- sferiti ad IC4.
stro spda del micro RX03, gli 8 bits del 3 ciclo
vengono inviati con PC3 Sout allintegrato IC1 del- Se ci fossimo fermati alla trasmissione del 4 ci-
la scheda LX.1382, gli 8 bits del 2 ciclo vengono clo, questo sarebbe rimasto parcheggiato nel re-
trasferiti ad IC2 e gli 8 bits del 1 ciclo vengono gistro spda del micro RX03 e non avrebbe rag-
trasferiti ad IC3. giunto la scheda LX.1382.
Fig.10 Foto della scheda test
LX.1382. Poich questa la
foto di un prototipo, sul cir-
cuito stampato manca il dise-
gno serigrafico.
7 6 5 4 3 2 1 0 bit
K K K K K K K K
2831.XL
R1 R2 R3 R4
CONN.2
VERSO LX.1380
A questo punto il micro RX03 lancia il segnale di Analizziamo ora il programma caricato sul micro
latch e tutti i dati presenti nei 4 shift register ven- Master chiamato TXPG02. In Data Space trovia-
gono visualizzati sui display e sui led. mo le istruzioni dei registri utilizzati per la SPI:
Proprio perch potete disporre di una sorta di sche- Ora passiamo ai piedini di Port_C che, per gestire
da di valutazione, abbiamo pensato di analizzare in modalit corretta la SPI, vanno cos configurati:
nei particolari le istruzioni dei programmi denomi-
nati TXPG02 ed RXPG02, fermo restando che po- ldi port_c,00000100b
trete utilizzare come test anche gli altri programmi ldi pdir_c,00011000b
scritti da noi. ldi popt_c,00011000b
Inoltre, per focalizzare la vostra attenzione sullar-
gomento che stiamo trattando, ometteremo di se- Il piedino 2 viene configurato Input no Pull_up,
guito la spiegazione delle istruzioni non inerenti al- mentre i piedini 3-4 come Output Push_pull.
la funzione SPI, ampiamente trattate nel corso del- In questo esempio di trasmissione i restanti piedini
le precedenti lezioni. non ci interessano quindi non li abbiamo riportati.
Con le istruzioni appena viste abbiamo solamente
Innanzitutto con i programmi RX e TX noi leggia- predisposto i piedini interessati alla trasmissione,
mo i livelli logici presenti sulla porta A del micro ma non abbiamo ancora attivato la SPI.
Master inserito nel Bus LX.1329 e li inviamo con In questo programma il piedino 2 stato configu-
la funzione SPI al micro Slave inserito nella sche- rato come input, perch dovr ricevere dal micro
da LX.1381. Quando infatti, il deviatore presente Slave il segnale necessario al micro Master per i-
su questa scheda posizionato su A, collega il pie- niziare la trasmissione ed avere cos una sorta di
dino 26 (PC2 Sin) del circuito LX.1381 al piedino sincronismo tra i due microprocessori.
Se non necessario alcun sincronismo, il piedino
25 (PC3 Sout) del circuito LX.1329.
2 pu essere anche ignorato e non configurato nel
I livelli logici della porta A possono essere modifi-
programma Master.
cati a piacere tramite il dip-switch S1.
Dal momento che in questo programma non ven-
gono utilizzati, tutti i registri di interrupt sono cos
Facciamo presente che il micro Master invia i dati
configurati:
dei suoi 8 bits alla velocit di 2.400 bits rate verso
il micro Slave ogni volta che premiamo il pulsante ldi armc,00000000b
P1 montato sulla scheda LX.1381, cio quando il ldi adcr,00000000b
programma Slave fa una richiesta di trasmissione. ldi tscr,00000000b
ldi ior,00000000b
Appena il micro Slave riceve i dati dal micro Ma-
ster li carica sulla sua porta B e li visualizza sugli Ora passiamo al programma principale e analiz-
8 led secondo questa logica: ziamo, per quanto riguarda la trasmissione dei da-
ti, le istruzioni riga per riga:
Livello logico 1 = diodo led acceso
Livello logico 0 = diodo led spento main ldi wdog,0ffh
Fig.12 Dopo aver innestato la
scheda LX.1380 sulla scheda
LX.1329, per collegare le altre
due schede potrete usare le
piattine cablate che abbiamo
inserito nel kit.
serve per configurare il registro spdv con la mo- Se andate a rileggere quanto spiegato per questo
dalit di trasmissione di 8 bits per ciclo alla velo- registro potrete verificare personalmente quanto
cit di 2400 bits rate. detto in proposito.
Se avete letto la spiegazione dei registri e avete
visto le tabelle riportate a pag.109 di questa rivista, Ora passiamo alla successiva istruzione:
avrete capito perch abbiamo caricato questo va-
lore nel registro spdv. pippo ldi wdog,0ffh
La label pippo viene associata allistruzione che ri- Avrete gi sicuramente notato, ma lo evidenziamo
carica il watchdog. ugualmente, che il programma TXPG02 cos come
stato scritto, invia al micro slave sempre la pe-
ld a,port_a nultima configurazione presente in porta A, mai lul-
ld spda,a tima. Non un errore, ma solamente la necessit
di scrivere un programma semplice e breve.
Come gi ribadito, questa la sequenza giusta per Una gestione pi complessa avrebbe potuto crea-
caricare nel registro spda il valore da trasmettere. re altri problemi e non ci avrebbe permesso di fo-
Nel nostro caso muoviamo il valore logico presen- calizzare bene la SPI.
te sugli 8 piedini di Port_A nel registro spda.
Vediamo ora il programma RXPG02 caricato sul
set 7,spmc micro Slave.
Passiamo subito al settaggio delle porte iniziando
Mettendo a 1 il 7 bit (Sprun) del registro spmc, da Porta A:
abbiamo predisposto tutto per la trasmissione del
valore presente su porta A, ma non abbiamo ini- ldi port_a,00000000b
ziato ancora la trasmissione. Infatti come gi ripe- ldi pdir_a,00000000b
tuto oramai varie volte, settando Sprun e Spstrt ldi popt_a,00000000b
abbiamo creato la condizione di start.
Il piedino 0 viene configurato Input Pull-up per ge-
In questa condizione tutto pronto per la trasmis- stire la pressione del pulsante P1.
sione, che avviene per solamente quando sul pie- Questo pulsante servir per inviare la richiesta al
dino 2 di Porta C viene rilevato un fronte di salita micro Master di inizio trasmissione dati.
o rising edge.
Questo segnale verr generato dal micro Slave e A seguire viene configurata Porta B:
vi sar spiegato nel programma RXPG02.
ldi port_b,00000000b
Una cosa che vale la pena sottolineare che non ldi pdir_b,11111111b
dovremo inserire nessuna istruzione o routine per ldi popt_b,11111111b
verificare la presenza del segnale rising edge sul
piedino 2 di porta C, ma sar automaticamente ri- Tutti gli 8 piedini di questa porta sono configurati
levato dal micro Master che provveder, sempre come Out Push-pull. A questa porta sono stati col-
automaticamente, ad iniziare la trasmissione. legati 8 leds per rendere possibile la visualizza-
zione dei dati ricevuti con la SPI.
Con listruzione seguente: Al piedino 1 stato collegato il led 0, al piedino 2
il led 1 e cos via (vedi fig.6).
pluto ldi wdog,0ff
Infine configuriamo Porta C:
abbiamo assegnata la label pluto ad unistruzione
che ricarica il watchdog. ldi port_c,00010100b
ldi pdir_c,00001000b
jrs 7,spmc,pluto ldi popt_c,00001000b
Con questa istruzione il programma esegue un Il piedino 2 viene configurato come Input No Pull-
loop e salta a pluto finch il bit 7 (Sprun) set- up No Interrupt e riceve i dati trasmessi da PC3
tato. In pratica il programma rimane in loop finch Sout del Master.
non avvenuta la trasmissione. Quando la tra- Il piedino 3 serve solo per inviare il segnale di ri-
smissione terminata, il bit 7 di spmc viene au- chiesta dati al micro Master e viene perci confi-
tomaticamente resettato. gurato come Out Push-pull.
Il piedino 4 infine viene configurato come Input No
jp pippo Pull-up No Interrupt e riceve il clock di trasmis-
sione dal rispettivo piedino PC4 Sck del Master.
Questa istruzione viene eseguita solo a trasmis- Anche in questo caso non abbiamo ancora attiva-
sione terminata ed il programma salta perci nuo- to la SPI, ma solamente predisposto i piedini inte-
vamente a pippo dove ricaricher un eventuale ressati alla ricezione dati.
nuovo valore in spda (se sono stati modificati i dip- In questo programma prevista la gestione di un
switch) e si preparer di nuovo a trasmetterlo. interrupt, ma per il momento carichiamo i registri
relativi tutti a zero per evitare in questo modo atti- Assegna come sempre letichetta main alla relati-
vazioni premature: va istruzione che ricarica il watchdog.
Da tempo sapevamo che tutti i micro della serie Chi utilizza per la programmazione dei computer
ST62E10B - ST62E15B - ST62E20B ecc. seguiti che lavorano solo con il sistema operativo DOS,
dalle lettere SWD - HWD ed anche tutti gli OTP sprovvisti cio di ambiente Windows, pu ugual-
della serie ST62T10B-ST62T15B ST62T20B ecc., mente programmare i nuovi micro ST6/C senza bi-
sarebbero stati messi fuori produzione e sostituiti sogno di realizzare linterfaccia LX.1430, ma poi-
con la nuova serie C, che, rispetto alle preceden- ch con il DOS non si riesce a modificare loption
ti, ha in aggiunta loption byte, che permette in fa- byte non potr proteggerli, perch questa funzio-
se di programmazione di settare diverse funzioni ne presente solo nelloption byte.
supplementari.
Con questa nuova serie di micro, siglati ST62E10C Importante
oppure ST62T10C, ecc. (il numero seguito dalla
lettera C e non pi da B o BB), possibile ad e- Chi utilizza il nostro programmatore LX.1325 pre-
sempio selezionare un watchdog tipo hardware o sentato nella rivista N.192, dovr solo caricare nel
software, mentre con i precedenti micro si doveva suo computer il programma che noi forniamo.
necessariamente scegliere un chip con watchdog Chi utilizza il precedente programmatore siglato
SWD (software) o con watchdog HWD (hardware). LX.1170, apparso sulla rivista N.172, oltre a cari-
La SGS/Thomson ha realizzato il programma per care il programma dovr necessariamente colle-
programmare questa nuova versione C solo per gare linterfaccia LX.1430 tra luscita del pro-
ambiente Windows 3.1- 95 - 98. grammatore e lingresso del computer.
SCHEMA ELETTRICO INTERFACCIA In fig.6, dove abbiamo disegnato i due connettori
maschio e femmina con vista frontale e posterio-
Come potete vedere in fig.1 in questa interfaccia ab- re, potete vedere che questi connettori hanno 25
biamo un solo integrato siglato 74HC04 provvisto di piedini disposti su due file.
6 inverter, perch il programmatore LX.1170, per
poter comunicare con il programma Epromer che vi La prima fila di 13 piedini e la seconda, sotto-
forniamo, necessita di alcuni livelli logici invertiti. stante, di 12 piedini.
Se il connettore femmina visto frontalmente il
Nello schema elettrico il CONN.1 posto sulla sini- piedino 1 si trova a destra, mentre nel connettore
stra il connettore maschio che andr collegato maschio si trova a sinistra.
alluscita parallela del computer.
Lintegrato va alimentato con una tensione di 5 volt,
Il CONN.2 posto sulla destra invece il connetto- che preleviamo con i diodi DS1-DS2 dai piedini 14-
re femmina che andr inserito nelluscita del pro- 16 del connettore maschio.
grammatore LX.1170.
REALIZZAZIONE PRATICA
In questo schema elettrico non abbiamo rispettato
lordine sequenziale dei piedini dei connettori per Per realizzare questa interfaccia abbiamo utiliz-
non ritrovarci con un intreccio di fili difficile da di- zato il circuito stampato siglato LX.1430, che de-
stricare, ma abbiamo riportato i relativi numeri. ve poi essere inserito allinterno del suo minu-
6 6 R1 = 10.000 ohm
VERSO PROGRAMMATORE LX 1170
14
R7 IC1-A R2 = 10.000 ohm
2 5 6
2
IC1-B R3 = 10.000 ohm
VERSO IL COMPUTER
R8
4 4 R4 = 10.000 ohm
3 4
R5 = 10.000 ohm
R9 IC1-C
5 5 R6 = 10.000 ohm
9 8
IC1-D R7 = 1.000 ohm
R10
7 7 R8 = 1.000 ohm
11 10
R9 = 1.000 ohm
R11 IC1-E R12
11 11 R10 = 1.000 ohm
12 13
18 R11 = 22 ohm
19 2 1
R12 = 1.000 ohm
20 C1 = 100.000 pF
IC1-F 7
DS1 = diodo 1N 4148
21 R1 R2 R3 R4 R5 R6 1
23 23 DS2 = diodo 1N 4148
24 24 IC1 = integrato 74HC04
25 25 CONN.1 = conn. maschio
CONN.2 = conn. femmina
CONNETTORE 25 POLI CONNETTORE 25 POLI
(MASCHIO) (FEMMINA)
Fig.1 Schema elettrico dellinterfaccia LX.1430. Tutte le resistenze sono da 1/8 di watt.
+V 13 12 11 10 9 8
CONN. MASCHIO
13 1
1 2 3 4 5 6 GND
25 14
74 HC 04
13 1
Fig.2 Connessioni del 74HC04 viste da DS2 DS1 R11 R2 R9 R4
sopra con la tacca a U rivolta a sinistra.
R6 R10 R5 R8 R3
IC1
R1 R7
C1
R12
13 1
13 1
CONN. FEMMINA
CONNETTORE CONNETTORE
MASCHIO FEMMINA
13 R12 13
25 25
VERSO IL VERSO
COMPUTER LX 1170
Fig.3 Foto dellinterfaccia gi montata e, Fig.5 Tra le due file dei terminali dei con-
in basso, gi racchiusa allinterno del nettori maschio e femmina dovete inne-
suo piccolo contenitore plastico. stare il circuito stampato.
13 1 1 13
25 14 14 25
CARICARE il PROGRAMMA
Se nel vostro computer installato Windows 3.1 Fig.9 Quando apparir questa finestra, se-
dovete selezionare nella barra dei menu la scritta lezionate la porta parallela e anche il tipo di
File; nella finestra che appare andate sulla riga E- programmatore (leggere testo).
segui ... e nella nuova finestra che appare dovete
digitare A:setup poi cliccare su OK.
Fig.11 Andando sulla scritta Read del me- Come seconda operazione dovete selezionare nel-
nu, potete leggere il contenuto di un mi- la finestra a sinistra il tipo di programmatore che
croprocessore gi programmato. userete.
Fig.13 Andando sulla scritta Verify, potete EPROM EEPROM Options Chip Information
verificare se il micro che desiderate pro-
grammare risulta vergine. che potrete utilizzare per visualizzare a monitor le
varie funzioni.
Eprom visualizza il file con estensione .HEX da
caricare sul micro.
Fig.23 Per caricare il programma in memo- Se volete proteggere il micro in lettura dovete por-
ria, dovete cliccare sulla riga File posta in tare il cursore sullo [0] della riga Read-Out pro-
alto, poi sulla scritta Open. tection e cliccare velocemente 2 volte in modo che
appaia [1].
COSTO di REALIZZAZIONE
Fig.28 Per poter trasferire i dati del pro- Nota = Questa inferfaccia serve solo per usare il
gramma allinterno del micro dovrete sele- programmatore LX.1170 sotto Windows.
zionare Program e poi cliccare su All. Il programmatore LX.1325 non ha bisogno di que-
sta interfaccia, ma solo del programma DFST6/C.
COME UTILIZZARE
Molti consigliano di usare nei programmi per gli ST6 le direttive del lin-
guaggio Assembler, ma pochi spiegano come si fa. E inutile consiglia-
re di trasformare le istruzioni in una macro, se non si spiegano quali
accorgimenti adottare per evitare errori. In questo articolo vi spieghia-
mo ci che occorre sapere per usare correttamente la direttiva .macro.
Se non programmate i micro ST6, questo articolo le funzioni delleditor normalmente usate nella vi-
sar per voi poco interessante, ma per le piccole deoscrittura, seleziona quelle di cui ha bisogno e
Industrie che utilizzano questo microprocessore le incolla direttamente nel nuovo programma, ap-
non cos, tant vero che insistono affinch ven- portando eventuali modifiche per renderle compa-
gano dedicate pi pagine sulla rivista a questo ar- tibili alle nuove esigenze.
gomento, perch quello che noi spieghiamo non si
trova in nessun manuale. Questa soluzione sicuramente molto valida, ma
Oggi li accontenteremo spiegando come si possa pu presentare piccoli inconvenienti.
trasformare un gruppo di istruzioni in una macro. Se dopo avere incollato le istruzioni nel nuovo pro-
gramma ci si accorge che c un errore oppure si
Nella stesura di un programma capita di frequen- scopre che possibile perfezionarle, come ricor-
te di dover utilizzare delle sequenze di istruzioni dare in quali altri programmi sono state utilizzate
che sono gi state scritte per programmi prece- per poterle correggere?
denti, come ad esempio quelle per eseguire delle
somme, per configurare le porte, per visualizza- Ebbene, non tutti sanno che c unaltra soluzione,
re dei dati sul display ecc. sicuramente molto valida, che consiste nel sele-
In questi casi capita spesso che le istruzioni ven- zionare tutti i blocchi di istruzioni che possono ser-
gano riscritte con il rischio di inserire degli errori. vire in altri programmi, per memorizzarli in una i-
struzione macro a cui verr assegnato un nome.
Chi ha un po di esperienza si avvale di un altro
metodo, va cio alla ricerca dei programmi in cui Procedendo in questo modo, ogni volta che si scri-
sa che ci siano queste istruzioni, poi, adoperando ver un nuovo programma e serviranno queste i-
struzioni, non si dovr pi perdere tempo per an- corrispondenza delletichetta lamp4 e sono:
darle a cercare, ma sar sufficiente inserire nel
punto desiderato il nome della macro che le con- lamp4
tiene ed assemblare il programma. ldi wdog,0feh
jrr 4,port_b,lamp0
Questa soluzione offre molti vantaggi ai program- res 4,port_b
matori, perch se ci si accorge che nelle istruzioni jp lamp1
presente un errore oppure che possibile mi- lamp0 set 4,port_b
gliorarle, basta correggere la sola macro per a- lamp1 call delay
vere la certezza che in tutti i programmi in cui jp lamp4
stata utilizzata o che verr utilizzata sar perfetta.
Per creare una macro da adoperare in altri pro-
Per rendere ancora pi agevole luso di queste ma- grammi dobbiamo innanzitutto scegliere un nome
cro non va dimenticato di assegnare dei nomi che che ci ricordi quale funzione svolge questo gruppo
siano il pi possibile significativi, cos da poter ca- di istruzioni e poich fanno lampeggiare un diodo
pire immediatamente quali funzioni eseguono. led potremmo chiamare la macro:
la DIRETTIVA .MACRO
Inoltre vi consigliamo di inserire sempre un com- Per trasformare queste istruzioni in una macro oc-
mento che spieghi quale funzione esegue la ma- corre utilizzare due sole direttive:
cro, perch col tempo facile dimenticarsene.
.macro e .endm
Un altro consiglio che vi diamo quello di creare
una directory, che potrete ad esempio chiamare che vanno scritte secondo questo formato:
dirmacro, nella quale memorizzare tutte le vostre
macro, in modo da avere una libreria sempre ag- .macro nome [,variab] [,\num] [,?label]
giornata e facile da consultare. .endm
Il modo pi semplice per imparare a creare e a u- Nel nostro caso la direttiva .macro va inserita nel-
tilizzare una macro sicuramente quello di affi- la riga precedente al gruppo di istruzioni che vo-
darsi alla pratica, pertanto di seguito troverete al- gliamo trasformare in una macro e la .endm nella
cuni esempi per trasformare una sequenza di i- riga successiva al gruppo di istruzioni.
struzioni in una macro.
Dopo la direttiva .macro scriviamo il nome scelto,
cio ledflash, e nelle voci tra parentesi quadre [ ]
COME creare una MACRO racchiuderemo i tre parametri opzionali che potre-
mo inserire prima della compilazione per rendere
Supponiamo di avere un semplice programma la macro parametrizzabile.
chiamato LAMPLED.ASM, che provvede a far lam-
peggiare un diodo led collegato sul pin 4 di Por- Con il programma di editor che utilizziamo nor-
ta B di un ST6210. malmente per scrivere i programmi apriamo un
nuovo documento e iniziamo a scrivere:
Nella fig.1, riportata nella pagina seguente, potete
vedere il listato completo di questo programma. .macro ledflash
Le istruzioni per il lampeggio sono state poste in Come vedete la prima istruzione la direttiva .ma-
PROGRAMMA per far LAMPEGGIARE un LED sul PIN 4 di PORTA B
Fig.1 Il listato completo del programma sorgente che provvede a far lampeggiare un dio-
do led collegato sul piedino 4 di porta B di un ST62E10. Compilando questo programma
otterrete un programma in formato intel eseguibile con estensione .HEX.
cro seguita dal nome ledflash, con il quale dora Come vedete, rispetto al listato di fig.1 abbiamo so-
in poi dovr essere richiamata questa macro allin- stituito le istruzioni che eseguivano il lampeggio con
terno di un programma. la sola parola ledflash.
Tralasciamo per ora i parametri racchiusi tra [ ] per- Se ora proviamo a ricompilare il programma LAM-
ch li spiegheremo con gli esempi successivi. PLED.ASM, avremo per la sgradita sorpresa del-
la segnalazione di questo errore:
Prima della direttiva .macro non va inserita alcuna
etichetta perch il compilatore la ignorerebbe. Error LAMPLED.ASM
(67) undefined macro : ledflash
A questo punto inseriamo i comandi che vogliamo
raggruppare in una macro. Eppure noi abbiamo creato correttamente la macro
ledflash dentro al file LEDFLASH.LMA.
jrr 4,port_b,lamp0 Il compilatore quando arriva alla parola ledflash
res 4,port_b non la riconosce come istruzione assembler e cer-
jp lamp1 ca di interpretarla come macro, ma non la trova
lamp0 set 4,port_b ancora esattamente definita.
lamp1
.endm Per definirla esattamente dobbiamo inserire nel
programma LAMPLED.ASM anche listruzione:
Come avrete notato nella riga successiva alla eti-
chetta lamp1 abbiamo inserito la direttiva .endm, .input ledflash.LMA
per segnalare al compilatore la fine delle istruzioni
della macro ledflash. Sebbene non ci sia un punto preciso nel quale scri-
vere questa istruzione, noi consigliamo di inserirla
La direttiva .endm va tassativamente inserita co- dove c la dichiarazione della configurazione del-
me ultima istruzione di qualsiasi macro. le porte cos da essere immediatamente notata.
Anche in questo caso davanti alla direttiva .endm Conoscete la direttiva .input (vedi rivista N.182) e
non scrivete alcuna etichetta, perch il compilato- perci sapete che quando il compilatore la incon-
re la ignorerebbe. tra inserisce nel programma che sta compilando
tutto ci che trova memorizzato nel file segnalato
Ora che la macro stata creata dobbiamo salvar- tra virgolette .
la in un file che chiameremo LEDFLASH.LMA.
Nel nostro caso il compilatore cerca il file genera-
Lestensione .LMA sta per Libreria Macro Assem- to in precedenza e chiamato ledflash.LMA e in-
bler e serve a ricordarci che questo file una ma- serisce nel programma LAMPLED.ASM tutte le i-
cro e non un programma completo. struzioni l contenute.
Ovviamente potrete chiamarla con il nome che ri- Nel nostro esempio verranno quindi inserite:
tenete pi opportuno e scegliere lestensione che
ritenete pi valida, ma non usate mai le estensio- .macro ledflash
ni tipo .EXE, .HEX, .GIF, .HTM o .INI ecc. perch jrr 4,port_b,lamp0
sono riservate e potrebbero dar luogo a problemi. res 4,port_b
jp lamp1
Potrete anche lasciare lestensione .ASM e salva- lamp0 set 4,port_b
re il file in unaltra directory chiamata MACRO. lamp1
.endm
Creata una macro, possiamo inserirla nel pro-
gramma lampled scrivendo semplicemente queste A questo punto, nel ricompilare il programma,
istruzioni: quando il compilatore arriver allistruzione:
lamp4 lamp4
ldi wdog,0feh ldi wdog,0feh
ledflash ledflash
call delay call delay
jp lamp4 jp lamp4
capir che ledflash una macro e la sostituir con A riprova di quanto detto, abbiamo simulato il pro-
le istruzioni prelevate da LEDFLASH.LMA. gramma in esecuzione col simulatore ST626 e in
Il sorgente LAMPLED.ASM continuer ad essere fig.2 visibile la parte in cui avevamo inizialmente
scritto come segue: sostituito le istruzioni di lampeggio con il comando
ledflash. Come potete notare, non esiste pi led-
lamp4 flash, perch al suo posto il compilatore ha inseri-
ldi wdog,0feh to le istruzioni della macro.
ledflash
call delay Abbiamo poi compilato LAMPLED.ASM con lop-
jp lamp4 zione L ottenendo cos anche il listato del pro-
gramma (LAMPLED.LIS) e in fig.3 visibile il pun-
mentre il file LAMPLED.HEX conterr in formato to in cui stata inserita la direttiva:
eseguibile le seguenti istruzioni:
.input LEDFLASH.LMA
lamp4
ldi wdog,0feh Nota: nella rivista N.194 vi abbiamo insegnato co-
jrr 4,port_b,lamp0 me leggere i listati .LIS.
res 4,port_b
jp lamp1 Come potete notare, subito dopo questa direttiva
lamp0 set 4,port_b stata inserita la sequenza di istruzioni contenuta
lamp1 call delay nel file LEDFLASH.LMA, che non occupa nessu-
jp lamp4 na area di memoria, come visibile nella parte sini-
stra del tabulato sotto la dicitura:
Fig.3 Parte del listato LAMPLED.LIS generato con lopzione L in cui stata inserita la di-
rettiva .input. Come potete notare, dopo questa direttiva il compilatore inserisce nel pro-
gramma ci che trova nel file segnalato tra virgolette, cio nel file ledflash.lma.
Fig.4 Parte del listato LAMPLED.LIS generato con lopzione L in cui sono state inserite
le istruzioni contenute nella macro ledflash (vedi da riga 109 a riga 116). Vi facciamo no-
tare che sebbene il nome ledflash sia ancora presente, non occupa nessuna area di me-
moria: infatti, a destra del numero 109 non c nessuna scritta.
creare una nuova macro modificando i soli para- Con il parametro [,variab] possiamo rendere pa-
metri racchiusi tra parentesi quadre [ ]. rametrica la variabile port_b, riuscendo ad ottene-
re una macro che esegue il lampeggio sempre sul
Infatti, quando si dichiara una .macro, oltre al no- pin 4, ma di una qualsiasi porta del micro, se pas-
me possiamo definire tre differenti categorie di pa- siamo questa informazione dal programma princi-
rametri che in fase di compilazione verranno pas- pale alla macro.
sate e sostituite alle istruzioni inserite nella macro
stessa rendendola pi duttile. Riprendiamo perci il nostro file LEDFLASH.LMA
In questo modo potremo modificare la stessa ma- e modifichiamolo in questo modo:
cro a seconda delle necessit e delle circostanze.
.macro ledflash cheporta
Queste tre categorie rappresentano la cosiddetta jrr 4,cheporta,lamp0
COMMON AREA o area di Link della macro. res 4,cheporta
jp lamp1
Cerchiamo di spiegarci meglio procedendo ancora lamp0 set 4,cheporta
una volta con degli esempi pratici. lamp1
.endm
Il parametro [,variab]
In altre parole dopo ledflash abbiamo inserito uno
Se analizziamo il file LEDFLASH.LMA vediamo
spazio seguito dalla parola cheporta, poi abbiamo
che le istruzioni inserite sono costituite essenzial-
sostituito tutte le istruzioni che usano port_b sem-
mente da 4 gruppi, cio:
pre con la scritta cheporta.
le istruzioni Assembler vere e proprie:
jrr res jp set In questo modo abbiamo inserito nella macro il pa-
rametro [,variab].
le variabili:
port_b Nota: in questo caso, essendo cheporta il primo
parametro della macro non si deve inserire alcuna
le costanti numeriche: virgola dopo ledflash.
4
Noi abbiamo utilizzato il termine cheporta, ma po-
le labels o etichette interne: tevamo usare qualsiasi altro nome, ad esempio
lamp0 lamp1 pippo, finestra ecc., anche se consigliabile u-
sare sempre delle parole che identifichino il tipo di Il parametro [,\num]
variabile da modificare in modo inequivocabile.
Pur avendo reso parametrica la porta, il lampeg-
Ora modifichiamo il programma LAMPLED.ASM gio avverr sempre sul pin 4 della porta prescelta,
scrivendo nella riga della macro: quindi per scegliere un diverso pin, dovremo va-
riare nella macro il numero 4.
ledflash port_
Per scegliere un pin diverso si utilizza il parame-
In coda a ledflash abbiamo dunque inserito la va- tro [,\num] modificando il file LEDFLASH.LMA nel
riabile port_b. modo seguente:
Assemblando il programma LAMPLED.ASM,
.macro ledflash cheporta,\chepin
quando il compilatore trover ledflash port_b, la
jrr chepin,cheporta,lamp0
sostituir con le istruzioni di ledflash.LMA sosti-
res chepin,cheporta
tuendo il parametro cheporta con port_b.
jp lamp1
lamp0 set chepin,cheporta
Se anzich scrivere:
lamp1
.endm
ledflash port_b
Come avrete notato, dopo cheporta abbiamo in-
avessimo scritto:
serito una virgola, una barra rovesciata ed il pa-
rametro chepin sostituendolo al numero 4 presen-
ledflash port_c
te nelle istruzioni.
il compilatore avrebbe caricato al suo posto le i-
struzioni di ledflash.LMA sostituendo il parametro Importante: la barra rovesciata prima di chepin
cheporta con port_c. va inserita solo nella riga della direttiva .macro per
indicare che qui verr inserito un nuovo valore nu-
In questo modo abbiamo usato la COMMON AREA merico [,\num]. Le istruzioni in cui abbiamo inseri-
della macro per passare un parametro variabile, to chepin richiedono infatti, in quella posizione, un
ottenendo cos una macro che pu funzionare in- numero e non il contenuto di una variabile.
differentemente su tutte le porte del micro.
In questo caso abbiamo usato il nome chepin, ma
Se nel programma LAMPLED.ASM avessimo scrit- potevamo chiamarlo con il nome pinout ecc.
to solamente:
Ora dobbiamo modificare nel programma LAM-
ledflash PLED.ASM la macro ledflash come segue:
Fig.5 Questo errore stato generato perch nel file LEDFLASH.LMA stata parametriz-
zata una variabile, che per non stata definita nel programma in formato .ASM. A cau-
sa di ci il compilatore non ha potuto generare il file in formato .HEX.
Fig.6 In questo caso lerrore stato generato perch pur avendo definito nel file in for-
mato .ASM i parametri da associare alla macro ledflash, la variabile port_b e la costante
numerica 4 sono state invertite. Luso dei parametri opzionali rende la macro pi duttile
e perci adattabile alle diverse necessit e circostanze, ma necessario fare molta at-
tenzione quando si definiscono questi parametri nei programmi sorgente.
Se invece avessimo scritto: evidente che anche se luso delle macro ab-
bastanza facile necessario prestare sempre mol-
ledflash port_b,6 ta attenzione nello scrivere questi parametri.
Ovviamente dovremo modificare il programma Non trovando nessuna labels, le sostituir auto-
LAMPLED.ASM come segue: maticamente con L2$ e L3$ al posto di chelab0 e
chelab1 senza segnalare errori.
ledflash port_b,4,lamp0,lamp1
Il compilatore quindi in grado di provvedere au-
Assemblando il programma, quando il compilatore tomaticamente alla codifica delle label interne del-
incontrer questa istruzione inserir la relativa ma- la macro, perch si utilizzato il parametro labels
cro, sostituendo cheporta con port_b, chepin con interne (?chelab ecc.), risparmiando cos al
4, chelab0 con lamp0 e chelab1 con lamp1. softwarista limpegno di inserirle.
Abbiamo cio generato una macro dove anche le
labels usate internamente sono parametrizzate, Per verificare se questa soluzione risulta valida pro-
scongiurando cos il pericolo che queste possano vate ad inserire in pi punti del programma LAM-
gi esistere nel programma principale ed evitando PLED.ASM un richiamo della macro ledflash, poi
molti inconvenienti. riassemblatelo con lopzione L.
Ora dobbiamo soffermarci su un piccolo particola-
In fig.8 vi riportiamo il punto esatto del listato .LIS
re, perch aumentando i parametri potrebbe di-
in cui stato inserito il file ledflash.LMA, affinch
ventare pi difficoltoso gestire queste macro.
possiate constatare da voi la definizione delle la-
In presenza di macro molto complesse potrebbe
bels interne ?chelab0 e ?chelab1.
infatti succedere che le labels interne siano ben
pi di due ed anche in questo caso aumentereb-
In fig.9 sono invece riportati i due punti esatti in cui
bero le difficolt.
abbiamo inserito, a poca distanza luna dallaltra,
Inoltre potrebbe essere necessario richiamare pi
listruzione ledflash port_b,4 omettendo la defini-
volte, in punti diversi del programma principale, la
zione delle labels.
stessa macro, obbligando il programmatore ad in-
serire delle labels sempre diverse dalle precedenti.
Come potete notare, nella prima macro il compi-
Esistono comunque due soluzioni tra le quali sce- latore ha sostituito ?chelab0 e ?chelab1 con:
gliere per semplificare questo problema.
L2$ e L3$
PRIMA SOLUZIONE
mentre nella seconda le ha sostituite con:
Consiste nellomettere i nomi delle labels interne
in una macro anche se questa li richiede. L4$ e L5$
Per utilizzare questa soluzione lasceremo invaria- Questo ci conferma che, nel caso sia previsto nei
ta la macro cos come scritta in ledflash.LMA: parametri della macro lutilizzo delle labels interne
(simbolo ?), il compilatore in grado di generare Nella riga .macro abbiamo inserito ?chext al po-
automaticamente, in caso di omissione, queste la- sto di ?chelab0 e ?chelab1, mentre nelle righe
bels assegnandole un numero consecutivo. successive abbiamo sostituito:
Consiste nello sfruttare la capacit che possiede la Nel primo richiamo scriviamo:
direttiva .macro di concatenare due stringhe pas-
sando una sola label interna che diventer un ledflash port_b,4,r1
suffisso.
e nel secondo richiamo scriviamo:
Se seguirete questo nostro esempio scoprirete co-
me in realt sia semplice questa operazione. ledflash port_b,4,r2
Prendiamo sempre la macro contenuta nel file led- Assemblando il programma LAMPLED.ASM il
flash.LMA e modifichiamola come segue: compilatore quando trova il primo ledflash inseri-
Fig.8 Parte del listato LAMPLED.LIS generato con lopzione L in cui stata inserita la
definizione delle labels interne ?chelab0 e ?chelab1 (vedi riga 39).
Fig.9 Parte del listato LAMPLED.LIS generato con lopzione L in cui sono definite dal
compilatore, in modo del tutto automatico, le labels ?chelab0 e ?chelab1 con le scritte
L2$ (vedi riga 122), L3$ (vedi riga 124), L4$ (vedi riga 134) e L5$ (vedi riga 136).
bels la lunghezza massima delle labels ed anche CONCLUSIONE
delle variabili non deve superare gli 8 caratteri.
Infatti, se invece di: Con questi esempi pensiamo di avere sufficiente-
mente spiegato il procedimento per creare ed uti-
ledflash port_b,4,r1 lizzare una macro, comunque per diventare e-
ledflash port_b,4,r2 sperti softwaristi dovrete sempre perdere un po di
tempo e fare anche tante prove pratiche.
avessimo scritto: Se ad esempio inserite nel programma LAM-
PLED.ASM per due volte la macro ledflash
ledflash port_b,4,ret1 port_b,4 in due punti diversi del programma, sic-
ledflash port_b,4,ret2 come i parametri sono uguali (port_b e 4) avrete
commesso un piccolo errore, perch richiamando
avremmo generate queste label: per due volte la stessa macro il compilatore inse-
rir per due volte consecutive tutte le istruzioni del-
lamp0ret1,lamp1ret1 la macro, sprecando cos memoria preziosa.
lamp0ret2,lamp1ret2 Per evitare questi sprechi di memoria conviene
scrivere una sub-routine, che potrete ad esempio
che come noterete hanno pi di 9 caratteri. chiamare lampeg:
Il compilatore in questo caso tenter comunque di
assemblare il programma, troncando i caratteri ec- lampeg ledflash port_b,4
cedenti quindi queste righe diventeranno: ret
Vdd Vdd
SOGLIA DI
USCITA
5 V. SOGLIA DI RESET
RESET 4 V. OPERATIVO
OPERATIVO
3.5 V.
3.5 V.
NON NON
OPERATIVO OPERATIVO
Fig.2 Utilizzando la funzione LVD, viene at- Fig.3 La funzione LVD mantiene un reset
tivato in modo automatico un reset tempo- temporaneo nella fase di inizializzazione fi-
raneo se la tensione di alimentazione do- no a quando la tensione di alimentazione
vesse scendere sotto i 3,5 volt. non raggiunge un valore maggiore di 4 volt.
Settando a 1 la funzione OSG delloption byte, si
attiva un filtro digitale da 8 MHz che filtra tutti gli
impulsi spuri che si verificano entro un tempo di
62,5 microsecondi dal cambiamento di stato del
OS IN. OSG clock, rendendo in tal modo la frequenza di clock
OSCILLATOR
F.int. pi stabile.
MAIN
MUX
Fig.4 Schema a blocchi dello stadio OSG di pari a 125 microsecondi, ogni cambio di stato da
cui sono dotati i micro ST6/C. Questo di- 1 a 0 o viceversa avviene ogni 62,5 microsecondi.
spositivo deve essere attivato in fase di
programmazione settando a 1 loption byte Ogni cambio di stato del clock viene mantenuto
denominato Osg enable. stabile dallOSG per un tempo massimo di 62,5 mi-
crosecondi, pertanto qualsiasi impulso spurio che
entrasse sullingresso del micro in questo lasso di
fe Guard), che si pu attivare settando a 1 loption tempo, verrebbe ignorato (vedi fig.5).
byte Osg enable o disattivare settandolo a 0.
2 Lattivazione del dispositivo LFAO
In fig.4 riportato lo schema a blocchi di questo
stadio che se attivato svolge 3 importanti funzioni: Se lOSG non rileva la frequenza di clock genera-
ta dalloscillatore principale, attiva automatica-
funzione Filtro mente il dispositivo LFAO, cio loscillatore inter-
attivazione LFAO no di emergenza.
limitatore frequenza di clock In questo modo viene generata una frequenza di
clock compresa tra 0,8-1 MHz che consente al mi-
1 La funzione FILTRO cro di continuare a funzionare anche se pi lenta-
mente (vedi fig.6).
Quando si utilizza un oscillatore esterno per ge-
nerare la frequenza di clock pu verificarsi che lin- Sempre automaticamente, lOSG provvede a di-
gresso Osc in (ingresso oscillatore) capti degli im- sattivare il dispositivo LFAO quando loscillatore
pulsi spuri che potrebbero generare delle fre- principale torna a generare la sua frequenza di
quenze di clock superiori a quelle ottimali o addi- clock. Disabilitando il dispositivo LFAO, il micro
rittura bloccare le funzioni del micro. pu riprendere a lavorare a velocit regolare.
125 S
62.5 S 62.5 S
1 Fig.5 Con lOsg enable settato a
FILTRO 1, si attiva un filtro digitale da 8
8 MHz MHz che ha il compito di mante-
0 nere bloccato ogni cambio di sta-
to logico del clock per un tempo
1 di 62,5 microsecondi. Quindi se
IMPULSI in questo lasso di tempo doves-
SPURI sero entrare degli impulsi spuri
0
(vedi figura al centro), verrebbe-
ro ignorati e la frequenza di clock
1
sarebbe perfettamente pulita (ve-
FREQ.
DI CLOCK di figura in basso).
0
3 La limitazione della frequenza di clock spiegata, e la limitazione della frequenza di clock
al variare della tensione.
Lultima funzione del circuito OSG quella di di-
minuire automaticamente la frequenza interna di Quando lOSG rileva che viene a mancare la fre-
clock nel caso dovesse abbassarsi la tensione di quenza di clock dalloscillatore principale, attiva
alimentazione del micro. il dispositivo LFAO, cio loscillatore interno di e-
mergenza che genera una frequenza di clock com-
Vediamo come ci avviene in pratica. presa tra 0,8 - 1 MHz.
Se la foscn, cio la frequenza di clock di 8 MHz, Se lOSG rileva che loscillatore principale fun-
rimane sempre costante con una tensione com- ziona regolarmente, ma per un motivo qualsiasi la
presa tra 4,5-5 volt, nel momento in cui la tensio- tensione di alimentazione scende al disotto di 4,5
ne di alimentazione scende al disotto di 4,5 volt, volt, attiva il limitatore di frequenza portando la fre-
lOSG provvede ad abbassare la frequenza di clock quenza di clock ad un valore inferiore.
interna a 4 MHz, anche se il quarzo continua ad o-
scillare a 8 MHz. WATCHDOG
Se questa tensione scende al disotto di 3,5 volt,
lOSG abbassa ulteriormente la sua frequenza in- In questo paragrafo ci occupiamo in special modo
terna di clock a 2 MHz. di due funzioni dellOption Byte e della loro stret-
ta relazione con le istruzioni wait e stop.
Questa funzione molto utile perch, se per un
qualsiasi motivo dovesse abbassarsi la tensione di Watchdog activation
alimentazione, il micro potr continuare a lavorare
anche se ad una velocit ridotta. 0 = Watchdog Software
ovvio che nel caso il micro svolgesse funzioni di 1 = Watchdog Hardware
timer, di orologio ecc., cio funzioni legate al tem-
po, con lattivazione dellOSG al variare della ten- External Stop Mode Control
sione di alimentazione si avrebbero delle variazio-
ni non regolari sui tempi di lavoro. 0 = Disattivato
1 = Attivato
In questi particolari casi potrebbe convenire al pro-
grammatore non limitare la frequenza tramite Prima della comparsa sul mercato dei micro ST6
lOSG, ma, come abbiamo gi avuto modo di dire, della serie C, se si voleva gestire il Watchdog tra-
far operare in automatico un reset temporaneo tra- mite software si doveva scegliere il micro siglato
mite la funzione LVD tutte le volte che la tensione SW o SWD, mentre se si voleva gestire il Watch-
di alimentazione scende sotto i 3,7-3,5 volt. dog tramite hardware si doveva scegliere il micro
siglato HW o HWD.
Qualcuno potrebbe obiettare che non c differen- Nella nuova serie C il tipo di Watchdog selezio-
za tra lattivazione del LFAO, precedentemente nabile tramite loption byte.
1
Fig.6 Quando lOSG non rileva la
OSCILLATORE frequenza di clock generata
PRINCIPALE
0
dalloscillatore principale, auto-
maticamente attiva loscillatore
1
interno di emergenza LFAO che,
generando una frequenza a 0,8-1
LFAO MHz, consente al micro di conti-
0 nuare a eseguire le istruzioni.
Quando loscillatore principale
1 torna a generare la sua frequenza
FREQUENZA di clock, lOSG disabilita in modo
RISULTANTE automatico loscillatore LFAO.
0
Watchdog hardware Tenete presente che se disattivate il watchdog,
potrete sempre riattivarlo, ma una volta attivato
Settando a 1 la funzione Watchdog activation, il non potrete pi disattivarlo.
watchdog diventa di tipo HW (hardware), pertanto In questo caso potr essere gestito come gi spie-
non si pu pi disattivare tramite software. gato nel paragrafo dedicato al Watchdog HW.
Questo significa ovviamente che non possibile u-
tilizzare n listruzione wait n listruzione stop. Per disattivare il watchdog dovete scrivere come
prima istruzione del programma:
Infatti, listruzione wait blocca il program counter
e di conseguenza lesecuzione del programma, ma ldi wdog,feh
non blocca loscillatore principale e di conseguen-
za il watchdog si decrementa fino a 0 resettando Dopo non pi necessario gestire il Watchdog
il microprocessore. allinterno del programma.
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 ldi adcr,10110000b
T0 T1 T2 T3 T4 T5 SR C
wait
Esistono tuttavia delle direttive che, in molti casi, analizziamo insieme una situazione che, verifi-
possiamo utilizzare per effettuare queste scelte in candosi spesso, vi sicuramente nota.
Tutte le volte che si fa la spesa al supermercato, vera si passa allultima possibilit e quindi non ri-
dopo aver riempito il carrello ci si avvia alla cassa mane altro che:
e per pagare la merce acquistata si pu scegliere
fra diverse modalit, tutte per subordinate a pre- altrimenti
cise condizioni: pago in contanti
fine delle possibilit.
se la cassa accetta assegni
pago con assegno Le tre direttive .ifc, .else, .endc devono dunque es-
altrimenti sere utilizzate in questo ordine:
se la cassa accetta la carta di credito
pago con carta di credito .ifc: dopo aver definito la condizione e i suoi og-
altrimenti getti, vanno inserite le istruzioni da assemblare so-
se la cassa accetta il bancomat lo in presenza di una condizione vera.
pago con bancomat
altrimenti .else: di seguito vanno inserite le istruzioni da as-
pago in contanti semblare solo se la condizione precedente non ri-
fine delle possibilit sulta vera.
Nel nostro esempio le parole se accetta rappre- .endc: stabilisce la fine delle scelte.
sentano la condizione, mentre assegno - carta di Le condizioni vengono espresse con queste sigle:
credito - bancomat sono i suoi oggetti.
eq = significa uguale a 0
Quindi lazione pago con assegno si pu ese-
guire solo nel caso risulti vera la condizione in cui ne = significa non uguale a 0
la cassa accetti gli assegni.
gt = significa maggiore di 0
Se questa condizione non vera si passa allaltra
lt = significa minore di 0
possibilit verificando la seconda condizione:
le = significa minore o uguale a 0
altrimenti
se accetta la carta di credito ge = significa maggiore o uguale a 0
Se anche questa condizione non vera, si passa ovvio che ognuna di queste condizioni risulter
alla terza possibilit verificando la terza condizione: vera oppure non vera rispetto alla definizione del
suo oggetto.
altrimenti
se accetta il bancomat Cercheremo perci ora di spiegarvi in maniera det-
tagliata ed esauriente come usare le condizioni
e se anche questa ultima condizione non risulta della direttiva .ifc.
eq = condizione uguale a 0 gt = condizione maggiore di 0
solo nel caso in cui valx risulti diverso da 0 altri- Se inseriamo le prima di valx:
menti assembla:
.ifc le valx
ldi coms,13 ldi coms,8
.else
poi passa alla direttiva .endc, che gli segnala la fi- ldi coms,13
ne del blocco della condizione. .endc
Il compilatore assembla: ndf = condizione non definita
t_baud .set 96
.input "SETBAUD.LMA"
main
ldi wdog,0feh ;ricarica il Watchdog
call init_a ;inizializzo le variabili
call init_p ;inizializzo le porte
setbaud t_baud ;macro config. velocita trasm/baud
loop ldi wdog,0feh ;ricarica il Watchdog
call elabor ;elaborazione dati
call trasmx ;trasmissione seriale asincrona
jp loop
.ifc df set_psc
.warning set_psc gi definito
.endc
Vediamo per passo passo cosa succede e ana- e confronta nuovamente il valore ricavato dalla e-
lizziamo la prima sequenza: spressione t_baud 24 con zero e se vero de-
finisce la costante set_tcr e le associa il valore 140,
.ifc eq t_baud 12 definisce set_psc e le associa il valore 1, infine e-
set_tcr .set 140 segue la direttiva .display.
set_psc .set 2 Siccome per lespressione t_baud 24 d come
.display 1200 BAUD risultato un valore non uguale a 0:
.else
96 24 = 72
Il compilatore confronta il valore ricavato dalla e-
spressione t_baud 12 con zero (condizione eq) anche in questo caso viene attivata la condizione
e se risulta vero definisce la costante set_tcr e di non vero. Il compilatore ignora dunque:
le associa il valore 140, inoltre definisce la costan-
te set_psc e le associa il valore 2, infine esegue set_tcr .set 140
la direttiva .display. set_psc .set 1
Questultima direttiva si utilizza essenzialmente per .display 2400 BAUD
e passa alle istruzioni successive a .else: Poi va alla terza .endc che chiude:
In questo caso invece lespressione t_baud 96: A questo punto prosegue con la compilazione del-
le rimanenti istruzioni del programma SERIAL.A-
96 96 = 0 SM e quando arriva alla routine che predispone il
timer per gestire la velocit di trasmissione, carica
soddisfa la condizione per vero e perci il com- nel registro tcr (Contatore del Timer) il valore cor-
pilatore esegue le istruzioni: rispondente alla costante set_tcr (nel nostro e-
sempio 70) e nel Prescaler del registro tscr il va-
set_tcr .set 70 lore corrispondente alla costante set_psc (nel no-
set_psc .set 0 stro esempio 0).
.display 9600 BAUD Questo permetter di gestire i tempi strettamente
legati alla velocit di trasmissione.
definisce cos la costante set_tcr e le associa il va- Vi ricordiamo che trattandosi di esempi, i valori 70
lore 70, definisce set_psc e le associa il valore 0, e 0 che abbiamo utilizzato sono indicativi, poich
infine esegue la direttiva .display e a video com- quello che ci premeva farvi capire il meccanismo
parir la scritta 9600 BAUD. con cui si ottengono questi valori.
A questo punto il compilatore ignora listruzione .el- A fine compilazione comparir a video il messag-
se e quelle che seguono: gio visibile in fig.5.
La direttiva .error viene utilizzata per fare appari- viene eseguita listruzione:
re a video la segnalazione di errore seguita, dove
ci sia, dalla frase inserita tra virgolette. loop ldi wdog,FEh
Quando il compilatore incontra questa direttiva, vi-
sualizza il messaggio a video e continua comun- e non vi pi traccia di:
que la compilazione del programma, ma non ge-
nera nessun programma eseguibile (.HEX). setbaud t_baud
Questa direttiva si utilizza perci per segnalare un
caso di errore grave. come invece riportato nel SERIAL.ASM di fig.2.
La direttiva .mexit che abbiamo inserito di seguito
Se non disponete di un simulatore, per sapere se i
viene utilizzata per uscire forzatamente dalla com-
dati sono stati correttamente inseriti nel registro tcr
pilazione di una macro senza dover arrivare alla
e nel registro tscr del Timer, vi dovete fidare di ci
sua fine naturale, cio allistruzione .endm.
che appare a video alla fine della compilazione e
cio di un messaggio simile a quello visibile in fig.5.
Nella fig.6 potete vedere il messaggio che sareb-
Esiste per un altro controllo che si pu effettuare
be apparso dopo la compilazione di SERIAL.ASM
quando non si dispone di un simulatore.
con t_baud non valido.
infatti sufficiente compilare il programma inse-
Viene infatti mostrato a video il messaggio di erro-
rendo lopzione S per ottenere cos anche il file
re e la dicitura finale No object created.
con estensione .SYM.
Come gi spiegato sulla rivista N.194 relativamen-
Torniamo ora allesempio corretto dove t_baud va-
te alle opzioni del compilatore assembler, questo
le 96 e la compilazione d esito positivo.
file contiene tutte le etichette e tutte le costanti u-
Qualcuno potrebbe obiettare che sono state inse-
tilizzate nel programma con a fianco il loro valore
rite molte istruzioni, con una conseguente perdita
espresso in esadecimale.
di spazio e tempo di esecuzione, per ottenere la
Vediamo dunque, tramite la fig.8, il listato del file
configurazione di due costanti: set_tcr e set_psc.
SERIAL.SYM e andiamo a verificare i valori di:
Vorremmo per farvi osservare che se in futuro si
t_baud : EQU 00060H C
presenter la necessit di scrivere pi di un pro-
gramma che esegua una trasmissione e/o una ri-
dove appunto 60h espresso in decimale 96.
cezione seriale asincrona, ognuno a una diversa
velocit di trasmissione tra le 4 proposte nella ma-
set_psc : EQU 00000H C
cro, sar sufficiente definire in maniera corretta il
valore di t_baud per avere gi tutto predisposto. dove il valore 00h espresso in decimale 0.
Inoltre se siete dei corretti osservatori, avrete no-
tato che la macro setbaud composta esclusiva- set_tcr : EQU 00046H C
mente da direttive dellAssembler, e voi dovreste
sapere che queste non occupano spazio di memo- dove il valore 46h espresso in decimale 70.
ldi carmat,time*freqz/6/13-1
lop1 dec carmat
jrnz lop1
.endm
main
ldi wdog,0feh ;ricarica il Watchdog
call set_pin ;configura le porte
call elab1 ;prima elaborazione
call delay1 ;esegui un ritardo
call elab2 ;seconda elaborazione
call delay2 ;esegui un ritardo
jp main ;ripeti
La macro riportata in fig.9 ci serve per generare un Tralasciamo le istruzioni successive perch non
ritardo variabile, il cui valore andr inserito allin- strettamente inerenti allargomento di questo arti-
terno del programma PROVA2.ASM in corrispon- colo e andiamo direttamente a:
denza delle istruzioni che richiamano questa ma-
cro, cio: delay1 ritardo 1200
ret
delay1 ritardo 1200
Questa sub-routine ha il compito di effettuare un ri-
delay2 ritardo 1500 tardo di 1200 microsecondi.
I valori numerici 1200 e 1500 sono i valori che ver- Il compilatore associa letichetta delay1 alla istru-
ranno passati dal programma sorgente alla macro zione ritardo 1200 e, poich ha riconosciuto che
durante la compilazione e corrispondono al ritardo ritardo una macro, inizia a compilare le istruzioni
espresso in microsecondi che verr generato. contenute nella stessa macro, che, come abbiamo
Nelle istruzioni della macro inoltre previsto un gi ricordato, si trovano in fig.9.
controllo sui valori numerici passati alla macro stes-
sa, in modo che se il ritardo minore di 10 mi- La prima istruzione di fig.9:
crosecondi o maggiore di 2496 microsecondi,
.macro ritardo time,?lop1
venga segnalato errore.
identifica la macro ritardo e informa il compilato-
Una macro come quella da noi chiamata ritardo
re che in questa macro verr passato il parametro
pu risultare molto utile quando si devono inserire
time e che verr utilizzata letichetta interna ?lop1.
dei ritardi in determinati programmi, perch eviter
di dover calcolare di volta in volta il tempo dei ci- Ora il compilatore prende in esame il blocco di i-
cli delle istruzioni. struzioni:
Adesso vediamo cosa avviene quando compilia- .ifc ndf freqz
mo il programma PROVA2.ASM. .error frequenza quarzo non definita
.mexit
Seguendo il listato di fig.10 troviamo subito la pri- .endc
ma istruzione:
che equivale a: se la freqz del quarzo non sta-
carmat .def 084h ta definita, segnala a video un messaggio di erro-
re con la scritta Frequenza quarzo non defini-
dove la variabile carmat viene associata allarea di ta, quindi esci dalla macro senza generare il pro-
Data Space 084h. Questa variabile quella che gramma eseguibile (istruzione .mexit).
verr utilizzata dalla macro ritardo. Poich per nel programma sorgente freqz sta-
ta definita .set 8, questo blocco di istruzioni viene
La seconda istruzione: totalmente ignorato.
e dopo aver fatto il calcolo, che dar come risulta- viene semplificata in:
to sempre 122:
1500*8/6/131
ldi carmat,122
il cui risultato :
lo carica nella variabile carmat e lo trasforma in
formato eseguibile. 1500*8 = 12000
12000/6 = 2000
Continuando la compilazione trova: 2000/13 = 153
1531 = 152
lop1 dec carmat
jrnz lop1 Listruzione diventa pertanto:
.endm
.ifc le 152
Con la direttiva .endm, il compilatore sa che la ma-
cro ritardo finita e torna al programma sorgente e poich il valore 152 maggiore di 0 anche que-
PROVA2.ASM per proseguire la compilazione del- sto blocco di istruzioni verr ignorato senza se-
le istruzioni, dove trova: gnalare nessun errore, perch il valore di 1500 mi-
crosecondi che vogliamo utilizzare come ritardo
ret un valore ammesso dalla macro.
che serve per rientrare dalla call delay1 (vedi A questo punto il compilatore passa a:
fig.10). Quindi pu proseguire con:
ldi carmat,time*freqz/6/131
delay2 ritardo 1500
e dopo aver fatto il calcolo, che da come risultato
e riconoscendo la macro ritardo, ricompila nuova- sempre 152:
mente le istruzioni della macro sostituendo il time
1200 con il nuovo tempo 1500. ldi carmat,152
Poich il valore 103 non maggiore di 0, questo Ora proviamo a simulare il programma ottenuto con
blocco di istruzioni viene ignorato e non viene se- la compilazione, cio PROVA2.HEX, e in fig.11 ve-
gnalato nessun errore. diamo la parte relativa al nostro esempio.
Il compilatore passa poi al secondo blocco di i- Osservate le righe evidenziate in giallo che si rife-
riscono alla sub-routine delay1 ricavata dalla ma- Fig.11 Esecuzione del file PROVA2.HEX
cro ritardo:
Chiudiamo la parentesi e andiamo a fare un pic- Sommando i cicli macchina di queste sub-routine
colo controllo per verificare se effettivamente ven- otteniamo 922.
gono ottenuti i ritardi voluti. Poich un ciclo macchina corrisponde a 1,625 mi-
Sommiamo dunque i cicli delle istruzioni delle due crosecondi noi otteniamo un effettivo ritardo di:
sub-routine e moltiplichiamo il risultato per il tem-
po di un ciclo macchina che corrisponde a 1,625 922 x 1,625 = 1498,25 microsecondi
microsecondi.
Nellarticolo relativo al software simulatore per te- La differenza di 1,75 microsecondi in meno ri-
stare i micro ST6 pubblicato sulla rivista N.185, ab- spetto al ritardo impostato nel file sorgente non
biamo fornito lelenco completo delle istruzioni As- un errore, ma, in questo caso, dovuto al neces-
sembler indicando, tra le altre cose, il numero dei sario arrotondamento operato sui decimali nelle-
cicli macchina. spressione calcolata.
.
IL programma LINKER
Con larticolo sul linker LST6 di cui ci occupiamo in queste pagine, pro-
seguiamo lesposizione dei diversi aspetti della programmazione dei mi-
crocontrollori della serie ST6. Non vi nascondiamo che largomento non
dei pi semplici, ma con laiuto di qualche esempio, siamo certi che
anche questa materia non avr pi segreti.
Fino ad oggi nella realizzazione di un programma Con il linker, termine che possiamo rendere in i-
in Assembler per i micro ST6 ci siamo sempre po- taliano con programma di collegamento, si pu
sti lobiettivo di scrivere un programma sorgente, ottenere un programma finale eseguibile .HEX sen-
cio un file in formato .ASM dal quale ottenere un za avere il corrispondente programma in formato
file in formato eseguibile .HEX. sorgente, ma collegando programmi diversi as-
semblati in formato oggetto .OBJ.
Infatti, in tutti gli articoli pubblicati e nei diversi e- Per semplicit possiamo dunque definire il linker
sempi di programmi che vi abbiamo fornito, abbia- come un programma che concatena moduli softwa-
mo sempre pensato al programma come a una co- re al fine di realizzare un programma eseguibile
sa unica, a s stante, risultato della compilazione completo.
in Assembler di un unico file sorgente con tuttal
pi linserimento, tramite la direttiva .input, di su- Il primo passo per usare il linker quello di disporre
broutine, macro o definizioni di variabili esterne, ma di una serie di programmi assemblati singolarmen-
sempre in formato sorgente. te in formato oggetto .OBJ utilizzando le opportune
opzioni del programma compilatore Ast6.
Larticolo di oggi si propone invece di illustrarvi un
secondo metodo per la realizzazione dei vostri pro- Il secondo passo quello di lanciare il programma
grammi, non necessariamente migliore dellaltro, Lst6 di linkaggio dei file .OBJ con le opportune op-
ma sicuramente differente perch presuppone il zioni, in modo da ottenere il programma definitivo
conseguimento di un altro scopo. eseguibile in formato .HEX.
.
Sulla base di quanto fin qui detto, qualcuno po- I programmi in formato oggetto .OBJ si ottengono
trebbe domandarsi perch non usare il linker di- utilizzando lopzione O quando si lancia la com-
rettamente con i programmi in formato .HEX, inve- pilazione di un programma.
ce di utilizzare dei programmi in formato .OBJ. Ad esempio, se compiliamo il file sorgente PIP-
PO.ASM con le opzioni:
Quando si lancia la compilazione Assembler di un
Ast6 L O PIPPO.ASM
programma, ad esempio PIPPO.ASM, a compila-
zione conclusa, se non vi sono errori, si genera un
otteniamo il programma PIPPO.OBJ.
programma in formato Intel eseguibile, nel nostro
caso PIPPO.HEX.
Nota: ricordiamo ai lettori che le opzioni del com-
pilatore Assembler e il loro utilizzo sono state am-
Nel file in formato .HEX, le singole istruzioni del piamente trattate nella rivista N.194.
programma sorgente .ASM, sono tradotte in codi-
ce binario direttamente eseguibile e soprattutto vi Il programma generato in formato .OBJ ha due ca-
una corrispondenza diretta tra le locazioni di ratteristiche:
memoria, sia RAM che ROM, attribuite durante la
stesura del programma sorgente e quelle ottenute 1 non direttamente eseguibile, pertanto non
dalla compilazione delleseguibile .HEX. pu essere simulato n caricato su un micro.
A facilitare il nostro compito, ci viene in aiuto il for- Se per decidete di raccogliere insieme gli articoli
mato .OBJ, che essendo rilocabile e non ese- riguardanti un unico argomento, la numerazione
guibile, meglio si presta ad essere linkato. delle pagine non sar pi consecutiva, cio non a-
Vediamo dunque cosa sono i programmi in forma- vr una progressione numerica, ma sar relativa
to .OBJ e come ottenerli. alla rivista dalla quale proveniva larticolo.
.
ad_int reti
Dal programma CONTA.ASM abbiamo estratto le tim_int reti
istruzioni che vedete evidenziate in azzurro in fig.1 BC_int reti
e le abbiamo inserite in un nuovo programma che A_int reti
abbiamo chiamato PLEXER.ASM. nmi_int reti
Questo programma ci mette a disposizione una se-
rie di subroutine che gestiscono lincremento o il Fig.1 Dal programma CONTA.ASM, di cui vi
decremento di un contatore e la visualizzazione a forniamo il listato, abbiamo estratto le i-
due cifre del risultato su 2 display in multiplexer. struzioni evidenziate in azzurro e le abbia-
mo salvate nel file PLEXER.ASM (vedi fig.3).
Abbiamo quindi cancellato dal programma CON- Le istruzioni rimaste sono state salvate nel
TA.ASM le istruzioni inserite in PLEXER.ASM e file PCONT.ASM (vedi fig.2).
abbiamo salvato ci che rimaneva con il nome
PCONT.ASM per non confonderlo con loriginale.
.
reti .window
digit .byte 192,249,164,176,153
jp main .byte 146,130,248,128,144
.windowend
;*** GESTORI di INTERRUPT ***
;*** VETTORI DI INTERRUPTS ***
ad_int reti
tim_int reti .section 32
BC_int reti jp ad_int
A_int reti jp tim_int
nmi_int reti jp BC_int
jp A_int
Fig.2 Listato del programma PCONT.ASM.
.block 4
jp nmi_int
Per compilarlo in formato oggetto .OBJ ab-
jp inizio
biamo dovuto inserire le direttive eviden-
ziate in giallo. .end
.
.extern decrem,increm,mulplx
ROM PRIMARIA
Per finire, questa direttiva pu essere inserita so- Nel nostro caso, noi indichiamo al compilatore che
lamente nei programmi che verranno compilati con le istruzioni del programma PCONT devono esse-
lopzione O. In caso contrario il compilatore se- re inserite nella Program Space di pagina 1, e cio
gnaler errore. nellarea ROM con locazione 0800h 0FEFh co-
me visibile in fig.7.
La direttiva .section
Allinterno dello stesso programma possibile in-
Confrontate ancora il programma PCONT.ASM di serire pi direttive .section per indirizzare pagine
fig.2 allaltezza della label inizio con il programma diverse ed inserire perci le istruzioni in punti di-
CONTA.ASM di fig.1 alla stessa altezza. versi di Program Space.
Nel programma originale CONTA.ASM prima del- Poich per vi sono alcune limitazioni sullutilizzo
la label inizio avevamo inserito listruzione .org delle istruzioni di salto da una pagina di memoria
0800h, mentre in PCONT.ASM labbiamo sostitui- allaltra, bisogna fare attenzione alle caratteristiche
ta con .section 1. di salto legate al numero di pagina utilizzato.
Quando si assembla un programma in formato In fig.7 riportiamo la tabella illustrativa di queste li-
.OBJ si deve sostituire la direttiva .org con la di- mitazioni.
rettiva .section seguita da un numero da 0 a 32,
altrimenti verr segnalato errore. Nella colonna salto a..., in corrispondenza delle
righe di pagina 1 e di pagina 32 indicato tutte le
In relazione a quanto detto precedentemente a pro- pagine, mentre nelle restanti indicato pagina 1.
posito della direttiva .pp_on, che attiva la pagina- Questo significa che nelle pagine 1 e 32 di Pro-
zione o, se preferite, la suddivisione in pagine del- gram Space si possono inserire istruzioni di salto
la memoria ROM, inserendo nel programma la di- incondizionato (jp, call) a tutte le altre pagine di
rettiva .section noi indichiamo al compilatore in qua- memoria, mentre nelle pagine 0 e da 2 a 31 si pos-
le pagina di memoria ROM deve inserire le istru- sono inserire solamente istruzioni di salto incondi-
zioni del programma da compilare in formato .OBJ. zionato alla pagina 1.
Facciamo un esempio. Compilando il programma: La giusta sequenza del nostro esempio dunque
la seguente:
.section 1
inizio ................. .section 1
................. inizio .................
................. .................
jp letsta .................
rien1 ................. jp letsta
................. rien1 call storx
.section 2 .................
letsta ldi a,23 .section 3
................. letsta ldi a,23
................. .................
call storx .................
................. jp rien1
.section 3 .section 4
storx addi a,23 storx addi a,23
................. .................
ret ret
non verr segnalato errore, perch le istruzioni so- Lesempio appena riportato si riferiva a pi section
no formalmente corrette. inserite in un unico programma, ma evidente che
Quando per tenteremo di linkare questo pro- si pone un problema analogo quando diverse .sec-
gramma, il linker segnaler un errore simile a quel- tion sono inserite in pi programmi che andranno
lo di fig.8, perch non sono state rispettate le con- concatenati con il linker.
dizioni. Infatti, da pagina 1 con listruzione jp let-
sta si pu passare alla pagina 2, ma poi listruzio- Chiusa questa parentesi, torniamo al listato di
ne call storx non pu essere eseguita perch PCONT (vedi fig.2) e soffermiamoci sullistruzione
storx si trova nella pagina 3. .section 32 e sulla successiva .block 4.
Nelle stesse righe del programma originale CON- Compito principale di .block 64-$%64 di otti-
TA.ASM vi erano le istruzioni .org 0FF0h e .org mizzare lutilizzo di Program Space.
0FFCh
Con .section 32 si attiva la pagina di memoria re- Compilando il programma PCONT in formato .OBJ
lativa alla gestione dei vettori di reset e di interrupt. avremmo anche potuto lasciare listruzione .block
La direttiva .block 4 sostituisce .org 0FFCh, ma 64-$%64, per i dati definiti con le due direttive .by-
ha la stessa funzione di posizionare correttamente te sarebbero stati allocati con allineamento al pri-
i vettori di nmi e di reset. mo blocco di 64 byte di Program Space succes-
sivo allultima istruzione di PCONT e cio jp loop.
Le direttive .window e .windowend Linkando i due programmi PCONT.OBJ e
PLEXER.OBJ, il linker avrebbe accodato al pro-
Mettendo ancora una volta a confronto le righe del gramma PCONT le istruzioni del programma
programma originale CONTA con quelle di PLEXER, che quindi si sarebbero venute a trova-
PCONT, potete vedere che listruzione: re dietro a questarea dati.
Avremmo pertanto avuto un programma finale
.block 64-$%64 .HEX non bene ottimizzato, sia come utilizzo di
memoria Program Space sia come leggibilit.
stata sostituita dalla direttiva .window, mentre
dopo il secondo .byte stata inserita la direttiva Per provarvi quanto detto, abbiamo linkato
.windowend. PLEXER.OBJ e PCONT.OBJ lasciando al suo in-
terno listruzione .block 64-$%64 e senza inserire
Come abbiamo avuto occasione di ripetere pi vol- la direttiva .windowend.
te (vedi soprattutto la rivista N.190), normalmente
listruzione .block 64-$%64 precede linserimento In fig.9 potete vedere la mappa della memoria del
di dati in Program Space (.byte, .ascii, .asciz) che programma .HEX risultante.
verranno caricati a blocchi di 64 bytes tramite la Il programma PCONT.OBJ (vedi Module) inizia
Data Rom Windows. allindirizzo di memoria 0800h e termina allindiriz-
zo 0800h + 008Ah, cio a 088Ah, mentre il pro-
gramma PLEXER.OBJ inizia proprio da 088Ah e
termina a 088Ah + 0049h, cio a 08D3.
ast6 L O PCONT.ASM.
Fig.11 Ricompilando il programma PCONT dopo aver inserito le direttive .window e .win-
dowend, il compilatore memorizza le istruzioni racchiuse tra queste due direttive in una-
rea rilocabile definita window section: notate la scritta W00 allaltezza della riga 119. Il nu-
mero che segue (0000) rappresenta la locazione di memoria in cui vengono memorizzate
le istruzioni racchiuse tra le direttive .window e .windowend.
.
0800h
0800h
AREA ROM
AREA ROM per le istruzioni
per le istruzioni di programma
di programma
08C0h DIGIT
08C0h 1 INDIRIZZO SUCCESSIVO
10 BYTES 1 INDIRIZZO SUCCESSIVO
DIVISIBILE per 64 (40h)
DIVISIBILE per 64 (40h)
Fig.13 Se la differenza tra la prima locazio- Fig.14 Se la differenza tra la prima locazio-
ne di memoria ROM divisibile per 64 e la lo- ne di memoria ROM divisibile per 64 e la lo-
cazione dellultima istruzione maggiore cazione dellultima istruzione minore
dellarea window section, i dati vengono in- dellarea window section, i dati vengono in-
seriti prima di questa locazione. seriti dopo questa locazione.
.
Lunica restrizione alluso di queste direttive che ce e le costanti (.def, .equ, .set) non possono es-
tra .window e .windowend si possono inserire un sere definite con questa direttiva.
massimo di 64 byte di dati altrimenti il compilatore
Assembler segnaler questo errore: E per importante farvi notare che le variabili lsb
e msb sono state definite ad un indirizzo di me-
Error current program section overflow (fatal) moria differente da quello che avevano nel pro-
gramma PCONT.ASM (vedi di fig.2).
In questo caso dovrete spezzare i vostri dati in bloc- Torneremo pi avanti su questo argomento.
chi di massimo 64 byte e utilizzare pi volte le di-
rettive .window .windowend come riportato nelle- In conclusione sottolineiamo che anche in questo
sempio che segue: programma stata inserita la direttiva .section 1,
che oramai conoscete.
.window
dig01 .byte ............... A questo punto assembliamo in formato .OBJ i pro-
................. grammi PCONT.ASM e PLEXER.ASM digitando al
.windowend prompt di DOS:
.window
dig02 .ascii ............... ast6 L O PCONTA.ASM
.byte ............... ast6 L O PLEXER.ASM
.windowend
Otteniamo cos PCONTA.OBJ e PLEXER.OBJ,
A questo punto abbiamo terminato lanalisi del pro- che ora possiamo unire con il linker lst6 per ot-
gramma PCONT.ASM e possiamo dedicarci al pro- tenere un programma eseguibile al quale diamo no-
gramma PLEXER.ASM. me XCONTA.HEX.
Innanzitutto potete notare che davanti alle istruzio- Ottenere il formato .HEX con il linker lst6
ni che abbiamo estratto dal programma originale
CONTA.ASM (vedi il listato in fig.3), sono state in- Finora abbiamo sempre parlato di unire pi pro-
serite le direttive necessarie al programma grammi .OBJ per ottenere un programma esegui-
PLEXER per essere compilato: bile .HEX.
Se state pensando che si potevano evitare queste Le scritte S I T V M sono opzioni specifiche
istruzioni definendo i registri e le variabili come e- del linker Lst6 che verranno spiegate in maniera
sterni con la direttiva .extern, siete in errore. completa nel prossimo articolo.
Per non appesantire questo articolo, ci soffermia-
Come infatti abbiamo gi detto, ma forse utile ri- mo solo su O XCONTA PCONT PLEXER.
petere, possono essere definite come .extern so-
lamente labels di Program Space e di Data Rom Nota: attenzione a non confondere lopzione O
Windows, mentre i registri, le variabili di Data spa- del linker con lopzione O dellAssembler.
.
Lopzione O del linker seguita dal nome del pro- CONTROLLO delle CONDIZIONI
gramma finale, nel nostro caso XCONTA, serve ad
indicare al linker come dovr chiamare il program- Lanciamo quindi il linker e, come gi anticipato, a vi-
ma eseguibile .HEX. deo compaiono le segnalazioni di errore visibili in
fig.15. Dopo la visualizzazione della versione del
Come potete notare noi ci siamo limitati a scrivere Linker e la segnalazione del copyright c la scritta:
XCONTA, perch lestensione .HEX viene messa
automaticamente dal programma lst6. pass1 :
Se avessimo voluto ottenere un programma con u- Il linker o, come pi correttamente sarebbe giusto
na diversa estensione avremmo dovuto scrivere il chiamarlo, il Linkage Editor, agisce infatti in due fa-
nome per esteso: ad esempio O XCONTA.PGM. si o passi.
Il primo passo o pass1 quello di controllare che
Dopo il nome delleseguibile, scriviamo in succes- in tutti i programmi .OBJ da linkare ci siano le con-
sione il nome dei programmi da concatenare, cio dizioni per poterli collegare segnalando eventuali
PCONT e PLEXER, omettendo anche stavolta le- errori.
stensione .OBJ, perch assunta di default. Il secondo passo o pass2 quello specifico di col-
legare ogni singola istruzione e locazione di me-
E invece molto IMPORTANTE lordine in cui ven- moria dei vari programmi in modo da ottenere un
gono definiti i programmi da linkare, perch il linker unico programma eseguibile. E in questa seconda
seguir quellordine per collegarli. fase che le locazioni di memoria dei singoli pro-
grammi vengono in un certo senso sistemate una
Nel nostro esempio i programmi sono due, ma po- in coda allaltra con la conseguente rilocazione
trebbero essere molti di pi. o rimappatura degli indirizzi.
In tutti gli articoli sul linguaggio di programmazione Assembler usato dai microprocessori
ST6, vi abbiamo sempre spiegato le procedure per scrivere i programmi unendo la teoria,
della quale non si pu fare a meno, alla pratica, con esempi che fossero semplici e imme-
diati. Chi ha avuto la costanza di seguirci non ne rimasto deluso e con questo articolo sul
linker Lst6 potr acquisire ulteriori elementi per programmare senza problemi.
.
<PCONT.obj>: program section(s) size is 0x7C (124), window(s) size is 0xA (10)
Di seguito c:
<PLEXER.obj>: program section(s) size is 0x49 (73), window(s) size is 0x0 (0)
Effettuando un controllo sulla possibilit di colle- sono state correttamente definite esterne con la di-
gare PCONT e PLEXER, il linker rileva tre ano- rettiva .extern decrem,increm,mulplx.
malie relative alle routine identificate dalle labels
decrem, increm e mulplx e pertanto termina sen- A questo punto controlliamo anche il programma
za generare il programma eseguibile. PLEXER.ASM, ma anche qui decrem, increm e
Segnala queste routine come indefinite (undefined mulplx sono definite e usate correttamente.
symbol ) e ci informa che il primo riferimento (first Dovrebbe perci essere tutto a posto, ma nono-
referenced) nel programma PCONT. stante ci il linker le segnala come indefinite.
La prima cosa che dobbiamo fare controllare il Lerrore deriva dal fatto che nel programma
programma PCONT.ASM dove per le tre labels PLEXER non stata inserita la direttiva .global.
Fig.15 Il programma linker agisce in due fasi o passi. Nella prima fase controlla se nei
programmi .OBJ da linkare ci sono i presupposti per il loro collegamento. In questo ca-
so non passa alla seconda fase perch rileva delle anomalie sulluso delle labels decrem,
increm e mulplx segnalandoci che il loro primo riferimento si trova in PCONT.OBJ.
.
Questa direttiva assolutamente ininfluente in fa- Nella fig.16 abbiamo riportato la videata che ap-
se di compilazione in formato .OBJ e la prova pare dopo aver lanciato per la seconda volta il
data dal fatto che il compilatore non ha segnalato linker.
nessun errore assemblando PLEXER.ASM.
Questa volta sotto pass1 non vengono segnalati
Quando per si devono linkare programmi che con- errori, ma appare: window #0 (10 bytes) mapped
tengono la direttiva .extern per segnalare lutilizzo in program page #1, at offset 0xb5.
di routine esterne, nel programma che effettiva-
mente contiene queste routine bisogna inserire la Questa scritta ci informa che, grazie alle direttive
direttiva .global seguita dalla definizione delle la- .window e .windowend inserite in PCONT, il linker
bels di queste routine. ha rilocato (mapped) allindirizzo 0B5h di Program
page 1 unarea dati di 10 bytes.
In questo modo segnaliamo al linker che queste
routine sono richiamate in altri programmi e, in un Il linker passa quindi alla seconda fase e ne d il
certo senso, le rendiamo disponibili. resoconto sotto la scritta:
E importante ricordare che .global deve essere
obbligatoriamente inserita prima della definizione pass2 :
delle routine che vogliamo rendere utilizzabili in al-
tri programmi. Il collegamento vero e proprio di PCONT e
PLEXER stato effettuato e segnala che in
Il listato visibile in fig.3 va perci modificato inse- PCONT ha rilevato lutilizzo delle tre routine ester-
rendo nel programma PLEXER.ASM, prima di ne e che in PLEXER ha rilevato le stesse routine
.section 1 listruzione: definite con .global e ha assegnato loro un indi-
rizzo assoluto di memoria Program Space:
.global decrem,increm,mulplx
decrem 89Eh
Ovviamente il programma va ricompilato per ge- increm 889h
nerare PLEXER.OBJ e poi va rilanciato il linker. mulplx 86Ch
Fig.16 Il linker d un resoconto scritto anche della 2 fase, che consiste nel collegare o-
gni singola istruzione e locazione di memoria cos da ottenere un eseguibile .HEX.
.
Inoltre segnala che la grandezza del programma e- Confrontando il loro opcode (vedi colonna codice
seguibile sar di 0CFh bytes di Program Space e in fig.17) con il listato di fig.2, si pu notare che so-
cio di 207 bytes a partire da program section 1, e no corrette. Loperazione ldi infatti, avviene esat-
cio dallindirizzo di memoria 0800h (vedi la tabel- tamente nelle due locazioni di memoria definite in
la in fig.5). Infine segnala che ha generato: PCONT, cio 087h e 088h.
Fig.18 Il programma XCONTA.DSD riferito alle variabili lsb e msb definite due volte in due
differenti locazioni di memoria. Come potete notare, le istruzioni del1 e del2 hanno le stes-
se locazioni di memoria della seconda serie di variabili lsb e msb. Anche le definizioni dei
registri, dellaccumulatore, delle etichette ecc., sono state sdoppiate provocando confu-
sione. Per ovviare a ci si utilizzano le direttive .notransmit e .transmit.
ast6 L O PCONT
ast6 L O PLEXER
XCONTA
Abbiamo quindi ritenuto opportuno scrivere una Fig.1 I microprocessori serie ST62T65C e
piccola appendice per spiegarvi brevemente i casi ST62E65C hanno un piedino dedicato allat-
in cui va utilizzato questo piedino, che per como- tivazione del timer. Questo piedino il 27 e
dit chiameremo semplicemente TIMX (vedi fig.3). viene solitamente chiamato TIM1.
Con questo registro si effettua il controllo comple- Nella tabella successiva riportiamo le combinazio-
to del timer. Il formato del registro : ni possibili e le relative funzioni attivate.
7 6 5 4 3 2 1 0
TOUT DOUT TIMER PIN MODALIT
TMZ ETI TOUT DOUT PSI PS2 PS1 PS0
0 0 Input Event Counter
0 1 Input Gated Mode
Abbiamo contraddistinto i singoli bit con delle sigle
1 0 Output Output Mode 0
e ora, bit per bit, ne diamo il significato, ma so-
1 1 Output Output Mode 1
prattutto vediamo come vanno gestiti questi bit nei
nostri programmi per ottenere le diverse funzioni.
Vediamo ora insieme i singoli casi.
bit 7 TMZ Timer Zero Bit
Event Counter: TOUT = 0 DOUT = 0
Questo bit viene gestito in maniera automatica dal
timer, ma pu essere anche settato o resettato da In questa modalit il piedino TIMX del micro viene
programma. Quando il registro contatore del timer, configurato in input e diventa linput clock del re-
cio il registro tcr, decrementandosi raggiunge lo gistro prescaler psc.
zero, questo bit viene posto a 1. Il decremento del registro prescaler psc avviene
Per questo motivo, ogni volta che bisogna iniziare solo quando viene rilevato un fronte di salita (ri-
un nuovo conteggio del timer, questo bit va reset- sing edge) su questo piedino.
tato a 0, altrimenti il timer non riparte. Questa modalit viene ad esempio utilizzata per ot-
tenere un conta impulsi o un generico contato-
bit 6 ETI Enable Timer Interrupt re (vedi pi avanti il primo programma-esempio).
Questo bit viene gestito attraverso il programma. Gated Mode: TOUT = 0 DOUT = 1
Quando posto a 0, linterrupt del timer non vie-
ne abilitato, quando invece posto a 1, la richie- In questa modalit il piedino TIMX viene configu-
sta di interrupt del timer abilitata. In questo ca- rato in input e il prescaler psc si decrementa sul
so, quando TMZ, cio il bit 7, diventa 1, il pro- clock del timer, cio con la frequenza interna di-
gramma salta al vettore relativo (definito nei nostri visa per 12.
programmi-esempio con tim_int o tad_int). Questo avviene solamente quando sul piedino
Naturalmente dobbiamo avere correttamente abili- TIMX viene rilevato uno stato logico high, cio 1.
tato il registro ior allinizio del nostro programma. Se lo stato low, cio 0, il registro prescaler psc
non si decrementa mai ed il timer bloccato fino
I due bit che interessano direttamente il piedino al prossimo cambio di stato del piedino TIMX.
TIMX del timer sono: Questa modalit viene ad esempio utilizzata per ot-
tenere un semplice periodimetro o per misurare
bit 5 TOUT Timers Output Control la durata di un impulso (vedi pi avanti il secon-
bit 4 DOUT Data Output do peogramma-esempio).
Entrambi questi bit vengono gestiti dal programma Output Mode 0: TOUT = 1 DOUT = 0
e consentono di selezionare una delle quattro dif-
ferenti modalit del timer. In questa modalit il piedino TIMX viene configu-
rato in output e il prescaler psc si decrementa sul
Nota: in realt le modalit sono tre, perch per le clock del timer, cio con la frequenza interna di-
funzioni Output Mode, la modalit la stessa e visa per 12.
cambia solo il tipo di segnale in uscita, che pu es- Quando il bit 7 TMZ diventa 1, sul piedino TIMX
sere 0 o 1. viene riportato il valore di DOUT e cio 0.
.
Questa modalit viene ad esempio utilizzata per ot- PS2PS2 PS1 PS1 PS0PS0 DIVISORE
DIVISORE
tenere un generatore di frequenza. 0 0 0 1
0 0 1 2
Output Mode 1: TOUT = 1 DOUT = 1 0 1 0 4
0 1 1 8
Anche in questa modalit il piedino TIMX viene con- 1 0 0 16
figurato in output e il prescaler psc si decremen- 1 0 1 32
ta sul clock del timer, cio con la frequenza inter- 1 1 0 64
na divisa per 12. 1 1 1 128
Quando il bit 7 TMZ diventa 1, sul piedino TIMX
viene riportato il valore di DOUT e cio 1. Alla luce di quanto fin qui detto, opportuno fare
Come la precedente, anche questa modalit viene alcune piccole e semplici constatazioni.
utilizzata per ottenere un generatore di frequen- Quando si intende utilizzare il timer, evidente che
za (vedi pi avanti il terzo programma-esempio). se il micro ST6 scelto dispone del piedino TIM1 o
TIMER, questo diventa praticamente riservato e
bit 3 PSI Prescaler Initialize Bit non deve essere assolutamente utilizzato per sco-
pi diversi da quelli elencati sopra, come, ad esem-
Questo bit viene gestito attraverso il programma. pio, per gestire un pulsante o spedire dati ad un di-
Quando posto a 0, il registro prescaler psc vie- splay, perch il programma ed il relativo circuito po-
ne inizializzato al valore 7Fh (in binario 01111111) trebbero non funzionare correttamente.
e il suo conteggio viene bloccato.
In questa condizione quindi il timer non funziona. Inoltre, occorre fare attenzione allOption Byte dei
Quando posto a 1, il conteggio (decremento) del micro della versione C.
prescaler attivo ed il timer funziona. E infatti possibile che, in alcuni modelli, sia inseri-
to un bit che permette di scegliere tra la modalit
bit 2-1-0 PS2-1-0 Presc. Div. Factor Pull-Up o la modalit No Pull-Up del piedino TI-
MER. Questo fatto potrebbe influenzare la gestio-
Questi bit vengono gestiti attraverso il programma. ne del timer.
La combinazione di questi tre bit permette di confi-
gurare il fattore di divisione del registro prescaler Infatti, se, ad esempio, in un programma che uti-
psc come si vede nella tabella proposta di seguito. lizza un micro modello ST6220C e che prevede lu-
tilizzo del timer in Gated Mode, non settiamo a 1
Grazie allutilizzo corretto di questi tre bit, possibi- il bit D2 dellOption Byte (vedi fig.5), bisogner ri-
le ottenere una vasta gamma di temporizzazioni. cordarsi di farlo elettricamente collegando tra il pie-
Fig.5 Quando utilizzate i micro della serie C che hanno il piedino del TIMER (vedi Tim1 e
Timer nelle figg.1-2), ricordatevi di controllare se possibile scegliere tra la modalit pull-
up o no pull-up. Se cos fosse, settate a 1 il piedino D2 dellOption Byte oppure ricorda-
tevi di collegare una resistenza esterna di pull-up da 10.000 ohm al piedino Timer.
.
dino TIMX e il positivo di alimentazione una resi- Il bit 6 denominato ETI a 1 perch vogliamo ge-
stenza esterna di pull-up da 10.000 ohm, altrimenti stire linterrupt del timer quando il contatore tcr
il timer non partir mai. arriva a zero.
Non crediate di poterlo fare tramite il programma,
perch, come abbiamo gi detto, in questi tipi di I bit 2-1-0 denominati PS2-PS1-PS0 sono tutti a ze-
micro il piedino TIMER riservato e quindi non ro perch vogliamo che il divisore del prescaler sia
configurabile tramite i tre normali registri delle por- uguale a 1.
te (come, port_a, pdir_a e popt_a). In questo modo, ogni fronte di salita rilevato sul pie-
dino TIMX, va a decrementare subito il contatore
ESEMPI del timer tcr.
Per spiegare quanto fin qui detto, abbiamo scritto Poich noi abbiamo caricato il contatore tcr con il
tre semplici e completi programmi-esempio funzio- valore 1, al primo impulso rilevato, il tcr va a zero
nanti: e attiva linterrupt (vedi tad_int).
contaimp.asm - durata.asm - ondaqua.asm
Il bit 7 denominato TMZ viene posto a 0, mentre il
Di seguito spieghiamo con maggiori dettagli le so- bit 3 denominato PSI viene posto a 1 e in questo
le istruzioni relative alla gestione del timer, ma voi modo il timer si attiva.
trovate i sorgenti completi in questo cd-rom.
A questo punto posizionatevi alla riga da noi nu-
Per facilitare il riconoscimento delle istruzioni allin- merata 104, dove trovate la routine:
terno del programma, abbiamo inoltre provveduto
a numerarle. tad_int
Per esemplificare la modalit Event Counter ab- Come abbiamo spiegato quando abbiamo parlato
biamo scritto il programma CONTAIMP.ASM. della modalit Event Counter, il programma attiva
la routine tad_int quando il contatore tcr a zero,
In questo programma viene utilizzato il piedino cio ad ogni impulso (fronte di salita) rilevato su
TIMX di un microcontrollore ST6265 per contare TIMX e, tramite i due contatori che nel nostro pro-
gli impulsi. E previsto il conteggio di un massimo gramma abbiamo chiamato unidec e cenmil (vedi
di 9999 impulsi, dopodich si riparte. le istruzioni posizionate alle righe 48 e 49), effettua
E inoltre prevista la visualizzazione in tempo rea- un conteggio da 0 a 9999 impulsi visualizzandone
le di questo conteggio tramite la gestione di 4 di- il risultato su 4 display numerici a 7 segmenti.
splay numerici a 7 segmenti. Quando il conteggio degli impulsi arriva a 9999, i
contatori vengono azzerati e il conteggio riparte.
Aprite con un normale editor, ad esempio Notepad,
questo programma e posizionatevi alla riga da noi IL PROGRAMMA DURATA.ASM
numerata 279, dove trovate queste istruzioni:
Per esemplificare la modalit Gated Mode ab-
ldi tcr,1 biamo scritto il programma DURATA.ASM.
ldi tscr,01001000b
In questo programma viene utilizzato il piedino
Con la prima istruzione abbiamo caricato il valore
TIMX di un microcontrollore ST6265 per calcolare
1 nel contatore tcr.
il tempo totale di accensione di una caldaia oppu-
Con la seconda istruzione carichiamo il valore bi-
re di un innaffiatoio o anche di una pompa ecc.,
nario 01001000 nel registro tscr.
nellarco delle 24 ore. E inoltre prevista la sua vi-
Se adoperate la tabellina che abbiamo utilizzato ad
sualizzazione su 4 display a 7 segmenti.
inizio articolo, potete capire meglio perch abbia-
mo caricato questo numero nel registro tscr.
Il tempo calcolato in secondi-minuti-ore e sul
display possibile visualizzare a scelta i minuti ed
7 6 5 4 3 2 1 0
i secondi oppure le ore ed i minuti, se si modifica-
TMZ ETI TOUT DOUT PSI PS2 PS1 PS0 no alcune righe del programma sorgente.
0 1 0 0 1 0 0 0
Quando la caldaia (o linnaffiatoio ecc.) si spegne,
I bit 5 e 4 denominati TOUT e DOUT sono a zero mette a 0 lo stato logico del piedino TIMX e il con-
per attivare la modalit EVENT COUNTER. teggio del tempo si ferma, quando si riaccende met-
.
Il bit 6 denominato ETI settato a 1 per attivare I bit 2-1-0 denominati PS2 PS1 PS0 sono settati a
linterrupt e quindi, ogni 10 millisecondi, il pro- 1-1-0 in modo da configurare a 64 il divisore del
gramma attiva la routine tad_int (vedi istruzione al- prescaler.
la riga 104), dove gestisce sia il calcolo del tempo
di utilizzo che la sua visualizzazione sui display. Con il quarzo a 2,4576 MHz, il contatore tcr cari-
cato con 16 e il divisore del prescaler a 64, abbia-
Nota: nel nostro programma le istruzioni sono scrit- mo ottenuto una base tempi di 5 millisecondi.
te in modo da visualizzare i secondi e i minuti di
utilizzo. Infatti, alla riga 139 trovate listruzione: Settando a 1 il bit 6 denominato ETI abbiamo atti-
vato la richiesta di interrupt del timer e quindi o-
ld a,secondi gni 5 millisecondi il programma salter alla routi-
ne tad_int visibile dalla riga 138 alla 148.
mentre alla riga 145 trovate listruzione:
Il bit 4 denominato DOUT stato configurato a 1.
ld a,minuti Questo significa che la prima volta che si attiva lin-
terrupt, nel piedino TIMX, che fino ad allora conte-
Se invece dei minuti e dei secondi, volete visualiz- neva uno stato logico 0 (in virt delle istruzioni che
zare i minuti e le ore dovete cambiare la riga 139 si trovano dalla riga 119 alla riga 121), verr mos-
con listruzione: so il valore del bit DOUT e cio 1.
Fig.2 Sui due lati della tavoletta in legno abbiamo applicato due righelli alti circa 5,5 cm
in modo da ottenere una distanza tra il bulbo della lampada ed il corpo superiore degli
integrati (Eprom o Microprocessori cancellabili) che non risulti minore di 2 cm. Questa di-
stanza non critica, ma se superate i 4 cm dovrete aumentare i tempi desposizione.
.
A L
C M
D O
Formato .obj
W
Formato delle istruzioni
Funzione SPI Watchdog
Watchdog - approfondimenti
I
Z
Interrupt
Istruzioni Z flag
INDICE ANALITICO KIT