You are on page 1of 400

.

PREMESSA

A coronamento del corso sulla programmazione con linguaggio Assembler dei


microprocessori serie ST6, non poteva mancare la raccolta in un unico cd-rom di
tutti gli articoli pubblicati nel corso degli anni sullargomento.

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.

Inoltre, con i software emulatori che vi proponiamo diventa facilissimo controlla-


re le istruzioni via via che vengono eseguite. E cos possibile capire dove e per-
ch si genera lerrore e come fare per correggerlo.
Per questo motivo, ci siamo premurati di mettere a vostra disposizione, sempre
in questo cd-rom, lultima versione del software emulatore SimST62, che avete
imparato a conoscere, ad usare e ad apprezzare nei nostri articoli.

In appendice trovate il kit di una lampada ad ultravioletti per cancellare i micro-


processori con memoria Eprom e un inedito sulla funzione Timer dei micropro-
cessori ST6, che tiene conto del fatto che in alcuni tipi di micro possibile atti-
vare alcune modalit di funzionamento particolari e molto interessanti.

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

Bologna, Gennaio 2003

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 microprocessori serie ST6 ................................................................. 172


Programmatore LX.1170 per gli ST62/10-15-20-25
CIRCUITO TEST per microprocessore ST6E10 .......................................................................... 172
Scheda test LX.1171 per provare gli ST6
IMPARARE a programmare i MICROPROCESSORI ST6 ........................................................... 174
Istruzioni Variabili Registri
IMPARARE a programmare i microprocessori ST6 ................................................................... 175
Watchdog Porte Interrupt A/D converter Timer
BUS per TESTARE i micro ST6 ................................................................................................... 179
Bus LX.1202-1203 per testare i micro ST62/10-15-20-25
SCHEDA TEST per ST6 ................................................................................................................. 179
Schede test LX.1204-1205 per provare gli ST6
NOTA per il programmatore LX.1170 per micro ST6 ................................................................ 179
Consigli per migliorare il programmatore LX.1170
SCHEDA con 4 TRIAC per microprocessori ST6 ...................................................................... 180
Scheda LX.1206: pilotare 4 diodi triac con un ST6
SCHEDA con DISPLAY LCD pilotata con un ST6 ..................................................................... 181
Scheda LX.1207: pilotare un display numerico LCD con un ST6
UNA SCHEDA per pilotare un DISPLAY alfanumerico ............................................................. 182
Scheda LX.1208/N: pilotare un display alfanumerico LCD con un ST6
SOFTWARE emulatore per TESTARE i micro ST6 .................................................................... 184
Software simulatore DSE622
SOFTWARE simulatore per TESTARE i micro ST6 ................................................................... 185
Formato e Opcode delle istruzioni Carry flag e Z flag Correzione degli errori con il DSE622
Windows 95 e ST6 ......................................................................................................................... 185
Se i programmi in DOS per ST6 non girano sotto Windows 95
PER PROGRAMMARE correttamente i micro ST6 ..................................................................... 189
Cicli macchina Reset Watchdog Gestione ottimale delle porte Espressioni
NUOVO software SIMULATORE per micro ST6 ......................................................................... 190
Nuovo simulatore software per micro ST62/10-15-20-25
SOFTWARE emulatore per TESTARE i micro ST6 .................................................................... 190
Le direttive .w_on, .ifc, .block
LE DIRETTIVE dellassembler ST6 .............................................................................................. 191
Le direttive .ascii, .asciz, .def
PROGRAMMATORE per MICRO ST62/60-65 .............................................................................. 192
Programmatore LX.1325 per micro ST62/60-65
BUS per TESTARE le funzioni PWM e EEPROM ....................................................................... 192
Bus LX.1329 per testare i micro ST62/60-65 Programmi di esempio per PWM e EEPROM
LE DIRETTIVE dellassembler ST6 .............................................................................................. 193
Le direttive .byte, .equ, .set
OPZIONI del compilatore Assembler .......................................................................................... 194
Opzioni del compilatore Assembler
Le memorie RAMEEPROM ......................................................................................................... 195
Tipi di registri Memoria RAM e RAM aggiuntiva Lettura e scrittura della memoria EEPROM
Software SIMULATORE per micro ST6 ....................................................................................... 197
Nuovo simulatore software per micro ST62/60-65
LA funzione SPI per lo scambio DATI ........................................................................................ 198
La funzione SPI per lo scambio seriale dei dati
CIRCUITI test per la SPI ................................................................................................................ 198
Schede test LX.1380-1381-1382 per la funzione SPI
COME PROGRAMMARE i nuovi MICRO serie ST6/C ................................................................ 202
Interfaccia LX.1430 per gli ST6 serie C Option Byte della serie C
COME UTILIZZARE la DIRETTIVA .MACRO ................................................................................ 203
La direttiva .macro
Per PROGRAMMARE i nuovi MICRO serie ST6/C ..................................................................... 204
Le funzioni attivabili tramite lOption Byte della serie C
LA DIRETTIVA .IFC dellASSEMBLER per ST6 .......................................................................... 205
La direttiva .ifc
IL programma LINKER per i microprocessori ST6 .................................................................... 206
Il programma Linker I formati .hex e .obj Le direttive .pp_on, .extern, .window, .windowend
APPENDICE A: QUALCOSA in pi sul TIMER ...........................................................................
APPENDICE B: Lampada per cancellare le Eprom ................................................................... 174
INDICE ANALITICO ........................................................................................................................
Molti Istituti Tecnici e non pochi softwaristi e pro- Solo quando si ha la conferma che il programma
gettisti ci chiedono con sempre maggiore insi- funziona regolarmente, si preferisce utilizzare i mi-
stenza di spiegare in modo molto semplice come croprocessori della serie ST62/T, perch oltre ad
si programmano i microprocessori ST62, ritenendo essere meno costosi, non pi possibile mano-
che se ci prendiamo questo impegno lo adempire- metterli.
mo come nostra consuetudine nel migliore dei
modi. Nelle Tabelle N.1 e N.2 riportiamo le principali ca-
Per accontentarvi iniziamo subito dicendo che i mi- ratteristiche di queste due serie di microprocessori.
croprocessori della famiglia ST62 sono reperibili in Tenete presente che nei microprocessori da 2 K di
due diverse versioni: memoria possibile inserire circa 900 - 990 righe
quelli siglati ST62/E e quelli siglati ST62/T. di programma ed in quelli da 4 K circa 1.800 - 2.000
La lettera E posta dopo la sigla ST62 indica che il righe di programma.
microprocessore si pu cancellare e riprogram-
mare per almeno un centinaio di volte. Per completare i dati riportati nelle due tabelle, pre-
I microprocessori ST62/E si riconoscono facilmen- cisiamo che il numero a due cifre riportato dopo la
te perch al centro del loro corpo presente una sigla, ad esempio ST62E.10 - 15 - 20 - 25, ha un
piccola finestra (vedi fig.1) che permette di can- preciso significato.
cellare la EPROM interna tramite una lampada a
raggi ultravioletti. La prima cifra indica la memoria disponibile:
La lettera T, posta dopo la sigla ST62, indica che - se la prima cifra un 1 (vedi 10-15) sono dispo-
i dati memorizzati allinterno del microprocessore nibili 2 K di memoria,

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.

TABELLA N.1 micro NON CANCELLABILI


Sigla memoria Ram zoccolo piedini utili
Micro utile utile piedini per i segnali
ST62T.10 2 K 64 byte 20 pin 12
ST62T.15 2 K 64 byte 28 pin 20
ST62T.20 4 K 64 byte 20 pin 12
ST62T.25 4 K 64 byte 28 pin 20

TABELLA N.2 micro CANCELLABILI


Sigla memoria Ram zoccolo piedini utili
Micro utile utile piedini per i segnali
ST62E.10 2 K 64 byte 20 pin 12
ST62E.15 2 K 64 byte 28 pin 20
ST62E.20 4 K 64 byte 20 pin 12
ST62E.25 4 K 64 byte 28 pin 20
microprocessori serie ST6
Si parla spesso dei vantaggi che offrono i microprocessori ST62 senza
per spiegare quello che interessa maggiormente, cio come fare per
programmarli e quale programmatore utilizzare. Al contrario noi vi spie-
gheremo come costruirvi un valido programmatore ed anche come si
deve procedere per programmare questi microprocessori.

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

Vcc GND Vpp

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

MONTAGGIO NEL MOBILE COME COLLEGARLO al COMPUTER

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

Per programmare gli ST62 bisogna disporre di un


qualsiasi personal computer IBM compatibile, non
importa se europeo o se costruito ad Hong-Kong o
a Taiwan.
A tutti coloro che ci chiedono perch presentiamo
programmi per soli IBM compatibili rispondiamo
che la maggior parte dei programmi reperibili fun-
zionano sotto DOS e poich questo il sistema o-
perativo usato su tutti i computer IBM compatibi-
li non possibile adattare i programmi scritti per
DOS per i computer tipo APPLE - AMIGA - AM-
STRAD ecc.
Fig.9 Foto dello stadio di alimentazione che
Questa scelta non nostra, ma delle Case di una volta montato dovrete fissare sul co-
software che avendo constatato che i computer perchio del mobile con tre distanziatori pla-
IBM compatibili sono i pi diffusi in Europa - A- stici autoadesivi (vedi fig.10).
merica - Asia, si sono orientate a realizzare solo
programmi per DOS.
In questo modo le Case di software vendono un
numero maggiore di programmi, quindi riducono i
costi di copyright ed in pi hanno la certezza che
questi programmi funzioneranno su qualsiasi mo- Fig.10 Lo stampato del programmatore si-
dello e marca di computer, perch usati sul siste- glato LX.1170 andr fissato sul pannello del
ma operativo pi diffuso. mobile con quattro viti pi dado. Sul pan-
Ritornando al computer IBM compatibile, non im- nello inclinato dello stesso mobile fisserete
porta di quale marca o tipo e neanche se il modello il portaled e linterruttore di accensione.
vecchio o nuovo, deve soltanto essere dotato di
Fig.11 Il mobile scelto per questo programmatore completo delle sue mascherine gi fo-
rate e serigrafate fornisce al progetto un aspetto molto professionale. Quello che pi ap-
prezzerete di questo progetto la facilit con cui riuscirete, con il dischetto da noi forni-
to, a programmare qualsiasi tipo di microprocessore ST62.

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.

Con le due semplici istruzioni trascritte sopra, crea-


te automaticamente una directory chiamata ST6,
nella quale vengono memorizzati tutti i files conte-
nuti nel dischetto.
Durante loperazione di scompattazione appare sul
monitor lelenco dei files (vedi fig.13).
Quando il programma interamente memorizzato,
appare un messaggio a conferma che linstallazio-
ne stata completata.
Il programma scompattato occupa circa 1 Me-
Fig.12 Per trasferire nellHard-Disk i pro- gabyte di memoria.
grammi contenuti nel dischetto dovete di- Se non premete nessun tasto, dopo qualche mi-
gitare A:\>INSTALLA poi premere Enter. nuto compare la scritta:
Tutti i programmi verranno memorizzati nel-
la directory C:\ST6. C:\ST6>

Se volete uscire dalla directory ST6 sar suffi-


ciente digitare:

C:\ST6>CD \ poi Enter

e comparir cos sul monitor C:\>.

Una volta installato il programma nellHard-Disk po-


tete mettere da parte il dischetto floppy, perch
non vi servir pi.

COME si RICHIAMA il PROGRAMMA


Fig.13 Poich i programmi nel dischetto ri-
sultano compattati, durante loperazione di Tutte le volte che volete richiamare il programma
scompattazione apparir sul monitor linte- ST6, quando sul monitor appare C:\> dovete digi-
ro elenco dei files. Il programma occupa 1 tare queste semplici istruzioni:
Mega circa di memoria.
C:\>CD ST6 poi Enter
C:\ST6>ST6 poi Enter

Se dovesse comparire una directory diversa da


C:, ad esempio:

C:\JVFAX>

dovete digitare:

C:\JVFAX>CD \ poi Enter


C:\>CD ST6 poi Enter
C:\ST6>ST6 poi Enter

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.

F3 Pigiate il tasto L = Load e nella maschera che ap-


pare scrivete il nome del file che volete memoriz-
Sullo schermo apparir una nuova finestra con le- zare allinterno dellST62E10.
lenco dei programmi presenti in memoria (vedi fig.
16). I programmi scritti da noi hanno questi nomi: Poich per questo esempio abbiamo scelto il file
LED, scrivete questo nome nella riga (vedi fig.21)
CONTA.ASM poi premete Enter.
LED.ASM
LOTTO.ASM Dopo pochi secondi comparir una seconda fine-
stra rossa (vedi fig.22) con scritto File checksum
Nota: Oltre a questi tre files ne troverete un quar- = un numero esadecimale di controllo.
to chiamato STANDARD.ASM, che a differenza Poich questo numero non vi serve, pigiate un
degli altri, non contiene un programma da carica- qualsiasi tasto.
Fig.27 Tutti gli ST62 a 20 piedini
andranno inseriti nello zoccolo
textool in basso rivolgendo ver-
so lalto la tacca di riferimento.
Anche gli ST62 a 28 piedini an-
dranno inseriti nello zoccolo tex-
tool rivolgendo verso lalto la tac-
ca di riferimento.

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

Il mobile MO.1170 completo delle due mascherine


NOTE per la LAMPADA UV forate e serigrafate ................................... 16,01

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.

In questo circuito di prova, che potete vedere in REALIZZAZIONE PRATICA


fig.1, vi sono due integrati, ma quello che abbiamo
siglato IC1 in pratica il microprocessore Sul circuito stampato siglato LX.1171 dovete
ST62E10 che dovete prima programmare, mentre montare tutti i componenti disponendoli come vi-
lintegrato IC2, che trovate inserito nel kit, un sibile in fig.12.
74LS244 utilizzato come buffer di corrente. Lo schema cos semplice che non ha certo bi-
Infatti dovete tenere presente che sulle uscite sogno di particolari consigli, comunque una vol-
dellST62E10 non possibile applicare dei carichi ta stagnati tutti i terminali degli zoccoli e del con-
che assorbano pi di 5 mA, e poich questo cir- nettore consigliabile controllare con una lente
cuito viene utilizzato per accendere dei diodi led dingrandimento che non vi sia una goccia di sta-
e dei display che assorbono una corrente mag- gno tra due piedini che provochi un corto.
giore, abbiamo dovuto adoperare lintegrato Come visibile nel disegno dello schema pratico

CIRCUITO TEST per


Dopo aver imparato come memorizzare un programma allinterno di un
microprocessore ST62E10, e aver constatato di persona che non poi
cos difficile come viene invece descritto in altre parti, sarete assaliti
dalla curiosit di testarlo e per questo vi occorre soltanto il semplice
circuito che ora vi presentiamo.

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

R3 R10 ELENCO COMPONENTI LX.1171 (test St6)

1 5 4 3 11 2 8 9 10 R1 = 10.000 ohm 1/4 watt


R2 = 10.000
ELENCO ohm 1/4LX.1171
COMPONENTI watt
*R3-R10 = 100 ohm 1/4 watt
1 5 4 3 11 2 8 9 10 12 6 7
CONN. 1
R1 C1 = 100.000
= 10.000 ohmpF 1/4poliestere
watt
R2 = 10.000 ohm 1/4poliestere
C2 = 100.000 pF watt
DS1 C3 = =22100
pFohm
a disco
*R3-R10 1/4 watt
C1 C4 = 22 pFpF
= 100.000 a disco
poliestere
C5 = 1 mF elettr. 63 volt
C2 = 100.000 pF poliestere
5 V. C3 DS1
= 22 =pFdiodo EM.513 o 1N.4007
a disco
18 16 3 14 5 7 12 9
C2 1 C4*DL1-DL8
= 22 pF a=disco
diodi led
20 IC2 19 C5 = 1 mF elettr. 638 volt
XTAL = quarzo MHz

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.

Dopo aver programmato il microprocessore con il 2 Lampeggio


programma Led ed averlo inserito nel circuito stam- I led si accendono due alla volta dallesterno ver-
pato siglato LX.1171, dovete innestare il connetto- so linterno (prima DL1 e DL8, poi DL2 e DL7 ecc.),
re maschio del circuito a diodi led nel connettore fino ai due led centrali (DL4 e DL5), poi i led si ac-
femmina presente sul circuito test, poi dovete ali- cendono sempre due alla volta, ma in senso in-
mentare questultimo con una tensione di 5 volt verso, cio dallinterno verso lesterno. Il ciclo con-
stabilizzati. tinua allinfinito.
3 Lampeggio programma da capo, cio ripartir dal primo lam-
Si accende tutta la fila di led, iniziando dal primo a peggio come se aveste alimentato solo in quel mo-
sinistra e proseguendo verso destra. Quando so- mento il circuito.
no tutti accesi si spengono tutti insieme. Il ciclo ri-
prende allinfinito. Se volete passare al collaudo di uno degli altri due
programmi CONTA - LOTTO, dovete togliere lali-
mentazione al circuito ed estrarre il circuito a led
4 Lampeggio LX.1171/B. Ovviamente dovete pure estrarre il mi-
Lampeggiano uno alla volta prima i led pari poi i croprocessore, e dopo averlo cancellato, dovete
dispari, poi si spengono e si accendono tutti in- riprogrammarlo con uno degli altri due program-
sieme. Il ciclo continua allinfinito. mi.

COLLAUDO PROGRAMMA CONTA


5 Lampeggio
I led si accendono prima tutti insieme, poi si spen- Dopo aver programmato il microprocessore con il
gono tutti insieme. Il ciclo si ripete allinfinito. programma Conta ed averlo inserito nel circuito
stampato siglato LX.1171, dovete innestare il con-
Non appena il circuito viene alimentato, il micro- nettore maschio del circuito a display nel connet-
processore esegue il 1 motivo. Premendo ripetu- tore femmina presente sul circuito test, poi dove-
tamente il pulsante P1 vengono eseguiti uno di se- te alimentare questultimo con una tensione di 5
guito allaltro il 2 - 3 - 4 - 5 motivo. Se mentre volt stabilizzati.
in corso il 5 premete nuovamente P1, il micro-
processore eseguir di nuovo il 1 lampeggio. Dopo aver alimentato il circuito vedrete comparire
Lintervallo fra unaccensione dei diodi led e laltra sui display il numero 00, che aumenter di una u-
di circa 1/2 secondo, ma possibile diminuire nit ogni 1/2 secondo.
questo tempo premendo ripetutamente P2. Pertanto ogni 5 decimi di secondo leggerete 01 -
La massima velocit di lampeggio consentita dal 02 - 03 - ecc. fino a 99, dopodich il conteggio ri-
programma viene raggiunta dopo aver premuto partir sempre in avanti da 00.
questo pulsante per 8 volte. Per ottenere un conteggio allindietro, potete pre-
Premendolo ancora una volta, il lampeggio ripren- mere in qualunque istante il pulsante P2.
der con la stessa velocit iniziale. Supponendo di premere P2 quando sui display
Premendo in qualunque momento il pulsante P3 compare ad esempio il numero 74, vedrete appa-
(RESET), il microprocessore torner ad eseguire il rire, sempre ad intervalli di 1/2 secondo, i numeri

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.

Dopo aver alimentato il circuito vedrete comparire


sui display due lineette (--) ed ogni volta che pre-
merete il pulsante P1 comparir un numero sem-
pre diverso compreso fra 01 e 90, cio i numeri del-
la tombola o del lotto.
Ogni volta che premete P1 il numero non sar mai
uguale ai precedenti, quindi potrete simulare una
reale estrazione di numeri.
Una volta estratti tutti i 90 numeri, vedrete com-
Fig.4 Se sceglierete il programma Led, sul-
parire sui display le due lineette (--), quindi sapre-
lo schermo del computer appariranno tutte
te che sono stati estratti tutti i 90 numeri disponi-
le righe di tale programma. Per uscire da
bili. questo listato dovete premere Alt ed F3 e
Quando compaiono le due lineette (--), per inizia- apparir il menu principale.
re una nuova estrazione baster premere P1, e co-
s sempre in maniera casuale ricompariranno i nu-
meri compresi fra 00 e 90.
Se invece volete iniziare una nuova estrazione in-
terrompendo quella in corso, sar sufficiente re-
settare il microprocessore premendo il pulsante P3
(RESET). In tal modo il programma verr eseguito
da capo, esattamente come se aveste appena ali-
mentato il microprocessore, anche se i numeri non
sono stati tutti estratti.
In questo programma il pulsante P2 non viene uti-
lizzato.

PER VEDERE il LISTATO


di un PROGRAMMA Fig.5 I pi esperti potranno apportare per-
sonali modifiche a questi programmi pi-
Le informazioni seguenti vi saranno utili quando giando il tasto F2 per memorizzarle. Pi-
vorrete entrare nel listato di un programma per mo- giando Alt+F3 potrete non confermare le
dificarlo. modifiche apportate.
Per visualizzare un qualunque listato di uno dei pro-
gramma per ST62, anche senza bisogno di modi-
ficarlo, dovete innanzitutto caricare il programma.
Quando sul monitor del computer compare:

C:\>

digitate:

C:\>CD ST6 poi Enter


C:\ST6>ST6 poi Enter

Cos entrerete nel menu principale di fig.3.

Premete il tasto F3 per visualizzare lelenco dei fi-


les contenenti i programmi per ST62. Fig.6 Una volta salvate le modifiche con F2
Premete Enter e dopo aver portato il cursore sul (vedi fig.5) dovrete riassemblare tutto il pro-
nome del file desiderato, premete ancora Enter. In gramma. Premete Alt+T e quando apparir
questo modo comparir il listato del programma questa finestra pigiate il tasto A. Lassem-
contenuto in quel file. blaggio dura solo pochi secondi.

Per muovervi allinterno del listato e vedere cos


tutte le istruzioni usate i tasti freccia su/gi oppu-
re i due tasti pagina su/gi.

Per uscire dal listato di un file, dovete tenere pre-


muto Alt e premere F3. Ritornerete cos al menu
principale (vedi fig.3).

Nota: Se mentre visualizzate il listato premete per


errore i tasti scrivendo nel file dei caratteri indesi-
derati, senza curarvi di andarli a cancellare, pote-
te uscire dal file senza salvare le modifiche.
Per compiere questa operazione sufficiente te-
nere premuto il tasto Alt e premere F3, e quando Fig.7 Se non volete memorizzare le modifi-
appare la finestra di conferma di fig.7 dovete pre- che effettuate NON dovrete pigiare il tasto
mere il tasto N. F2, ma solo Alt+F3 e cos apparir questa
Ricordate che se dopo aver modificato il file senza finestra. A questo punto dovrete semplice-
volerlo, premete inavvertitamente F2, le modifiche mente pigiare N.
verranno salvate, quindi premendo Alt+F3 la fine-
stra di conferma modifiche (vedi fig.7) non appa-
rir.
In questo caso lunico modo per correggere le mo-
difiche entrare di nuovo nel file, cercare la riga
del listato dove avete apportato le modifiche e cor-
reggerla.
Nel caso non riusciate a correggere lerrore nean-
che in questo modo, non vi rimane altro che in-
stallare di nuovo il programma, perch in tal caso
caricherete nellHard-Disk i programmi originali
contenuti nei files LED - CONTA - LOTTO.

Per MODIFICARE un PROGRAMMA


Fig.8 Se prima di programmare un ST62E10,
Chi sa gi programmare potrebbe trovare questo seguendo quanto descritto da pag.26, pi-
paragrafo poco interessante, ma poich dobbiamo giate il tasto B, il computer vi dir se il mi-
pensare anche a tutti i principianti, riteniamo ne- croprocessore inserito nello zoccolo tex-
cessario spiegare anche quello che per molti po- tool vergine.
trebbe essere ovvio.
Sapere come entrare in un file e come procedere
per modificare qualcuna delle istruzioni dei pro-
grammi che vi abbiamo fornito, costituisce un pri-
mo importante passo per tutti coloro che non han-
no mai visto come sono scritte le diverse righe di
un programma e che in un secondo tempo vorran-
no provare a realizzare dei semplici e personali pro-
grammi.

Per spiegarvi queste prime cose prenderemo spun-


to dal programma pi semplice che vi abbiamo pro-
posto, quello cio chiamato LED, e su questo vi in-
segneremo come si deve procedere per cambiare
le modalit di lampeggio degli 8 diodi led, cio per
Fig.9 Se tentate di programmare un fare in modo che i diodi led possano lampeggiare
ST62E10 gi programmato il computer vi in modo diverso da quello da noi proposto.
mostrer questa scritta. Se volete inserire
un diverso programma, dovrete premere N Quando, dopo aver caricato il programma, compa-
e cancellare il micro. re il menu principale di fig.3, premete il tasto F3 (ta-
sto per lapertura dei files).

Apparir la finestra con lelenco dei file dei pro-


grammi, cio:

CONTA.ASM
LED.ASM
LOTTO.ASM
STANDARD.ASM

Nota: Il file STANDARD.ASM non contiene un pro-


gramma vero e proprio, ma delle utili indicazioni
per capire il significato, luso e limportanza delle
Fig.10 Se nel programmare un micropro- varie istruzioni di ogni programma per ST62. Co-
cessore vi dimenticate di scrivere il nome me vi spiegheremo nel prossimo paragrafo, potre-
del file del programma, Conta - Led - Lotto, te entrare in questo file e leggere tutti gli utili com-
il computer lo segnaler con questo mes- menti che abbiamo inserito.
saggio.
A questo punto premete Enter, portate il cursore
sulla riga LED.ASM e premete ancora Enter.

Sul monitor comparir tutto il listato del program-


ma contenuto nel file LED.ASM (vedi fig.4).

In basso a sinistra sono presenti due numeri se-


parati dai due punti (:). Il primo numero vi per-
mette di identificare la riga del programma, il se-
condo la colonna del file.
Con i tasti freccia gi o pagina gi portate il cur-
sore in prossimit della riga 255, cio scendete con
il cursore fino a quando in basso a sinistra non leg-
gete 255:1.
Fig.11 Se il microprocessore stato inseri- Dalla riga 255 in poi (vedi fig. 5) compaiono delle
to nello zoccolo textool in modo errato o se istruzioni del tipo:
il programmatore non alimentato, sullo
schermo del computer apparir questo
messaggio. lamp1 .byte 11111110b ; Prima istruzione
.byte 11111101b ; Seconda istruzione
.byte 11111011b ; Terza istruzione Le cifre siglate 1 e 0 che trovate dopo listruzione
.byte 11110111b ; Quarta istruzione .byte compongono un numero binario, riconosci-
.byte 11101111b ; Quinta istruzione bile per la presenza della lettera b = binario.
.byte 11011111b ; Sesta istruzione Come noterete, queste cifre binarie sono 8 e ad
.byte 10111111b ; Settima istruzione ognuna di esse corrisponde un diverso diodo led
.byte 01111111b ; Ottava istruzione del circuito test LX.1171/B (vedi fig.1).
Ad esempio, alla prima cifra da destra corrispon-
dove lamp1 sta ad indicare che le istruzioni suc- de DL1, alla seconda corrisponde DL2, e cos via
cessive sono relative alla prima modalit di lam- fino allottava cifra da destra, alla quale corrispon-
peggio dei diodi led. de DL8.
Ogni volta che il microprocessore esegue unistru-
Nota: Le scritte dopo il punto e virgola (;) non so- zione come:
no istruzioni, ma commenti, che abbiamo inseri-
to appositamente nel listato per rendere pi com- .byte 11111011b ; Terza istruzione
prensibili le spiegazioni che ora vi daremo. Per que-
sto motivo vi consigliamo di non cambiarle. i diodi led corrispondenti alle cifre binarie uguali a
0 vengono accesi, mentre i diodi led corrispondenti
Per capire in che modo possibile cambiare que- alle cifre binarie uguali ad 1 rimangono spenti.
ste istruzioni per variare la modalit di accensione Quindi quando il microprocessore esegue questa
dei vari diodi led, cercheremo di spiegarvi in modo istruzione, viene acceso il solo diodo DL3, mentre
molto semplice come funzionano queste istruzioni. tutti gli altri rimangono spenti.

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

HP 5082 o 7731 BC 327 74 LS 244

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

Fig.19 Se avete programmato il micropro- Fig.20 Se avete programmato il micropro-


cessore con il programma LED dovrete in- cessore con il programma CONTA o LOT-
serire nel connettore dellLX.1171 il con- TO dovrete inserire nel connettore femmi-
nettore maschio della basetta di fig.14. na dellLX.1171 la basetta visibile in fig.15.
Fig.21 Disegno a grandezza naturale dei due stampati da inserire nella scheda LX.1171
(vedi figg.19-20) visti dal lato rame. Il circuito di sinistra siglato LX.1171/B serve per il pro-
gramma Led, mentre quello siglato LX.1171/D serve per i programmi Conta e Lotto.

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

Come abbiamo gi avuto modo di sottolineare, pre-


mendo F3 dal menu principale, oltre ai tre files di
tipo .ASM contenenti i programmi () test per ST62,
compare un file chiamato STANDARD.ASM, che
non contiene un programma vero e proprio.
In questo file trovate lelenco delle istruzioni che
devono comparire sempre in ogni programma, e la COSTO DI REALIZZAZIONE
cui conoscenza basilare se si desidera realizza-
re programmi personali. Costo del kit LX.1171 completo di circuito stampa-
Sono inoltre presenti tantissimi commenti, che vi to, dellintegrato 74LS244 (non c lST62E10 per-
aiuteranno a capire il significato delle varie istru- ch inserito nel kit LX.1170) pi il quarzo, i pulsanti
zioni e tante note utilissime per realizzare pro- ed il circuito stampato LX.1171/B (vedi fig.14) con
grammi per ST62 senza incorrere negli errori pi gli 8 diodi led ............................................ 12,90
banali.
Per visualizzare questo file dovete eseguire di nuo- Il kit LX.1171/D con i due display ed i due transi-
vo le operazioni spiegate nel paragrafo Per vede- stor BC.327 (vedi fig.15)............................. 4,90
re il listato di un programma, e quando compa-
re lelenco dei files dovete premere Enter, portare Costo del solo stampato LX.1171 .............. 3,72
il cursore sul nome STANDARD.ASM e premere Costo del solo stampato LX.1171/B........... 0,93
di nuovo Enter. Costo del solo stampato LX.1171/D........... 1,08
Questo file risulter molto utile sia ai pi esperti,
che vogliono cimentarsi nella realizzazione di pro- I prezzi sopra riportati sono gi compresi di IVA,
grammi senza attendere luscita della prossima ri- ma non sono incluse le spese postali di spedizio-
vista, sia a chi alle prime armi, perch potr ini- ne a domicilio.
Come vi abbiamo anticipato nella precedente rivi- scal - C avvantaggiato rispetto a chi inizia da ze-
sta, per programmare un ST6, come del resto un ro, anche se come vedrete, tutti i microprocesso-
qualunque altro microprocessore, assolutamen- ri ST6 utilizzano un linguaggio assembler molto
te necessario conoscere le basi del linguaggio di semplificato.
programmazione, perch senza queste impossi-
bile scrivere un programma. PER SCRIVERE un PROGRAMMA
Tanto per fare un esempio, se vi proponessimo di
progettare un amplificatore utilizzando un integra- Prima di scrivere qualsiasi programma necessa-
to operazionale, senza precisare come si collega rio sapere quali operazioni deve eseguire il micro-
il piedino invertente o quello non invertente o processore, perch in funzione della memoria oc-
quali modifiche vanno apportate per alimentare il cupata, dovrete scegliere il micro pi idoneo.
circuito con una tensione singola anzich duale, Infatti se avete un programma che non supera i 2K,
incontrereste parecchie difficolt nella sua realiz- potete utilizzare un ST62E10, se invece avete un
zazione. programma che occupa pi di 2K e non supera i

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.

Per richiamare il programma dovete semplicemen-


te digitare:

C:\ST6>ST6 poi Enter

e cos compare sul monitor il menu principale.

A questo punto dovete aprire un nuovo file, nel


quale scrivere il vostro programma.

Per aiutarvi fin da queste prime fasi, abbiamo in-


Fig.1 Per aprire un nuovo file dovete ri- serito nel dischetto floppy il file STANDARD.ASM,
chiamare il men principale e a questo pun-
che racchiude lelenco delle istruzioni che devono
to se premete il tasto F3 appariranno tutti i
necessariamente comparire in ogni programma.
nomi dei files del programma ST6 con e-
Copiando il file STANDARD con un altro nome, a-
stensione .ASM.
vrete subito a disposizione la struttura base per
scrivere il vostro programma.

Quindi per aprire un nuovo file dovete procedere


come segue:

1 - Quando appare il menu principale premete il


tasto funzione F3 (vedi fig.1), poi premete Enter e
portate il cursore sul nome STANDARD.ASM (ve-
di fig.2), quindi premete ancora Enter.

2 - Prima di qualsiasi altra cosa, dovete salvare


questo file con un altro nome, quindi premete i ta-
sti Alt+F e di seguito selezionate lopzione Save
as (che significa salva con nome) premendo la
Fig.2 Dalla fig.1 premete Enter, poi portate
lettera A (vedi fig.3).
il cursore sulla riga STANDARD.ASM e pre-
mete nuovamente Enter. Aprirete cos la
SORGENTE STANDARD per scrivere un 3 - Sul monitor appare una finestra nella quale do-
nuovo programma. vete digitare, oltre a C:\ST6\, il nome del vostro
programma (vedi fig.4).
Questo nome, che vi servir quando vorrete tra-
sferire il programma dallHard-Disk al micropro-
cessore ST6, non deve mai superare gli 8 carat-
teri.
Dopo il nome non dovete dimenticarvi di aggiun-
gere lestensione .ASM, che sta ad indicare che si
tratta di un programma in assembler.
Cercate un nome che abbia una logica attinenza
col programma che scriverete, per poterlo poi fa-
cilmente riconoscere tra gli altri. Per esempio po-
treste chiamare i programmi:

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

che vi conferma che il file chiamato TIMER.ASM


stato creato.

COME ASSEMBLARE un PROGRAMMA

Importante: Quando avrete terminato di scrivere il


programma, come pi avanti vi spiegheremo, e la-
vrete controllato apportando le modifiche necessa-
rie, dovrete assemblarlo, altrimenti non potrete Fig.4 Ammesso che vogliate chiamare il
memorizzarlo nel microprocessore. nuovo programma TIMER (ricordate che il
Per questo motivo, prima di chiudere leditor, cio nome non pu mai superare gli 8 caratteri)
il file del programma, premete i tasti Alt+T e di se- scrivete per esteso C:\ST6\TIMER.ASM poi
guito il tasto A = assembla (vedi fig.6). premete Enter.
Se non avete commesso errori, dopo qualche se-
condo apparir sul monitor la scritta SUCCESS.
In caso contrario, apparir un messaggio che vi in-
dicher il tipo di errore commesso e la riga di i-
struzione in cui si trova.
Per correggere lerrore dovete tornare alleditor pre-
mendo un tasto qualsiasi.
Per trasferire il programma allinterno dellST6, se-
guite le istruzioni ampiamente descritte sulla rivista
N.172/173.

COME si SCRIVE unISTRUZIONE

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 Idi a,10h

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:

La parola non deve superare gli 8 caratteri pippo1 Idi x,10


Potete scrivere nota - PIPPO - RIF ecc., ma non
parole che superino gli 8 caratteri. Se nella riga di istruzione manca il nome delleti-
chetta, dovete comunque lasciare uno spazio :
Letichetta non deve iniziare con un numero
Non potete scrivere 1nota - 2nota - 1PIPPO - Idi x,10
2PIPPO ecc., ma potete posizionare un numero
dopo la parola, senza interporre spazi tra parola e Data limportanza di scrivere correttamente listru-
numero. E quindi corretto scrivere nota1 - PIP- zione, vi consigliamo di utilizzare la funzione ta-
PO1 ecc. bulazione premendo il tasto TAB prima di scrive-
re qualsiasi istruzione.
Non si pu usare lo stesso nome due volte In questo modo avrete tutte le istruzioni perfetta-
E scorretto definire pi etichette con lo stesso no- mente incolonnate ed il programma risulter pi
me, cio scrivere PIPPO - PIPPO. Potete usare la comprensibile quando dovrete rileggerlo.
stessa parola solo se inserite un numero progres-
sivo, ad esempio PIPPO1 - PIPPO2 - PIPPO3 ecc.
OPERANDO
Non si pu lasciare alcuno spazio a sinistra
delletichetta Nella riga riportata precedentemente, cio:
Se premete spazio, poi scrivete:
Idi x,10
PIPPO
ldi listruzione, che significa carica
commettete un errore, quindi dovete partire da si- x,10 loperando
nistra senza spazio:
Questa riga indica: carica nella cella di memoria
PIPPO X il numero 10.

Carattere delletichetta Loperando deve sempre essere separato dalli-


Anche se possibile scrivere letichetta sia in mi- struzione tramite uno spazio, quindi se scrivete:
nuscolo sia in maiuscolo, vi consigliamo di scri-
vere sempre in minuscolo cos non vi sbaglierete ldix,10
mai.
Quindi scrivete pippo1 - pippo2 - nota - rif ecc. commette un grosso errore, mentre se scrivete:

ISTRUZIONE Idi x,10

Le istruzioni da inserire dopo letichetta sono pro- lintera istruzione corretta.


prie dellassembler degli ST6.
Queste istruzioni devono sempre essere scritte do- Dopo listruzione e loperando potete inserire, se
po aver lasciato uno spazio. lo ritenete opportuno, un commento.

ETICHETTA ISTRUZIONE OPERANDO


; COMMENTO RIGA

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

Per facilitarvi, abbiamo inserito nel dischetto


COME scrivere i NUMERI floppy, che avete ricevuto assieme al program-
matore LX.1170 (vedi rivista N.172/173), un file
Nellesempio sopra riportato noi abbiamo scritto chiamato STANDARD.ASM che vi spiega come
x,10, in altre parole abbiamo utilizzato un numero impostare il programma, dove scrivere le varie i-
decimale. struzioni, come definire lo spazio di memoria ed i
Tuttavia pu risultare pi vantaggioso in alcune i- registri, dove posizionare le subroutine, come ini-
struzioni scrivere i numeri in base esadecimale - zializzare lST6, insomma tutti i consigli e le infor-
ottale - binaria. mazioni necessarie per non sbagliare.
Per far capire al computer che tipo di numero a- Come abbiamo gi descritto nel paragrafo Come
vete inserito, dovete scrivere una lettera come qui creare un file sorgente, tutte le volte che dovrete
sotto specificato: scrivere un nuovo programma copiate il file STAN-
DARD.ASM con il nome del programma che vole-
o oppure O se il numero ottale te scrivere e tutto risulter pi facile.
h oppure H se il numero esadecimale
b oppure B se il numero binario La MEMORIA dellST6

Ad esempio: Allinterno dei microprocessori tipo ST62E10 -


ST62T10 - ST62E15 - ST62T15 risultano disponi-
bili per il programma 2K di memoria ROM, men-
10o = numero ottale
tre nei microprocessori ST62E20 - ST62T20 -
01Ah = numero esadecimale
ST62E25 - ST62T25 sono disponibili 4K di me-
00100101b = numero binario
moria ROM.
Allinterno di ciascun microprocessore sono pre-
Se dopo il numero non mettete nessuna lettera, il senti anche 64 byte di memoria RAM che servo-
computer considerer questo numero decimale. no per i registri e le variabili.
Quando scrivete un numero esadecimale, dovete La memoria ROM mantiene tutte le informazioni,
sempre mettere davanti ad ogni numero uno 0 (ze- cio il programma, inserite durante la programma-
ro), quindi 01A - 0ED - 0AC ecc., ed alla fine de- zione del microprocessore anche in assenza di a-
ve seguire la lettera H, per indicare che il numero limentazione.
esadecimale, quindi i numeri sopra riportati van- La memoria RAM viene usata per le variabili, cio
no scritti 01AH - 0EDH - 0ACH. per i dati che devono essere di volta in volta letti,
scritti e modificati, e quindi pu essere aggiorna-
I numeri decimali ta dallo stesso microprocessore durante il funzio-
iniziano da 0 e terminano a 255 namento del programma.
La memoria (sia ROM sia RAM) pu essere con-
siderata come un insieme di piccole celle ed allin-
terno di ognuna pu essere inserito un solo dato. Vcc GND Vpp

Per portarvi un esempio pratico, potete paragona- 1 20 6

re queste celle a quelle presenti in un favo per a-


pi. Quando le api hanno riempito una cella, pas- ALIMENTAZIONE Vpp MEMORY

sano a riempire la seconda, poi la terza ecc. fino a


riempire tutto il favo. WATCH
PORTA A
DOG
In un microprocessore da 2K ci sono esattamente
1.828 celle in grado di contenere un programma 5
composto da circa 900 - 990 righe di programma. NMI NMI CPU PORTA B
In un microprocessore da 4K ci sono esattamente
3.872 celle in grado di contenere un programma RESET
7
RESET
composto da circa 1.800 - 2.000 righe di pro-
gramma. OSC. INP
3
OXILL. A/D CONVERTER TIMER
OSC. OUT
4

2
DEFINIZIONE delle VARIABILI TIMER

Innanzitutto la variabile un numero, decimale -


ottale - binario oppure esadecimale, che il mi-
Vcc
croprocessore pu modificare tramite una partico- 1 20 GND

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

per i secondi, che tramite opportune e precise i-


struzioni, si possono incrementare per ottenere le
seguenti funzioni.
La prima variabile dei secondi viene aumentata
dal programma di 1 per ogni secondo trascorso. Fig.8 Nei microprocessori ST6 tipo E10-T10
Raggiunto il numero 60, il programma aumenta di ed E20-T20 sono disponibili due sole por-
1 la seconda variabile dei minuti e porta a 00 la te, la A e la B. La porta A siglata A0-A1-
prima variabile dei secondi. A2-A3 mentre la porta B siglata B0-B1-B2-
B3-B4-B5-B6-B7. Tutti questi piedini pos-
Quando la variabile dei minuti raggiunge il numero
sono essere utilizzati sia come Entrate sia
60, il programma aumenta di 1 la terza variabile
come Uscite. Nei prossimi numeri vi spie-
delle ore e porta a 00 le variabili dei minuti e dei
gheremo come predisporli.
secondi.
Quando la variabile delle ore raggiunge il nume-
ro 24, il programma porta a 00 le tre variabili ore -
minuti - secondi.
Questo numero di riferimento si chiama indirizzo
Quando inserite una variabile dovete ricordare che e poich ogni variabile occupa una sola cella di
se dopo il numero non mettete nessuna lettera, il memoria, queste hanno un numero progressivo.
computer lo considera un numero decimale. Se usate i numeri in base dieci, la prima cella por-
Per informare il computer che avete inserito un nu- ta il numero 132 e lultima il numero 191.
mero con base diversa da 10, seguite le istruzioni Se usate i numeri in base sedici, la prima cella por-
spiegate nel paragrafo Come scrivere i numeri. ta il numero 084H e lultima il numero 0BFH.

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

Potete definire queste variabili anche con un nu-


ALIMENTAZIONE Vpp MEMORY mero esadecimale, senza che ci modifichi il fun-
zionamento dellorologio:
WATCH A
PORTA
DOG
secondi .def 084H
5
minuti .def 085H
NMI NMI CPU PORTA B
ore .def 086H

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

Il SET di ISTRUZIONI I tempi per eseguire unistruzione si calcolano a ci-


cli macchina e vanno da un minimo di 2 cicli ad
Le istruzioni del linguaggio assembler usate dal un massimo di 5 cicli macchina.
microprocessore ST6 sono molto semplici e pos- Tutte le istruzioni di Caricamenti Dati - Funzioni
sono essere cos suddivise: Aritmetiche - Salti Incondizionati - Settaggio Bit
impiegano 4 cicli macchina.
1 CARICAMENTO DATI Tutte le istruzioni Controllo CPU e le istruzioni
JRC - JRNC - JRZ - JRNZ dei Salti Condiziona-
LD - spostamento di dati tra due registri ti impiegano 2 cicli macchina.
LDI - caricamento di un numero in un registro Tutte le istruzioni JRR - JRS dei Salti Condizio-
nati impiegano 5 cicli macchina. dopo questa istruzione nellaccumulatore a pre-
Il tempo di un ciclo macchina dipende dalla fre- sente il numero 37, perch 22 + 15 = 37.
quenza del quarzo utilizzato per il clock.
Per calcolare il tempo di unistruzione potete usa-
re questa formula: ADDI

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:

Se usate un quarzo da 8 MHz, la stessa istruzio- addi a,30


ne sar eseguita in un tempo di:
Dopo questa istruzione nellaccumulatore a pre-
(13 : 8) x 4 = 6,5 microsecondi sente il numero 30 + 37 = 67.

Per il clock potete usare dei quarzi di qualsiasi fre-


quenza, da 2,45 - 3,4 - 4,7 - 6,5 - 7 - 8 MHz. Nor- AND
malmente si utilizza la frequenza massima di 8 MHz
per rendere pi veloce lesecuzione di un pro- Questa istruzione permette di eseguire unopera-
gramma. zione AND tra il numero contenuto nellaccumula-
Non usate mai quarzi superiori agli 8 MHz, per- tore e quello nella variabile.
ch questa la frequenza massima accettata Per farvi comprendere meglio come viene effet-
dalloscillatore interno del microprocessore ST6. tuata questa operazione, riportiamo la tavola del-
la verit con i numeri binari.
COME usare le varie ISTRUZIONI
Tavola della verit
Le istruzioni vanno scritte secondo precisi criteri,
ed quindi abbastanza facile che un principiante accumulatore 0011
incontri qualche difficolt nellimpostarle. variabile 0101
Ripetiamo nuovamente che se non mettete il no-
me di unetichetta dovete sempre lasciare uno risultato 0001
spazio prima di scrivere listruzione o, ancora me-
glio, premete il tasto TAB, cos da avere tutte le i- Secondo questa tavola, quando presente un va-
struzioni incolonnate. lore logico 1 sia nellaccumulatore sia nella va-
Per ognuna delle istruzioni utilizzate dal linguaggio riabile, si ha come risultato 1; in ogni altra condi-
di programmazione Assembler, diamo di seguito u- zione si ha sempre come risultato 0.
na semplice spiegazione correlata da un esempio. Listruzione va scritta cos:

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 :

Per questa istruzione abbiamo usato come varia- 00011110


bile il nome secondi, ma potevamo utilizzare un 00011001
nome diverso, a patto che fosse stato sempre di 8
caratteri, come ad esempio gradi - metri - litri ecc. 00011000 risultato
Se nellaccumulatore presente il numero 22 e
nella variabile secondi presente il numero 15, che corrisponde al numero decimale 24.
ANDI Ad esempio potrebbe verificarsi di dover ripetere
pi volte la seguente funzione di ritardo.
A differenza della precedente, questa istruzione e-
segue unoperazione AND tra il numero contenuto ritardo ldi x,103 ; assegna 103 a x
ripeti dec x ; sottrai 1 a x
nellaccumulatore ed un numero binario scritto jrnz ripeti ; ripeti se x non a 0
direttamente da voi sulla stessa riga dellistruzione. ret ; ritorna al programma
Quando nellaccumulatore e nel numero inserito
presente un valore logico 1 si ha come risultato
Tutte le volte che vorrete ripetere queste istruzioni
1; in ogni altra condizione si ha sempre come ri-
in una parte del programma, baster scrivere:
sultato 0.
Ammesso di avere nellaccumulatore il numero bi-
call ritardo ; chiama subroutine ritardo
nario 00011110 e di voler eseguire loperazione
AND con il numero binario 11111001, listruzione
va scritta: Come potete notare con due sole parole, call ri-
tardo, farete ripetere esattamente le stesse istru-
andi a,11111001B zioni contrassegnate dalletichetta ritardo, senza
bisogno di riscriverle.
In questo modo non solo eviterete di occupare al-
Come avrete notato, alla fine di questo numero ab- tra memoria nel microprocessore, ma soprattutto
biamo messo una B affinch il computer possa ri- non correrete il rischio di compiere qualche errore
conoscere che il numero binario. nel riscrivere le istruzioni.
Il risultato di questa operazione : Eseguita la subroutine ritardo, il microprocessore
proseguir con le istruzioni successive alla riga
00011110 call ritardo, perch alla fine della subroutine
11111001 presente listruzione ret, che significa: ritorna al
00011000 risultato programma nella riga successiva alla quale era
scritto call ritardo.
Le due funzioni AND e ANDI possono essere uti-
lizzate per modificare il livello logico sugli otto pie-
dini di uscita di una porta del microprocessore. CLR
Sapendo su quali di questi piedini presente un li-
vello logico 0 e su quali presente un livello lo- Questa istruzione serve per portare a 0 una varia-
gico 1, possibile accendere ad esempio dei dio- bile.
di led. Per spiegarci meglio riconsideriamo il programma
Nel nostro esempio, poich il risultato 00011000, per realizzare un orologio.
saranno spenti i primi tre diodi led, accesi i suc- Per ottenere la funzione orologio necessario che
cessivi due e spenti gli ultimi tre. il numero delle ore riparta da zero quando si rag-
Per portare il risultato dellistruzione ANDI sulla giunto il numero 24; allo stesso modo quando i mi-
porta di uscita B, bisogna scrivere questa istru- nuti ed i secondi hanno raggiunto il numero 60,
zione: devono ripartire a contare da zero.
Quando volete che le variabili chiamate ore - mi-
ld port_b,a nuti - secondi diventino 0 dovete scrivere:

che in pratica significa: carica (ld) sulla porta B il clr ore


risultato contenuto nellaccumulatore a. clr minuti
clr secondi

La funzione CLR pu essere usata anche per az-


CALL zerare il registro accumulatore scrivendo sempli-
cemente:
Questa istruzione viene adoperata quando si vuo-
le far eseguire al microprocessore una subrouti- clr a
ne, cio un parte di programma identificata con
unetichetta. In questo modo cancellerete eventuali numeri ri-
Le subroutine sono utili per eseguire pi volte lo masti nellaccumulatore da unoperazione prece-
stesso set di istruzioni. dente.
clr minuti ; azzera i minuti
COM inc ore ; incrementa di 1 le ore
ldi a,24 ; carica in a il numero 24
Questa funzione serve per complementare il nu- cp a,ore ; confronta a con variabile ore
mero binario presente nellaccumulatore. jrnz fine ; salto condizionato a fine
clr ore ; azzera le ore
In altre parole, questa istruzione inverte ogni sin- fine ; fine dellincremento
golo bit, quindi dove c 0 si ha 1 e dove c 1 si
ha 0.
Quando il numero dei secondi diverso da 60,
Se nellaccumulatore presente il numero bina-
numero caricato nellaccumulatore, si fa fare al
rio 00011000 scrivendo:
programma un salto condizionato, cio si salta
alla riga di programma con letichetta chiamata fi-
com a
ne.
Quando il numero dei secondi uguale a 60 que-
il contenuto dellaccumulatore diventer 11100111. sto salto non avviene, quindi il programma passa
alla riga successiva aumentando di 1 la variabile
dei minuti ed azzerando quella dei secondi.
CP Fino a quando la variabile dei minuti non avr rag-
giunto il numero 60, si fa fare un salto condizio-
Questa istruzione confronta il numero contenuto nato sulletichetta fine.
nellaccumulatore con quello presente nella va- Quando il numero dei minuti uguale a 60 que-
riabile. sto salto non avviene, quindi il programma passa
Da questo confronto il microprocessore ricava que- alla riga successiva aumentando di 1 la variabile
ste tre sole condizioni: delle ore ed azzerando quella dei minuti.
Il programma confronta il numero presente in que-
- il numero dellaccumulatore minore rispetto a sta variabile con quello presente nellaccumula-
quello della variabile. tore, che 24, e quando nella variabile presente
il numero 24, il programma passa alla riga suc-
- il numero dellaccumulatore uguale a quello cessiva, vedi clr ore, per azzerare la variabile o-
della variabile. re.
Se il microprocessore ripete questo programma o-
- il numero dellaccumulatore maggiore rispet- gni secondo, compiendo nel frattempo altre istru-
to a quello della variabile. zioni di programma, avrete ottenuto la funzione o-
rologio.
Questo confronto utile quando occorre far com-
piere dei salti condizionati al programma, per e-
seguire le operazioni che desiderate.
CPI
Prendiamo ancora una volta lesempio dellorolo-
gio. Questa istruzione si differenzia dalla precedente
Quando il numero nella variabile secondi giunge perch confronta il numero contenuto nellaccu-
a 60, bisogna ripartire da 0 ed aumentare di 1 il mulatore con un numero direttamente scritto da
numero nella variabile minuti. voi.
Quando il numero nella variabile minuti giunge a Da questo confronto il microprocessore ricava
60 , bisogna ripartire da 0 ed aumentare di 1 il nu- sempre queste tre sole condizioni:
mero nella variabile ore.
Quando il numero nella variabile ore giunge a 24, - il numero dellaccumulatore minore rispetto a
bisogna riportare a 0 le variabili ore - minuti - se- quello della variabile.
condi.
Il programma per eseguire queste funzioni va scrit- - il numero dellaccumulatore uguale a quello
to nel seguente modo: della variabile.
inc secondi ; incrementa di 1 i secondi
ldi a,60 ; carica in a il numero 60 - il numero dellaccumulatore maggiore rispet-
cp a,secondi ; confronta a con variabile sec.
jrnz fine ; salto condizionato a fine
to a quello della variabile.
clr secondi ; azzera i secondi
inc minuti ; incrementa di 1 i minuti
ldi a,60 ; carica in a il numero 60
Questo confronto utile quando occorre far com-
cp a,minuti ; confronta a con variabile min. piere dei salti condizionati al programma, per e-
jrnz fine ; salto condizionato a fine seguire le operazioni che desiderate.
Ad esempio, se volete realizzare un termostato quindi il numero presente nella variabile secondi
che disecciti un rel quando la temperatura ha viene aumentato di 1.
raggiunto i 20 gradi, un modo per scrivere le i-
struzioni potrebbe risultare il seguente:
NOTA importante per
ld a,gradi ; carica in a i gradi
le istruzioni DEC e INC
cpi a,20 ; compara i gradi con numero 20
jrc funz ; salta a funz se minore di 20 Quando utilizzate queste istruzioni dovete tenere
res 7,port_b ; diseccita il rel presente quanto segue:
funz ; non diseccitare il rel
- un ulteriore decremento (istruzione DEC) quan-
do la variabile arrivata al numero decimale 0
La temperatura prelevata da una sonda viene porta il valore della variabile a 255.
messa nellaccumulatore per essere poi compa- - un ulteriore incremento (istruzione INC) quando
rata con il numero 20. la variabile arrivata al numero decimale 255 por-
Se la temperatura minore di 20, il programma ta il valore della variabile a 0.
salta alletichetta siglata funz e quindi il rel non
si diseccita.
Quando la temperatura ha raggiunto i 20 gradi, il JP
microprocessore passa ad eseguire listruzione
presente nella quarta riga, cio si resetta, portan- Questa istruzione consente di effettuare un salto
do a livello logico 0 il piedino 7 della porta B. In incondizionato in un punto qualsiasi del pro-
questo modo il rel collegato su questo piedino si gramma marcato da unetichetta.
diseccita. Ad esempio, se dovete far lampeggiare un diodo
led con una cadenza di 1 secondo, dovete scri-
vere:
DEC
inizio ; etichetta
Questa istruzione serve per decrementare di 1 il com a ; se acceso spegni o viceversa
numero presente nella variabile specificata di se- ld port_b,a ; sposta su b quello che c in a
guito. call ritardo ; chiama funzione ritardo
jp inizio ; ripeti funzione dallinizio
Ad esempio, se volete che trascorsi 40 minuti si
disecciti un rel, dovete scrivere il programma nel
seguente modo: Vi ricordiamo che ritardo unetichetta (vedi i-
struzione CALL).
ldi tempo,40 ; carica in tempo il numero 40
..... ....... ;
dec tempo ; decrementa la variabile tempo JRC
ld a,tempo ; carica in a la variabile tempo
cpi a,0 ; confronta a con il numero 0 Questa istruzione viene sempre inserita nei pro-
jrnz funz ; se diverso da 0 salta in funz
res 7,port_b ; diseccita rel grammi dopo unistruzione CP o CPI per effettua-
funz ; non diseccitare il rel re un salto condizionato.
Se dalla comparazione il microprocessore rileva
che il numero presente nellaccumulatore mi-
Dopo avere caricato il numero 40 nella variabile nore di quello presente nella variabile, viene ef-
tempo, dovete completare il programma (spazio fettuato un salto sulletichetta.
indicato con puntini) per far eseguire al program- Nella funzione CPI, in cui vi abbiamo presentato un
ma un decremento ogni 60 secondi. esempio di programma per termostato, avete tro-
vato utilizzata listruzione JRC:

INC ld a,gradi ; carica nellaccumul. i gradi


cpi a,20 ; compara i gradi con numero 20
Questa istruzione serve per aumentare di 1 il nu- jrc funz ; salta a funz se minore di 20
mero presente nella variabile specificata di segui- res 7,port_b ; diseccita il rel
funz ; non diseccitare il rel
to.
Ritornando allesempio scritto per listruzione CP,
la prima riga conteneva listruzione: In questo caso il salto viene effettuato sulleti-
chetta siglata funz fino a quando la temperatura
inc secondi ; incrementa la variabile secondi non raggiunge i 20 gradi.
Nota importante: Il salto jrc riesce a raggiungere Nellistruzione DEC avevamo riportato un esem-
unetichetta solo se questa si trova ad una distanza pio per far diseccitare un rel dopo 40 minuti.
pari a circa 8 righe di programma.
Se eseguite un salto jrc su unetichetta che dista ldi tempo, 40 ; carica in tempo il numero 40
...... .......
pi di 8 righe, quando assemblerete il program- dec tempo ; decrementa la variabile tempo
ma, vi verr segnalato errore con la scritta 5-bit ld a, tempo ; carica in a la variabile tempo
displacement overflow. cpi a, 0 ; confronta a con il numero 0
jrnz funz ; se diverso da 0 salta in funz
res 7, port_b ; diseccita rel
funz ; non diseccitare il rel

JRNC Poich nella variabile abbiamo messo il numero


40 ed il microprocessore decrementa questo nu-
Questa istruzione viene sempre inserita dopo uni- mero di 1, avremo via via 39 - 38 - 37 ecc.
struzione CP o CPI per effettuare un salto condi- Dopo ogni decremento il numero presente nella va-
zionato. riabile viene comparato con il numero 0 e fino a
Se dalla comparazione il microprocessore rileva quando il numero nella variabile diverso da 0, vie-
che il numero presente nellaccumulatore mag- ne effettuato il salto nella riga funz ed il program-
giore oppure uguale a quello presente nella va- ma non esegue la successiva istruzione che di-
riabile, viene effettuato un salto sulletichetta. seccita il rel.
Nella funzione CPI il rel si diseccitava quando la Solo quando il numero presente nella variabile
temperatura superava i 20 gradi; se ora volete che uguale a 0, il microprocessore passa ad eseguire
il rel si disecciti quando la temperatura scende listruzione successiva e diseccita il rel.
sotto i 20 gradi, dovete modificare nella terza riga
listruzione jrc funz con la scritta jrnc funz, come Nota importante: Il salto jrnz riesce a raggiunge-
qui sotto riportato: re unetichetta solo se questa si trova ad una di-
stanza pari a circa 8 righe di programma.
ld a,gradi ; carica nellaccumul. i gradi Se eseguite un salto jrnz su unetichetta che di-
cpi a,20 ; compara i gradi con numero 20 sta pi di 8 righe, quando assemblerete il pro-
jrnc funz ; salta a funz se maggiore di 20 gramma, vi verr segnalato errore con la scritta
res 7,port_b ; diseccita il rel
funz ; non diseccitare il rel 5-bit displacement overflow.

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.

ldi tempo,0 ; carica in tempo il numero 0


..... .....
JRNZ inc tempo ; incrementa la variabile tempo
ld a,tempo ; carica in a la variabile tempo
cpi a,40 ; confronta a con il numero 40
Questa istruzione viene sempre inserita nel pro- jrz funz ; se uguale salta in funz
gramma dopo unistruzione CP o CPI per effettuare jp fine ; se non uguale salta in fine
funz ; prosegui alla riga dopo
un salto condizionato. res 7,port_b ; diseccita il rel
Se dalla comparazione il microprocessore rileva fine ; non diseccita il rel
che il numero presente nellaccumulatore di-
verso da quello presente nella variabile, viene ef- In questo caso abbiamo messo nella variabile il
fettuato un salto sulletichetta. numero 0, poi avendo dato listruzione per incre-
mentare questo numero di 1, avremo via via 0 - 1
- 2 - 3 ecc.
Tutte le volte che viene effettuato un incremento,
il numero presente nella variabile tempo viene
comparato con il numero 40 e fino a quando que-
sti due numeri sono diversi viene effettuato il sal- ST6 0
1
to sulletichetta fine ed il rel non si diseccita.
2
Solo quando il numero presente nella variabile u-
3
guale a 40, il microprocessore compie un salto PORTE
A-B-C 4
sulletichetta funz ed esegue listruzione successi-
va diseccitando il rel. 5
6

Nota importante: Il salto jrz riesce a raggiungere 7

unetichetta solo se questa si trova ad una distanza


pari a circa 8 righe di programma.
Se effettuate un salto jrz su unetichetta che dista
pi di 8 righe, quando assemblerete il program-
ma, vi verr segnalato errore con la scritta 5-bit
displacement overflow. Fig.10 Le istruzioni JRR e JRS possono es-
sere utili per controllare se le porte A-B-C
utilizzate come ingressi sono a livello lo-
JRR gico 1 oppure a livello logico 0. Usando
listruzione JRR avviene un salto se sul-
Questa istruzione serve per controllare se una ci- la porta dingresso presente un livello lo-
fra di un numero binario si trova a livello logico gico 0, mentre usando listruzione JRS il
0 e quando si rileva questa condizione viene effet- salto avviene se sulla porta dingresso
tuato un salto. presente un livello logico 1.
Listruzione JRR pu risultare utile per controllare
se il piedino dingresso di una qualsiasi porta A-
B-C si trova a livello logico 0 o a livello logico 1
(vedi figg.10-11).
Come sapete ogni porta da 8 bit numerata 0A -
1A- 2A - 3A ecc. 0B - 1B - 2B - 3B ecc.
Per controllare quando linterruttore posto sulla
porta 6B chiuso (vedi fig.12), e fare in modo che ST6 0

quando si riscontra questa condizione si ecciti un 1

rel di allarme posto sulla porta duscita 2A, do- 2

vete scrivere listruzione in questo modo: PORTE 3


A-B-C 4

jrr 6,port_b,eccita ; controlla porta 6B 5


jp fine ; va a fine se 6B a 1 6
eccita ; etichetta per proseguire 7
set 2,port_a ; eccita il rel su 2A
fine ; non eccitare il rel

In questa istruzione necessario fare un doppio


salto: il primo serve ad eccitare il rel se il linter-
ruttore applicato sulla porta 6B chiuso, il se-
condo (jp fine) serve a non eccitare il rel nel ca- Fig.11 Dopo che vi avremo insegnato come
so in cui linterruttore non risulti chiuso. predisporre una porta come Entrata, potre-
Se non avessimo inserito listruzione jp fine, il mi- te collegarle degli interruttori o dei pulsan-
croprocessore avrebbe proseguito con le istruzio- ti rivolti verso massa (vedi fig.10) o ver-
ni successive ed avrebbe ugualmente eccitato il so il positivo (vedi fig.11) oppure luscita
rel anche se linterruttore non fosse stato chiuso. di una porta Nand - Nor - Or ecc. per con-
trollare il loro livello logico. Nota: Sui vari
Nota importante: Il salto jrr riesce a raggiungere ingresso dovrete collegare delle resistenze
unetichetta solo se questa si trova ad una distanza con valori compresi tra 3.300 - 100.000 ohm.
pari a circa 60 righe di programma.
JRS LD

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.

otterrete un ritardo totale di 9,75 microsecondi. RET

Questa istruzione viene posta alla fine di una su-


RES broutine per comunicare al microprocessore di ri-
tornare nel punto del programma in cui questa su-
Questa istruzione serve per forzare ad un livello broutine stata chiamata.
logico 0 il bit di una variabile. Nellistruzione CALL abbiamo riportato una su-
Nella funzione CPI abbiamo riportato un esempio broutine per ottenere un ritardo, cio:
per diseccitare un rel quando la temperatura su-
ritardo ldi x,103 ; assegna 103 a x
pera i 20 gradi. Questa operazione compiuta dal- ripeti dec x ; sottrai 1 a x
la istruzione res a cui bisogna specificare di se- jrnz ripeti ; ripeti se x non a 0
guito quale porta deve resettare (nel nostro e- ret ; ritorna al programma
sempio la 7,port_b).
Volendo ottenere un ritardo dovete richiamare la
ld a,gradi ; carica nellaccumul. i gradi subroutine chiamata ritardo scrivendo:
cpi a,20 ; compara i gradi con numero 20
jrnc funz ; salta a funz se maggiore di 20 call ritardo ; chiama subroutine ritardo
res 7,port_b ; diseccita il rel
funz ; non diseccitare il rel Alla fine della subroutine abbiamo posto listru-
zione RET per far tornare il programma alla riga
Ammettendo che tutte le uscite della porta B sia- posta di seguito allistruzione call ritardo.
no a livello logico 1, cio: Vi ricordiamo che al termine della subroutine oc-
corre sempre mettere listruzione RET, diversa-
11111111 mente il programma non ritorner nel punto in cui
abbiamo chiamato la subroutine, ma proseguir
Il programma modificher il solo bit 7 della porta con le righe successive, senza segnalare nessun
B, cio il primo bit a sinistra, quindi vi ritroverete errore, ma causando anomalie nel funzionamento
con: del programma.

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

nellaccumulatore troverete questo diverso nume-


ro binario:
Fig.14 Se scrivete il programma con leti-
chetta nmi_int riportato nel paragrafo RE- 00101110
TI (vedi sopra), quando il piedino 5 del-
lNMI viene posto a livello logico 0, anche che corrisponde al numero decimale 46 (equiva-
sulluscita 5B ritroverete un livello logico 0 lente a 23 x 2).
ed il rel si disecciter. Il numero massimo che potete moltiplicare per 2
127.
ldi a, 183 ; numero nellaccumulatore
STOP ldi pippo, 53 ; numero inserito nella variabile
sub a, pippo ; sottrai da a il valore di pippo
Questa istruzione serve per interrompere lesecu-
zione di un programma e per spegnere lo stadio o- Eseguita questa operazione nellaccumulatore a-
scillatore del clock. vrete 183-53 = 130.
E unistruzione che si usa raramente.
SUBI
WAIT
Questa istruzione viene utilizzata per sottrarre dal
Questa istruzione serve per interrompere lesecu-
numero presente nellaccumulatore un numero da
zione di un programma, con la sola differenza ri-
voi inserito nella riga di questa istruzione.
spetto alla precedente, che non si spegne lo sta-
Se nellaccumulatore presente il numero 183 e
dio oscillatore del clock.
gli volete sottrarre il numero 53, dovrete scrivere
listruzione in questo modo:
SUB
ldi a,183 ; numero nellaccumulatore
Questa istruzione viene utilizzata per sottrarre dal subi a,53 ; sottrai da a il numero 53
numero presente nellaccumulatore il numero con-
tenuto in una variabile. Il risultato presente nellaccumulatore sar dopo
Se nellaccumulatore presente il numero 183 e questa istruzione 130.
volete sottrargli il numero decimale 53, dovrete in- Come per la precedente, anche con questa istru-
serire in una variabile, chiamata ad esempio pip- zione non potete sottrarre un numero maggiore a
po, il numero 53 scrivendo questa istruzione: quello presente nellaccumulatore.
CONTINUA nel PROSSIMO NUMERO
Sebbene con gli articoli e gli esempi pubblicati sul- mente incolonnate ed in caso di necessit potrete
le riviste N.172/173 e 174 siate gi riusciti a pro- controllarle meglio.
grammare e a cancellare senza difficolt il mi- Non obbligatorio inserire lultimo blocco, quello del
croprocessore ST6, questo non ancora suffi- commento, ma se lo aggiungete dovete ricordarvi
ciente per passare alla fase pi propriamente pra- di farlo precedere sempre da un punto e virgola.
tica, iniziare cio a scrivere dei programmi, perch Nei programmi che troverete di seguito ogni bloc-
occorre prima conoscere come vanno corretta- co stato evidenziato da un rettangolo colorato
mente utilizzati: in azzurro.
Cos se ad esempio in una riga di programma man-
- la funzione watchdog ca letichetta, troverete al suo posto un rettango-
- i piedini delle porte come ingressi lo colorato senza alcuna scritta al suo interno.
- i piedini delle porte come uscite Questo per ricordarvi che per avere tutte le istru-
- la funzione interrupt zioni incolonnate dovete lasciare un carattere di ta-
- la funzione A/D converter bulazione prima di scrivere il secondo blocco, quel-
- la funzione timer lo cio dellistruzione.

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

ETICHETTA ISTRUZIONE OPERANDO


; COMMENTO RIGA

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

TABELLA N.2 per ST62/E15 - ST62/T15 - ST62/E25 - 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 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

Allinterno di tutti i microprocessori ST6 sono pre-


senti due oppure tre porte siglate A-B-C i cui ter-
minali, contraddistinti dalle sigle A0 - A1 - A2 ecc.
e B0 - B1 - B2 ecc., fanno capo ai piedini del mi-
croprocessore (vedi figg.2-3). IN/OUT
Nelle Tabelle N.1 e N.2 riportiamo i numeri dei pie-
dini a cui sono collegati i terminali delle porte pre-
E
senti nei diversi integrati ST6. B
Conoscere a quale piedino risultano collegati i ter-
C
minali di queste porte molto importante, perch
C
nella riga del programma non viene mai indicato il B
numero del piedino, ma la sola sigla della porta,
E
cio A0 - A2 - A3 o B5 - B6 - B7 ecc.

COME SETTARE LE PORTE

Per settare il piedino prescelto come ingresso


senza pull-up - ingresso con interrupt - ingres-
so analogico - ingresso pull-up oppure come u- Fig.4 Inserendo nei tre registri PDIR - POPT
scita open collector - uscita push-pull, dobbia- - PORT degli 0 o degli 1 (vedi Tabella N.3),
mo inserire nei registri pdir - popt - port degli 0 o noi possiamo predisporre il piedino di una
degli 1, disponendoli come abbiamo riportato nella qualsiasi Porta a funzionare come Ingres-
Tabella N.3. so oppure come Uscita.

Esempio: Ammesso di voler predisporre tutti i pie-


dini della porta A come ingressi tipo pull-up, do- Ricordatevi che dopo il nome dei tre registri, pdir
vremmo necessariamente scrivere queste tre righe: - popt - port, bisogna sempre indicare il tipo di por-
ta che si vuole utilizzare scrivendo:
LDI pdir_a,00000000B
LDI popt_a,00000000B _a se la porta la A
LDI port_a,00000000B _b se la porta la B
_c se la porta la C
Se volessimo invece predisporre tutti i piedini del-
la porta A come uscita in push-pull dovremmo Non scrivete -a, in altre parole non utilizzate il se-
necessariamente scrivere queste tre righe. gno della sottrazione, ma sempre il segno del sot-
tolineato, cio _a.
LDI pdir_a,11111111B La lettera B, posta dopo lultima cifra di destra di
LDI popt_a,11111111B ogni riga, serve ad indicare che si tratta di un nu-
LDI port_a,00000000B mero binario.

TABELLA N.3 per predisporre gli ingressi e le uscite


Registri

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:

Per concludere facciamo presente che lingresso LDI pdir_a,10000000B


pi comunemente utilizzato quello con pull-up
che si ottiene ponendo a 0-0-0 i tre registri pdir,
mentre se volessimo caricare un 1 nel registro
popt e port.
pdir di A4 dovremmo scrivere:
E inoltre sempre consigliabile settare come in-
gressi tutti i piedini che non vengono usati, perch
in questo modo non si corre il rischio di provocare LDI pdir_a,00010000B
involontariamente dei cortocircuiti che potrebbe-
ro mettere fuori uso il microprocessore. ed ancora se volessimo caricare un 1 nel registro
Infatti se un piedino che non viene utilizzato viene pdir di A0 dovremmo scrivere:
settato come uscita e poi viene collegato invo-
lontariamente a massa, anche tramite una resi- LDI pdir_a,00000001B
stenza di basso valore, pu capitare che per un er-
rore nel programma questo piedino cambi il suo
Per completare il settaggio di ogni porta si devo-
stato logico da 0 a 1, ed in questo caso in uscita
no aggiungere le altre due righe di programma, do-
si potrebbe ritrovare una tensione positiva di 5 volt
ve compaiono i registri popt e port, mettendo de-
che potrebbe provocare dei cortocircuiti.
gli 0 o degli 1 come riportato nella Tabella N.3.
Per questo motivo, come noterete dagli esempi,
tutti i piedini delle porte A - B - C che non ven-
gono utilizzati li abbiamo settati come ingressi in Ammesso che si voglia settare il piedino 5 della
pull-up. porta B come uscita in push-pull si dovr scrive-
re:

Posizione dei PIEDINI LDI pdir_b,00100000B


nel NUMERO BINARIO LDI popt_b,00100000B
LDI port_b,00000000B
Per poter predisporre i piedini delle porte come in-
gressi o come uscite si utilizza un numero bina- Infatti la sequenza per settare un piedino in usci-
rio composto da otto cifre. ta push-pull 1-1-0, e, come abbiamo riportato
Molti tra voi si staranno chiedendo come si fa a ca- nella Tabella N.4, il piedino B5 la terza cifra a
pire qual il piedino A0 - A1 - A2 ecc. oppure B0 partire da sinistra.
- B1 - B2 ecc., in quanto anche se abbiamo indi- Come abbiamo gi avuto modo di dire, tutti i pie-
cato il tipo di porta con _a, con _b o con _c, non dini delle porte A - B - C che non vengono utiliz-
abbiamo mai precisato il suo terminale 0-1-2-3-4- zati devono comunque essere settati come in-
5-6-7. gressi in pull-up (0 - 0 - 0).
Inoltre non abbiamo ancora specificato come ci si
deve comportare con i microprocessori della Ta- Nei microprocessori che hanno solo quattro piedi-
bella N.1, dove la porta A ha solo quattro piedini ni per la porta A (A0 - A1 - A2 - A3), si devono
siglati A0 - A1 - A2 - A3 o con quelli della Tabel- comunque riportare sempre tutte le otto cifre del
la N.2, dove la porta C ha invece quattro piedini numero binario.
siglati C4 - C5 - C6 - C7. Quindi se volessimo predisporre come uscite pu-
sh-pull i piedini della porta A di un ST62E10, do- legenda:
vremmo scrivere:
LDI = significa carica sul registro.

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

Esempio N.1 = Disponendo di un ST6 del tipo ri- LDI pdir_b,00000000B


portato nella Tabella N.1, ad esempio un ST62E10, LDI popt_b,00000000B
vorremmo programmare i piedini A0 - A1 come in- LDI port_b,00000000B
gressi senza pull-up ed i piedini B4 - B5 - B6 -
B7 come uscite in push-pull. LDI pdir_c,00000000B
LDI popt_c,00000000B
Soluzione: Per scrivere queste istruzioni esami- LDI port_c,00000000B
niamo prima di tutto la Tabella N.3, per sapere qual
la cifra, se 0 o 1, che dobbiamo mettere nei tre
registri pdir - popt - port. Come avrete notato, anche sulla porta C abbiamo
Sapendo che per ogni riga che definisce il settag- messo tutti 0 sebbene questa abbia solo quattro
gio dei piedini dobbiamo sempre mettere 8 cifre e piedini siglati C4 - C5 - C6 - C7.
che il piedino 7 definito dalla prima cifra a sini-
stra e lo 0 dallultima cifra a destra, possiamo scri-
vere le nostre istruzioni: Esempio N.3 = Disponendo di un ST6 del tipo ri-
portato nella Tabella N.2 vorremmo programmare
il piedino B2 come ingresso pull-up, il piedino B1
LDI pdir_a,00000000B come ingresso analogico ed il piedino C7 come
LDI popt_a,00000000B uscita push-pull.
LDI port_a,00000011B
Soluzione: Controlliamo innanzitutto nella Tabella
N.3 come vanno settati i tre registri pdir - popt -
LDI pdir_b,11110000B port per avere un ingresso pull-up, un ingresso
LDI popt_b,11110000B analogico ed una uscita push-pull, quindi sa-
LDI port_b,00000000B pendo che per ogni riga di programma dobbiamo
sempre mettere 8 cifre e che il piedino 7 defini-
to dalla prima cifra a sinistra e lo 0 dallultima ci-
fra a destra, scriviamo:
ST6
LDI pdir_a,00000000B
LDI popt_a,00000000B C
B
LDI port_a,00000000B A1 A2
E

LDI pdir_b,00000000B
LDI popt_b,00000010B
LDI port_b,00000010B

LDI pdir_c,10000000B Fig.6 Schema da utilizzare per far eccitare


il rel con il programma dellESEMPIO N.4.
LDI popt_c,10000000B
LDI port_c,00000000B

Come indicato dalla Tabella N.3, nei tre registri re-


lativi alla porta B abbiamo messo 0-0-0 per il pie- ST6
dino B2 e 0-1-1 per il piedino B1, mentre nelle tre
righe relative alla porta C, per il piedino C7 abbia- C
B
mo posto 1-1-0. A1 A2
E

Qualcuno si star gi chiedendo in quale applica-


zione pratica possiamo utilizzare un piedino setta-
to come ingresso. Anche se in seguito troverete
alcuni esempi su questo argomento, possiamo an-
ticiparvi subito che potete usarlo per vedere se Fig.7 Schema da utilizzare per far eccitare
sullingresso entra una tensione positiva oppure il rel con il programma dellESEMPIO N.5.
per stabilire se questa cambia di stato logico da 0
a 1 e viceversa, o ancora per convertire una ten-
sione analogica in una digitale ecc. Dalla Tabella N.3 controlliamo come settare i re-
gistri pdir - popt - porta per far diventare questi
piedini ingressi o uscite, dopodich possiamo
Esempio N.4 = Abbiamo realizzato lo schema di scrivere tutte le righe del programma indicato a fi-
fig.6 da utilizzare per un antifurto, quindi vorremmo ne pagina.
che si eccitasse un rel ogni volta che linterrutto- Nella riga ripeti abbiamo ricaricato il watchdog,
re viene pigiato. poi con listruzione JRS abbiamo detto al pro-
gramma di saltare alletichetta eccita solo quando
Soluzione: La prima operazione da compiere sul piedino A1 riscontra una tensione di 5 volt.
quella di settare il piedino della porta che voglia- Se non riscontra questa condizione, il micropro-
mo utilizzare come ingresso ed il piedino della por- cessore passa ad eseguire la riga JRR e da qui
ta che vogliamo utilizzare come uscita. salta alletichetta spegni, che diseccita il rel se
Come ingresso abbiamo deciso di scegliere il pie- prima risultava eccitato, o lo lascia diseccitato se
dino A1 e come uscita il piedino A2. si trova gi in questa condizione.

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

LDI pdir_a,11111111B LDI pdir_b,00000000B


LDI popt_a,11111111B LDI popt_b,00000000B
LDI port_a,00000000B LDI port_b,00000000B

LDI pdir_b,11111111B LDI pdir_c,11110000B


LDI popt_b,11111111B LDI popt_c,11110000B
LDI port_b,00000000B LDI port_c,00000000B

Se la porta A disponesse di solo 4 piedini (vedi


microprocessori della Tabella N.1) dovremmo scri-
vere 1 solo sui piedini delle porte utilizzate. INTERRUPT

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_a,11110000B ad_int ; etichetta


LDI popt_a,11110000B ..... ; programma da eseguire
LDI port_a,00000000B reti ; fine interrupt

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.

PROGRAMMA per Esempio n.9


LDI pdir_b,00000000B ; abbiamo settato il piedino B2 come ingresso interrupt
LDI popt_b,00000100B ; e tutti gli altri come ingressi pull-up
LDI port_b,00000000B ;
SET 4,ior ; serve per abilitare linterrupt
SET 5,ior ; serve per sentire il fronte di salita
BC_int ; etichetta dinizio interrupt
..... ; istruzioni da eseguire con linterrupt
RETI ; istruzione fine interrupt

PROGRAMMA per Esempio n.10


LDI pdir_b,00000000B ; abbiamo settato il piedino B7 come ingresso interrupt
LDI popt_b,10000000B ; e tutti gli altri come ingressi pull-up
LDI port_b,00000000B ;
SET 4,ior ; serve per abilitare linterrupt
RES 5,ior ; serve per sentire il fronte di discesa
BC_int ; etichetta dinizio dellinterrupt
.... ; istruzioni da eseguire con linterrupt
RETI ; istruzione fine interrupt
Esempio N.10 = Supponiamo di voler settare il tutti gli ST6) la tensione passa dal livello logico 1
piedino B7 come ingresso con interrupt che in- al livello logico 0 (fronte di discesa). Poich que-
tervenga sul fronte di discesa e tutti gli altri pie- sto piedino sempre abilitato, non necessario
dini della porta B come ingresso in pull-up. Come scrivere nel programma listruzione:
prima operazione controlliamo nella Tabella N.3
come vanno settati i registri pdir - popt - port per SET 4,ior
lingresso con interrupt, dopodich possiamo scri-
vere il programma indicato Esempio n.10. Esempio N.12 = Vogliamo che pigiando il pulsan-
te P1 (vedi fig.8) si accendano i diodi led applica-
Etichetta A_int ti sui piedini A0 - A1 - A2 - A3.

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.

PROGRAMMA per Esempio n.11


LDI pdir_a,00000000B ; abbiamo settato il piedino A5 come ingresso interrupt
LDI popt_a,00100000B ; e tutti gli altri come ingressi pull-up
LDI port_a,00000000B ;
SET 4,ior ; serve per abilitare linterrupt
A_int ; etichetta dinizio dellinterrupt
.... ; istruzioni da eseguire con linterrupt
RETI ; istruzione fine interrupt

PROGRAMMA per Esempio n.12


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
SET 0,port_a ; accendi il led sul piedino A0
SET 1,port_a ; accendi il led sul piedino A1
SET 2,port_a ; accendi il led sul piedino A2
SET 3,port_a ; accendi il led sul piedino A3
RETI ; istruzione fine interrupt
gresso analogico si pu calcolare con questa for-
mula:
ST6 numero decimale = (volt x 255) : 5
A0

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

Ricordatevi che lA/D converter fornisce in uscita


Fig.8 Affinch, pigiando il pulsante posto soltanto dei numeri interi quindi se nel risultato so-
sul piedino NMI, si accendano tutti i led no presenti dei decimali, questi vengono arroton-
applicati sui piedini A0-A1-A2-A3, potrete u- dati al numero intero pi prossimo.
tilizzare il programma riportato nellEsem- Ad esempio, se la tensione di 4 volt dovesse scen-
pio N.12 o quello dellEsempio N.13. dere a 3,98 volt, sulluscita non otterremmo:

Esempio N.13 = Nellesempio N.12 abbiamo ri- (3,98 x 255) : 5 = 202,98


portato un programma che accendeva contempo-
raneamente quattro diodi led pigiando il pulsante ma il numero pi prossimo, cio 203.
collegato sul piedino NMI (vedi fig.8). Usando lac-
cumulatore A si ottiene lo stesso risultato, ma bi- Se la tensione di 4 volt dovesse salire a 4,04 volt,
sogna modificare il programma come indicato sulluscita non otterremmo:
nellEsempio n.13.
(4,04 x 255) : 5 = 206,04

A/D CONVERTER ma il numero pi prossimo, cio 206.

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

Quindi il numero decimale 203 corrisponde ad un


valore di tensione pari a:
ST6
(203 x 5) : 255 = 3,98 volt C
B
B1 A0
con una differenza di 0,01 volt in pi o in meno. E

Come abbiamo gi detto, un ingresso settato per


segnali analogici pu servire soltanto per misu-
rare delle tensioni continue che non superino i 5
volt.
Se la tensione risultasse maggiore, occorrer ri-
durla con dei partitori resistivi, come in pratica ac- Fig.9 Per accendere il diodo led applicato
cade in tutti i tester analogici che, pur disponen- sul piedino A0 quando la tensione sul pie-
do di uno strumento da 1 volt fondo scala, pos- dino B1 supera i 3 Volt, dovrete scrivere il
sono misurare tensioni anche di 250 - 300 volt. programma posto a fine pagina. Leggere at-
E inoltre possibile misurare delle tensioni alter- tentamente la soluzione dellEsempio N.14.
nate, se si provvede prima a raddrizzarle.
Un ingresso analogico pu servire per misurare Come si deve scrivere il programma perch il mi-
delle temperature, delle variazioni di luce, degli cro esegua questa funzione?
ohm oppure la reattanza dei condensatori o delle Soluzione: Dalla Tabella N.3 controlliamo come
impedenze, ed anche la corrente assorbita da un dobbiamo settare i registri pdir - popt - port per
circuito o la potenza di un amplificatore. predisporre B1 come ingresso analogico e A0 co-
me uscita in push-pull.
IMPORTANTE: Poich allinterno dei microproces- Successivamente calcoliamo il numero decimale
sori ST6 presente un solo A/D converter, solo di 3 volt che risulta:
un piedino pu essere adibito a questa funzione.
Se per errore vengono settati come ingressi per (3 x 255) : 5 = 153
segnali analogici due piedini, questi verranno po-
sti in cortocircuito ed in questo modo verr dan- A questo punto possiamo scrivere il nostro pro-
neggiato il microprocessore. gramma.

PROGRAMMA per Esempio n.14


LDI pdir_a,00000001B ; in queste prime tre righe abbiamo settato la porta
LDI popt_a,00000001B ; A0 come uscita in push-pull
LDI port_a,00000000B ;
LDI pdir_b,00000000B ; in queste tre righe abbiamo settato la porta
LDI popt_b,00000010B ; B1 come ingresso analogico
LDI port_b,00000010B ;
ripeti LDI wdog,255 ; carichiamo il watchdog
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
attendi JRR 6,adcr,attendi ; attendere che avvenga la conversione A/D
LD a,addr ; carica nellaccumulatore A il numero digitale
CPI a,153 ; compara il valore di A con il numero 153
JRNC accendi ; se A maggiore di 153 salta alletichetta accendi
JRC spegni ; se A minore di 153 salta alletichetta spegni
JP ripeti ; salta alletichetta ripeti del watchdog
accendi SET 0,port_a ; setta luscita del piedino A0 a 5 volt
JP ripeti ; salta alletichetta ripeti del watchdog
spegni RES 0,port_a ; setta luscita del piedino A0 a 0 volt
JP ripeti ; salta alletichetta ripeti del watchdog
Esempio N.15 = Vogliamo accendere una fila di 5 A questo punto possiamo programmare il piedino A7
diodi led, ma in modo che con 1 volt si accenda come ingresso analogico ed i piedini B0 - B1 - B2
un solo led, con 2 volt si accendano 2 led, con 3 - B3 - B4 come uscite push-pull (vedi Tabella N.3).
volt si accendano 3 led ecc., fino a far accendere
tutti i 5 diodi led quando la tensione raggiunge i 5 Se anzich accendere tutta la fila dei diodi led vo-
volt. lessimo accendere un solo diodo led per volta, cio
Come ingresso analogico abbiamo deciso di sce- prima quello su B0, poi quello su B1 - B2 - B3 - B4,
gliere il piedino A7 e come uscite i piedini da B0 dovremmo modificare tutte le righe delle etichette
a B4. LED mettendo un 1 solo sul piedino a cui colle-
gato il led che vogliamo accendere e degli 0 sui pie-
Soluzione: La prima operazione che dobbiamo dini a cui sono collegati i led che vogliamo spegnere.
compiere quello di calcolare il numero decima-
le corrispondente ai valori di tensione di 1 - 2 - 3 - Nellesempio che si trova a fine pagina dovremmo
4 - 5 volt usando la formula che gi conosciamo: riscrivere le sole righe LED2 - LED3 - LED4 - LED5
in questo modo:
(1 x 255) : 5 = 51 numero decimale di 1 Volt
(2 x 255) : 5 = 102 numero decimale di 2 Volt LED2 LDI port_b,00000010B
(3 x 255) : 5 = 153 numero decimale di 3 Volt LED3 LDI port_b,00000100B
(4 x 255) : 5 = 204 numero decimale di 4 Volt LED4 LDI port_b,00001000B
(5 x 255) : 5 = 255 numero decimale di 5 Volt LED5 LDI port_b,00010000B

PROGRAMMA per Esempio n.15


LDI pdir_a,00000000B ; in queste tre righe abbiamo settato
LDI popt_a,10000000B ; il piedino A7 come ingresso analogico
LDI port_a,10000000B ;
LDI pdir_b,00011111B ; in queste righe abbiamo settato
LDI popt_b,00011111B ; i piedini da B0 a B4 come uscite
LDI port_b,00000000B ;
ripeti LDI wdog,255 ; carichiamo il watchdog
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
attendi JRR 6,adcr,attendi ; attendere che avvenga la conversione A/D
LD a,addr ; carica nellaccumulatore A, il numero digitale
CPI a,255 ; compara il valore di A con il numero 255
JRNC LED5 ; se A uguale a 255 salta alletichetta LED5
CPI a,204 ; compara il valore di A con il numero 204
JRNC LED4 ; se A maggiore di 204 salta alletichetta LED4
CPI a,153 ; compara il valore di A con il numero 153
JRNC LED3 ; se A maggiore di 153 salta alletichetta LED3
CPI a,102 ; compara il valore di A con il numero 102
JRNC LED2 ; se A maggiore di 102 salta alletichetta LED2
CPI a,51 ; compara il valore di A con il numero 51
JRNC LED1 ; se A maggiore di 51 salta alletichetta LED1
JP LED0 ; se A minore di 51 salta alletichetta LED0
LED0 LDI port_b,00000000B ; non accendere nessun diodo led
JP ripeti ; salta alletichetta ripeti del watchdog
LED1 LDI port_b,00000001B ; accendi il led sul piedino B0
JP ripeti ; salta alletichetta ripeti del watchdog
LED2 LDI port_b,00000011B ; accendi i led sui piedini B0 - B1
JP ripeti ; salta alletichetta ripeti del watchdog
LED3 LDI port_b,00000111B ; accendi i led sui piedini B0 - B1 - B2
JP ripeti ; salta alletichetta ripeti del watchdog
LED4 LDI port_b,00001111B ; accendi i led sui piedini B0 - B1 - B2 - B3
JP ripeti ; salta alletichetta ripeti del watchdog
LED5 LDI port_b,00011111B ; accendi i led sui piedini B0 - B1 - B2 - B3 - B4
JP ripeti ; salta alletichetta ripeti del watchdog
Questa modifica potrebbe risultare utile se invece ne, ad esempio, il rel1 quando la tensione rag-
di accendere dei diodi led volessimo eccitare cin- giunge 1 volt, il rel 2 quando la tensione rag-
que diversi rel per ogni diverso valore di tensio- giunge i 2 volt ecc.

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

Fig.12 Per far funzionare un Vcc 1 20 GND


1
qualsiasi micro ST6 della se- 2
Vcc
TIMER 12 20
19 GND
ST 62 E 10
rie 10-20 dovrete collegare sui TIMER
OSC. INP 23 19
18 ST 62 E 10
5 OSC. OUT
INP 34 18
OSC. 17
piedini indicati un Quarzo da OSC. NMI
OUT 45 17
ST 62 T 10
8 MHz, due condensatori ce- 3
16 ST 62 T 10
NMI
Vpp 56 16
15
XTAL
ramici da 22 pF, un elettroliti- Vpp
RESET 67 15
14
ST 62 E 20
4 ST 62 E 20
co da 1 microF e due resi- 7 6 20 RESET 78 14
13

stenze da 100.000 ohm. 89 13


12 ST 62 T 20
1 uF 910 12
11 ST 62 T 20
22 pF 10 11

5 V.

Vcc 1 28 GND
100.000 ohm

100.000 ohm

TIMER 2 27

1 OSC. INP 3 26 Fig.13 Per far funzionare un


2 OSC. OUT 4 25 ST 62 E 15 qualsiasi micro ST6 della se-
NMI 5 24
5
6 23
rie 15-25 dovrete collegare sui
7
ST 62 T 15 piedini indicati un Quarzo da
22
3
XTAL 8 21 8 MHz, due condensatori ce-
9 20 ST 62 E 25 ramici da 22 pF, un elettroliti-
4
11 10 28 Vpp 10 19
co da 1 microF e due resi-
RESET 11 18 ST 62 T 25
1 uF
12 17
stenze da 100.000 ohm.
22 pF 13 16
14 15
TIMER serire una B, perch questo un numero binario.
Per calcolare il tempo in secondi possiamo usa-
Il timer un contatore collegato al quarzo del mi- re questa formula:
croprocessore tramite un prescaler ed un diviso-
re x 12 (vedi fig.14). secondi = (12 x tscr x tcr) : Xtal in Hz
Per la funzione timer dobbiamo settare due regi-
stri, uno chiamato tcr e laltro tscr. Ammesso che si usi un quarzo da 8 MHz (pari a
Nel registro tcr (timer counter register) dovremo in- 8.000.000 Hz), che nella riga tscr si sia inserito il
serire un numero decimale compreso tra 1 e 255. numero 128 e nella riga tcr il numero 255, otterre-
Il tcr partendo da questo numero conter allin- mo un tempo massimo di:
dietro e quando arriver al numero 0 automatica-
mente eseguir tutte le istruzioni comprese tra le- (12 x 128 x 255) : 8.000.000 = 0,0489 secondi
tichetta tim_int e listruzione reti.
Ammesso che si voglia inserire nel registro tcr il che corrispondono a 48,9 millisecondi.
numero 255 dovremmo scrivere questa riga di pro-
gramma: Tempi cos ridotti potrebbero servire soltanto per
realizzare dei generatori di onde quadre, ma cer-
LDI tcr,255 to non dei timer dove normalmente occorrere rag-
giungere dei tempi di minuti o ore.
Nel registro tscr (timer status control register), che Per ottenere dei tempi molto lunghi possiamo
controlla il prescaler, dovremo inserire un nume- usare degli accorgimenti come per esempio ricor-
ro binario come riportato nella Tabella N.5. rere alluso di altre variabili.

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

3 TSCR Fig.14 Allinterno di ogni microprocessore


c un Timer che preleva dalloscillatore
OXILL
quarzato la frequenza generata e la DIVIDE
DIVISORE PRESCALER TCR
4 x 12 subito x 12. Per ricavare tempi diversi si de-
ve agire solo sui due registri chiamati
TCSR e TCR. Nellarticolo trovate due
CPU Esempi, uno ha il numero 16 e laltro il 17.
verificasse dovrete aumentare il numero di divi- Il programma che dobbiamo scrivere per preleva-
sione del prescaler. re dal piedino A7 questi impulsi visibile in fondo
Questo numero, che possiamo prelevare dalla Ta- alla pagina.
bella N.5, 1 - 2 - 4 - 8 - 16 - 32 - 64 - 128.
Ad esempio se scegliamo per tscr il numero 2 ot- Esempio N.17 = Vogliamo prelevare dal piedino
teniamo un tcr di: A7 delle onde quadre che abbiano una frequenza
di 1.200 Hz, quindi vogliamo sapere come impo-
[(8.000.000 : 12) : 2] x 0,001 = 333,33 tcr stare il programma.

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.

0,001002 x 1.000 = 1,002 millisecondi [(8.000.000 : 12) : 2] x 0,0004 = 133,33 tcr

PROGRAMMA per Esempio n.16


LDI pdir_a,10000000B ; queste tre righe servono per settare
LDI popt_a,10000000B ; il piedino A7 come uscita in push-pull
LDI port_a,00000000B ;
SET 4,ior ; abilita linterrupt quando il tcr diventa 0
LDI tcr,167 ; numero 167 calcolato per il tcr
LDI tscr,01011010B ; numero binario per un fattore di divisione di 4 (Tabella N.5)
main LDI wdog,255 ; ricarichiamo il watchdog
JP main ; salta alletichetta main
tim_int LDI wdog,255 ; ricarichiamo il watchdog
LDI tcr,167 ; ricarichiamo 167 nel tcr per ripetere gli impulsi
LDI tscr,01011010B ; questa riga fa ripartire il contatore
SET 7,port_a ; fa uscire dal piedino A7 un impulso a 5 volt
RES 7,port_a ; riporta il piedino A7 a 0 volt
RETI ; ritorna al programma main
Poich il microprocessore lavora solo con numeri Per prelevare dal piedino A7 delle onde quadre
interi dovremo arrotondarlo sul numero pi pros- che abbiano una frequenza di 1.200 Hz, dovremo
simo che nel nostro esempio 133. scrivere il programma come visibile qui sotto.
Disponiamo cos di tutti i dati richiesti:

tscr = 2
tcr = 133

PROGRAMMA per Esempio n.17


LDI pdir_a,10000000B ; queste tre righe ci servono per settare
LDI popt_a,10000000B ; il piedino A7 come uscita in push-pull
LDI port_a,00000000B ;
SET 4,ior ; abilita linterrupt
LDI tcr,133 ; carica nel tcr il numero 133
LDI tscr,01011001B ; numero binario per un fattore di divisione di 2 (Tabella N.5)
main LDI wdog,255 ; ricarica il watchdog
JP main ; salta alletichetta main
tim_int ; etichetta dellinterrupt
LDI wdog,255 ; ricarica il watchdog
LDI tcr,133 ; ricarica 133 nel tcr per continuare
LDI tscr,01011001B ; questa riga fa ripartire il contatore
JRR 7,port_a,salita ; se A7 a 0 salta alletichetta salita
RES 7,port_a ; se A7 a 1 cambia il livello logico a 0
JP continua ; salta alletichetta continua
salita SET 7,port_a ; metti il piedino A7 a livello logico 1
continua RETI ; fine dellinterrupt
Con il microprocessore ST6 si possono realizzare meri delle ore e dei minuti. Se poi in sostituzione
uninfinit di circuiti, come ad esempio orologi, con- di un display a sette segmenti si volesse utilizzare
tasecondi, timer, antifurto, controlli numerici per un display LCD, non si saprebbe quali modifiche
macchine utensili, termostato, piccoli robot, coman- apportare al software.
di per luci, termometri, inoltre si possono scrivere Chi vuole eccitare un rel ad una determinata
delle parole sui display LCD, convertire dei calcoli ora si chieder invece quale istruzione gli permet-
ecc., e qui ci fermiamo perch volendo elencare tut- te di ottenere questa condizione.
to ci vorrebbero non poche pagine della rivista. Anche ammesso di aver scritto tutte le istruzioni ri-
Anche se nelle riviste precedenti vi abbiamo spie- chieste, il lettore desidera giustamente sapere se
gato le istruzioni per scrivere un programma, per il suo programma in grado di eseguire senza er-
chi allinizio queste informazioni potrebbero ri- rori tutte le funzioni per cui stato scritto, ha cio
sultare ancora insufficienti. bisogno di testarlo e per questo gli servono delle
Infatti chi volesse realizzare un orologio a display schede di test universali.
potrebbe trovarsi in difficolt nel far apparire i nu- Sono proprio queste che prenderemo in esame con

BUS per

Fig.1 Foto del bus proget-


tato per testare i micro
ST6.
I due costosi zoccoli tex-
tool possono essere sosti-
tuiti con due economici
zoccoli per integrati, come
visibile nel disegno pratico
di fig.3.
TESTARE i micro ST6
Il primo problema che si presenta a quanti desiderano iniziare a scrive-
re del software personalizzato per i microprocessori ST6 della SGS,
quello di poter controllare il programma per verificare che esegua le fun-
zioni richieste. Per aiutarvi abbiamo progettato delle schede sperimen-
tali, che saranno particolarmente utili agli Istituti Tecnici se usate come
supporto al consueto materiale didattico.

il nostro articolo. trollo con il programma originale per verificare do-


A parte vi forniamo un dischetto contenente alcu- ve stato commesso lerrore.
ni programmi completi di esaurienti commenti, che
potranno servirvi per realizzare orologi, timer, con-
tasecondi, antifurto ecc., e con riportate tutte le mo- IMPORTANTE
difiche che si possono apportare.
Come sempre i maligni penseranno che il nostro La SGS ci ha comunicato che cesser di produrre
obiettivo sia solo quello di vendere al lettore un di- i microprocessori riprogrammabili tipo ST62E10
schetto, ma essi non considerano che riempire 10 e tipo ST62E15, entrambi da 2 K di memoria, per-
pagine della rivista con sole righe di programma ch tutte le Industrie chiedono e preferiscono uti-
non risulta per nulla gradito a coloro ai quali non lizzare i riprogrammabili da 4 K di memoria an-
interessa lST6. che se pi costosi.
Inoltre non pensano che nel trascrivere i program- I microprocessori non riprogrammabili tipo
mi sulla rivista si possono verificare degli errori di ST62T10 - ST62T15 con 2 K di memoria rimar-
stampa, ed altri errori possono commetterli gli stes- ranno invece sempre in produzione.
si lettori nel ricopiare le istruzioni. Pertanto fuori produzione andranno i tipi:
Disponendo di un dischetto con programmi gi te-
stati, il lettore potr subito metterli in funzione e poi ST62E10 che verranno sostituiti dagli ST62E20
modificarli secondo le proprie esigenze. ST62E15 che verranno sostituiti dagli ST62E25
Se con le modifiche apportate il programma dar
qualche errore, sar sempre possibile fare un con- Poich le dimensioni e la piedinatura dei due mo-
DS1
12,6 V.
DS2
5,6 V.
C5 C6
R1 R2
Massa

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

ELENCO COMPONENTI LX.1202


C5 = 100.000 pF poliestere
R1 = 100.000 ohm 1/4 watt C6 = 100 mF elettr. 35 volt
R2 = 100.000 ohm 1/4 watt XTAL = quarzo 8 MHz
C1 = 100.000 pF poliestere DS1 = diodo 1N.4007
C2 = 1 mF elettr. 63 volt DS2 = diodo 1N.4007
C3 = 22 pF ceramico CONN.1-2-3 = connettori 24 poli
C4 = 22 pF ceramico P1 = pulsante

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

Fig.4 Schema elettrico dello stadio di alimentazione da utilizzare per il bus.

delli risultano identiche sar possibile sostituirli


ELENCO COMPONENTI LX.1203
senza problemi.
Il motivo per cui tutti preferiscono i microprocesso- C1 = 2.200 mF elettr. 35 volt
ri riprogrammabili da 4 K ovvio. C2 = 100.000 pF poliestere
I microprocessori riprogrammabili servono e ven- C3 = 100.000 pF poliestere
gono utilizzati unicamente per testare i programmi C4 = 100 mF elettr. 35 volt
e quindi possono essere cancellati e riutilizzati per C5 = 2.200 mF elettr. 35 volt
provare altri programmi. C6 = 100.000 pF poliestere
Dopo aver verificato che il programma funziona, si C7 = 100.000 pF poliestere
pu definitivamente trasferirlo sui microprocessori C8 = 100 mF elettr. 35 volt
non riprogrammabili tipo ST62T10 - ST62T20 o DS1 = diodo 1N.4007
DS2 = diodo 1N.4007
ST62T15 - ST62T25.
RS1 = ponte raddr. 100 V. 1 A.
Poich un microprocessore riprogrammabile vie- RS2 = ponte raddr. 100 V. 1 A.
ne riutilizzato un centinaio di volte, si preferisce IC1 = uA.7812
acquistarne uno da 4 K, perch pu essere usato IC2 = uA.7805
sia per i programmi che occupano 1 - 1,5 - 2 K sia T1 = trasformatore 25 watt (T025.01)
per quelli che occupano 2,5 - 3 - 4 K. sec. 14 V. 1 A. - 8 V. 1 A.
S1 = interruttore

SCHEMA ELETTRICO scheda BUS

Per testare i programmi abbiamo realizzato una


Fig.5 Connessioni dei
scheda in cui si possono utilizzare sia i micropro-
due integrati stabilizza-
cessori da 20 piedini sia quelli da 28 piedini. tori di tensione.
Per questa scheda abbiamo inoltre realizzato un
bus che porta tutti i segnali del microprocessore ai E M U
connettori femmina sui quali potrete inserire diver-
uA 7805
si tipi di schede, ad esempio con dei display a 7
uA 7812
segmenti, oppure con un display LCD o con dei
rel o ancora con dei Triac.
Fig.6 Disegno del circuito stampato dello stadio di alimentazione siglato LX.1203 visto dal
lato rame. Nota: il disegno stato leggermente ridotto per farlo rientrare nella pagina; le
sue misure reali sono Lunghezza = mm 160 ed Altezza = mm 70.

Fig.7 Schema pratico di montaggio dello stadio di alimentazio-


ne. I due integrati stabilizzatori IC1-IC2 vanno fissati sopra le a-
lette di raffreddamento come visibile in fig.8. La tensione alter-
nata dei 14 volt, disponibile nella morsettiera a 2 poli, vi servir
per testare i circuiti con Triac o Scr.
Per la descrizione dello schema elettrico, visibile in
fig.2, iniziamo proprio dai due zoccoli, che, ovvia-
mente, dovranno essere utilizzati solo uno per vol-
ta.

Dunque se avete gi inserito un microprocessore


in uno zoccolo, per inserirne un altro nel secondo
zoccolo dovrete togliere il primo.
Tutti i terminali dei due zoccoli sono collegati tra lo-
ro in modo da sfruttare per entrambi lo stesso quar-
zo per il clock, lo stesso pulsante di reset ed ov-
viamente la stessa alimentazione.
Anche tutte le porte dingresso/uscita sono colle-
gate in parallelo e qui necessario ricordare che
nello zoccolo che ricever i microprocessori
ST62E10 - ST62E20 la porta A inizia da A0 e ter-
mina ad A3, la porta B inizia da B0 e termina a
B7, e che manca la porta C.
Nello zoccolo che ricever i microprocessori
ST62E15 - ST62E25 risultano presenti tutte le por-
te da A0 ad A7 e da B0 a B7, e la porta C inizia
da C4 e termina a C7.

Tutti gli ingressi/uscite raggiungono i connettori


femmina CONN.1 - CONN.2 - CONN.3 nei quali
andranno inserite le schede sperimentali.
Sempre sugli stessi connettori risultano presenti
le piste di alimentazione, cio 5,6 volt positivi -
12,6 volt positivi e la massa.
I diodi al silicio DS1 - DS2, posti in serie sui due
ingressi di alimentazione, sono stati inseriti per
evitare di danneggiare il micro nel caso venisse
applicata su questi terminali una polarit opposta
a quella richiesta.
Poich questi diodi introducono una tensione di cir-
ca 0,6 volt, applicando sullingresso una tensione
di 5,6 volt e 12,6 volt, in uscita si otterranno e-
sattamente 5 volt e 12 volt.

REALIZZAZIONE PRATICA

Sul circuito stampato siglato LX.1202 dovete mon-


tare i pochi componenti visibili in fig.3.
Come noterete, nel kit abbiamo inserito due zoc-
coli, uno da 20 e laltro da 28 piedini, ma qui dob-
biamo aprire una piccola parentesi. Fig.8 Come si presenta a montaggio ulti-
Poich questo progetto verr utilizzato anche da mato lo stadio di alimentazione che vi for-
piccole e medie Industrie per testare i loro micro- nisce tutte le necessarie tensioni per ali-
processori, noi consigliamo di utilizzare, in sostitu- mentare il nostro bus.
zione degli zoccoli inseriti nel kit, degli zoccoli tex- Vi consigliamo di racchiudere lalimentato-
tool provvisti di una levetta di bloccaggio (vedi re dentro un mobile plastico e a questo pro-
fig.1). posito vi indichiamo il mobile codificato
Usando questi zoccoli risulter pi semplice e ve- MTK06.22 del costo di 6,97
loce inserire e togliere i microprocessori, ma que-
sto vantaggio coster 55.000 lire in pi.
Come visibile in fig.3, sullo stampato dovrete mon- che vi servir per collaudare i programmi che pi-
tare i due zoccoli, il pulsante di reset, il quarzo, i lotano i diodi Triac.
connettori per le schede sperimentali ed i pochi Vi conviene racchiudere lalimentatore dentro un
componenti passivi, cio resistenze, condensatori qualsiasi mobile e a tal proposito vi consigliamo il
ed i due diodi al silicio, rispettando il verso della fa- mobile siglato MTK06.22.
scia bianca riportata sul loro corpo. Per le tensioni duscita utilizzate dei fili di diverso
I quattro connettori femmina a 4 terminali, che sul- colore cos da poter subito stabilire il valore della
lo stampato risultano isolati dal circuito, serviranno tensione presente e non correre il rischio di inver-
come punto di appoggio per le schede speri- tirli quando li collegherete alla morsettiera del bus.
mentali che inserirete nel bus. Tanto per fare un esempio, per la massa potrete
Questi connettori vi serviranno anche per evitare di scegliere il colore nero, per i 5,6 volt il colore gial-
inserire le schede sperimentali in senso inverso al lo o marrone e per i 12,6 volt il colore rosso o a-
richiesto. rancio.
Per i due fili dellalternata potrete usare due fili
bianchi oppure di un colore completamente diver-
so da quello scelto per le altre uscite.
ALIMENTAZIONE
Per le schede sperimentali vi rimandiamo allarti-
Le tensioni richieste per alimentare questo bus de- colo pubblicato su questa stessa rivista.
vono risultare, come gi anticipato, di 5,6 e di 12,6
volt.
Come visibile in fig.4, le due tensioni prelevate dai
due secondari del trasformatore T1 vengono rad-
drizzate da RS1 ed RS2, poi stabilizzate a 5,6 volt
dallintegrato uA.7805 (vedi IC2) e a 12,6 volt
dallintegrato uA.7812 (vedi IC1).
Per prelevare sulluscita di questi due integrati una
tensione di 5,6 volt anzich di 5 volt ed una ten-
sione di 12,6 volt anzich di 12 volt, abbiamo in-
serito tra il terminale M e la massa un diodo al si-
licio (vedi DS1 - DS2). COSTO DI REALIZZAZIONE
Dallo stesso trasformatore si preleva anche una
tensione alternata di circa 14 volt, che potr ser- Il solo Bus siglato LX.1202 completo di cir-
vire per testare i circuiti che utilizzano dei Triac. cuito stampato, quarzo, zoccoli normali, con-
Anche se per queste prove possibile applicare nettori, pulsante, cio tutti i componenti visibili in
sulla loro uscita una tensione di 220 volt alterna- fig.3 (sensa textool) ................................... 25,80
ti, noi ve lo sconsigliamo, perch se inavvertita-
mente toccaste con le mani le piste del circuito Costo del solo stampato LX.1202 ............. 17,04
stampato potrebbe risultare molto pericoloso. Costo di uno zoccolo textool a 20 piedini . 19,63
Costo di uno zoccolo textool a 28 piedini . 28,41

Il solo stadio di alimentazione siglato LX.1203 com-


REALIZZAZIONE PRATICA ALIMENTATORE pleto di circuito stampato, due integrati stabilizza-
tori, alette di raffreddamento, due ponti raddrizza-
Sul circuito stampato monofaccia siglato LX.1203 tori, cordone di alimentazione e relativo trasforma-
monterete tutti i componenti visibili in fig.7 cercan- tore ............................................................. 25,80
do come sempre di rispettare la polarit dei termi-
nali dei diodi al silicio, dei ponti raddrizzatori e dei Costo del solo stampato LX.1203 ............... 4,34
condensatori elettrolitici.
Come potete osservare anche dalle foto, i due in- Vi consigliamo di racchiudere lo stadio di alimen-
tegrati stabilizzatori vanno fissati sopra due alette tazione dentro un mobile plastico e a tale scopo vi
di raffreddamento. proponiamo il modello MTK06.22.
Per le tensioni duscita inserite una morsettiera a
3 poli dalla quale potrete prelevare le tensioni sta- Costo del mobile MTK06.22 ........................ 6,97
bilizzate di 12,6 volt - 5,6 volt pi il filo della mas-
sa, ed una morsettiera a 2 poli dalla quale potre- Ai prezzi riportati andranno aggiunte le sole spese
te prelevare una tensione alternata di circa 14 volt di spedizione a domicilio.
Inserendo queste due schede nel bus siglato Sul piedino 22 di data vanno inviati dei bit seriali,
LX.1202, riportato su questo numero, e collocan- che lintegrato M.5450 convertir in bit paralleli ne-
do nel suo zoccolo un microprocessore ST6, che cessari per accendere i segmenti dei quattro di-
voi stessi potrete programmare copiando uno dei splay.
programmi di esempio presenti nel dischetto che La sequenza dei bit necessari per accendere i seg-
vi forniremo, potrete ottenere orologi - contase- menti dei display deve essere preceduta da un bit
condi - timer - cronometri - contaimpulsi ecc. di start (vedi fig.1).
Poich i nostri programmi di esempio si possono In pratica allintegrato giunge una sequenza di 37
facilmente modificare, riuscirete in breve tempo a bit come qui sotto riportato:
capire come scriverne altri per ottenere funzioni che
noi attualmente non abbiamo previsto.
1 bit di Start
Queste schede risulteranno quindi utilissime per te-
32 bit per accendere i display
stare tutti i programmi che scriverete, perch ve-
2 bit per accendere i diodi led
drete dal vivo se appaiono i numeri desiderati e
2 bit di fine caricamento
se i rel si eccitano o si diseccitano nei tempi pre-
visti.
A queste schede ne seguiranno via via altre che u- I segmenti dei quattro display e dei due diodi led
tilizzeranno i display LCD ed i diodi TRIAC. si accendono soltanto quando allintegrato sono
Entrerete cos in possesso di un valido banco di giunti tutti i 37 bit, vale a dire tutta la sequenza so-
test per tutti i tipi di programmi per microproces- pra riportata compresi gli ultimi 2 bit di fine cari-
sori ST6. camento.

SCHEDATEST per ST6


SCHEDA DISPLAY Se guardate la fig.1, in cui sono riportati tutti i 7
segmenti di un display contrassegnati da una let-
tera, potrete ricavare dalla Tabella N.1 i bit che
Lo schema elettrico di questa scheda, riportato in devono giungere al piedino 22 dellintegrato per
fig.6, molto semplice, perch utilizza il solo inte- accendere i vari segmenti.
grato M.5450 (vedi IC1) necessario per pilotare 4 Il bit, come gi sapete, una cifra binaria che pu
display. assumere un livello logico 0 oppure un livello lo-
Nel caso realizzaste un orologio, i due pulsanti gico 1.
presenti nel circuito vi potranno servire per mette- Per accendere i segmenti interessati, i bit che en-
re a punto le ore ed i minuti, mentre i due diodi trano sul piedino 22 devono avere un livello lo-
led potrebbero visualizzare i secondi oppure po- gico 1.
treste impiegarli per altre funzioni da assegnare tra- E poi lintegrato che provvede a commutare le sue
mite software. uscite a livello logico 0 in modo che i segmenti
Il trimmer siglato R1 serve soltanto per variare la ed i diodi led risultino alimentati.
luminosit dei display.
Poich desideriamo che il lettore sappia come si Quindi se volessimo accendere il numero 7 sul di-
riesca a far accendere un qualsiasi numero sui 4 splay N.4, sullingresso di IC1 dovremmo far giun-
display collegando due soli fili allintegrato M.5450 gere la sequenza di bit visibile in fig.2.
(vedi piedini 22-21), dobbiamo a questo punto spie- Se invece volessimo accendere il numero 7 sul di-
gare come vanno gestiti questi piedini. splay N.1, dovremmo far giungere sullingresso di
Sul piedino 21 di clock va applicata una frequen- IC1 la sequenza di bit visibile in fig.3.
za ad onda quadra che faremo generare dallST62 Nel dischetto che vi forniremo abbiamo inserito un
inserendo nel programma le due istruzioni Set-Res programma chiamato DISPLAY per mostrarvi co-
(vedi righe 119-120 nel programma DISPLAY.A- me si possa accendere qualsiasi numero in uno
SM presente nel dischetto). dei quattro display.
Potrete utilizzare queste due schede come orologio, contasecondi, ti-
mer, cronometro, contaimpulsi, e se questo non bastasse potrete ecci-
tare, nei tempi da voi desiderati, dei rel per pilotare una cicalina o per
alimentare una qualsiasi apparecchiatura elettrica.

SCHEDA REL scheda dei display, che gi utilizza le porte B0 -


B1 - B2 - B3, non potevamo servirci della stessa
Lo schema elettrico di questa scheda, riportato in porta per accendere un display ed eccitare un rel.
fig.9, utilizza solo 4 rel pilotati da altrettanti tran- I vari rel si eccitano quando sulle porte B4 - B5
sistor. - B6 - B7 presente un livello logico 1, che, po-
In teoria avremmo potuto inserire ben 20 rel uti- larizzando le Basi dei transistor, li portano in con-
lizzando cos tutte le porte A - B - C, ma poich duzione.
questa scheda viene inserita nel bus assieme alla A rel eccitato si accende il diodo led applicato
TABELLA N. 1 ai suoi capi, quindi se sulla morsettiera duscita
DISPLAY N. 4 applicheremo una lampadina o un motorino, ali-
mentati con una qualsiasi tensione esterna sia in
piedino segmento continua sia in alternata, la lampada si accen-
Bit
IC1 display der ed il motorino inizier a girare.
9 10 A I pulsanti P1 - P2 - P3 - P4, collegati alle porte A0
10 9 B - A1 - A2 - A3, sono stati inseriti per diseccitare o
11 8 C eccitare manualmente uno dei quattro rel.
12 7 D
13 6 E REALIZZAZIONE PRATICA DISPLAY
14 5 F
15 4 G Sul circuito stampato siglato LX.1204 monterete i
16 3 punto pochi componenti visibili in fig.7.
Per iniziare consigliamo di inserire lo zoccolo per
DISPLAY N. 3 lintegrato IC1, poi, dal lato opposto dello stampa-
to, inserite il connettore maschio ad 1 fila provvi-
piedino segmento
Bit sto di 24 terminali e gli altri due connettori maschi,
IC1 display
sempre ad 1 fila, provvisti di 4 terminali, che in se-
1 18 A guito vi serviranno per innestare questa scheda sui
2 17 B connettori femmina della scheda bus siglata
3 16 C LX.1202.
4 15 D Dopo aver stagnato questi componenti, potete in-
5 14 E serire le due resistenze, i quattro condensatori, il
6 13 F
trimmer R1 ed i due pulsanti P1 - P2.
7 12 G
Proseguendo nel montaggio inserite i due diodi led
8 11 punto
rivolgendo il terminale pi lungo, cio lAnodo,
verso sinistra.
DISPLAY N. 2 Se invertirete questo terminale, i diodi led non si
piedino segmento accenderanno.
Bit Per completare il montaggio dovrete saldare diret-
IC1 display
tamente sul circuito i quattro display, controllando
25 33 A che il lato in cui presente il punto decimale ri-
26 32 B sulti rivolto verso il basso, cio verso lintegrato IC1.
27 31 C
Dopo aver inserito tutti i componenti, dovete inse-
28 30 D
rire nel suo zoccolo lintegrato M.5450 rivolgendo
29 29 E
la sua tacca di riferimento ad U verso sinistra, co-
30 28 F
31 27 G me risulta visibile in fig.7.
32 26 punto
REALIZZAZIONE PRATICA REL

DISPLAY N. 1 Sul circuito stampato siglato LX.1205 monterete


segmento tutti i componenti visibili in fig.10.
piedino
Bit Per il montaggio vi consigliamo di iniziare inseren-
IC1 display
17 2 A
18 40 B
19 39 C DIODO LED
20 38 D
21 37 E Bit piedino IC1 diodi led
22 36 F
23 35 G 34 24 DL2
24 34 punto 33 25 DL1

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

a Fig.1 Sul piedino 22 dellintegrato M.5450 giunge un primo bit di


Start. A questo seguono 32 bit per accendere i segmenti dei di-
f g b splay, 2 bit per accendere i led e 2 bit di fine caricamento. I sette
segmenti del display sono identificati da una lettera (vedi A-B-C-
e c D-E-F-G) quindi per visualizzare il numero 7 dovrete alimentare i
d segmenti A-B-C e per visualizzare il numero 3 dovrete alimentare
dp i segmenti A-B-G-C-D.

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

USCITE PER DISPLAY


GND 1 40 BIT 18
20 BIT 17 2 39 BIT 19
BIT 16 3 38 BIT 20
BIT 15 4 37 BIT 21
LUMIN. 19 BIT 14 5 36 BIT 22
34 OUTPUT BAFFER BIT 13 6 35 BIT 23
BIT 12 7 34 BIT 24
BIT 11 8 33 BIT 25
BIT 10 9 32 BIT 26
BIT 9 10 31 BIT 27
LOAD
34 LATCHES BIT 8 11 30 BIT 28
BIT 7 12 29 BIT 29
ENABLE 23 BIT 6 13 28 BIT 30
BIT 5 14 27 BIT 31
BIT 4 15 26 BIT 32
DATA 22
34 BIT SHIFT REGISTER BIT 3 16 25 BIT 33
BIT 2 17 24 BIT 34
BIT 1 18 23 ENABLE
CLOCK 21
LUMIN. 19 22 DATA
RESET + Vcc 20 21 CLOCK
1

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.

DISPLAY 1 DISPLAY 2 DISPLAY 3 DISPLAY 4

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.

ELENCO COMPONENTI LX.1204 C4 = 100.000 pF poliestere


DL1 = diodo led
R1 = 50.000 ohm trimmer DL2 = diodo led
R2 = 10.000 ohm 1/4 watt DISPLAY1-4 = display tipo BS.A501
R3 = 10.000 ohm 1/4 watt IC1 = M.5450
C1 = 100.000 pF poliestere P1-P2 = pulsanti
C2 = 1.000 pF poliestere CONN.1/2 = connettore 24 poli
C3 = 100.000 pF poliestere
do, dal lato opposto a quello dei componenti, il con- Lultimo connettore femmina, posto sulla parte su-
nettore maschio ad 1 fila provvisto di 24 termina- periore dello stampato LX.1202, stato previsto
li e gli altri due connettori maschi, sempre ad 1 fi- nelleventualit che vogliate collegare un vostro
la, provvisti di 4 terminali, che in seguito vi servi- personale circuito stampato oppure per prolunga-
ranno per innestare questa scheda sui connettori re il bus.
femmina della scheda bus siglata LX.1202.
Ora voltate lo stampato e sulla parte inferiore del
circuito inserite tutte le resistenze, poi i diodi al I PROGRAMMI
silicio non dimenticando di rivolgere il lato contor-
nato da una fascia nera verso le morsettiere di u- Il nuovo dischetto che vi forniremo in pratica lo
scita. stesso che abbiamo distribuito in precedenza (ve-
Proseguendo nel montaggio inserite tutti i con- di rivista N.172/173), con la differenza che oltre ai
densatori, poi tutti i transistor rivolgendo la parte programmi:
piatta del loro corpo verso sinistra come visibile
nello schema pratico di fig.10. CONTA.ASM
Completata questa operazione, potete inserire i LED.ASM
quattro pulsanti, i quattro rel e le quattro mor- LOTTO.ASM
settiere a 2 poli. STANDARD.ASM
Per ultimi montate i diodi led non dimenticando di
rivolgere il terminale pi lungo dellAnodo verso i abbiamo aggiunto questi nuovi files:
rel.
Le quattro morsettiere presenti nello stampato so- RELE.ASM
no collegate ai contatti dei rel, perci quando il DISPLAY.ASM
rel si ecciter il contatto si chiuder e pertanto lo OROLOGIO.ASM
potrete utilizzare come interruttore per accende- CRONOMET.ASM
re lampadine, alimentare motorini o trasforma- TEMPOR.ASM
tori oppure dei servorel a 220 volt. TIMER.ASM

INSERIMENTO SCHEDE nel BUS Ogni riga di programma stata completata da un


commento che spiega la funzione dellistruzione e
Potete inserire queste schede nel bus siglato quindi permette di sapere come modificare il pro-
LX.1202 indifferentemente su uno dei due connet- gramma per fargli compiere una funzione diversa
tori femmina presenti sullo stampato. da quella per cui era stato scritto.

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

RELE' 1 RELE' 2 RELE' 3 RELE' 4

DL1 DL2 DL3 DL4


DS1 R3 DS2 R6 DS3 R9 DS4 R12

C C C C
R1 R4 R7 R10
B B B B

R2 E R5 E R8 E R11 E
TR1 TR2 TR3 TR4

R13 R14 R15 R16

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.

ELENCO COMPONENTI LX.1205


R8 = 10.000 ohm 1/4 watt R16 = 10.000 ohm 1/4 watt
R1 = 2.200 ohm 1/4 watt R9 = 680 ohm 1/4 watt C1-C4 = 100.000 pF poliestere
R2 = 10.000 ohm 1/4 watt R10 = 2.200 ohm 1/4 watt DS1-DS4 = diodi 1N.4150
R3 = 680 ohm 1/4 watt R11 = 10.000 ohm 1/4 watt DL1-DL4 = diodi led
R4 = 2.200 ohm 1/4 watt R12 = 680 ohm 1/4 watt TR1-TR4 = NPN tipo BC.547
R5 = 10.000 ohm 1/4 watt R13 = 10.000 ohm 1/4 watt RELE1-4 = rel 12 volt
R6 = 680 ohm 1/4 watt R14 = 10.000 ohm 1/4 watt P1-P4 = pulsanti
R7 = 2.200 ohm 1/4 watt R15 = 10.000 ohm 1/4 watt CONN.1/2 = connettore 24 poli
Tanto per fare un esempio, se nel programma TI- Se il computer vi comunica che questa directory e-
MER volete variare i tempi di eccitazione dei rel, siste gi, non preoccupatevi e premete due volte
troverete spiegato in quale riga va modificata li- il tasto S.
struzione e quale numero occorre inserire. A questo punto inizia la scompattazione dei files
Se volete che il programma TIMER ecciti un rel (vedi fig.11) ed al termine delloperazione vedrete
per far suonare un campanello o per accendere u- apparire sul monitor la scritta:
na caldaia ad una precisa ora, vi verr spiegato
quale riga modificare per migliorare in base alle vo- Buon divertimento
stre personali esigenze la funzionalit del pro-
gramma. Premendo un tasto qualsiasi, sul monitor apparir
la scritta:

TRASFERIMENTO file nellHARD-DISK C:\ST6>

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.

DUPLICARE un FILE con NOME diverso

Anzich modificare i files che trovate nel dischet-


to, vi consigliamo di ricopiarli nellHard-Disk con
un nome diverso, e di apportare su questo nuovo
file le modifiche che riterrete opportune.
In questo modo avrete sempre a disposizione, in
caso di bisogno, il programma originale.
Ammesso che vogliate duplicare il file DISPLAY,
dovrete innanzitutto scegliere un nome che non ab-
bia pi di 8 caratteri, ad esempio DPLPROVA.
Quando siete nel menu principale del nostro Edi- Fig.11 Tutti i files presenti nel dischetto ver-
tor: ranno automaticamente scompattati quan-
do li memorizzerete nellHard-Disk.
premete ALT+F
poi pigiate D
tasto funzione F2 per memorizzare tutte le modi-
fiche che avete effettuato.
apparir la scritta C:\ST6>
A questo punto potete scrivere listruzione:
ASSEMBLAGGIO del PROGRAMMA
C:\ST6>Copy DISPLAY.ASM DPLPROVA.ASM
Un programma corretto, modificato o riscritto, si
poi premete Enter. pu trasferire in un micro ST6 solo dopo averlo as-
Dopo pochi secondi apparir la scritta: semblato.
Dopo aver salvato un programma premendo il ta-
1 file copiato sto funzione F2, per assemblarlo dovrete proce-
dere come segue:
Per ritornare al menu principale dovrete scrivere:
Premete ALT+T
C:\ST6>EXIT poi Enter quindi premete A

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:

PER MODIFICARE un PROGRAMMA ***SUCCESS***

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.

Per cancellare unintera riga PER TRASFERIRE il programma sullST6


pigiate i tasti CTRL+Y.
Dopo aver assemblato il programma ed aver ot-
Dopo aver corretto, modificato, cancellato una tenuto la scritta ***success***, potrete trasferirlo
riga o una parola dovrete ricordarvi di premere il nella memoria del microprocessore ST6.
Quando siete nel menu principale dovrete: NOTA IMPORTANTE

premere ALT+P Allinizio di tutti i programmi che vi forniamo trove-


rete questa istruzione:
e dopo pochi secondi comparir lintestazione del
software delle SGS in lingua inglese. .ORG 880h
A questo punto, prendete la rivista N.172/173 (se
non lavete potrete sempre richiederla) poi rilegge- che serve per i soli microprocessori ST6 con 2K di
te quanto riportato nelle pagg.39-41, che non ri- memoria, cio i:
scriviamo perch sarebbe uninutile ripetizione di
quanto abbiamo gi spiegato. ST62/E10 - ST62/E15 - ST62/T10 - ST62/T15

TRASFERIRE un FILE sul DISCHETTO Se utilizzerete dei microprocessori ST6 con 4K di


memoria, cio i:
Nel caso voleste trasferire un programma gi as-
semblato dallHard-Disk in un dischetto, ad esem- ST62/E20 - ST62/E25 - ST62/T20 - ST62/T25
pio per darlo ad un amico, dovrete, sempre par-
tendo dal menu principale: dovrete sostituire il numero 880h con il numero
080h, quindi dovrete scrivere:
premere ALT+F
poi premere D .ORG 080h

Apparir la scritta C:\ST6> Pertanto se usate un ST6 da 2K di memoria, do-


A questo punto inserite il dischetto nel drive, ed vrete necessariamente scrivere allinizio del pro-
ammesso che abbiate chiamato il programma che gramma 880h, perch se scriverete 080h, non ri-
volete trasferire DPLPROVA, dovrete scrivere que- sultando presenti in questo ST6 queste celle di
sta istruzione: memoria, non riuscirete a trasferire nessun pro-
gramma, ed il programmatore lo segnaler.
C:\ST6>Copy DPLPROVA.ASM A:\DPLPROVA.ASM Se usate un ST6 da 4K di memoria dovrete scri-
vere allinizio del programma 080h per poter utiliz-
poi Enter zare tutta la sua memoria.
Quando apparir la scritta 1 file copiato dovrete Facciamo presente che se avete un programma da
scrivere: 2K, che ovviamente inizier con lindirizzo di me-
moria 880h, lo potrete tranquillamente trasferire
C:\ST6>EXIT poi Enter con lo stesso indirizzo anche in un ST6 da 4K.
In questo caso partendo dallindirizzo 880h rimar-
TRASFERIRE dal FLOPPY allHARD-DISK ranno inutilizzate tutte le celle di memoria da 080h
a 87Fh.
Per trasferire un programma dal dischetto allHard-
Disk dovrete, quando vi trovate nel menu princi-
pale:
COSTO DI REALIZZAZIONE
premere ALT+F
poi premere D Tutti i componenti per realizzare la scheda Display
siglata LX.1204 visibile nelle figg.6-7 completa di
Apparir la scritta C:\ST6> circuito stampato, integrato M.5450 e 4
A questo punto inserite il dischetto nel drive, ed display ........................................................ 18,60
ammesso che il programma da trasferire si chiami
DPLPROVA, dovrete scrivere questa istruzione: Tutti i componenti per realizzare la scheda Rel si-
glata LX.1205 visibile nelle figg.9-10 completa di
C:\ST6>Copy A:\DPLPROVA.ASM DPLPROVA.ASM circuito stampato e 4 rel .......................... 19,10
poi Enter
Costo del solo stampato LX.1204 ............... 4,34
Quando comparir la scritta 1 file copiato dovre- Costo del solo stampato LX.1205 ............... 5,06
te scrivere:
Ai prezzi riportati andranno aggiunte le sole spese
C:\ST6>EXIT poi Enter di spedizione a domicilio.
Quando un lettore ci scrive che, montato un nostro per capire per quale motivo apparisse un simile er-
progetto non riesce a farlo funzionare, presumia- rore, abbiamo chiesto a 2 lettori residenti a Ra-
mo che abbia commesso un errore, poich prima venna e a Ferrara se fossero disposti a venire a
di pubblicare nella rivista un qualsiasi circuito, no- Bologna portando il loro computer, perch vole-
stra consuetudine farne montare una decina di e- vamo cercare di scoprire la causa di questa ano-
semplari e se constatiamo che uno di questi risul- malia.
ta critico o presenta qualche anomalia lo ripor- Infatti se su 4.738 kit che funzionano in modo per-
tiamo in laboratorio per ricercarne le cause e per fetto solo 16 si rifiutano di farlo, il difetto pu es-
eliminarle. sere causato solo dal computer ed infatti grazie a
Questo modo di procedere lo adottiamo per ridur- questi 2 lettori siamo riusciti ad individuarlo.
re al minimo le riparazioni e per assicurare al let- Abbiamo scoperto che nei loro computer il segna-
tore il sicuro ed immediato funzionamento di ogni le che entrava nel piedino 4 del CONN.1 (vedi nel-
nostro progetto. lo schema elettrico riportato a pag.31 della rivista
A volte si verificano anche delle strane anomalie N.172/173 il segnale D2 che, tramite la R7, giun-
che fanno arrabbiare i lettori ed impazzire i tecni- ge al piedino 1 della porta IC1/E) era strettissi-
ci della consulenza. mo oppure aveva unampiezza ridotta.

NOTA per il programmatore


Se voi foste un tecnico che da anni usa questo pro- Scartata lidea di manomettere il computer, abbia-
grammatore per ST6 senza mai riscontrare nes- mo risolto il problema allargando limpulso con un
sun inconveniente, che conosce tanti amici (esat- piccolo condensatore da 470 picoFarad ceramico
tamente 4.738) che lo hanno realizzato con suc- posto tra la resistenza R7 e la massa come visibi-
cesso, usandolo con diversi tipi di computer, e poi le nelle figg.1-2.
trovaste solo 16 lettori che si lamentano perch il Immediatamente abbiamo comunicato ai 16 letto-
loro montaggio non funziona, cosa rispondereste ri che non riuscivano a programmare gli ST6, di
loro ? aggiungere sul loro programmatore questo con-
Senzaltro che hanno commesso un errore nel densatore da 470 picoFarad e questi ci hanno ri-
montaggio, ed questa anche la nostra risposta. sposto che la scritta:
Ci che ci ha stupito constatare che a tutti e 16
questi lettori sul monitor appariva lo stesso mes- Target chip not present or defective!
saggio, cio:
non appare pi e con questa semplice modifica o-
Target chip not present or defective! ra riescono a programmare qualsiasi ST6.

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.

LX.1170 per micro ST6


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
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 per Esempio n.15


LDI pdir_a,00000000B ; in queste tre righe abbiamo settato
LDI popt_a,10000000B ; il piedino A7 come ingresso analogico
LDI port_a,10000000B ;
LDI pdir_b,00011111B ; in queste righe abbiamo settato
LDI popt_b,00011111B ; i piedini da B0 a B4 come uscite
LDI port_b,00000000B ;
ripeti LDI wdog,255 ; carichiamo il watchdog
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
attendi JRR 6,adcr,attendi ; attendere che avvenga la conversione A/D
LD a,addr ; carica nellaccumulatore A, il numero digitale
CPI a,255 ; compara il valore di A con il numero 255
JRNC LED5 ; se A uguale a 255 salta alletichetta LED5
CPI a,204 ; compara il valore di A con il numero 204
JRNC LED4 ; se A maggiore di 204 salta alletichetta LED4
CPI a,153 ; compara il valore di A con il numero 153
JRNC LED3 ; se A maggiore di 153 salta alletichetta LED3
CPI a,102 ; compara il valore di A con il numero 102
JRNC LED2 ; se A maggiore di 102 salta alletichetta LED2
CPI a,51 ; compara il valore di A con il numero 51
JRNC LED1 ; se A maggiore di 51 salta alletichetta LED1
JP LED0 ; se A minore di 51 salta alletichetta LED0
LED0 LDI port_b,00000000B ; non accendere nessun diodo led
JP ripeti ; salta alletichetta ripeti del watchdog
LED1 LDI port_b,00000001B ; accendi il led sul piedino B0
JP ripeti ; salta alletichetta ripeti del watchdog
LED2 LDI port_b,00000011B ; accendi i led sui piedini B0 - B1
JP ripeti ; salta alletichetta ripeti del watchdog
LED3 LDI port_b,00000111B ; accendi i led sui piedini B0 - B1 - B2
JP ripeti ; salta alletichetta ripeti del watchdog
LED4 LDI port_b,00001111B ; accendi i led sui piedini B0 - B1 - B2 - B3
JP ripeti ; salta alletichetta ripeti del watchdog
LED5 LDI port_b,00011111B ; accendi i led sui piedini B0 - B1 - B2 - B3 - B4
JP ripeti ; salta alletichetta ripeti del watchdog
PROGRAMMA SALTO Esempio n. 15 bis
LDI pdir_a,00000000B ; in queste tre righe abbiamo settato
LDI popt_a,10000000B ; il piedino A7 come ingresso analogico
LDI port_a,10000000B ;
LDI pdir_b,11111111B ; in queste righe abbiamo settato
LDI popt_b,11111111B ; i piedini della porta B come uscite
LDI port_b,00000000B ;
ripeti LDI wdog,255 ; carichiamo il watchdog
LDI adcr,00110000B ; provvedi a convertire da analogico a digitale
attendi JRR 6,adcr,attendi ; attendere che avvenga la conversione A/D
LD a,addr ; carica nellaccumulatore A il numero digitale
CPI a,255 ; compara il valore di A con 255
JRC etich1 ; se A minore di 255 salta a etich1
JP LED8 ; salta a LED8
etich1 CPI a,224 ; compara il valore di A con 224
JRC etich2 ; se A minore di 224 salta a etich2
JP LED7 ; salta a LED7
etich2 CPI a,192 ; compare il valore di A con 192
JRC etich3 ; se A minore di 192 salta a etich3
JP LED6 ; salta a LED6
etich3 CPI a,160 ; compara il valore di A con 160
JRC etich4 ; se A minore di 160 salta a etich4
JP LED5 ; salta a LED5
etich4 CPI a,128 ; compara il valore di A con 128
JRC etich5 ; se A minore di 128 salta a etich5
JP LED4 ; salta a LED4
etich5 CPI a,96 ; compara il valore di A con 96
JRC etich6 ; se A minore di 96 salta a etich6
JP LED3 ; salta a LED3
etich6 CPI a,64 ; compara il valore di A con 64
JRC etich7 ; se A minore di 64 salta a etich7
JP LED2 ; salta a LED2
etich7 CPI a,32 ; compara il valore di A con 32
JRC etich8 ; se A minore di 32 salta a etich8
JP LED1 ; salta a LED1
etich8 JP LED0 ; salta a LED0
LED0 LDI port_b,00000000B ; non accendere nessun diodo led
JP ripeti ; salta alletichetta ripeti del watchdog
LED1 LDI port_b,00000001B ; accendi il led sul piedino B0
JP ripeti ; salta alletichetta ripeti del watchdog
LED2 LDI port_b,00000011B ; accende i led sui piedini B0 - B1
JP ripeti ; salta alletichetta ripeti del watchdog
LED3 LDI port_b,00000111B ; accende i led sui piedini B0 - B1 - B2
JP ripeti ; salta alletichetta ripeti del watchdog
LED4 LDI port_b,00001111B ; accende i led sui piedini B0 - B1 - B2 - B3
JP ripeti ; salta alletichetta ripeti del watchdog
LED5 LDI port_b,00011111B ; accende i led sui piedini B0 - B1 - B2 - B3 - B4
JP ripeti ; salta alletichetta ripeti del watchdog
LED6 LDI port-b,00111111B ; accende i led sui piedini da B0 a B5
JP ripeti ; salta alletichetta ripeti del watchdog
LED7 LDI port-b,01111111B ; accende i led sui piedini da B0 a B6
JP ripeti ; salta alletichetta ripeti del watchdog
LED8 LDI port-b,11111111B ; accende i led sui piedini da B0 a B7
JP ripeti ; salta alletichetta ripeti del watchdog
Nel programma presentato a pag.124 come E- lo A/D converter, potevamo utilizzare come in-
sempio N.15 abbiamo scritto nella 12 riga que- gresso per segnali analogici un solo piedino.
sta istruzione: In pratica possibile utilizzare anche pi piedini
come ingressi analogici, sempre che si scriva un
JRNC LED5 ; se A uguale a 255 salta alleti- programma che vada a leggere in multiplexer le
chetta LED5 tensioni presenti su tutti i piedini dingresso che ab-
biamo prescelto per questa funzione.
Nel caso in cui si desiderino aggiungere degli altri Per farvi comprendere come un solo A/D conver-
led, sar necessario modificare il programma co- ter possa leggere le tensioni poste su diversi pie-
me segue: dini, vi proponiamo qui di seguito un esempio.
Ammesso di possedere un solo voltmetro e di vo-
JRC etich1; se A minore di 255 salta a etich1 ler leggere con questo valori di tensione presenti
JP LED8; salta a LED8 su punti diversi, potremo farlo se sullingresso del
Etich1; etichetta 1 che proseguir con il pro- voltmetro applicheremo il cursore di un commu-
gramma tatore rotativo e sui terminali di commutazione le
diverse tensioni che vorremo leggere.
Se ancora tutto questo non vi risulta chiaro, con- Ruotando il commutatore sulle diverse posizioni,
frontate il primo programma Esempio N.15 con il potremo leggere pi tensioni pur disponendo di
secondo programma modificato, che abbiamo chia- un solo voltmetro.
mato Esempio N.15 BIS. Vogliamo comunque ricordarvi che come ingressi
analogici potremo usare qualsiasi piedino ad ec-
cezione dei soli piedini A0-A1-A2-A3.
CONVERTITORE A/D Nel programma che qui riportiamo come Pro-
gramma A/D vi facciamo vedere come bisogner
Nella rivista N.175/176 a pag.123 abbiamo scritto scrivere le istruzioni per poter leggere le tensioni
che, risultando presente allinterno dellST6 un so- presenti sui piedini dingresso di B5-B6-B7.

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-

SCHEDA con 4 TRIAC


Nel dischetto DF.1202/3 identico al DF.1170/3 che rire per modificarla.
da oggi forniamo, troverete questi 18 programmi: Anche in tutti gli altri programmi troverete di lato ad
ogni riga un commento che vi spiegher se pote-
te modificarla, sostituirla, o cancellarla.
1^ CONTA.ASM Le modifiche non fatele mai sul nostro file, ma su
2^ LED.ASM un identico file che duplicherete attribuendogli un
3^ LOTTO.ASM nome diverso, in modo da avere sempre a dispo-
4^ STANDARD.ASM sizione il file originale per poterlo consultare o con-
frontare per scoprire eventuali errori sui files modi-
5^ CRONOMET.ASM ficati.
6^ DISPLAY.ASM
7^ LM093.ASM
Tutte le istruzioni richieste per poter duplicare un
8^ OROLOGIO.ASM
file le troverete in questo articolo.
9^ RELE.ASM
Non dovrete mai modificare i programmi presen-
10^ TEMPOR.ASM
ti allinterno del dischetto che terminano con BAT
11^ TIMER.ASM
- EXE - COM - DEV - HEX.
12^ TRIAC.ASM
Sul disco che vi forniremo, oltre ai programmi .A-
13^ CLOCK.ASM
SM, presente anche un EDITOR che vi servir
14^ TIME90.ASM
per scrivere dei programmi e per ASSEMBLARE i
15^ TEMP90.ASM
files prima di caricarli sui microprocessori ST6 tra-
mite il programmatore LX.1170 (leggere la rivista
16^ CONTA.HEX
N.172-173).
17^ LED.HEX
18^ LOTTO.HEX
Una volta comprese le funzioni dei vari blocchi,
potrete ampliarli, modificarli oppure trasferirli su
Nota = I primi 4 programmi ve li avevamo gi for- un vostro programma per poter gestire, secondo la
niti con il primo disco floppy assieme al program- vostra fantasia, queste ed altre schede speri-
matore per ST6 (vedi rivista n.172-173). mentali.
per microprocessori ST6
Sul precedente numero della rivista vi abbiamo presentato due schede
per ST6, una per accendere dei normali display a 7 segmenti ed unal-
tra per eccitare dei rel. In questo numero vi presentiamo una scheda
per eccitare quattro diodi Triac, spiegandovi anche come si possono
modificare i programmi da noi forniti.

UN PROMEMORIA blicato nella rivista N.172/173, che sar indispen-


sabile per poter trasferire il programma che sce-
Anche se nel numero 179 della rivista abbiamo glierete o che avrete scritto dal computer alla me-
spiegato che occorre necessariamente inserire moria del microprocessore ST6.
queste schede sperimentali nel bus siglato Dopo aver trasferito il programma nel microproces-
LX.1202, molti ci chiedono se e su quale tipo di sore, dovrete togliere questultimo dallo zoccolo Tex-
computer occorra collegarle e se per le prove con- tool del programmatore LX.1170 ed inserirlo nella
venga usare un ST6 cancellabile o non cancel- scheda bus siglata LX.1202 per poter gestire le sche-
labile. de sperimentali che applicherete su questo bus.
Vi ricordiamo che il solo programmatore LX.1170
- La scheda bus siglata LX.1202 risulta progettata andr collegato alla porta parallela del vostro com-
per ricevere tutte le schede sperimentali che vi ab- puter, purch questo sia un IBM o un compatibi-
biamo presentato e anche le future con display le serie XT - AT - SX - DX tipo 8088 - 286 - 386 -
LCD. Questa scheda non andr collegata a nes- 486 - Pentium con qualsiasi frequenza di clock,
sun computer, ma serve per inserirvi lST6 che ab- compresi anche i portatili con installato il sistema
biamo programmato. operativo DOS dal 3 al 6.2.
Ripetiamo nuovamente che il software per ST6
- Oltre alla scheda bus vi servir anche il Pro- non assolutamente compatibile per computer ti-
grammatore per micro ST6 siglato LX.1170 pub- po Commodore, Apple, Amiga, ecc.
- Per le prove sperimentali conviene scegliere un
microprocessore tipo ST62E20 con 4 K di Rom (il
micro ST62E10 stato messo fuori produzione dal-
la SGS), perch, anche se risulta molto costoso,
lo potrete cancellare e riutilizzare diverse centinaia
di volte per memorizzare degli altri nuovi e diver-
si programmi.

- Per cancellare uno di questi microprocessori po-


trete usare la lampada ad ultravioletti siglata
LX.1183 presentata sulla rivista N.174.

- Se volete usare i pi economici microprocessori


tipo ST62T10 o ST62T20 potete farlo, ma poich
Fig.1 Per duplicare il programma STAN- questi non sono cancellabili, se sbaglierete nel-
DARD.ASM dovrete prima richiamare lEdi- lo scrivere un programma, dovrete buttarli ed ac-
tor, scrivendo C:\>ST6 poi Enter. Dopodi- quistarne degli altri.
ch scriverete C:\ST6>ST6 e a questo pun- Normalmente i microprocessori non cancellabili
to potrete premere il tasto Enter. vengono utilizzati solo dopo aver testato pi di u-
na volta il micro cancellabile tipo ST62E20, per a-
vere la certezza che nel vostro programma non
vi siano degli errori.

TABELLA N.1 micro NON CANCELLABILI


Sigla memoria Ram zoccolo piedini utili
Micro utile utile piedini per i segnali
ST62T.10 2 K 64 byte 20 pin 12
ST62T.15 2 K 64 byte 28 pin 20
ST62T.20 4 K 64 byte 20 pin 12
ST62T.25 4 K 64 byte 28 pin 20

Fig.2 Premete i tasti ALT F poi F3 e, cos fa-


cendo, vi appariranno tutti i files ASM. Por- TABELLA N.2 micro CANCELLABILI
tate il cursore sulla riga STANDARD.ASM,
Sigla memoria Ram zoccolo piedini utili
premete Enter e, in tal modo, vi apparir la
Micro utile utile piedini per i segnali
finestra di fig.3.
ST62E.20 4K 64 byte 20 pin 12
ST62E.25 4K 64 byte 28 pin 20

- Quando vorrete scrivere dei nuovi programmi do-


vrete sempre caricare il file STANDARD.ASM, per-
ch questo il file sorgente che definisce la loca-
zione dei 5 registri del micro e fa il settaggio del-
le periferiche, cio una inizializzazione completa.

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

Ammettiamo ad esempio di voler creare un nuovo


programma chiamato ALIBABA.
La prima operazione da effettuare sar quella di u-
scire da qualsiasi programma in utilizzo, come ad
esempio Windows, Pcshell, Norton, ecc., in mo-
do da vedere in alto a sinistra del vostro schermo
il solo Prompt dei comandi, cio C:\>
A questo punto potrete richiamare il programma
ST6 scrivendolo indifferentemente sia in maiusco-
Fig.5 In tutti i listati troverete di lato un
lo che in minuscolo:
commento condensato che vi aiuter a
capire quale funzione esplicano le varie ri-
C:\>CD ST6 poi premete Enter
ghe. Con un po di esperienza riuscerete
molto facilmente a modificarle.
e in questo modo vi apparir:

C:\ST6>

poi scrivete ST6 come sotto riportato:

C:\ST6>ST6 poi premete Enter

e subito vedrete apparire sul monitor del computer


la finestra dellEDITOR (vedi fig.1).

A questo punto premete contemporaneamente i ta-


sti ALT F, poi F3 e vi apparir una seconda fine-
stra con gli elenchi di tutti i files .ASM (vedi fig.2).
Premete il tasto Enter e vedrete che il cursore an-
dr sul primo file .ASM colorandolo di verde. Fig.6 Corretto o riscritto, dovrete salvare
il nuovo programma premendo il tasto F2,
dopodich lo potrete ASSEMBLARE pre-
Utilizzando i tasti freccia presenti sulla tastiera,
mendo i tasti ALT T poi A. Se non avete
portate il cursore sulla riga STANDARD.ASM, poi
commesso errori apparir SUCCESS.
premete Enter e vedrete apparire sul monitor il li-
stato di questo programma che potrete leggere
dallinizio fino alla fine.
A questo punto se premerete contemporaneamen- ELENCO COMPONENTI LX.1206
te i due tasti ALT F vedrete apparire una nuova
maschera (vedi fig.3). R1 = 1.000 ohm 1/4 watt
Con il tasto freccia gi andate alla riga dove scrit- R2 = 100 ohm 1/4 watt
to: R3 = 1.000 ohm 1/4 watt
R4 = 100 ohm 1/4 watt
SAVE as.... poi premete Enter R5 = 1.000 ohm 1/4 watt
R6 = 100 ohm 1/4 watt
Cos facendo vi apparir una riga con scritto: R7 = 1.000 ohm 1/4 watt
R8 = 100 ohm 1/4 watt
C:\ST6\STANDARD.ASM R9 = 220 ohm 1/4 watt
R10 = 220 ohm 1/4 watt
Poich intendiamo chiamare il nuovo programma R11 = 220 ohm 1/4 watt
ALIBABA, questa riga la dovrete riscrivere come R12 = 220 ohm 1/4 watt
segue: R13 = 10.000 ohm 1/4 watt
R14 = 10.000 ohm 1/4 watt
R15 = 10.000 ohm 1/4 watt
C:\ST6\ALIBABA.ASM poi premete Enter
R16 = 10.000 ohm 1/4 watt
C1 = 47.000 pF pol. 400 V.
Nota = I nomi dei files non debbono mai avere pi
C2 = 47.000 pF pol. 400 V.
di 8 caratteri escluso ovviamente .ASM
C3 = 47.000 pF pol. 400 V.
Corretta questa riga, premete i tasti ALT F3 e vi C4 = 47.000 pF pol. 400 V.
apparir nuovamente la maschera dellEDITOR. C5 = 100.000 pF poliestere
A questo punto dovrete premere i due tasti ALT F, C6 = 100.000 pF poliestere
poi F3 e nella lista dei files troverete il nuovo file C7 = 100.000 pF poliestere
denominato ALIBABA.ASM. C8 = 100.000 pF poliestere
TRC1 = triac tipo 500 V. 5 A.
Dopo aver premuto Enter, con i tasti delle frecce TRC2 = triac tipo 500 V. 5 A.
portate il cursore sul file ALIBABA.ASM e, in que- TRC3 = triac tipo 500 V. 5 A.
sto modo, vi apparir il listato duplicato del file TRC4 = triac tipo 500 V. 5 A.
STANDARD.ASM, che potrete tranquillamente OC1 = fototriac tipo MOC.3020
modificare perch ora lavorerete sul file ALIBA- OC2 = fototriac tipo MOC.3020
BA.ASM. OC3 = fototriac tipo MOC.3020
Se, per ipotesi, tutte le modifiche che apporterete OC4 = fototriac tipo MOC.3020
sul file ALIBABA.ASM non lo faranno funzionare P1 = pulsante
per qualche errore da voi commesso, lo potrete P2 = pulsante
cancellare e nuovamente ricopiare, utilizzando il P3 = pulsante
file originale STANDARD.ASM come vi abbiamo P4 = pulsante
appena spiegato.
Nel programma che in precedenza si chiamava
STANDARD.ASM e che ora avete chiamato ALI-
BABA.ASM dovrete ricordarvi che la riga:
.org 0880h

non va modificata se userete dei micro con 2K di


memoria, vale a dire se userete degli ST62E10, ingressi o uscite a seconda delle esigenze del vo-
ST62E15, ST62T10, ST62T15. stro programma.
Nel caso non sappiate come si faccia a settare le
Se invece userete dei micro con 4K, vale dire de- porte, vi consigliamo di leggere larticolo Impara-
gli ST62E20, ST62E25, ST62T20, ST62T25, que- re a programmare i microprocessori ST6 pub-
sta riga va modificata come segue: blicato nella rivista n.175-176.

.org 080h Terminate tutte le modifiche e scritto il nuovo pro-


gramma che si chiama ALIBABA.ASM, lo dovre-
A questo punto dovrete modificare il settaggio di te salvare premendo il tasto F2.
tutte le porte A-B-C, cio dovrete impostarle come Ricordatevi di premere il tasto funzione F2 tutte le
LP1 LP2 LP3 LP4

USCITA 1 USCITA 2 USCITA 3 USCITA 4

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

OC1 OC2 OC3 OC4


1 2 1 2 1 2 1 2 1 2 3

R9 R10 R11 R12 MOC 3020

R13 R14 R15 R16


A1 A2 G

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.

In pratica, non potremo mai farlo, perch dobbia-


mo tenere impegnate diverse porte A e B per ge- INSERIMENTO SCHEDA nel BUS
stire anche le altre schede che inseriremo nel bus
assieme alla scheda Triac o Rel. Questa scheda la potrete inserire nel bus siglato
LX.1202, indifferentemente su un qualsiasi con-
Quando sui piedini della porta B siglati B4-B5-B6- nettore femmina presente su questo stampato e lo
B7 (vedi fig.7) apparir un livello logico 1, vale a stesso dicasi per la scheda dei display che utiliz-
dire una tensione positiva, questa polarizzer il zerete per visualizzare i relativi tempi.
diodo emittente presente allinterno dei fotoac- Sulle morsettiere di destra indicate Entrata Ten-
coppiatori siglati OC1-OC2-OC3-OC4 e di conse- sione Alternata dovrete applicare la tensione che
guenza si ecciter il Triac ad essi collegato. servir per alimentare i motorini o le lampade che
Questi quattro fotoaccoppiatori li abbiamo utiliz- applicherete sulle quattro morsettiere duscita.
zati per separare elettricamente luscita del micro- Per le prime prove vi consigliamo di utilizzare una
processore dalla tensione che applicheremo sul- tensione alternata di 14 volt fornita dallapposito
le due boccole visibili a destra indicate con la scrit- alimentatore LX.1203, presentato sulla rivista
ta Entrata Tensione Alternata. N.179, collegando alle uscite dei Triac delle nor-
Per alimentare i Triac potremo usare qualsiasi ten- mali lampadine da 12 volt massimo 3 watt.
sione alternata partendo da un minimo di 4,5 volt Se lo ritenete opportuno potrete anche entrare nel-
per arrivare ad un massimo di 220 volt. la morsettiera di destra con una tensione alterna-
Ovviamente sulle morsettiere indicate uscita 1 - ta di 220 volt collegando alluscita dei Triac delle
uscita 2 - uscita 3 - uscita 4 dovremo applicare lampadine da 220 volt, ma attenzione, se usere-
delle lampadine, dei motorini in alternata, o qual- te la tensione di rete ricordatevi di non toccare mai
siasi altra apparecchiatura elettrica che funzioni le parti metalliche dei Triac e le uscite dei fotoac-
con il valore di tensione utilizzata per alimentare i coppiatori per evitare che la tensione dei 220 volt
Triac. si scarichi sul vostro corpo.
Non utilizzate una tensione continua per alimen- Con questa scheda potrete utilizzare tutti i pro-
tare i Triac. Se volete usare una tensione conti- grammi che abbiamo usato per la scheda REL
nua dovrete necessariamente servirvi della sche- siglata LX.1025. A fine articolo abbiamo ripor-
da REL siglata LX.1205 presentata nella rivista tato come si possono modificare i tempi e le fun-
N.179. zioni.
Fig.8 Schema pratico di montaggio della scheda LX.1206. Il circuito stampato che vi for-
niremo un doppia faccia con fori metallizzati, quindi non cercate mai di allargare que-
sti fori con una punta da trapano perch, cos facendo, asportereste il sottile strato di ra-
me applicato per via galvanica al loro interno e che necessario per collegare le piste
presenti sotto al circuito stampato con quelle presenti sopra.

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-

Fig.10 A quanti desiderano se-


guire questo corso sugli ST6 con-
sigliamo di procurarsi il kit
LX.1170 che servir per trasferire
i programmi che abbiamo as-
semblato da .ASM in .HEX, pi il
BUS siglato LX.1202 completo
del suo alimentatore LX.1203.
Questo BUS LX.1202 servir,
prossimamente, per controllare
la scheda con un display LCD nu-
merico e la scheda con un display
LCD alfanumerico.
na directory con questo nome e copier nellHard-
Disk tutto il contenuto del dischetto scompattan-
do i files.

Se volete trasferire il contenuto su una diversa di-


rectory, ad esempio LX1202, quando sul monitor
vi apparir:

C:\ST6

dovrete cancellare il nome della directory prece-


dente, cio ST6 (vedi fig.11), scrivendo in sua so-
stituzione LX1202 come qui sotto riportato:

C:\LX1202 poi premete Enter Fig.11 Quando trasferite il programma dal


dischetto nellHard-Disk, se volete chiama-
re la directory ST6 in LX1202, quando vi ap-
Ricordatevi che qualsiasi nome di directory sce- pare questa riga sostituite C:\ST6 con la
glierete non dovrete mai superare gli 8 caratteri e scritta C:\LX1202 e poi premete Enter.
nemmeno utilizzare dei caratteri che il sistema o-
perativo DOS non accetta, quali ad esempio bar-
re, punto interrogativo, segno di uguale, ecc.
Se farete questo errore il DOS ve lo segnaler im-
mediatamente con la scritta ERROR su uno sfon-
do rosso.

Ad alcuni lettori che ci avevano segnalato di non


riuscire a trasferire il contenuto del dischetto
nellHard-Disk perch sul computer appariva subi-
to la scritta error o la mancanza di un file, abbia-
mo consigliato di creare prima una directory con
il nome ST6, poi di trasferire su questa tutto il con-
tenuto del dischetto e da ultimo di scompattare il
programma procedendo come segue: Fig.12 Immediatamente tutti i files com-
pattati si scompatteranno. Ricordatevi che
Quando sul monitor appare il prompt C:\> dovrete il programma occupa circa 1 MEGA di me-
scrivere: moria. Non premete nessun tasto durante
la fase di scompattazione.
C:\>MD ST6 poi premete Enter

In questo modo riapparir il prompt C:\> e a que-


sto punto dovrete inserire nel driver il disco che vi
abbiamo fornito con la sigla DF1170.3 o DF1202.3
(il contenuto dei due dischetti identico) e scrive-
re quanto segue:

C:\>COPY A: *.* C:\ST6 poi premere Enter

Nota = Rispettate gli spazi: per agevolarvi abbia-


mo colorato in azzurro le scritte che il computer
far apparire sul monitor, senza colore quelle che
dovrete scrivere voi inserendo come spaziatura un
Fig.13 Solo quando sul monitor apparir la
rettangolo in azzurro.
scritta BUON DIVERTIMENTO potrete pre-
mere un qualsiasi tasto per uscire. Per ri-
Terminato di copiare il contenuto del dischetto chiamare il programma dovrete scrivere
nellHard-disk, apparir nuovamente la scritta C:\>, C:\>ST6 poi C:\ST6>ST6 ed Enter.
ma non potrete ancora usare il programma ST6
perch non lavete ancora scompattato. I kit che vi serviranno per provare tutte le nostre
Per farlo dovrete scrivere: schede sperimentali sono i seguenti:

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.

I PROGRAMMI LX.1204 = Questo kit, pubblicato nella rivista


N.179, provvisto di 4 display a sette segmenti ser-
Prima di trasferire tutti i files con lestensione .A- ve per realizzare dei cronometri-orologi-timer, ecc.
SM nella memoria di un micro ST6, li dovrete as- Questa scheda va inserita nei connettori presenti
semblare per ottenere un file in estensione .HEX nella scheda LX.1202.
Eseguita questa operazione, nel computer trove-
rete sempre due identici files, uno ASM ed uno LX.1205 = Questo kit, pubblicato nella rivista
HEX. N.179, provvisto di 4 rel serve per alimentare lam-
Se tenterete di trasferire dallHard-disk alla memo- pade-motorini o accendere qualsiasi apparecchia-
ria di un micro ST6 un file ASM, il computer se- tura elettronica. Questa scheda va inserita nei con-
gnaler errore con questa scritta in inglese: nettori presenti nella scheda LX.1202.

error cant open file


LX.1206 = Questo kit, pubblicato nella rivista
N.180, provvisto di 4 Triac serve per alimentare
oppure con: delle lampade - motorini o altre apparecchiature e-
lettroniche che funzionano con tensioni alternate.
enter name of source HEX file Questa scheda va inserita nei connettori presenti
nella scheda LX.1202.
Per sapere se il file richiesto risulta convertito nelle-
stensione HEX, potrete procedere come segue.
Quando sul monitor del computer apparir la fine-
stra dellEditor (vedi fig.1) premete i tasti ALT F,
poi F3 e quando sul monitor vi apparir la fascia CRONOMET.HEX
con la scritta:
Questo programma un semplice cronometro,
quindi per visualizzare i tempi occorre inserire nel
*.ASM
bus LX.1202 la sola scheda dei display siglata
LX.1204.
sostituitela con: Se nel bus inserirete le schede dei rel o dei triac,
non potrete renderle attive perch nel programma
*.HEX poi premete Enter non presente nessuna istruzione per gestirle.
Una volta caricato su un micro ST6 vergine il pro-
e, in questo modo, vi appariranno tutti i files in gramma CRONOMET.HEX ed inserito nello zoc-
.HEX. colo presente sulla scheda bus LX.1202, appena
alimenterete il circuito sui 4 display apparir il nu- Quindi basta cambiare il numero dopo la virgola
mero: in questi registri per modificare il numero visualiz-
zato.
00:00 Poich questo programma fa molto poco, vi consi-
gliamo di visualizzarlo solo sul monitor e di non me-
Premendo il pulsante P1 il micro comincer a con- morizzarlo su un ST6.
tare in avanti ad intervalli di tempo di un secondo,
quindi sui display vedrete apparire i numeri:

00:01 - 00:02 - 00:03 ecc.


OROLOGIO.HEX
Sui primi due display di sinistra vedrete i minuti e
sui display di destra i secondi. Questo programma un semplice orologio.
I due led che separano i display dei minuti e dei Per poter visualizzare le ore ed i minuti dovrete
secondi lampeggeranno con una cadenza di un se- inserire nel bus LX.1202 la sola scheda dei display
condo. siglata LX.1204.
Come noterete, quando si raggiunto un tempo di Se nel bus inserirete le schede dei rel o dei triac,
00:59 secondi, subito dopo si passer al tempo non potrete renderle attive, perch nel programma
successivo di 01:00, cio 1 minuto e 00 secondi. non presente nessuna istruzione per gestirle.
Il massimo numero che potrete visualizzare sar Una volta caricato su un micro ST6 vergine il pro-
quindi di 99 minuti e 59 secondi, dopodich ap- gramma OROLOGIO.HEX ed inserito nello zocco-
parir 00:00. lo presente nella scheda bus LX.1202, non appe-
Se in fase di conteggio premerete P1, il conteggio na alimenterete il circuito sui 4 display apparir il
si bloccher sul tempo raggiunto e premendolo numero:
nuovamente questo ripartir dal numero sul quale
si era fermato. 00:00
Se invece premerete il pulsante P2, il conteggio ri-
partir da zero, cio il tempo visualizzato si azze- I primi due display di sinistra segneranno le ore,
rer. mentre i due di destra i minuti.
I due diodi led che separano i due display lam-
peggeranno con una cadenza di 1 secondo.
Come noterete, raggiunte le ore 23 ed i 59 minu-
DISPLAY.HEX ti, dopo 1 minuto si passer alle 24 ore che ver-
ranno visualizzate con 00:00.
Questo programma serve solo per far capire come Per mettere a punto le ore dellorologio si utiliz-
si possa visualizzare il numero desiderato sui 4 zer il pulsante P2 e, per mettere a punto i minu-
display della scheda siglata LX.1204. ti, il pulsante P1.
Una volta caricato su un micro ST6 vergine il pro- Facciamo presente che potrete solo far avanzare
gramma DISPLAY.HEX ed inserito nello zoccolo i numeri e non indietreggiare.
presente sulla scheda bus LX.1202, non appena
alimenterete il circuito sui 4 display apparir il nu-
mero:

12:34 RELE.HEX

e nientaltro. Questo programma serve solo per far eccitare dei


Questo programma labbiamo composto soltanto rel o dei triac, quindi nella scheda bus LX.1202
per farvi capire come si deve scrivere una istru- potrete inserire la sola scheda dei Rel siglata
zione per gestire in modo seriale lintegrato M.5450. LX.1205 o la sola scheda dei Triac siglata
Le righe da utilizzare per cambiare questo nume- LX.1206.
ro sono quelle numerate dalla numero 159 alla nu- Se inserirete nel bus anche la scheda dei display
mero 162 del listato DISPLAY.ASM: siglata LX.1204 non potrete renderla attiva, perch
nel programma non presente nessuna istruzione
ldi bcd3,1 ; 159 accende 1 sul display 1 per gestirla.
ldi bcd4,2 ; 160 accende 2 sul display 2 Una volta caricato su un micro ST6 vergine il pro-
ldi bcd1,3 ; 161 accende 3 sul display 3 gramma RELE.HEX ed inserito nello zoccolo pre-
ldi bcd2,4 ;162 accende 4 sul display 4 sente sulla scheda bus LX.1202, non appena ali-
menterete il circuito tutti i rel risulteranno disec- plicemente scrivere 12 al posto di 3 come qui sot-
citati. to riportato:
Non appena premerete uno o pi dei pulsanti da
P1 a P4 si ecciter il rel o il triac corrispondente. ldi minuti,12 ; 240 carica 12 minuti
Premendolo una seconda volta, il rel o il triac si
disecciter. Se volete cambiare anche i secondi dovrete mo-
dificare il numero sulla riga 239 che attualmente
0:

TEMPOR.HEX ldi secondi,0 ; 239 carica 0 secondi

Questo programma un semplice temporizzato- Ammesso che ai 12 minuti gi presenti vogliate


re con conteggio allindietro. sommare 28 secondi, dovrete scrivere nella riga
Nel bus LX.1202 dovrete inserire, oltre alla sche- 239 il numero 28 come qui sotto riportato:
da display siglata LX.1204, anche la scheda Rel
siglata LX.1205, oppure la scheda Triac siglata ldi secondi,28 ; 239 carica 28 secondi
LX.1206.
Una volta caricato su un micro ST6 vergine il pro-
gramma TEMPOR.HEX ed inserito nello zoccolo Cos facendo il conteggio partir da 12:28 e quando
presente nella scheda bus LX.1202, non appena raggiunger lo 00:00 si ecciter il rel 1 o il triac 1.
alimenterete il circuito, tutti i rel o i triac risulte-
ranno diseccitati e sui 4 display vedrete apparire Nota = Anche se nella riga 241 troverete:
il numero:
ldi ore,0 ; 241 carica 0 ore
03:00
questo parametro ore non viene utilizzato, pertan-
che indica 03 minuti e 00 secondi. to questa istruzione non dovrete mai modificarla.
Immediatamente, partendo da questo numero, il
conteggio inizier a contare allindietro con una ca- Se in sostituzione del rel 1 volete eccitare un al-
denza di un secondo, quindi sui display vedrete i tro rel ad esempio il rel 2, o un corrispondente
numeri: triac, dovrete modificare la riga 262:

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:

loop3 set 6,port_b ; 262 eccita RL3

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:

TIMER.HEX cpi a,15 ; 248 compara con 15 secondi

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

00:00 ed inserire il numero 30 nella riga 252 dei minuti:

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

Per cambiare il tempo da noi prefissato 03:00 ba-


ster modificare i valori impostati sulle righe 248 e sostituendo dopo il set il numero 4 con il numero
252 nel listato del programma TEMPOR.ASM. 5 come qui sotto riportato:
Come tempo massimo potrete raggiungere i 99 mi-
nuti e 59 secondi. loop3 set 5,port_b ;259 eccita RL2
Se volete eccitare il rel RL3 dovrete sostituire il re delle coppie di triac, ecc., modificando sempli-
numero 4 con il numero 6: cemente il numero binario riportato nelle righe 74-
76-78-80-82-84-86-88 .
loop3 set 6,port_b ; 259 eccita RL3
Idi port_b,10000000b ; 74 eccita il triac TRC4
Per eccitare il rel RL4 dovrete sostituire il nume- Idi port_b,01000000b ; 76 eccita il triac TRC3
ro 4 con il numero 7: Idi port_b,00100000b ; 78 eccita il triac TRC2
Idi port_b,00010000b ; 80 eccita il triac TRC1
loop3 set 7,port_b ; 259 eccita RL4 Idi port_b,00100000b ; 82 eccita il triac TRC2
Idi port_b,01000000b ; 84 eccita il triac TRC3
Per eccitare contemporaneamente tutti e 4 i rel Idi port_b,10000000b ; 86 eccita il triac TRC4
dovrete aggiungere le seguenti righe: Idi port_b,00000000b ; 88 diseccita tutti i triac

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.

Vi ricordiamo che tutte le volte che modificherete


un programma, lo dovrete salvare premendo il ta-
sto F2, poi lo dovrete riassemblare premendo i ta- PER cambiare i TEMPI
sti ALT T, poi il tasto A, dopodich lo potrete tra-
sferire nella memoria di un ST6. Per modificare i tempi di intervallo tra laccensio-
ne di un triac e quella del successivo, occorre mo-
dificare la subroutine chiamata delay.
Anche se prima non le abbiamo riportate, tra una
TRIAC.HEX riga e laltra delle 74-76-78-80-82-84-86-88 trove-
rete una istruzione call delay che chiama una su-
Questo programma una dimostrazione di come broutine:
si possano eccitare in sequenza dei Triac o dei
Rel. Idi port_b,10000000b ; 74 eccita il triac TRC4
Nel bus LX.1202 dovrete inserire la sola scheda call delay ; 75 esegue ritardo
siglata LX.1206 o, in sua sostituzione, quella dei Idi port_b,01000000b ; 76 eccita il triac TRC4
rel siglata LX.1205.
Una volta caricato su un micro ST6 vergine il pro- questa subroutine la troverete nelle righe 59 - 60.
gramma TRIAC.HEX ed inserito nello zoccolo pre-
sente sulla scheda bus LX.1202, non appena ali- Idi x,255 ; 59 carica in x 255
menterete il circuito vedrete eccitarsi in sequen- del1 Idi y,255 ; 60 carica in y 255
za, con un intervallo di 1 secondo, i quattro triac
o i quattro rel se avrete inserito la scheda Il massimo ritardo che potete ottenere di circa 1
LX.1205. secondo, perch disponendo di registri X-Y ad 8
bit non potrete mettere un numero maggiore di
Nota = In questo programma i pulsanti P1-P2-P3- 255.
P4 presenti nella scheda dei triac o dei rel non ri- Volendo ridurre il ritardo, dovrete inserire dei nu-
sultano attivati, quindi anche se li premerete non meri minori, ad esempio per ottenere allincirca 1/2
accadr nulla. secondo dovrete caricare nella riga 59 il numero
127 come qui sotto riportato:
Questo programma pu essere modificato per ec-
citare i triac in senso inverso a quello indicato, mo- Idi x,127 ; 59 carica in x 127
dificando anche i tempi oppure facendo accende- del1 Idi y,255 ;60 carica in y 255
Se volete ottenere 1/4 di secondo dovrete cam- Facciamo presente che possibile soltanto far a-
biare le due righe come segue: vanzare i numeri e non indietreggiare.
Appena accenderete lorologio tutti i 4 rel o triac
Idi x,127 ; 59 carica in x 127 partiranno eccitati.
del1 Idi y,127 ; 60 carica in y 127 Se volete che allaccensione dellorologio tutti i rel
risultino diseccitati, dovrete andare alla riga N.59
dove troverete questa istruzione:
Se anzich ridurli li voleste aumentare, potrete
farlo utilizzando questo trucchetto. Idi port_b,11110011b
Tutte le istruzioni che trovate inserite tra le righe
delle istruzioni dal numero 74 alla 88 con la paro-
e modificarla inserendo in sostituzione degli 1 de-
la call delay, le dovrete scrivere due-tre-quattro
gli 0 come qui sotto riportato:
o pi volte, ad esempio:
Idi port_b,00000011b
Idi port_b,10000000b ; 74 eccita TRC4
call delay ; 75 esegue ritardo Nota = Anche se questa riga composta da 8 nu-
call delay ; raddoppia tempo meri, dovrete modificare solo i primi 4 di sinistra.
call delay ; triplica tempo
Idi port_b,01000000b ; 76 eccita TRC3 Se volete far eccitare allaccensione il solo rel
RL4, dovrete mettere un 1 in corrispondenza del-
Quindi inserendo pi o meno righe di call delay tra la prima cifra di sinistra come qui sotto riportato:
una riga e laltra potrete variare i tempi di eccita-
Idi port_b,10000011
zione tra un triac e laltro.
A questo punto vi spieghiamo che cosa sintende
per 8 cicli o periodi da utilizzare nellarco delle 24
ore che troverete riportati in queste righe:
CLOCK.HEX
1 periodo = righe 309 - 310 - 311
Questo programma CLOCK anche se funziona co- 2 periodo = righe 316 - 317 - 318
me orologio totalmente diverso dal precedente 3 periodo = righe 323 - 324 - 325
programma OROLOGIO, perch oltre a visualiz- 4 periodo = righe 330 - 331 - 332
zare le ore e i minuti permette di eccitare un rel 5 periodo = righe 337 - 338 - 339
o un triac ad unora prestabilita e di diseccitarlo 6 periodo = righe 344 - 345 - 346
dopo un tempo che voi stessi potrete prefissare mo- 7 periodo = righe 351 - 352 - 353
dificando alcune righe del programma. 8 periodo = righe 358 - 359 - 360
Per farlo funzionare occorre inserire nel bus
LX.1202 la scheda dei display siglata LX.1204 e Ogni ciclo composto da 3 righe distruzioni, quin-
quella dei rel siglata LX.1205, oppure quella dei di nel 1 ciclo o periodo del nostro programma tro-
triac siglata LX.1206. verete:
Prima di spiegarvi quali righe dovrete modificare,
.byte 02 ; 309 riga delle ore
consigliamo ai meno esperti di leggere attenta-
.byte 30 ; 310 riga dei minuti
mente tutto larticolo, dopodich potranno modifi-
.byte 11100000b ; 311 riga per comando rel
care i parametri nelle sole righe che noi indiche-
remo.
Come abbiamo accennato, il programma Attualmente il 1 ciclo inizia alle ore 2,30 di not-
CLOCK.HEX ci d la possibilit di eccitare o di- te.
seccitare uno o pi rel anche contemporanea- Per modificare lorario baster mettere nella prima
mente, su orari che noi stessi potremo stabilire, pur- riga lora che vi interessa, ad esempio 05-06-10, e
ch non si superino pi di 8 cicli o periodi nellar- nella seconda riga i relativi minuti, ad esempio 00
co delle 24 ore. - 10 - 30 - 50.
Questo programma potr servire per accendere o Nella terza riga sono riportati i rel che desiderate
spegnere una o pi caldaie, delle insegne lumino- eccitare e quelli che non desiderate eccitare allo-
se ad orari prestabiliti, ecc. rario da noi prestabilito.
Per mettere a punto le ore dellorologio si utiliz- Mettendo un 1 il rel si ecciter, mettendo uno 0
zer il pulsante P2 e per mettere a punto i minuti si disecciter.
il pulsante P1. Ci che dovrete modificare in questa terza riga so-
no solo i primi quattro numeri di sinistra posti do- Se alle 24,00 vorrete diseccitare anche questo
po la parola byte. rel, dovrete scrivere nelle righe 351 - 352 - 353
Tenete presente che il primo numero di sinistra pi- (7 ciclo) questi numeri:
loter il rel RL4 e lultimo numero di destra il rel
RL1, quindi avrete in ordine: .byte 00 ; 351 riga delle ore
.byte 00 ; 352 riga dei minuti
RL4-RL3-RL2-RL1 .byte 00000000b ; 353 riga per comando rel

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:

.byte 09 ; 316 riga delle ore TIME90.HEX


.byte 30 ; 317 riga dei minuti
.byte 10000000b ; 318 riga per comando rel Questo programma un timer che, contando in a-
vanti, ecciter un rel o un triac quando raggiun-
Se alle 12,00 vorrete diseccitare anche il rel RL4, ger i minuti e i secondi da noi prefissati.
dovrete scrivere nelle righe 323 -324 -325 (3 ci- Per farlo funzionare occorre inserire nel bus
clo) questi numeri: LX.1202 la scheda dei display siglata LX.1204 e
quella dei rel siglata LX.1205, oppure quella dei
.byte 12 ; 323 riga delle ore triac siglata LX.1206.
.byte 00 ; 324 riga dei minuti Non appena alimenterete il circuito, il conteggio
.byte 00000000b ; 325 riga per comando rel partir da 00:00 e inizier a contare in avanti; a
questo punto potrete utilizzare i pulsanti P1 e P2
Se alle 18,45 vorrete eccitare tutti i rel, dovrete presenti sulla scheda display LX.1204.
scrivere nelle righe 330 - 331 - 332 (4 ciclo) que-
sti numeri: Premendo P1 il conteggio si ferma.
Premendo nuovamente P1 il conteggio riparte dal
.byte 18 ; 330 riga delle ore numero sul quale si era fermato.
.byte 45 ; 331 riga dei minuti Premendo P2 il contatore si resetta.
.byte 11110000b ; 332 riga per comando rel Premendo P1 il contatore riparte da 00:00.

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.

4 ciclo = Il conteggio continuer ed allo scoccare


dei 3 minuti e 00 secondi (tempo da noi prefis- TEMP90.HEX
sato) si disecciter il rel RL3 e si ecciter il rel
RL4, cio si ritorner al 1 ciclo per ripetere allin- Questo programma un timer che fa esattamen-
finito i quattro cicli. te linverso del programma TIME90, cio conta
allindietro e quando raggiunge lo 00:00 eccita i
Per variare i tempi che noi abbiamo prefissato do- rel.
vrete variare queste righe: I rel, come per il programma precedente, li ecci-
terete in 4 cicli e come tempo massimo di par-
1 ciclo = righe 289 - 290 tenza potrete impostare 90 minuti e 00 secondi.
2 ciclo = righe 295 - 296 Non appena alimenterete il circuito, il conteggio
3 ciclo = righe 301 - 302 partir da 00:20 (questo tempo lo abbiamo pre-
4 ciclo = righe 307 - 308 scelto noi, ma poi vi spiegheremo come modificar-
lo) e proceder allindietro.
Se volete che il 1 ciclo abbia una durata di 1 mi- Dopo che avr avuto inizio il conteggio, potrete u-
nuto e 30 secondi, dovrete inserire nelle sue ri- tilizzare i pulsanti P1 e P2 presenti sulla scheda di-
ghe questi numeri: splay LX.1204.

Idi stsex,30 ; 289 secondi per RL1


Premendo P1 il conteggio si ferma.
Idi stmix,1 ; 290 minuti per RL1
Premendo nuovamente P1 il conteggio riparte dal
numero sul quale si era fermato.
Se volete che il 2 ciclo abbia una durata di 50 se- Premendo P2 il contatore si resetta.
condi, dovrete inserire nelle sue righe questi numeri: Premendo P1 il contatore riparte dal tempo che a-
Idi stsex,50 ; 295 secondi per RL1
vete impostato come partenza per il conteggio
Idi stmix,00 ; 296 minuti per RL1
allindietro.

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:

3 ciclo = A questo punto si ecciter il rel RL3 e Idi port_b,11110011b


sui display apparir 00:47 che decrementer fino
ad arrivare allo 00:00. Nei primi quattro numeri di sinistra (vedi 1111) do-
ve metterete 1 il rel si ecciter, dove metterete 0
si disecciter.
4 ciclo = Lultimo ciclo far eccitare il rel RL4 e
far apparire sui display il numero 03:00 (3 minu-
ti). Quando con il conteggio alla rovescia si arri- NOTA
ver al numero 00:00, questo rel si disecciter e
contemporaneamente si disecciter il rel RL1, I programmi che vi abbiamo fornito e che in segui-
cio si ritorner al 1 ciclo per ripetere allinfinito i to vi forniremo sono a sfondo didattico e servono
quattro cicli. per far capire ai principianti come si debba scrive-
re unistruzione per ottenere una specifica funzio-
Per variare i tempi prefissati dovrete variare que- ne e per questo abbiamo aggiunto, di fianco ad o-
ste righe: gni riga di programma, un commento.
Blocchi di un programma si possono prelevare e
1 ciclo = righe 290 - 291 trasferire su un altro programma, cosa che potrete
2 ciclo = righe 296 - 297 fare quando avrete gi acquisito una certa espe-
3 ciclo = righe 302 - 303 rienza.
4 ciclo = righe 308 - 309

Se volete che il 1 ciclo abbia una durata di 1 mi-


nuto e 30 secondi, dovrete inserire nelle sue ri-
ghe questi numeri:

Idi stsex,30 ; 290 secondi per RL1


Idi stmix,1 ; 291 minuti per RL1

Se volete che il 2 ciclo abbia una durata di 50 se-


condi, dovrete inserire nelle sue righe questi nu-
meri:

Idi stsex,50 ; 296 secondi per RL1


Idi stmix,00 ; 297 minuti per RL1
COSTO DI REALIZZAZIONE

Tutti i componenti necessari per la realizzazione di


questa scheda, compresi circuito stampato, con-
Se volete che il 3 ciclo abbia una durata di 15 mi-
nettore, triac da 500 Volt 5 Amper, fotoaccopiato-
nuti e 20 secondi, dovrete inserire nelle sue righe
ri, zoccoli, pulsanti, morsettiere, condensatori e re-
questi numeri:
sistenze (vedi fig.8) ................................... 18,60
Idi stsex,20 ; 302 secondi per RL1
Il solo circuito stampato LX.1206 ................ 4,91
Idi stmix,15 ; 303 minuti per RL1

Nota = Nel kit non incluso il dischetto dei pro-


Se volete che il 4 ciclo abbia una durata di 2 mi- grammi DF1202.3 perch gi fornito agli acquiren-
nuti e 10 secondi, dovrete inserire nelle sue righe ti del kit LX.1202.
questi numeri: A chi non avesse acquistato questo kit e volesse il
solo dischetto dei programmi, possiamo inviarlo a
Idi stsex,10 ; 308 secondi per RL1 6,20 pi le spese postali.
Idi stmix,2 ; 309 minuti per RL1
Ai prezzi riportati, gi comprensivi di IVA, andranno
Nelle righe 292/293 - 298/299 - 304/305 - 310/311 aggiunte le sole spese di spedizione a domicilio.
Chiss quanti di voi essendo in possesso di un di- - il piedino 23 dellEnable lo dovremo collegare a
splay LCD avranno tentato di far apparire un nu- massa.
mero senza riuscirci, pur avendolo alimentato cor- - il piedino 22 del Data serve per ricevere i dati se-
rettamente, collegato i vari segmenti e controllato riali necessari per far accendere i vari segmenti.
pi volte il montaggio per verificare di non aver - il piedino 21 del Clock serve per ricevere un tre-
commesso involontariamente qualche errore. no di onde quadre per sincronizzare i segnali.
Il motivo per il quale non siete riusciti ad accen- I due piedini supplementari duscita corrispondenti
derlo ve lo spiegheremo in questo articolo, quindi ai bit 33-34 potrebbero risultare utili per far lam-
ammesso che non vi interessi sapere come si pro- peggiare ad una cadenza di 1 secondo due diodi
grammi un microprocessore ST6 per pilotare un di- led interposti tra i due numeri delle ore e dei mi-
splay LCD, vi consigliamo ugualmente di leggerlo. nuti, se realizzeremo un orologio.
I piedini duscita di questo integrato, come visibi-
le in fig.1, vengono indicati BIT1 - BIT2 - BIT3,
GESTIRE un DISPLAY a 7 SEGMENTI ecc.
Quando tutti i segmenti dei display sono spenti,
Se volessimo pilotare 4 display a 7 segmenti con nel piedino del clock entrer un treno di onde qua-
un integrato driver, questo dovrebbe avere come dre e nel piedino data il solo impulso di Start (bit

SCHEDA con DISPLAY


Dopo avervi presentato una scheda per eccitare dei rel, una per pilo-
tare dei triac e una terza per pilotare dei normali display a 7 segmenti,
oggi vogliamo proporvi una scheda per display numerici LCD dopodi-
ch passeremo ai display alfanumerici.

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

BIT segmento piedino BIT segmento piedino


comando DISPLAY 2 INTEGRATO comando DISPLAY 4 INTEGRATO
9 A 10 25 A 33
10 B 9 26 B 32
11 C 8 27 C 31
12 D 7 28 D 30
13 E 6 29 E 29
14 F 5 30 F 28
15 G 4 31 G 27
16 punto 3 32 punto 26

BIT diodi piedino


Per accendere un numero su un normale di- comando LED INTEGRATO
splay a 7 segmenti sufficiente portare a li-
vello logico 1 i bit che pilotano i segmenti in- 33 led 1 24
teressati (vedi figg.2-3). 34 led 2 25
Come avrete intuito, basta portare a livello logico Questi due punti vengono spesso utilizzati negli o-
1 uno di questi 34 bit per far apparire un numero rologi per dividere le ore dai minuti.
oppure anche una lettera, ad esempio una L, una A differenza del drive M.5450, utilizzato per pilo-
C o una H. tare i display a 7 segmenti, che dispone di tre in-
Tramite software, il display 1 potremo farlo diven- gressi chiamati Enable-Data-Clock, il drive
tare il 4 oppure il 3 in modo da adattarlo al dise- M.8438/AB6, utilizzato per i display LCD, dispone
gno del circuito stampato. di tre ingressi chiamati:
Un altro particolare molto importante da sottoli-
neare quello di non confondere il livello logico Strobe
del bit con il livello logico che in pratica ci ritrovere- Data
mo sul piedino duscita dellintegrato che, come Clock
potrete constatare, risulta invertito, quindi portan-
do ad esempio i bit 25-26 a livello logico 1, sui cor- - Il piedino 2 dello Strobe si porta a livello logico
rispondenti piedini 33-32 dellintegrato M.5450 (ve- 1 ogni volta che deve inviare al display il treno dei
di Tabella N.1) ci ritroveremo un livello logico 0. dati.
Quindi se qualcuno andasse a controllare con un - Il piedino 34 del Data serve per ricevere i dati se-
tester la tensione presente sui piedini duscita che riali necessari per far accendere i vari segmenti.
accendono un segmento, troverebbe 0 volt e non - Il piedino 40 del Clock invia un treno di onde qua-
una tensione positiva. dre per sincronizzare i segnali (vedi fig.5).

Come potrete notare, il drive per un display LCD


GESTIRE un DISPLAY LCD ha lingresso Strobe che mancava nel drive per di-
splay a 7 segmenti a led ed ha in pi un piedino
Come gi spiegato, se volessimo pilotare un di- chiamato Back/Plane (piedino 30) che viene uti-
splay a led con 4 cifre con un integrato driver, lizzato per alimentare il display con unonda qua-
questo dovrebbe avere 34 piedini duscita. dra di circa 80 Hertz.
Per quanto riguarda i display LCD dobbiamo far Quindi i quattro display LCD non vengono alimen-
presente che il punto decimale che dovrebbe ri- tati da una tensione continua, ma da una tensio-
sultare presente sul 4 display spesso viene so- ne che cambia in continuit il suo livello logico da
stituito da due punti posti tra le prime due e le ul- 1 a 0 e questo, come vedremo, indispensabile
time due cifre. per poter accendere i vari segmenti.

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.

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

Fig.4 Per pilotare un display LCD


dovremo sempre portare a livel-
lo logico 1 i bit dei segmenti che
vogliamo accendere, ma come
potete vedere in fig.7 i segmenti
che rimangono spenti non ven-
gono portati a livello logico 0.
I piedini duscita di questo integrato, come visibile Sul display N.1, dovendo accendere i segmenti B-
in fig.5, indicati A1 - B1 - C1, ecc., andranno col- C, dovremo portare a livello logico 1 i bit 2-3.
legati ad ogni singolo segmento presente in cia- Sul display N.2, dovendo accendere i segmenti A-
scun display (vedi fig.6 e Tabella N.2). B-C-D-E-F, dovremo portare a livello logico 1 i bit
9-10-11-12-13-14.
Sul display N.3, dovendo accendere i segmenti A-
B-C-D-G, dovremo portare a livello logico 1 i bit
TABELLA N.2 17-18-19-20-23.
Sul display N.4, dovendo accendere i segmenti A-
BIT segmento piedino B-G-E-D, dovremo portare a livello logico 1 i bit
comando DISPLAY 1 INTEGRATO 25-26-31-29-28.
1 A 10
2 B 9 A questo punto si potrebbe pensare che un drive
3 C 8 per pilotare un display a 7 segmenti possa servi-
4 D 7 re anche per pilotare un display LCD, ma purtrop-
5 E 6 po questo non possibile perch i suoi segmenti
6 F 5 non vengono pilotati da una tensione continua,
7 G 4 ma da un treno di onde quadre che lo stesso in-
8 punto 11 tegrato M.8438/AB6 invia al segmento da accen-
dere, sfasandolo di 180 rispetto alle onde quadre
BIT segmento piedino che giungono sui segmenti che debbono rimanere
comando DISPLAY 2 INTEGRATO spenti.
9 A 18
10 B 17 Quindi se controllassimo con un oscilloscopio tutti
11 C 16 i 32 piedini duscita di questo integrato, troverem-
12 D 15 mo in tutti delle onde quadre, perci potrebbe ri-
13 E 14 sultare alquanto complesso capire come si riesca-
14 F 13 no ad accendere questi segmenti.
15 G 12
16 punto 19 Per spiegarvelo in modo che possiate compren-
derlo perfettamente vi proponiamo questo sempli-
BIT segmento piedino
ce esempio.
comando DISPLAY 3 INTEGRATO
Ammesso di voler accendere in un display i seg-
17 A 26 menti B-C in modo da far apparire il numero 1, in
18 B 25 questi due soli segmenti giungeranno delle onde
19 C 24 quadre invertite rispetto alle onde quadre che giun-
20 D 23 gono invece sul Back/Plane (vedi fig.7).
21 E 22 Di questa inversione del segnale ad onda quadra
22 F 21 non dovremo preoccuparci, perch sar lintegrato
23 G 20
M.8438/AB6 che provveder ad invertirlo quando,
24 punto 27
tramite software, gli diremo di accendere i segmenti
BIT segmento piedino B-C.
comando DISPLAY 4 INTEGRATO
Il software per i display LCD in pratica molto si-
25 A 39 milare a quello per i display a 7 segmenti, sempre
26 B 38
che si rispettino le connessioni duscita dellinte-
27 C 37
grato M.8438/AB6 con i piedini che fanno capo ai
28 D 33
segmenti dei quattro display (vedi Tabelle N.1 e
29 E 32
30 F 29 N.2).
31 G 28
32 punto 3 Nelle connessioni del display tipo S.5126 oppu-
re LC.513040 riportate in fig.8, abbiamo indica-
to con A1-B1-C1, ecc., tutti i segmenti del di-
Anche in un display LCD se volessimo accende- splay N.1, con A2-B2-C2, ecc., tutti i segmenti
re i numeri 1 0 3 2 tramite il programma softwa- del display N.2 e cos dicasi per il display N.3 e
re, dovremmo portare a livello logico 1 tutti i seg- N.4.
menti che desideriamo accendere. Se abbiamo un display con una sigla diversa, do-
LCD

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.

DISPLAY 1 DISPLAY 2 DISPLAY 3 DISPLAY 4


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

- dal piedino B0 i dati da inviare al piedino 34 dellin-


tegrato M.8438/AB6. D SPENTO
- dal piedino B1 il segnale del Clock da inviare al
piedino 40 di IC1.
- dal piedino C4 il segnale di Strobe da inviare al E SPENTO

piedino 2 di IC1.
- dal piedino +5V la tensione di alimentazione per F SPENTO
lintegrato.

Gli altri due piedini B2-B3 sono collegati ai pulsanti G SPENTO

P1-P2 che ci servono, realizzando un orologio, per


mettere a punto le ore e i minuti.
Poich lintegrato M.8438/AB6 ha bisogno del se- Fig.7 Per accendere un segmento in un di-
gnale di Strobe, dovremo necessariamente utiliz- splay LCD lintegrato IC1 invier sul piedi-
zare dei microprocessori ST6 con 28 piedini, cio: no corrispondente unonda quadra sfasata
di 180 rispetto a quella del Back/Plane.
ST62E25 (da 4K cancellabile) In questo esempio risultano accesi i soli
ST62T25 (da 4K non cancellabile) segmenti B-C.
ST62T15 (da 2K non cancellabile)

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

A B C D E F G DP1 A B C D E F G DP2 A B C D E F G DP3 A B C D E F G DP4

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.

Il motivo per il quale si obbligati ad utilizzare dei


micro ST6 a 28 piedini dovuto al fatto che ci ser-
ve la porta C4 per il segnale di Strobe.
Fig.9 Schema elettrico da noi utilizzato per A questo punto qualcuno ci potr far osservare che
pilotare un display LCD. il segnale di Strobe potevamo benissimo prelevarlo
da una bit libero della porta A oppure B e, in tal
modo, potevamo ancora utilizzare un micro ST6
con soli 20 piedini.
ELENCO COMPONENTI LX.1207 Purtroppo nel bus siglato LX.1202 (vedi rivista
N.179) se oltre alla scheda di questo display vo-
R1 = 10.000 ohm 1/4 watt lessimo inserire anche la scheda LX.1205 che pi-
R2 = 10.000 ohm 1/4 watt lota dei rel, oppure la scheda LX.1206 che pilota
C1 = 100.000 pF poliestere dei triac, constateremmo che tutti i bit delle porte
C2 = 22 pF ceramico A-B risultano occupati.
C3 = 100.000 pF poliestere Poich in questa scheda utilizziamo anche la por-
C4 = 100.000 pF poliestere ta C, il programma che vi forniremo per questo di-
IC1 = M.8438-AB6 o M.8438-B6 splay LCD sar completamente diverso rispetto al
LCD = display LCD tipo S.5126 software che vi avevamo gi fornito per la scheda
CONN.1/2 = connettore 24 poli display LX.1204 e questo potr risultarvi molto uti-
CONN. = 2 connettori 4 poli
le perch, confrontando i due programmi, potrete
P1 = pulsante
notare le differenze.
P2 = pulsante
Comunque questo programma per display LCD
svolger le stesse funzioni che svolge tuttora il pro-
gramma per il display a 7 segmenti.
Fig.10 Scheda vista
dal lato del display.

Fig.11 Circuito stam-


pato visto dal lato
dellintegrato.

Ritornando al nostro schema elettrico, non dovre- REALIZZAZIONE PRATICA


te preoccuparvi delle connessioni dellintegrato IC1
con il display LCD, perch queste vengono auto- Realizzare questa scheda per display LCD che ab-
maticamente effettuate tramite le piste in rame pre- biamo siglato LX.1207 molto semplice.
senti sul circuito stampato. Nel circuito stampato a doppia faccia con fori me-
In questo schema di critico c il solo condensato- tallizzati dovrete inserire tutti i componenti richiesti
re C2 collegato tra il piedino 31 e la massa. e per iniziare vi consigliamo di saldare lo zoccolo
Questo condensatore, come potrete leggere nelle- per lintegrato IC1.
lenco componenti, deve risultare da 22 picoFarad Dopo aver saldato tutti i piedini sulle piste dello
e tale valore serve per generare, tramite uno sta- stampato, potrete inserire i due connettori maschi
dio oscillatore interno, una frequenza di circa da 4 piedini e da 24 piedini, che vi serviranno per
20.500 Hz che, divisa internamente per 256, far innestare questa scheda nel bus siglato LX.1202
uscire dal piedino 30 di IC1 unonda quadra di cir- (vedi rivista N.179).
ca 80 Hz. Terminata questa operazione, capovolgete lo stam-
Questa frequenza chiamata Back/Plane, quella pato e da questo lato inserite i due connettori fem-
che ci servir per alimentare i piedini 1-40 del di- mina da 20 piedini che vi serviranno come zocco-
splay LCD. lo per il display LCD.
Fig.12 La scheda del display LCD siglata LX.1207 andr inserita nel Bus LX.1202 con-
giunta anche alla scheda dei Rel o dei Triac. Come microprocessore ST6 dovrete ne-
cessariamente utilizzare quelli a 28 piedini, cio lST62.E25 che riprogrammabile o i ti-
pi ST62.T15 e ST62.T25 che non sono riprogrammabili.
Per completare il montaggio dovrete inserire le re-
sistenze R1-R2, i due pulsanti P1-P2, i tre con-
densatori poliestere ed il ceramico da 22 picoFa-
rad ed innestare nello zoccolo lintegrato
M.8438/AB6, orientando la tacca a forma di U im-
pressa sul suo corpo come visibile nella fig.10.
Dal lato opposto dovrete inserire nei due connet-
tori femmina tutti i piedini presenti nel display LCD
e qui forse incontrerete qualche difficolt, perch
spesso i piedini del display risultano troppo divari-
cati.
Per poterli restringere in modo uniforme potrete
premere sul piano di un tavolo tutti i terminali.
Prima di inserire il display nei connettori, dovrete
ricercare sul suo corpo la tacca di riferimento, per-
ch se lo inserirete in senso inverso non potr fun- Fig.13 Quando sul monitor appare la fine-
zionare. stra dellEditor potete premere i tasti ALT+F
In questi display questa tacca di riferimento non poi F3 e vedrete apparire tutti i files con le-
molto visibile, perch quasi sempre costituita da stensione .ASM.
una piccola goccia di vetro posta su una sola e-
stremit.
Da questo stesso lato troverete spesso sulla cor-
nice nera che contorna linterno del display il se-
gno > (vedi fig.8).
Questa tacca di riferimento va sempre rivolta ver-
so i condensatori C1-C2.
Spingete il display in corrispondenza dei lati in cui
sono presenti i terminali e mai del centro perch
potrebbe spezzarsi.

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.

Uscite da qualsiasi programma che stavate utiliz-


zando, Windows - Pcshell - Norton ecc., e quan-
do sul monitor del computer appare C:\> inserite il
dischetto nel drive A, quindi digitate:

C:\>A poi premete Enter

Quando appare A:\> scrivete:

A:\>installa e premete Enter


Fig.15 Potrete trasferire il programma scel-
Il programma vi chieder subito in quale directory to nella memoria di un ST6 solo dopo averlo
volete installare il contenuto del disco. assemblato. Per assemblarlo dovrete pre-
Noi abbiamo gi definito una directory che abbia- mere i tasti ALT+T poi Enter.
mo chiamato LX1207, quindi se premete Enter il
programma creer automaticamente una directory C:\LX1207>ST6 poi premere Enter
con questo nome e, scompattandolo, copier il
contenuto del dischetto allinterno dellHard-Disk. Con questo comando apparir la finestra dellEdi-
Se sul monitor dovesse apparire la scritta error, tor (vedi fig.13).
potrete ricaricare il dischetto con questo diverso si- A questo punto dovrete premere prima i tasti
stema. ALT+F poi il tasto F3 e sul monitor vedrete ap-
parire tutti i files con estensione .ASM (vedi
Quando appare C:\> dovrete creare la directory fig.14).
scrivendo:
LCDCLOCK.ASM
C:\>MD LX1207 poi premete Enter LCDCRONO.ASM
LCDOROLO.ASM
Quando riapparir il prompt di C:\> inserite il di- LCDTEM90.ASM
schetto floppy nel drive A poi scrivete: LCDTIM90.ASM
C:\>COPY A:*.* C:\LX1207 poi premete Enter
Per posizionare il cursore su uno dei cinque files
premete ALT+F poi premete i tasti freccia gi/su e
Nota = Poich nella digitazione necessario ri-
quando sarete sul file che vi interessa premete En-
spettare la spaziatura, per agevolarvi abbiamo in-
ter.
terposto una barra in colore che corrisponde allo
Entrerete cos nelleditor del file selezionato e a-
spazio che occorre lasciare tra le lettere.
vrete in linea le istruzioni del programma.
Per assemblare il programma dovete premere i ta-
Quando il computer avr terminato di copiare dal
sti ALT+T e poi Enter (vedi fig.15).
dischetto tutti i programmi, questi non saranno an-
Ammesso che abbiate scelto il file LCDCLOCK, do-
cora stati scompattati quindi dovrete farlo voi scri-
po pochi secondi apparir sul monitor la scritta:
vendo:

CD:\>CD LX1207 poi premete Enter *** success ***

Quando appare C:\LX1207> digitate: con il tempo di compilazione e di seguito la scritta:

C:\LX1207>installa poi premete Enter C:\LX1207>

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:

00:01 - 00:02 - 00:03 ecc. LCDCLOCK.HEX

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

e modificarla inserendo in sostituzione degli 1 de-


gli 0 come qui sotto riportato:
Fig.16 Dopo aver assemblato il programma
Idi port_b,00000011b prescelto (vedi fig.15) pigiate ALT+T poi la
lettera P. Quando apparir questa finestra
Nota = Anche se questa riga composta da 8 nu- dovrete premere un tasto qualsiasi.
meri, dovrete modificare solo i primi 4 di sinistra.

Se volete far eccitare allaccensione il solo rel


RL4, dovrete mettere un 1 in corrispondenza del-
la prima cifra di sinistra come qui sotto riportato:

Idi port_b,10000011

A questo punto vi spieghiamo che cosa sintende


per 8 cicli o periodi da utilizzare nellarco delle 24
ore che troverete riportati in queste righe:

1 periodo = righe 299 - 300 - 301


2 periodo = righe 306 - 307 - 308
3 periodo = righe 313 - 314 - 315
4 periodo = righe 320 - 321 - 322 Fig.17 Come vedrete, sullo schermo appa-
5 periodo = righe 327 - 328 - 329 rir una finestra con tutti i tipi di ST62. Con
6 periodo = righe 334 - 335 - 336 i tasti freccia ricercate la sigla ST62E25 poi
7 periodo = righe 341 - 342 - 343 pigiate il tasto Enter.
8 periodo = righe 348 - 349 - 350

Ogni ciclo composto da 3 righe distruzioni, quin-


di nel 1 ciclo o periodo del nostro programma tro-
verete:

.byte 02 ; 299 riga delle ore


.byte 30 ; 300 riga dei minuti
.byte 11100000b ; 301 riga per comando rel

Attualmente il 1 ciclo inizia alle ore 2,30 di not-


te.
Per modificare lorario baster mettere nella prima
riga lora che vi interessa, ad esempio 05-06-10, e
nella seconda riga i relativi minuti, ad esempio 00 Fig.18 Prima di programmare lST62E25
- 10 - 30 - 50. controllate attentamente che nel riquadro in
Nella terza riga sono riportati i rel che desiderate basso appaia ST62E25. Se appare unaltra
eccitare e quelli che non desiderate eccitare allo- sigla dovrete ritornare alla fig.17.
rario da noi prestabilito.
Mettendo un 1 il rel si ecciter, mettendo uno 0 .byte 23 ; 334 riga delle ore
si disecciter. .byte 40 ; 335 riga dei minuti
Ci che dovrete modificare in questa terza riga so- .byte 00010000b ; 336 riga per comando rel
no solo i primi quattro numeri di sinistra posti do-
po la parola byte. Se alle 24,00 vorrete diseccitare anche questo
Tenete presente che il primo numero di sinistra pi- rel, dovrete scrivere nelle righe 341 - 342 - 343
loter il rel RL4 e lultimo numero di destra il rel (7 ciclo) questi numeri:
RL1, quindi avrete in ordine:
.byte 00 ; 341 riga delle ore
RL4-RL3-RL2-RL1 .byte 00 ; 342 riga dei minuti
.byte 00000000b ; 343 riga per comando rel
Per farvi capire come modificare tutti questi nume-
ri vi faremo un semplice esempio. Avendo utilizzato solo 7 cicli degli 8 disponibili, se
Ammesso che alle 06,10 desideriate eccitare i rel lultimo non vi interessa lo potrete cancellare op-
RL2-RL1, scriverete nelle righe 299 - 300 - 301 (1 pure inibire, mettendo davanti alle righe 348 - 349
ciclo) questi numeri: - 350 un punto e virgola o mettendo sulla terza ri-
ga 00000000b.
.byte 06 ; 299 riga delle ore Potrete aggiungere altri cicli se 8 risultassero in-
.byte 10 ; 300 riga dei minuti sufficienti.
.byte 00110000b ; 301 riga per comando rel
Facciamo presente che questi cicli si ripeteranno
Se alle 09,30 vorrete eccitare il solo rel RL4, do- automaticamente allinfinito agli stessi orari tutti i
vrete scrivere nelle righe 306 - 307 - 308 (2 ciclo) giorni.
questi numeri:

.byte 09 ; 306 riga delle ore


.byte 30 ; 307 riga dei minuti
.byte 10000000b ; 308 riga per comando rel LCDTIM90.HEX

Questo programma un timer che, contando in a-


Se alle 12,00 vorrete diseccitare anche il rel RL4,
vanti, ecciter un rel o un triac quando raggiun-
dovrete scrivere nelle righe 313 -314 -315 (3 ci-
ger i minuti e i secondi da noi prefissati.
clo) questi numeri:
Per farlo funzionare occorre inserire nel bus
LX.1202 la scheda dei display LCD siglata LX.1207
.byte 12 ; 313 riga delle ore
e quella dei rel siglata LX.1205, oppure quella dei
.byte 00 ; 314 riga dei minuti
triac siglata LX.1206.
.byte 00000000b ; 315 riga per comando rel
Non appena alimenterete il circuito, il conteggio
partir da 00:00 e inizier a contare in avanti; a
Se alle 18,45 vorrete eccitare tutti i rel, dovrete questo punto potrete utilizzare i pulsanti P1 e P2
scrivere nelle righe 320 - 321 - 322 (4 ciclo) que- presenti sulla scheda display LCD LX.1207.
sti numeri:
Premendo P1 il conteggio si ferma.
.byte 18 ; 320 riga delle ore Premendo nuovamente P1 il conteggio riparte dal
.byte 45 ; 321 riga dei minuti numero sul quale si era fermato.
.byte 11110000b ; 322 riga per comando rel Premendo P2 il contatore si resetta.
Premendo P1 il contatore riparte da 00:00.
Se alle 22,30 vorrete diseccitare i rel RL4-RL3,
dovrete scrivere nelle righe 327 - 328- 329 (5 ci- Nota = Il pulsante P2 di reset sar attivo solamente
clo) questi numeri: se avrete fermato il conteggio con P1. Se preme-
rete P2 mentre attivo il conteggio, questo non si
.byte 22 ; 327 riga delle ore azzerer.
.byte 30 ; 328 riga dei minuti I pulsanti presenti sulle schede Triac e Rel non ri-
.byte 00110000b ; 329 riga per comando rel sultano attivati.
Il conteggio del display arriva ad un massimo di 89
Se alle 23,40 vorrete lasciare eccitato il solo rel minuti e 59 secondi.
RL1, dovrete scrivere nelle righe 334 - 335 - 336
(6 ciclo) questi numeri: Il programma LCDTIM90.ASM, come potrete no-
tare, dispone di 4 cicli perch quattro sono i rel nuti e 10 secondi, dovrete inserire nelle sue righe
e i triac presenti sulle schede sperimentali. questi numeri:

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.

4 ciclo = Il conteggio continuer ed allo scoccare


dei 3 minuti e 00 secondi (tempo da noi prefis-
sato) si disecciter il rel RL3 e si ecciter il rel
RL4, cio si ritorner al 1 ciclo per ripetere allin- LCDTEM90.HEX
finito i quattro cicli.
Questo programma un timer che fa esattamen-
Per variare i tempi che noi abbiamo prefissato do- te linverso del programma LCDTIM90, cio con-
vrete variare queste righe: ta allindietro e quando raggiunge lo 00:00 eccita
i rel.
1 ciclo = righe 292 - 293 I rel, come per il programma precedente, li ecci-
2 ciclo = righe 298 - 299 terete in 4 cicli e come tempo massimo di par-
3 ciclo = righe 304 - 305 tenza potrete impostare 90 minuti e 00 secondi.
4 ciclo = righe 310 - 311 Non appena alimenterete il circuito, il conteggio
partir da 00:20 (questo tempo lo abbiamo pre-
Se volete che il 1 ciclo abbia una durata di 1 mi- scelto noi, ma poi vi spiegheremo come modificar-
nuto e 30 secondi, dovrete inserire nelle sue ri- lo) e proceder allindietro.
ghe questi numeri: Dopo che avr avuto inizio il conteggio, potrete u-
tilizzare i pulsanti P1 e P2 presenti sulla scheda di-
Idi stsex,30 ; 292 secondi per RL1
splay LCD LX.1207.
Idi stmix,1 ; 293 minuti per RL1

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

Se volete che il 2 ciclo abbia una durata di 50 se- COSTO DI REALIZZAZIONE


condi, dovrete inserire nelle sue righe questi nu-
meri: Tutti i componenti per realizzare questa scheda
con display LCD, cio circuito stampato, connet-
Idi stsex,50 ; 301 secondi per RL1 tori maschi, pulsanti, integrato M.8438/AB6, di-
Idi stmix,00 ; 302 minuti per RL1 splay a cristalli liquidi tipo S.5126 o LC.513040
(escluso il solo software inserito nel dischetto
DF.1207/3)...............................................L.58.000
Se volete che il 3 ciclo abbia una durata di 15 mi-
nuti e 20 secondi, dovrete inserire nelle sue righe Costo del solo stampato LX.1207 ..............L.9.000
questi numeri:
Nota = Per far funzionare questa scheda vi servo-
Idi stsex,20 ; 307 secondi per RL1 no i 5 programmi inseriti nel dischetto siglato
Idi stmix,15 ;308 minuti per RL1 DF.1207/3 del costo di .............................L.12.000
Se guardiamo il lato posteriore di un normale LCD con 1-2-3 righe, ecc., anche se nel nostro caso ne
vedremo il vetro del suo supporto, se guardiamo abbiamo scelto uno con 16 caratteri 2 righe per
quello di un LCD alfanumerico vedremo un cir- spiegarvi come si possa scrivere nella riga supe-
cuito stampato con sopra fissati due integrati in riore ed in quella inferiore.
SMD provvisti di 62-80 piedini (vedi fig.2). La definizione 16 caratteri sta ad indicare che vi
Se potessimo osservare anteriormente linterno di sono 16 caselle per riga, quindi avendo scelto un
un normale LCD vedremmo quattro caselle con i Display con 2 righe avremo un totale di 32 casel-
soliti 7 segmenti che, accendendosi, ci permetto- le e poich in ciascuna vi sono 40 punti potremo
no di far apparire un numero qualsiasi da 0 a 9. accendere ben:
Poich questo Display pu visualizzare solo dei nu-
meri viene definito numerico. 40 x 32 = 1.280 punti
Se si potesse osservare, sempre anteriormente,
linterno di un Display alfanumerico, si vedrebbe- Ammesso di voler visualizzare su un normale Di-
ro tante caselle rettangolari che, anzich essere splay a 7 segmenti il numero 3, potremo risolvere
composte da 7 segmenti, presentano ben 40 pun- il problema con estrema facilit alimentando i soli

UNA SCHEDA per pilotare


ti distribuiti 8 in senso verticale e 5 in senso oriz- segmenti a-b-g-c-d, ma in un Display a matrice
zontale (vedi fig.3). composto da 40 punti le cose diverrebbero ben pi
Questi Display, conosciuti anche con il nome di complesse perch dovremmo alimentare, nella pri-
DMLCD (vale a dire Dot Matrix Liquid Cristal Di- ma riga superiore i 5 punti in orizzontale, nella se-
splay che in italiano significa Display a Cristalli Li- conda-terza-quarta-quinta riga 1 punto nella posi-
quidi con Matrice di Punti), sono chiamati alfanu- zione richiesta, nella sesta riga 2 punti, uno alli-
merici. nizio della riga ed uno alla fine e nella settima riga
Infatti, accendendo questi 40 punti nelle varie com- 3 punti centrali.
binazioni, potremo far apparire un qualsiasi carat- Immaginatevi quindi quanto sarebbe complicato
tere alfabetico maiuscolo o minuscolo, tutti i nu- scrivere nelle 32 caselle delle frasi o dei numeri.
meri da 0 a 9, un qualsiasi simbolo grafico, co- In teoria lo si potrebbe fare con un microproces-
me ad esempio frecce, , , e, volendo, an- sore da 1.280 bit, ma poich non esiste, vi chie-
che caratteri cinesi - arabi - greci - cirillici, ecc. derete come si possano scrivere in tutte queste ca-
Questi display alfanumerici li possiamo reperire selle lettere - numeri - simboli.

Fig.1 Le dimensioni di un display


alfanumerico (vedi a sinistra) so-
no nettamente superiori a quelle
del display numerico riprodotto a
destra.

Fig.2 Dal lato opposto del solo di-


splay alfanumerico presente un
micro HD.44780 piu un integrato
siglato HD.44100.
un DISPLAY alfanumerico
Oltre ai normali display LCD a 7 segmenti presentati nella rivista N.181,
in grado di visualizzare 4 numeri, esistono anche dei display LCD al-
fanumerici in grado di riprodurre un qualsiasi carattere grafico. In que-
sto articolo vi spiegheremo come dovrete pilotarli per poter far appari-
re parole - numeri - simboli.

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

Fig.4 Per accendere il display useremo solo 4 bit,


pi precisamente DB4-DB5-DB6-DB7, collegati ai
piedini C4-C5-C6-C7 del Connettore dingresso.

ELENCO COMPONENTI LX.1208

R1 = 10.000 ohm 1/4 watt


R2 = 10.000 ohm 1/4 watt
R3 = 10.000 ohm trimmer
R4 = 10.000 ohm 1/4 watt
R5 = 1 megaohm 1/4 watt
C1 = 100.000 pF poliestere
C2 = 100.000 pF poliestere
C3 = 100.000 pF poliestere
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 C4 = 100.000 pF poliestere
C5 = 10 mF elettr. 63 volt
C6 = 1 mF poliestere
+ 5 V.

+ 5 V.
ENABLE
Massa

Massa
LUMINOSITA'
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0

R/S

LM 093 LN DS1 = diodo tipo 1N.4150


DS2 = diodo tipo 1N.4150
IC1 = LM.358
DISPLAY = LCD tipo LM.093X
Fig.5 Gli altri bit che non vengono utilizzati, cio DB0- CONN.1/2 = connettore 24 poli
DB1-DB2-DB3 che fanno capo ai piedini 7-8-9-10, an- P1 = pulsante
dranno collegati a massa. P2 = pulsante
Se volessimo far apparire il segno grafico > do- a vedere nella Tabella N. 1 noteremo che il nu-
vremmo scrivere: mero decimale 53 corrisponde effettivamente al
carattere grafico 5.
0011-1110 Pertanto, listruzione che dovremo scrivere per
svolgere questa operazione sar:
Anzich utilizzare questo codice binario per scri-
vere una lettera o un carattere, potremo usare an- ldi a,3
che un codice decimale e per questo motivo ab- addi a,2
biamo inserito sotto ad ogni casella il rispettivo nu- addi a,48
mero decimale. ld ddata,a
Quindi scrivendo 65 sul Display apparir la lettera call dsend
A maiuscola e scrivendo 97 apparir la lettera a
minuscola. Se svolgiamo questa seconda operazione 9+7 =
16 otterremo un risultato di due cifre, quindi per far
Esempio in codice Binario apparire questi due segni grafici dovremo somma-
re a 1 la costante 48 e, in tal modo, otterremo 49;
Per scrivere la lettera A in codice binario dovremo consultando la Tabella N. 1 noteremo che il nu-
scrivere questa istruzione: mero 49 corrisponde al segno grafico 1.
Sommando al numero 6 la costante 48 otterremo 6
ldi car,01000001b + 48 = 54 e sempre guardando la Tabella N. 1 sco-
priremo che 54 corrisponde al segno grafico 6.
Esempio in codice Decimale Pertanto listruzione che dovremo scrivere per
questa operazione sar:
Per scrivere la lettera A in codice decimale do-
vremo scrivere questa istruzione: ldi a,1
addi a,48
ldi car,65 ld ddata,a
call dsend
Esempio in codice ASCII
ldi a,6
Anzich utilizzare un codice binario o decimale, addi a,48
potremo scrivere direttamente in ASCII ed in que- ld ddata,a
sto caso listruzione sar la seguente: call dsend

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:

nel programma DISP093 nelle righe 77-109


OPERAZIONI MATEMATICHE nel programma TESTER nelle righe 81-113

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.

IMPORTANTE SP093, quando sul monitor apparir C:\LX1208>


dovrete scrivere:
Con questo programma LX.1208 non viene pi u-
tilizzato lEditor dellST6 ma lEditor del DOS, C:\LX1208>A DISP093.ASM
quindi per trasferire i programmi dallHard-Disk al-
la memoria dellST62/E25 non dovrete pi con- Nota = Dopo la lettera A non mettete : perch
vertire i programmi da .ASM in .HEX come vi ave- questa A un programma Batch.
vamo insegnato in precedenza per tutti i program-
mi presenti nel dischetto LX.1207, ma dovrete pro- Con questa istruzione convertirete automatica-
cedere in modo completamente diverso. mente il programma da .ASM a .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:

Ammesso di voler compilare il programma DI- C:\LX1208>ST6PGM poi premere Enter


A questo punto sul monitor apparir una masche- REALIZZAZIONE PRATICA
ra che vi chieder quale programma intendete tra-
sferire e quale micro avete scelto e, una volta che Sul circuito stampato siglato LX.1208 dovrete mon-
avrete risposto a queste domande, potrete memo- tare tutti i componenti visibili in fig.7.
rizzare il vostro micro ST62/E25. Vi consigliamo di iniziare dal connettore maschio
Tutte le istruzioni relative a come trasferire un pro- a 24 terminali e di procedere inserendo gli altri due
gramma dallHard-Disk ad un micro ST6 le abbia- connettori maschi a 4 terminali (nello schema
mo riportate negli articoli pubblicati sulle riviste pratico si vede solo quello di destra) ed il connet-
N.172/173-174-175/176-179-180-181, quindi a chi tore femmina a 15 terminali che userete come
fosse interessato a questo argomento suggeriamo zoccolo per il display.
di procurarsi tali numeri al pi presto prima che ven- Completata questa operazione, potrete inserire lo
gano esauriti. zoccolo per lintegrato IC1 e tutti gli altri compo-
nenti richiesti, cio pulsanti, trimmer, condensatori
e resistenze.
SCHEMA ELETTRICO Nel montaggio dovrete solo rispettare la polarit
dei due diodi al silicio DS1-DS2, posizionando il
Lo schema elettrico di questo progetto, come po- lato del loro corpo contornato da una fascia nera
tete vedere in fig.4, quanto di pi semplice si pos- come appare ben visibile nello schema pratico di
sa immaginare. fig.7.
Abbiamo contrassegnato otto dei 15 piedini del di- Completato il montaggio, dovrete inserire nello zoc-
splay con le sigle da DB0 a DB7 per non confon- colo lintegrato IC1, rivolgendo la tacca di riferi-
derli con i segnali da B0 a B7 presenti nel connet- mento a forma di U presente sul suo corpo verso
tore che va inserito nella scheda bus LX.1202. il condensatore C4.
Nellarticolo abbiamo spiegato che per gestire que- Per fissare il display dovrete inserire nei quattro
sto display bisogna usare un codice di 8 bit, che fori presenti sullo stampato i distanziatori plastici
andr applicato sui piedini DB0 - DB1 - DB2 - DB3 inclusi nel kit, dopodich potrete innestare i termi-
- DB4 - DB5 - DB6 - DB7 (piedini dal numero 7 al nali del display nello zoccolo femmina, facendo en-
numero 14), mentre osservando lo schema elettri- trare i perni dei distanziatori nei fori presenti sullo
co riportato in fig.4 si potr notare che i piedini da stampato del display.
DB0 a DB3 sono collegati a massa e che il se-
gnale entra nei soli piedini da DB4 a DB7.
Questa configurazione stata adottata perch per PROGRAMMI PER LM093
gestire questo display abbiamo usato un codice
4+4 bit. Nel dischetto DF1208 sono riportati due program-
Oltre al display, nello schema elettrico presente mi per utilizzare il display alfanumerico in tutti i
anche un amplificatore operazionale siglato IC1/A; modi possibili.
a questo proposito vi chiederete se tale amplifica-
tore sia indispensabile per far funzionare questo di- Questi due programmi sono denominati:
splay e noi vi rispondiamo che non serve.
Infatti labbiamo inserito soltanto per potervi dimo- DISP093.ASM
strare come sia possibile, con il programma Te- TESTER.ASM
ster, trasformare questo display in un voltmetro.
Dobbiamo subito precisare che nellingresso di A questi due programmi occorrono altri due files
questo operazionale non possibile inserire del- chiamati:
le tensioni superiori ai 5 volt; per poterlo fare sar
necessario applicare sullingresso dei partitori re- TB_CGR01.ASM
sistivi da 1/10 - 1/100. TB_CGR02.ASM
Oltre a questo particolare, dobbiamo anche ricor-
darvi di rispettare la polarit della tensione sullin- Questi due ultimi files TB_CGR sono in pratica del-
gresso, perch se invertirete il positivo con il ne- le tabelle che vi serviranno per utilizzare una di-
gativo sul display appariranno 0 volt. rettiva denominata .input.
Il trimmer R3 collegato al piedino 3 serve per va- Questa direttiva altro non che una istruzione in-
riare la luminosit delle lettere o dei numeri che serita nel file sorgente, che in fase di compilazio-
appariranno nelle diverse caselle. ne richiama una serie di dati contenuti in un file
Tutti i piedini del display e quello duscita dello- diverso dal sorgente.
perazionale vengono collegati al Connettore 1/2
che andr innestato nella scheda bus LX.1202. Quando assemblerete il programma DISP093.A-
DISPLAY

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

Fig.7 Schema pratico di montaggio della scheda LX.1208. Sul


circuito stampato dei display dovrete saldare il connettore ma-
schio a 15 terminali, che dovrete poi innestare nel circuito stam-
pato LX.1208. 1 2 3 -V

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:

Quindi quando assemblerete questi due pro- -NOME-NOME-NOME-


grammi non dovrete assolutamente preoccuparvi -COGNOME-COGNOME
di questi files TB_CGR, perch le operazioni di ri-
cerca e di inserimento vengono eseguite automa- Come noterete, ogni riga occupa un totale di 16 ca-
ticamente. ratteri.
La direttiva chiamata .input simile ad una su-
broutine, con la sola differenza che viene eseguita
Questa scritta rimarr visualizzata sul display per
in fase di compilazione e non durante lesecuzione
circa 6 secondi, dopodich apparir la scritta:
del programma stesso.
LE FUNZIONI
Per terminare aggiungiamo che una volta inserita PREVISTE SONO:
la LX.1208 di questo display alfanumerico nel bus
LX.1202, in questultimo bus non potrete inserire
Anche questa scritta rimarr visualizzata per circa
altre schede, tipo TRIAC o RELE.
6 secondi, dopodich apparir questa 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:

N.ELETTRONICA SCELTA FUNZIONE


** DISP093 ** ......[?] [P2] >
A questo punto, utilizzando il tasto P2 potrete sce- stra verso destra, per poi riportarsi sulla prima riga
gliere una della quattro funzioni numerate 1-2-3- scorrendo da destra verso sinistra per 4 volte con-
4. secutive, dopodich riapparir 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:

SCELTA FUNZIONE SCELTA FUNZIONE


......[1] [P2] > ......[?] [P2] >

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.

C:\LX1208>A DISP093.ASM LA/D converter per un valore di tensione di 5 volt


ci d un numero decimale di 255; se dividiamo 255
Nota = Dopo la lettera A non mettete :, perch per 5 otteniamo 51, quindi intuitivo che per un va-
questa A non altri che un programma Batch che lore di tensione di 1 volt lA/D converter ci dar
lancia il compilatore in assembler. un numero decimale di 51 e per un valore di 2 volt
ci dar un numero decimale di 102 e per 3 volt un
Con questa istruzione convertirete automatica- numero decimale di 153.
mente il nostro programma da .ASM in .HEX. Se misurassimo una tensione di 2,5 volt, in teoria
lA/D converter dovrebbe darci il numero 51 x 2,5
Per trasferire questo programma gi compilato in = 127,5, ma poich in pratica non ci dar mai un
.HEX nel microprocessore posto sullinterfaccia numero con la virgola, sulla sua uscita otterremo
LX.1202, dovrete richiamare la directory LX1208 dei numeri variabili molto prossimi a 127, ad e-
e poi scrivere semplicemente: sempio 127-128-128-129-127-129, perch lA/D
converter dellST6 non molto stabile.
C:\LX1208>ST6PGM poi premere Enter
Sommando i 6 numeri del nostro esempio otterre-
A questo punto sul monitor apparir una masche- mo un totale di 768, che diviso per 6 ci dar il va-
ra che vi chieder quale programma desiderate tra- lore medio:
sferire e su quale micro ST6; fornite al computer
le esatte risposte, il vostro programma modificato 768 : 6 = 128
verr memorizzato nel micro ST62/E25.
Dividendo 128 per 51 otterremo:

TESTER.HEX 128 : 51 = 2,50

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

C6 Fig.9 Il programma TESTER.HEX per-


R4 mette di utilizzare questo display alfa-
P2 numerico in un Voltmetro in grado di mi-
DS2 surare un massimo di 5 volt. Per prova-
re questo Voltmetro potrete procurarvi
DS1
IC1 un trimmer da 10.000 ohm ed una pila
da 4,5 volt.
R3 Ruotando il suo cursore vedrete appari-
C4
re sui display il valore della tensione.
4,5 V.
C5

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

C6 Fig.11 Utilizzando il partitore resistivo di


R4 fig.10 la lettura potrebbe non risultare
P2 precisa a causa delle tolleranze delle
DS2 resistenze. Per risolvere questo proble-
DS1
ma, potrete utilizzare una sola resisten-
IC1 za ed un trimmer che andr tarato in mo-
do da leggere lesatta tensione applica-
R3
C4
ta sullingresso.

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
.

IL KIT LX.1208/N con il nuovo DISPLAY WH.1602A

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.

Fig.12 Connessioni del display alfa-


numerico WH.1602A. Il microproces-
sore ST6 esterno dialoga con questo
display a 4+4 bit attraverso i piedini
da DB4 a DB7, che fanno capo ai pie-
dini 11-12-13-14 (vedi fig.13). I piedini
da DB0 a DB3, che fanno capo ai pie-
dini dal 7 al 10, vanno collegati a mas-
sa perch non vengono utilizzati.
14 13 12 11 10 9 8 7 6 5 4 3 2 1 16 15
CONTRASTO

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

Fig.13 Schema elettrico del circuito siglato


LX.1208/N con display alfanumerico. Colle-
gando i piedini 16-15 rispettivamente a
massa e al positivo di alimentazione, il di-
splay si retro illumina. Per regolare il con-
trasto, dovete agire sul trimmer R4.
ELENCO COMPONENTI LX.1208/N

+V 7 6 5 R1 = 10.000 ohm 1/4 watt


R2 = 10.000 ohm 1/4 watt
R3 = 4,7 ohm 1/2 watt
R4 = 10.000 ohm trimmer
R5 = 10.000 ohm 1/4 watt
1 2 3 -V R6 = 1 Megaohm 1/4 watt
C1 = 100.000 pF poliestere
LM 358
C2 = 100.000 pF poliestere
C3 = 100.000 pF poliestere
Fig.14 Connessioni viste da sopra dellam- C4 = 100.000 pF poliestere
plificatore operazionale LM.358, siglato C5 = 10 microF. elettrolitico
IC1/A nello schema elettrico di fig.13. Co- C6 = 1 microF. poliestere
me gi spiegato nellarticolo, questo ampli- DS1 = diodo tipo 1N.4150
ficatore non indispensabile al funziona- DS2 = diodo tipo 1N.4150
mento del display, ma stato inserito per IC1 = integrato tipo LM.358
dimostrarvi come sia possibile, con oppor-
DISPLAY = LCD tipo WH.1602A
tune istruzioni di programma (vedi pro-
CONN.1/2 = connettore 24 poli
gramma TESTER.ASM), trasformare il di-
P1 = pulsante
splay in un voltmetro.
P2 = pulsante
.

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.

SOFTWARE emulatore per


to che non vi siano altri errori che potrebbero es- Per questi motivi i softwaristi e gli hobbisti sono al-
sere sfuggiti ad un primo controllo. la ricerca di un emulatore corredato di software
che risulti facile da usare, molto economico e che
Non inoltre da escludere che nonostante la buo- permetta unemulazione completa ed in tempo rea-
na volont non si riesca a capire in quale istruzio- le di un micro ST6.
ne presente lerrore e per scoprirlo ci potrebbe
volere molto tempo e pazienza. Per risolvere questo problema abbiamo acquistato
tutti gli emulatori per ST6 e relativo software che
Con un emulatore risulta molto pi facile ed anche siamo riusciti a reperire sul mercato, poi ad uno ad
meno costoso programmare qualsiasi ST6, perch uno li abbiamo testati inserendo apposta nei no-
si pu controllare passo per passo ogni istruzio- stri programmi degli errori con diversi livelli di dif-
ne mentre viene eseguita. In questo modo pos- ficolt per verificare con quale grado di facilit ci
sibile capire dove e perch si generato lerrore. consentivano di individuarli.
Tra tutti quelli provati ne abbiamo trovato uno che,
Ad esempio, potremmo aver scritto un programma a nostro avviso, molto valido ed evoluto sia co-
che ad un tempo prefissato deve accendere una me hardware sia come software.
lampadina, e solo dopo aver programmato lST6 ci Si tratta di quello della SOFTEC di Azzano Deci-
accorgiamo che questo tempo risulta dimezzato o mo, in provincia di Pordenone.
raddoppiato perch non abbiamo tenuto conto Il suo software inoltre perfettamente compatibile
della frequenza del quarzo oppure abbiamo fatto con il sistema operativo Windows 3.1 e precedenti
una somma anzich una moltiplicazione. ed anche con il pi recente Windows.95, laddove
molti altri software presentano invece dei problemi.
Oppure potremmo aver scritto un programma per Nota: Il pacchetto non funziona sotto DOS.
svolgere una semplice funzione, ad esempio:
Utilizzando il software possibile risolvere l80%
- se suona il campanello dei problemi relativi alla programmazione.
- vai ad aprire la porta Noi vi spiegheremo come deve essere usato per
controllare passo per passo ogni istruzione e per
ma se non abbiamo tenuto presente che in casa ci scoprire tutti gli errori logici che potreste aver com-
sono diverse porte, quella dingresso, quella della messo nello scrivere un programma.
TESTARE i micro ST6
Con il software emulatore della SOFTEC riuscirete a programmare
senza difficolt tutti i micro della serie ST6210/15/20/25 perch se com-
metterete qualche errore potrete rintracciarlo e correggerlo. Questo
software funziona sotto Windows 3.1 e sotto Windows 95.

Anche se supponiamo che tutti sappiano gi come


trasferire un programma da un floppy sullHard-Di-
sk, riteniamo ugualmente utile ricordare queste po-
che istruzioni.

INSTALLARE il SOFTWARE
sotto WINDOWS 3.1

Se nel vostro computer avete installato Windows


3.1 o una versione precedente, dopo aver inserito
il dischetto del software DSE622 nel suo Drive en-
trate in Program Manager, poi portate il cursore in
Fig.1 Per installare il DSE inserite il nome.
alto a sinistra sulla scritta File e cliccate, quindi an-
date sulla scritta Esegui, cliccate nuovamente e
quando appare la finestra di dialogo digitate:

A:\setup poi cliccate su OK

In questo modo il software DSE622 verr trasferi-


to dal floppy nellHard-Disk.

Quando appare la finestra Name and Company


Fig.2 Messaggio di fine installazione. (vedi fig.1) inserite il vostro nome poi cliccate sulla
scritta Continue per completare linstallazione.
Ad installazione avvenuta apparir la finestra di Selezionate il comando copia e vedrete apparire
fig.2: qui cliccate sulla scritta OK ed apparir la fi- la finestra di dialogo di fig.8, in cui dovete specifi-
nestra di fig.3. care dove volete copiare il file atest.asm.

Portate il cursore sulla finestra in basso e scrivete:

C:\ST6

poi andate sulla scritta OK e cliccate.


Tornerete cos alla finestra di fig.6.
Fig.3 Finestra del Real Time Emulator.
Nota: vi abbiamo fatto copiare nella directory ST6
questo file, perch tutti i precedenti programmi in-
Portate il cursore in alto a sinistra nel quadrettino seriti nel dischetto DF.1170, contenenti il softwa-
con il segno e cliccate per far apparire la finestra re di sviluppo dellST6 della SGS-Thomson, pre-
di fig.4. vedevano linstallazione in questa directory.
Ora portate il cursore sulla scritta Chiudi e clicca-
te in modo che compaia la finestra del: Ripetendo i passaggi appena descritti dovete ora
copiare nella directory ST6 anche il file btest.asm.
Program Manager di Windows 3.1
Al contrario non dovete assolutamente copiare il
terzo file setup.exe, perch questo programma
gi stato installato.

Per uscire da File Manager cliccate in alto a sini-


stra su File e selezionate la scritta Esci.

Fig.4 Per chiudere potete usare CTRL+F4.

A questo punto andate con il cursore sul simbolo


di File Manager (vedi fig.5) e cliccate, quindi an- Fig.6 Contenuto del dischetto A.
date sul simbolo dellunit floppy disk A (riporta-
to in alto sulla sinistra) e cliccate nuovamente.
Appariranno cos sulla destra del video queste tre
scritte (vedi fig.6):

atest.asm
btest.asm
setup.exe

Ora dovete trasferire nellHard-Disk i due soli files


atest.asm e btest.asm, perci selezionate con il
cursore la scritta atest.asm, andate sulla scritta Fi-
le posta in alto sulla sinistra e cliccate in modo che
Fig.7 Cliccate sulla scritta COPIA.
appaia la finestra di fig.7.

Fig.8 Copiate il file ATEST.ASM in C:\ST6.


Fig.5 Icona di File Manager in Windows.
Installare il SOFTWARE Quando appare la finestra visibile in fig.11, porta-
sotto WINDOWS 95 te il cursore in alto a destra sullicona con il dise-
gno X e cliccate per tornare nella finestra princi-
Se nel vostro computer avete installato Windows pale di Windows 95 (vedi fig.12).
95, dopo aver inserito il dischetto con il software
DSE622 nel suo Drive, cliccate sulla scritta Avvio
posta in basso, quindi andate sulla scritta Esegui
e cliccate nuovamente.
Quando appare la finestra di dialogo dovete digi-
tare:

A:\setup poi cliccate su OK

Il software DSE622 verr direttamente installato dal


floppy nellHard-Disk.

Quando appare la finestra Name and Company


(vedi fig.9) inserite il vostro nome, quindi andate
sulla scritta Continue e cliccate. Fig.11 Per tornare alla finestra principale di
Windows 95 cliccate sul simbolo X.
Ad installazione avvenuta apparir la finestra di
fig.10: ora andate sulla scritta OK e cliccate.

Fig.12 Dalla finestra principale di Windows


95 cliccate su Avvio.

Ora cliccando sulla scritta Avvio posta in basso at-


tiverete un sottomenu nel quale dovrete selezio-
Fig.9 Quando appare la finestra dellinstal- nare la scritta Programmi e poi Gestione risorse.
lazione del programma, inserite il vostro Dopo aver selezionato anche questa scritta appa-
nome e cliccate su Continue. rir la finestra di dialogo di fig.13.

Fig.13 Cliccando sulla scritta Avvio, visibi-


le in fig.12, e seguendo le istruzioni ripor-
tate nel testo entrate nella finestra Gestio-
Fig.10 Quando linstallazione sar comple- ne Risorse di Windows 95.
tata comparir un messaggio. Per conti-
nuare cliccate su OK.
Cliccate sulla freccia che appare nella piccola fi-
nestra in alto al cui interno scritto C: per veder
apparire unaltra piccola finestra nella quale dove-
te selezionare la scritta:

Floppy da 3.5 pollici A:

Dopo aver cliccato (vedi fig.14), apparir sulla de-


stra il contenuto del dischetto floppy, cio i tre fi-
les:
Fig.16 Selezionate la directory ST6.
Atest.asm
Btest.asm
Setup.exe

A questo punto dovete trasferire nellHard-Disk so-


lo i files Atest.asm e Btest.asm.
Per prima cosa selezionate il file Atest.asm, poi
andate sullicona Copia (vedi fig.15) e cliccate.

Fig.17 Copiate il file con licona INCOLLA.

I FILES ATEST e BTEST

I programmi che vi abbiamo fatto copiare nella di-


rectory ST6 ci sono serviti per nostri test di simu-
lazione e ve li proponiamo in modo che possiate im-
Fig.14 Contenuto del dischetto A. parare ad usare questo software di simulazione.
Il programma ATEST stato concepito in modo da
usare i quattro piedini PA0 - PA1 - PA2 - PA3 di
porta A come ingressi ed i piedini PB0 - PB1 -
PB2 - PB3 di porta B come uscite.

Applicando su uno di questi quattro ingressi un li-


vello logico 1, tramite un interruttore o un micro-
switch ecc., vorremmo che apparisse sulla corri-
Fig.15 Andate su COPIA e cliccate. spondente uscita un livello logico 1 da utilizza-
re per accendere un diodo led oppure per pola-
rizzare la Base di un transistor o per eccitare un
Poich questo file deve essere copiato nella di- rel o una sirena.
rectory ST6, nella finestra a sinistra (vedi fig.16)
cercate con il mouse la scritta ST6, quindi fermate Il programma BTEST differisce dal precedente so-
il cursore su questa riga e cliccate. lo perch vi abbiamo inserito alcuni errori, che ci
permettono di mostrarvi come il software vi aiuti
Per il momento avete selezionato la directory, ma ad individuarli.
il file non ancora stato trasferito.
COME lavorare con il SOFTWARE DSE622
Per trasferirlo andate sullicona incolla (vedi fig.17)
e cliccate. Come abbiamo gi accennato, anche senza la
scheda emulatrice, che la SOFTEC in grado di
Ripetete la procedura visibile in fig.14 per copiare fornire ad un prezzo molto competitivo, questo
anche il secondo file Btest.asm. software permette di controllare in modo traspa-
rente tutte le istruzioni di qualsiasi programma, aiu-
Nota: non copiate il file setup.exe perch gi in- tando cos nel loro lavoro tutti i programmatori ed
stallato. in particolar modo quelli che da poco hanno inizia-
to a programmare.
Per uscire da questa finestra andate in alto a sini- Quando si lancia il programma DSE622, il softwa-
stra su File, poi portate il cursore su Chiudi oppu- re testa se sulluscita della porta COM2 collega-
re pigiate i tasti ALT+F4. ta la scheda emulatrice della SOFTEC.
Ovviamente se non la trova segnala ERRORE Prima di proseguire riportiamo il significato di al-
(vedi fig.18), ma di questo non dovete assoluta- cune parole che sono spesso richiamate nellarti-
mente preoccuparvi. colo.

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.

project - chiamiamo con questa parola tutti i files


con estensione .PRJ che, oltre le caratteristiche del
programma, contengono le specifiche definite con
il software simulatore per testare il programma
stesso.

source/file - chiamiamo con questa parola tutti i


Fig.18 Se non avete la scheda d errore.
programmi gi assemblati riconoscibili dallesten-
sione .HEX.
Se cliccate sul tasto Parameters apparir la fine- simulazione - chiamiamo con questa parola lese-
stra di fig.19, che, se un domani lacquisterete, vi cuzione dei test dei programmi con lausilio del
permette di indicare al computer su quale porta se- software DS622, senza lutilizzo dellHardware
riale avete collegato la scheda emulatrice. dellemulatore.
Quando sarete in questa finestra vi consigliamo di variabili - chiamiamo con questa parola le defini-
cambiare la velocit di esecuzione (Baud Rate), zioni degli indirizzi di memoria Data Space.
e, potendo scegliere tra 9.600 - 19.200 - 28.800 -
57.600 - 115.200 Baud, vi suggeriamo di sceglie- COME creare la LIBRERIA per lST6
re la massima velocit, cio 115.200 Baud.
Digitate perci questo numero poi cliccate sulla Quando sul monitor appare la finestra con i menu
scritta OK. (vedi fig.20), per creare la libreria cliccate sulla
scritta Configure e vedrete apparire la piccola fi-
nestra visibile in fig.21.

- Cliccate sulla riga Tools per far apparire la fine-


stra di dialogo visibile in fig.22.

Fig.19 Scegliete la COM e i Baud Rate.

Quando appare la finestra principale del software


di simulazione (vedi fig.20) si possono gi inizia-
Fig.21 Finestra per creare la libreria.
re a testare tutti i programmi.

Fig.20 Finestra principale della SOFTEC. Fig.22 Finestra di dialogo TOOLS.


- Cliccate sulla scritta Add per far apparire la fine- Definite tutte le specifiche richieste, tornate al me-
stra di dialogo di fig.23. nu principale (vedi fig.20) cliccando su OK.

In questo modo vi abbiamo fatto inserire nella li-


breria il programma ST6\ST6.EXE, che gi da tem-
po vi abbiamo fornito. Con questo programma po-
trete assemblare, scrivere, correggere, ricercare un
programma, come vi abbiamo spiegato nelle lezio-
ni precedenti (vedi riviste N.172/173 - 174 -
175/176).

COMPILARE in ASSEMBLER
Fig.23 Finestra dialogo ADD TOOL. il programma ATEST.ASM

Quando sul monitor appare la finestra con i menu


- Nel riquadro a destra cliccate sulla riga C:\ e, sem-
(vedi fig.20) selezionate la riga Tools.
pre in questo riquadro, ricercate la directory ST6,
Nella piccola finestra che appare (vedi fig.26) clic-
quindi andate con il cursore su questa riga e clic-
cate sulla scritta ST6 e cos apparir la finestra dei
cate.
programmi di sviluppo dellST6, visibile in fig.27.
- Nel riquadro a sinistra cercate il programma
Per aprire la finestra dei files pigiate il tasto F3 op-
ST6.EXE (vedi fig.24) e selezionatelo, poi uscite
pure andate sulla scritta OPEN e cliccate (vedi
cliccando su OK.
fig.28).
In questo modo nel riquadro Command Line (ve-
Ora cercate il programma:
di fig.25) apparir: C:\ST6\ST6.EXE
atest.asm
- Nella riga Menu Title dovete digitare: ST6
e quando lavete trovato cliccate sulla scritta, poi
- Nella terza riga, Arguments (vedi fig.25), dovete
andate su OPEN e cliccate nuovamente.
digitare: $2
Appariranno cos sul monitor tutte le istruzioni di
questo programma (vedi fig.29).

A questo punto portate il cursore sulla scritta ST6


(prima riga in alto) e cliccate.
Sotto questa scritta si aprir una finestra (vedi
fig.30) con il cursore gi posizionato sulla parola
Assembla quindi cliccate.

Durante la compilazione in assembler verranno


creati questi files:
Fig.24 Selezionate il programma ST6.EXE.
ATEST.HEX
ATEST.SYM
ATEST.DSD

Per chi ancora non conoscesse il significato di que-


ste estensioni, lo accenniamo qui brevemente:

.HEX - programma eseguibile in formato Intel-Hex.

.SYM - file contenente le definizioni delle etichet-


te di salto ed il relativo indirizzo di memoria Pro-
gram Space

.DSD - file contenente le definizioni delle variabi-


Fig.25 Digitate nelle righe quanto appare. li, le loro caratteristiche ed il relativo indirizzo di me-
moria Data Space.
Completata la compilazione potete premere un
qualsiasi tasto per rientrare nellEditor dellST6, e
quando apparir la finestra di fig.29 cliccate sulla
scritta ALT-F3 oppure premete i tasti ALT+F3.
Apparir unaltra finestra (vedi fig.27) in cui dovre-
Fig.26 Cliccate sul sottomenu ST6 di Tools. te digitare Alt X per uscire dal programma ST6 e
rientrare automaticamente nel software DS622.

Quando appariranno i menu del DS622 selezio-


nate il menu Project e, nella finestra che appare
visibile in fig.31, andate sulla scritta New Project
e cliccate.

Questa operazione serve per creare il file con e-


stensione .PRJ, che verr utilizzato dal simulato-
re per testare il programma.

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.31 Comando per creare il file .PRJ.

Fig.29 Vedrete sul monitor le istruzioni.


Fig.32 Digitate il nome del project.

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.

Nel riquadro posto a destra cliccate sulla riga C:\,


poi cercate la scritta C:\ST6 e quando lavete tro-
vata selezionatela cliccando.
Nel riquadro a sinistra appariranno tutti i files con
estensione .HEX.

Cercate tra questi la scritta ATEST.HEX (vedi


Fig.34 Digitate le specifiche richieste. fig.39), cliccate su questa riga, poi uscite cliccan-
do su OK. In questo modo nel riquadro Filename
Portate il cursore nella finestra Device e cliccando (vedi fig.40) apparir la scritta:
la freccia in gi cercate la sigla del micro ST6 che
volete utilizzare. Ammesso che questo sia un C:\ST6\ATEST. HEX
ST6210 andate sulla riga ST6210 (vedi fig.35) e
cliccate.

Fig.35 Scegliete il nome del micro usato.

Ora portate il cursore nella finestra Frequency (ve-


di fig.36) dove potete selezionare la frequenza del Fig.38 Finestra di dialogo Browse.
quarzo utilizzato per il clock del micro scegliendo
tra 8 - 4 - 2 - 1 MHz.
Nota: Se non possedete la scheda emulatrice del-
la Softec scegliete a caso una di queste quattro
frequenze.

Per completare i dati da inserire in questa finestra


cliccate nel cerchietto accanto alla scritta Intel-Hex
(vedi fig.37) cosicch apparir un punto.

Fig.39 Quando siete nella finestra Browse,


selezionate il file ATEST.EXE.

Fig.36 Scegliete la frequenza del quarzo. Fig.40 Nel riga Filename apparir il nome
del file selezionato nella finestra Browse.

Ora potete passare al Debug Information (vedi


fig.34) e se allinterno del cerchietto posto a sini-
Fig.37 Con Intel-Hex vedrete i file .EXE. stra della scritta ST format trovate gi un punto
(vedi fig.42) non dovrete cliccare.
Se per errore cliccate allinterno del cerchietto po-
sto a sinistra della scritta None facendo apparire
un punto, durante lesecuzione del programma
non riuscirete a vedere i nomi delle variabili o
delle etichette utilizzate, quindi vi sar molto pi
difficile controllare passo per passo il programma.

Ora cliccate sulla scritta Modify per far apparire la


finestra di fig.41 che ha in evidenza questa scritta:
Fig.41 Se siete in simulazione, il WTD,
Hardware Watchdog Activazion, non serve. WTD = Hardware Watchdog Activazion

Siccome ci troviamo in simulazione, questa sele-


zione non serve perci portate il cursore su OK e
cliccate per far apparire la finestra di fig.42.

A questo punto cliccando sulla scritta OK verr


creato il Project ATEST.PRJ nella directory
DES622 e sarete pronti per testare il programma
(vedi fig.45).

Se sul video appare invece una di queste scritte:

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

potreste aver involontariamente cancellato dei fi-


les di compilazione. Per rigenerarli dovete cliccare
su OK per far riapparire la finestra di fig.43.

Ora dovete cliccare nuovamente sulla scritta Tools


e ripetere tutte le operazioni visualizzate dalla fig.20
alla fig.29 e vi ritroverete nella finestra visibile in
fig.27.
Per uscire digitate Alt+X e sul video vedrete ap-
parire la finestra di fig.44.
Cliccando su SI potrete vedere la finestra di fig.45
con tutti i dati e le istruzioni corrette.

Fig.43 Nella videata principale del DSE622


vengono attivate tre finestre.

Fig.44 Dalla finestra di fig.27 si passa con


ALT+X a questa finestra. Per andare nella
finestra di fig.45 cliccate su SI.
Fig.45 La finestra per testare il programma
appare sullo schermo cos suddivisa.
Se invece appare la scritta:

C:\ST6\ATEST.HEX emulation buffer overflow

significa che avete scritto il programma per un tipo


di micro ST6 diverso da quello selezionato nella ri-
ga del Device (vedi fig.35).
Ad esempio potreste aver scritto un programma per
il micro ST62/10 ed aver inserito nel Device il mi-
cro ST62/25 o viceversa. Fig.47 Aprite la finestra Code-Memory.
In presenza di questo errore cliccate su OK e, quan-
do appare la finestra di fig.43, selezionate il menu
Project e cliccate su Edit project (vedi fig.46).
Vi ritroverete nella finestra di fig.35 dove potrete
correggere la scritta corrispondente alla riga Devi-
ce digitando la sigla corretta del micro utilizzato.
Per uscire cliccate su OK.

Fig.48 Aprite la finestra Stack-Window.

Fig.46 Finestra per correggere la fig.35.

Quando apparir la finestra di fig.45 sarete pronti


per effettuare la simulazione del programma A-
TEST.HEX utilizzando il file Projet ATEST.PRJ.

Prima di proseguire necessario che vi spieghia- Fig.49 Aprite la finestra Watch.


mo cosa contengono le 3 finestre visibili in fig.45.

Nella finestra Disassembler, sotto le due colonne


Label e Mnemonic, avete le istruzioni del pro-
gramma da testare in formato leggibile.
Nelle colonne Add e Opcode appaiono le mede-
sime istruzioni in formato Intel.Hex.

Nella finestra Register appaiono tutti i registri, lo


stack level, gli stati dei tre flags ed il valore del
Program Counter.

Nella finestra Data appare il contenuto del Data


Memory Space del micro, cio il contenuto delle
variabili, dei registri e della Data Rom Windows
definiti in questo programma. Fig.50 Sul video appaiono altre finestre.

Avendo sottocchio tutte queste finestre sarete in


grado di controllare passo x passo in simulazio- Perci dopo aver portato il cursore sulla scritta Win-
ne tutti i vostri programmi. dow posta in alto (vedi fig.47) cliccate e nella fi-
Prima di iniziare il controllo, a nostro parere ne- nestra che appare selezionate la riga Code Me-
cessario configurare ulteriormente il software mory.
DS622 cos da vedere sul monitor in tempo reale
anche altre funzioni che potrebbero risultarvi mol- Cliccate nuovamente sulla scritta Window e sele-
to utili. zionate la scritta Stack Windows (vedi fig.48).
Ritornate nuovamente a cliccare sulla scritta Win- In questo modo possibile eseguire pi subroutine,
dows e selezionate la riga Watch (vedi fig.49). una allinterno dellaltra, fino ad un massimo di 6.
Il sottomenu di Window sparir.
La finestra Code Memory permette di visualiz-
In questo modo alle finestre che gi apparivano nel- zare in esadecimale il contenuto della Program
la fig.45 si aggiungono 3 supplementari finestre Memory Space, cio la memoria del micro in cui
operative (vedi fig.50), e cio: sono contenute le istruzioni del programma sot-
to test.
Stack
Code Memory La finestra Watch, che inizialmente vuota, ser-
Watch ve per inserire, come poi vi spiegheremo, le va-
riabili delle quali ci interessa controllare il conte-
Vi consigliamo di rimpicciolire e spostare le finestre nuto per vedere come questo si modifica durante
(vedi lesempio riportato in fig.51) in modo da ave- lesecuzione del programma.
re sempre sottocchio tutte le specifiche relative al-
la programmazione di qualsiasi micro ST6. Se di queste tre finestre volete che ne appaia una
sola o due, dovete annullare una delle operazioni
riportate nelle figg.47-48-49.

ESEMPI di EMULAZIONE

Le prime volte che userete il software simulatore


DSE622 vi consigliamo di stampare il listato del
programma che volete testare (nel nostro esem-
pio ATEST.ASM) per poter confrontare le istruzio-
ni stampate con quelle che appariranno sul moni-
tor.
Se avete spento e riacceso il computer, per richia-
mare il programma ATEST gi creato come file
project, che ora si chiamer quindi ATEST.PRJ,
dovrete cliccare sullicona apri file (vedi fig.52).
Fig.51 Vi suggeriamo di rimpicciolire e spo-
stare tutte le finestre come visibile in que-
sta figura.

Dopo aver posizionato le finestre nei punti che ri-


tenete pi opportuni, tutte le volte che richiamere- Fig.52 Cliccando sullicona Apri File potre-
te il file ATEST.PRJ o altri files con la stessa e- te aprire il file ATEST.PRJ.
stensione, le finestre riappariranno dove le aveva-
te posizionate.
Nella finestra di dialogo che appare, sotto il Nome
La finestra Stack permette di visualizzare in tem- file ci sar la scritta *.PRJ e nella finestra sotto-
po reale il valore dei suoi 6 registri. stante il solo file ATEST.PRJ, perch per ora sta-
to creato un solo project.
Se nel corso del programma viene eseguita listru- Man mano che creerete files con estensione .PRJ
zione Call (vedi rivista N.174) o viene attivato un troverete tutti i loro nomi in questa finestra.
Interrupt (vedi rivista N.175/176), il contenuto dei
primi 5 registri di Stack viene immediatamente Cliccate sul nome del file desiderato quindi uscite
shiftato di un livello superiore , vale a dire che il da questa finestra cliccando su OK. Apparir la fi-
contenuto del 5 registro viene passato al 6, il con- nestra visibile in fig. 51.
tenuto del 4 registro viene passato al 5 e cos via.
Sullultima riga visibile della finestra Disassembler
A questo punto nel 1 registro di Stack viene me- (vedi fig.53) potete vedere una riga blu evidenzia-
morizzato il contenuto del Program Counter, cio ta da una freccia rossa.
lindirizzo di ritorno della subroutine richiamata nel-
la Call (istruzione Ret) o nellInterrupt (istruzione Nota: la freccia rossa mette in evidenza la prima
Reti), come appare visibile in fig.89. istruzione che il programma eseguir.
Le righe sopra quella evidenziata in blu sono quel-
le che abbiamo definito nel programma ATEST per
i vettori di interrupts.

Nella finestra Register di fig.54 appare lo Stack le-


vel, i tre Flags NORM - INT - NMI tutti a livello lo-
gico 0, ed il PC (Program Counter) posizionato sul
valore esadecimale FFEH (come gi sapete la let-
tera H significa esadecimale), che corrisponde
Fig.53 La freccia mostra da dove si parte. allindirizzo della prima istruzione eseguibile (vedi
la finestra Disassembler di fig.53).

Per far partire il programma in modo che ogni i-


struzione avanzi passo x passo dovete portare il
cursore sullicona di fig.55 e cliccare.

Ogni volta che cliccherete su questa icona il pro-


gramma eseguir una sola istruzione e questo vi
consentir di controllarlo riga per riga.

Come vi spiegheremo tra poco, possibile ese-


guire anche pi istruzioni per ogni passo oppure
Fig.54 Finestra Registers. lanciare unesecuzione in automatico.

La prima istruzione che il programma ATEST e-


segue quella riportata allindirizzo FFEH, come
appare in fig.53.

INSERIRE una VARIABILE


Fig.55 Icona per avanzare passo/passo. nella finestra WATCH

Poich potrebbe risultare utile controllare lo stato


dei piedini della porta A di entrata (input) e quello
dei piedini della porta B di uscita (output), scri-
vendo nella finestra Watch le definizioni di queste
variabili potrete averle sempre sottocchio.
Fig.56 Aprite la fig.57 con Add Watch. In questo modo sar pi facile vedere come cam-
biano man mano che fate avanzare il programma.

Per visualizzare le due porte nella finestra Watch


dovete eseguire queste semplici operazioni:

- Andate con il cursore nella finestra Watch e clic-


cate per evidenziare questa finestra.
Fig.57 Per le variabili cliccate sulla freccia.
- Come potete notare, nella barra dei menu posta
in alto, tra le scritte Tools e Configure, appare la
scritta Watch che vi permette di accedere ad un
sottomenu dedicato a questa finestra.

Tra le scritte Tools e Configure appare infatti di


volta in volta il menu relativo alla finestra posta in
primo piano.

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

Cliccate su port_a, poi andate su ADD e qui clic-


cate. In questo modo nella finestra Watch apparir
la variabile port_a con lindirizzo ADD di Data
Fig.59 Esempio della Variabile port_a.
Space, il valore esadecimale - Hex ed il valore de-
cimale - Dec (vedi fig.59).

Poich ci interessa controllare anche i valori della


porta B, dovrete ripetere tutte le operazione ripor-
tate nelle figg.56-57-58, quindi selezionare la va-
riabile port_b.
Cliccando poi su ADD nella finestra Watch appa-
riranno i dati della port_b (vedi fig.60).
Fig.60 Esempio della Variabile port_b.
COME INSERIRE un BREAKPOINT

Unaltra operazione che dovete imparare come


attivare un breakpoint.
Attivare un breakpoint significa mettere un punto
di blocco ad unistruzione del programma in modo
che durante la simulazione si fermi su quella riga.

Ammesso che vogliate inserire un breakpoint


sullultima riga in basso in cui riportata listru-
zione (vedi fig.61):

898 0D D4 00 ldi tscr,00H

dovrete portare il cursore su questa riga e clicca-


re due volte. Vedrete cos apparire sul monitor la
finestra di comando visibile in fig.62. Fig.61 Finestre per testare il programma.
Cliccate sulla scritta Toggle Breakpoint e a sini-
stra della riga selezionata comparir un punto e-
sclamativo che vi segnala che su quella riga sta-
to attivato il breakpoint (vedi fig.63).

COME usare il BREAKPOINT

Come gi vi abbiamo accennato, il breakpoint ser-


ve per fermare il programma sulla riga di istruzio- Fig.62 Per attivare un Breakpoint.
ne che avete marcato ogni volta che verr lancia-
ta una simulazione in modo automatico o a pas-
si multipli.
Potete mettere quanti breakpoint volete, cio 3 -
5 - 14 - 20 ecc.
sottinteso che quando il programma si sar fer-
mato su un breakpoint per proseguire dovrete nuo-
vamente cliccare sullicona passo per passo o a
passi multipli oppure sullesecuzione automatica.
Per togliere il breakpoint (ma ora non toglietelo
perch ve lo faremo usare per fare un po di prati-
ca) dovrete andare sulla riga interessata e clicca- Fig.63 Dove c ! attivato un Breakpoint.
re due volte, poi nella finestra che appare dovre-
te andare sulla scritta Toggle Breakpoint (vedi Poich lindirizzo di port_b C1, nella prima co-
fig.62) e cliccare. lonna dovrete cercare lindirizzo di memoria C0,
in questo modo il breakpoint verr eliminato dalla poi, prendendo come riferimento il righello in gri-
riga in cui in precedenza era stato inserito. gio, scendete dal valore esadecimale 01 fino ad in-
contrare la riga C0, come si farebbe con una Ta-
Se per errore andate sulla scritta Cancell e clic- vola Pitagorica, e cos troverete il valore 0F.
cate non toglierete il breakpoint, ma farete solo
sparire la finestra di fig.62. Portate il cursore su 0F poi cliccate 2 volte e ve-
drete apparire la finestra di dialogo Edit data ri-
ESECUZIONE in AUTOMATICO portata in fig.65.
Cliccando sulla scritta Bits apparir sullo schermo
Per far avanzare in modo automatico le istruzioni la finestra di dialogo di Port B Data Register di
senza cliccare tutte le volte il tasto del passo-pas- fig.66.
so riportato in fig.55, dovete portare il cursore sulli-
cona visibile in fig.64, cio sullimmagine di una pa-
gina con una freccia rivolta verso il basso.

Fig.64 Icona per avanzare in automatico.


Fig.65 Finestra di dialogo Edit data.
Cliccando su questa icona ottenete unesecuzione
sequenziale ed automatica di tutte le istruzioni, che
si fermer solo sullistruzione in cui avete inserito
il Breakpoint.

Quando viene eseguita listruzione:

883 0D C0 0F ldi port_a,0FH

se guardate nella finestra Watch al contenuto del-


la port_a sotto la colonna Dec. trovate il numero Fig.66 Finestra di Port B Data Register.
15.

Quando viene eseguita listruzione: In orizzontale potete leggere i numeri 7 - 6 - 5 - 4


- 3 - 2 - 1 - 0, che corrispondono ai piedini della
88C 0D C1 0F ldi port_b,0FH porta B. Sotto questi numeri ci sono delle caselle
che possono contenere una V oppure risultare vuo-
se guardate nella finestra Watch al contenuto della te.
port_b sotto la colonna Dec. trovate il numero 15. Nel nostro caso la V presente solo sulle prime
Infatti sempre nella finestra Watch al numero esa- quattro caselle 3 - 2 - 1 - 0, mentre nelle altre quat-
decimale 0F corrisponde il numero decimale 15. tro caselle 7 - 6 - 5 - 4 non appare nulla.
Se non sapete ancora convertire un numero deci-
male in un numero binario vi consigliamo di an- Le caselle con la V sono quelle che si trovano a li-
dare a pag.381 del nostro Handbook (se ne siete vello logico 1, cio sui piedini corrispondenti ri-
sprovvisti potete richiedercelo) dove troverete: sulta presente una tensione positiva, ed ovvia-
mente quelle senza la V sono a livello logico 0.
0000-1111 Come gi saprete il numero decimale 15 corri-
sponde a 0 0 0 0 - 1 1 1 1 in binario.
Per avere una riprova visiva di queste condizioni
logiche dovete andare nella finestra Data. Nella colonna verticale troverete gli otto piedini
Questa finestra riporta nella prima colonna gli indi- della porta B siglati PB0 - PB1 - PB2 - PB3 - PB4
rizzi di memoria e nel righello in alto in grigio i va- - PB5 - PB6 - PB7.
lori esadecimali: Da questa finestra di dialogo potete dunque sape-
re quale condizione logica presente sugli otto
00-01-02-03-04 09-0A-0B-0C-0D-0E-0F piedini.
Nel nostro esempio: Ponendo il cursore su 00 e cliccando due volte ve-
drete apparire la finestra dellEdit data di fig.68, ov-
PB7 - PB6 - PB5 - PB4 = livello logico 0 viamente diversa da quella di fig.65.
PB3 - PB2 - PB1 - PB0 = livello logico 1 Cliccando sulla scritta Bits apparir la finestra di
fig.69, leggermente diversa da quella di fig.66.
Dopo questa verifica potete cliccare su OK, poi clic-
cate ancora su OK nella successiva finestra e tor-
nerete nella finestra Data di fig.67.

IMPORTANTE

Durante lesecuzione del programma tutte le quat-


tro uscite si portano a livello logico 0 fino a quan-
do uno dei quattro ingressi non viene collocato a
livello logico 1. Fig.68 Finestra di dialogo Edit data.
Potendo vedere nella finestra di fig.66 le condi-
zioni logiche presenti sulle porte, vi accorgerete
subito se nel programma stato commesso un er-
rore.
Ammesso infatti che nel piedino PB6 di porta B
debba risultare presente un livello logico 1 e non
un livello logico 0 e nel piedino PB0 i porta B un
livello logico 0 e non un livello logico 1, potrete
subito vedere la situazione sui piedini della porta.
La finestra di fig.66 non solo vi permette di vedere Fig.69 Dalla finestra di fig.68 cliccate sulla
i livelli logici sui piedini di port_b, ma anche di scritta Bits per aprire la finestra dellA/D
correggerli. Infatti se, ad esempio, provate a clic- Control Register.
care nella casella 6 comparir una V che vi indica
che questo piedino passato a livello logico 1.
Dopo avervi spiegato come sia possibile controlla-
Poich il programma ATEST non contiene errori re visivamente i livelli logici presenti sui piedini
non cambiate i livelli logici su PB0 - PB1 - PB2 - del micro, potrete divertirvi a vedere il contenuto
PB4 e se lo fate, rimettete quelli che apparivano in delle variabili e dei registri che non vi abbiamo ci-
precedenza, diversamente andrete a modificare il tato. In questo modo farete un po di pratica che vi
corretto proseguimento del test. servir in futuro per scrivere correttamente i vostri
programmi.
Allo stesso modo potrete controllare il livello logi-
co del registro di controllo dellAD/Converter (nel
programma di ATEST lAD/Converter non viene u-
sato).
Andate nella finestra Data (vedi fig.67) e cercate ESECUZIONE a PASSI MULTIPLI
negli indirizzi di memoria il valore esadecimale D0.
Per la funzione passi multipli sarebbe consiglia-
Poich lindirizzo di questo registro D1, pren- bile togliere tutti i breakpoints, in ogni caso anche
dendo come riferimento il righello in grigio, poi se li lascerete potrete ugualmente eseguire questa
scendete dal valore esadecimale 01 fino ad incon- funzione.
trare la riga D0 e troverete il valore 00. Lesecuzione a passi multipli vi d la possibilit di
eseguire in modo automatico un numero di istru-
zioni che voi stessi potrete definire.

Ad esempio, potrebbe risultarvi comodo far ese-


guire al programma 5 - 8 - 10 istruzioni di segui-
to prima i fermarvi per controllare i dati.
Stabilito il numero di istruzioni da eseguire di se-
Fig.67 Per attivare la finestra di dialogo guito, tutte le volte che cliccherete sullicona di
Edit Data dovete cliccare due volte su 00. fig.70 verr eseguito il numero di istruzioni che a-
vete prefissato.
Attualmente il software predefinito per fare pas- FUNZIONE DEBUG
si di 2 sole istruzioni, quindi ammesso che desi-
deriate fare dei passi di 5 istruzioni dovrete pro- La funzione debug molto utile per vedere la map-
cedere come segue. pa del micro utilizzato e su quali piedini sono po-
sizionate le porte A - B - C, inoltre potete vedere
- Portate il cursore sulla scritta Run visibile in fig.71 quali livelli logici sono presenti sui piedini din-
e cliccate e nella finestra che appare andate sulla gresso o di uscita durante lesecuzione del pro-
scritta Multiple Step Value e cliccate. gramma.

Per entrare nella funzione debug cliccate sulla


scritta Debug, visibile nella fascia superiore del me-
nu, e quando appare la maschera di fig.74 clicca-
te nella riga Test I/O.
Fig.70 Icona per fare passi multipli. Apparir cos la finestra di fig.75.
In alto potete leggere la sigla dellintegrato pre-
scelto, nel nostro caso ST6210 - ST6220, in bas-
so a sinistra potete vedere le connessioni del mi-
cro e su quali piedini sono posizionate le porte A
e B, infine sul lato destro visibile la mappa di con-
figurazione logica di queste due porte.

Per la porta A, che dispone di soli 4 piedini PA0 -


PA1 - PA2 - PA3, troverete a destra 4 caselle gri-
gie (questo perch i piedini della porta A sono so-
lo 4) e 4 caselle indicate 3 - 2 - 1 - 0 che possono
essere vuote o contrassegnate da una V.

Fig.71 Finestra per variare i passi/multipli.

- Nella finestra di dialogo che appare (vedi fig.72)


andate nella casella Value e sostituite il numero 2
con il 5, poi andate su OK e cliccate.
Fig.74 Cliccate su Test I/O per la fig.75.

Fig.72 Digitate il numero dei passi multipli.

- Tutte le volte che cliccherete sullicona in cui so-


no disegnate due orme (vedi fig.73), il programma
avanzer di 5 istruzioni. Fig.75 Mappa di configurazione del micro.
Cliccando nuovamente sullicona, il programma a-
vanzer di altre 5 istruzioni. caselle DDR - (Data Direction Register) Se que-
ste caselle risultano vuote significa che abbiamo
definito i piedini input (ingressi), quelle contrasse-
gnate con una V indicano che li abbiamo definiti
output (uscite).

caselle DR - (Data Register) Se queste caselle ri-


Fig.73 Icona per i passi multipli. sultano vuote significa che sui piedini presente
un livello logico 0, se sono contrassegnate da u-
na V significa che presente un livello logico 1.
caselle OR - (Opzion Register) Queste caselle caselle OR - (Opzion Register) Queste caselle
servono per selezionare le varie opzioni delle por- servono per selezionare le varie opzioni delle por-
te. Se con il DDR abbiamo predefinito il piedino co- te. Se con il DDR abbiamo predefinito il piedino co-
me input, combinandolo con il DR e lOR otterre- me output, combinandolo con il DR e lOR otter-
mo queste selezioni: remo queste selezioni:

DDR DR OR opzione come ingressi DDR DR OR opzione come uscite


0 0 0 pull-up senza interrupt 1 0 0 Collettore aperto
0 1 0 senza pull-up e senza interrupt 1 1 0 Collettore aperto
0 0 1 con pull-up e con interrupt 1 0 1 uscita in Push-Pull
0 1 1 ingresso analogico (vedi nota)
Poich in molti programmi non si usano i termini D-
Nota: Lingresso analogico non consentito per i DR - DR - OR, ma PDIR - PORT - POTP, riportia-
piedini PA0 - PA1 - PA2 - PA3. mo le loro equivalenze:

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.

Questo software vi permetter di vedere nella finestra Disassembler tutte le istruzioni in


formato leggibile; nella finestra Register tutti i registri, lo stack level e gli stati dei flags;
nella finestra Data il contenuto delle variabili dei registri e della data rom windows ecc.
Chi desiderasse acquistare la scheda emulatrice (vedi foto) pu rivolgersi a:

SOFTEC MICROSYSTEMS V.le Rimembranze, 19/C 33082 AZZANO DECIMO (PN)


fax 0434-631598 tel. 0434-640113 BBS 0434-631904
Nel disegno grafico visibile sulla sinistra di fig.75, COME SIMULARE lINTERRUTTORE
potete vedere i piedini che hanno una casella gri-
gia, ad esempio: Nel programma ATEST tutte le uscite rimangono a
livello logico 0 fino a quando non mettete a livel-
1 = Vdd (tensione positiva di alimentazione) lo logico 1 uno dei quattro ingressi.
2 = Timer Poich siamo in simulazione e non avete n un
3 = Oscillatore input interruttore n una tensione positiva, per porta-
4 = Oscillatore uscita re a livello logico 1 uno di questi ingressi dovre-
5 = NMI (Interrupt non mascherato) te forzare lingresso desiderato come ora vi spie-
6 = TEST (piedino di programmazione) gheremo.
7 = Reset
20 = Vss (tensione negativa di alimentazione) Cliccate sullicona di Stop visibile in fig.76 rappre-
sentata da una mano aperta.

Le caselle grigie non possono essere direttamen-


te testate nella simulazione tramite software, per-
ch manca la tensione di alimentazione ed il
quarzo, quindi dovrete attivarle con alcuni accor- Fig.76 Icona di Stop.
gimenti.
Ammesso di voler portare a livello logico 1 lin-
A esempio, non disponendo della frequenza di gresso del piedino PA2 di port_a affinch sullu-
clock potrete simulare le funzioni di timer solo at- scita del piedino PB2 di port_b appaia lo stesso li-
tivando da programma la subroutine legata allin- vello logico, per prima cosa dovrete andare nella
terrupt del timer. finestra Watch, visibile in fig.77, per controllare lin-
dirizzo di port_a, che risulta essere C0 (vedi sotto
La funzione di reset pu essere invece attivata con ADD).
un comando presente nella barra dei menu.

Chi si procurer la scheda emulatrice sar in gra-


do di testare in modo automatico anche queste fun-
zioni, perch ha la stessa funzione del micro.

In ogni caso risolverete molti problemi gi con il so-


lo software.
Ad esempio se avete scritto un programma che de-
ve portare a livello logico 1 il piedino 6 e simu- Fig.77 Finestra di Watch.
landolo vi accorgete che rimasto a livello logico
0, vi sar molto pi facile, avanzando passo per Per forzare a livello logico 1 lingresso del piedi-
passo e controllando ogni istruzione, trovare quel- no PA2 dovete andare nelle finestra DATA (vedi
la che, per un banale errore, non ha provveduto a fig.78) poi ricercare nella colonna degli indirizzi di
modificare il livello logico su tale piedino. memoria il valore esadecimale C0.
Trovato C0 guardate nel righello in alto in cui ap-
paiono i valori esadecimali:

Per uscire dal debug sufficiente portare il curso- 00-01-02-03-04 - 08-09-0A-0B-0C-0D-0E-0F


re sulla scritta OK poi cliccare.
Il programma ripartir automaticamente dalla pri- Poich lindirizzo di port_a C0, scendete dal va-
ma istruzione eseguibile. lore esadecimale 00 fino ad incontrare la riga C0 e
Se lancerete lesecuzione automatica vedrete il cos troverete il valore 00 (vedi fig.78).
programma ruotare allinfinito sulle etichette: Portate il cursore su 00 e cliccate 2 volte.

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:

- Attivate la finestra Disassembler cliccando allin-


terno della finestra, quindi cliccate sulla scritta Di-
sassembler del menu e poi cliccate sulla scritta
Set New PC (vedi fig.82).

Fig.79 Scegliete Bits per vedere la fig.80.

Fig.82 Selezionate Set New PC.

- Apparir cos la finestra di dialogo New program


counter (vedi fig.83) e cliccando sulla freccia po-
sta a destra della finestra PC value dovrete ricer-
care letichetta ripeti (vedi fig.84).
Fig.80 Qui potete forzare i livelli logici.
Nota: tutte le etichette sono in ordine alfabetico.
In questa finestra potete vedere lo stato logico pre-
sente su tutti i piedini della porta A e poich tutte
le caselle risultano vuote, ovvio che su tutti i pie-
dini presente un livello logico 0.

Volendo forzare a livello logico 1 il piedino din-


gresso PA2 dovrete portare il cursore nella casel-
la posta sotto il numero 2 e cliccare. Fig.83 Finestra New Program Counter.

Comparir cos V a conferma del fatto che sul pie-


dino dingresso PA2 ora presente un livello lo-
gico 1.

Nota: se cliccherete una seconda volta torner a


livello logico 0.
Fig.84 Cliccate sulletichetta ripeti.
A questo punto cliccate su OK e nella finestra che
appare ritornate a cliccare su OK: apparir cos la - Ponete il cursore su ripeti e cliccate, poi cliccate
finestra di fig.81. su OK e vedrete apparire la finestra di fig.85.
Noterete che la prima riga in alto ferma sulleti-
chetta ripeti.

Fig.81 Nel Watch vedrete il nuovo livello.

Se ora guardate allinterno della finestra Watch ve-


drete che qualcosa cambiato, infatti sotto la co-
lonna .Hex troverete 04 e sotto la colonna Dec. il Fig.85 Il programma fermo su ripeti.
numero 4.
- A questo punto posizionate il cursore sullicona di
esecuzione passo per passo e cliccate pi volte
fino ad arrivare allistruzione:

8DD 43 C0 07 jrr 2,port_a,main02

Poich questo bit a livello logico 1, il program-


ma non salter pi a main02 ma proseguir alli-
struzione:
Fig.88 Sul piedino PB2 appare una V.
8E0 53 C1 09 jrs 2,port_b,mains3 Per uscire cliccate su OK e nella successiva ma-
schera cliccate nuovamente su OK: apparir cos
Poich PB2 a livello logico 0 non salter a la maschera di fig.85.
mains3, ma, cliccando sul tasto passo per passo,
proseguir fino alla successiva istruzione che sar: Ora che avete vi abbiamo spiegato come sia pos-
sa modificare un ingresso da livello logico 0 a li-
8E3 5B C1 set 2,port_b vello logico 1 o viceversa, potete fare un po di
pratica portando a livello logico 1 anche il piedi-
Per eseguire questa istruzione cliccate ancora no di un altro ingresso per poi riportarlo a livello
sullicona passo passo ed il piedino PB2 cambier logico 0, poi verificate se i piedini duscita sono
il suo livello logico da 0 a 1. passati da livello logico 0 a livello logico 1.
Per verificarlo dovrete sempre far ripartire il pro-
Per vedere se questa condizione si verificata po- gramma delletichetta ripeti (vedi fig.85).
trete guardare nella finestra Watch dove leggere-
te:

port_b C1 04 4

Se volete avere unulteriore conferma visiva anda-


te nella finestra Data (fig.86), cercate lindirizzo C0,
poi andate sotto la colonna 01 e scendendo in-
contrerete la casella 04.
Portate il cursore su questa casella e cliccate due
volte.

Fig.89 In ogni programma si possono ese-


guire fino a 6 subroutine nidificate, cio u-
na allinterno dellaltra.

NON ABBIAMO FINITO


Fig.86 Sulla casella 04 cliccate 2 volte.

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.

COSTO del dischetto SOFTWARE

Tutti i softwaristi e hobbisti che volessero entrare


Fig.87 NellEdit data cliccate su Bits. in possesso di questo dischetto di simulazione per
ST6 siglato DF622.03 potranno richiederlo alla no-
stra Direzione. Costo del dischetto ........... 7,75
Prima di insegnarvi le procedure da adottare per C = Carry, registro di stato.
cercare gli errori nei programmi scritti per i micro
ST6, vi forniamo per ogni istruzione del linguaggio Z = Zero, registro di stato.
Assembler una tabella.
Queste tabelle vi serviranno come guida rapida dst = byte che contiene lindirizzo di una variabi-
quando scriverete un programma o quando lo cor- le o di un registro il cui valore pu essere modifi-
reggerete, perch vi consentono di decifrare le co- cato dallistruzione.
difiche dellopcode e degli indirizzi di memoria di
e = 5 bits che esprimono un valore decimale com-
ogni istruzione.
posto da un numero da 0 a 63.
Per avere una descrizione particolareggiata e cor-
redata da esempi delle istruzioni in formato As- ee = 8 bits che esprimono un valore decimale
sembler vi consigliamo di rileggere quanto gi pub- composto da un numero da 0 a 255.
blicato sulla rivista N.174.
MSB = labbreviazione di Most Significant Bit,
cio bit significativo. Si tratta del bit 7 che per
In queste tabelle trovate il formato, lopcode, i by- la matematica binaria quando viene settato a 1
tes, i cicli e i flags di ogni istruzione. vale in decimale 128 ed in binario 1000-0000.

SOFTWARE simulatore per


Formato = composizione di una istruzione. PC = Program Counter. E un registro a 12 bit con-
Opcode = codice operativo in formato intel.hex. tenente lindirizzo dellistruzione in esecuzione.
Bytes = lunghezza dellistruzione in bytes.
Cicli = passi del micro per eseguire unistruzione. src = byte che contiene lindirizzo di una variabi-
Flags = particolari bit indicatori che vengono set- le o di un registro il cui valore non modificabile
tati, cio posti a livello logico 1, oppure resetta- dallistruzione.
ti, cio posti a livello logico 0, a seconda che si
verifichino o meno determinate condizioni a segui- In ogni Tabella troverete il significato delle abbre-
to dellesecuzione di una istruzione. Questi bit in- viazioni utilizzate che qui non compaiono, e le o-
dicatori vengono parcheggiati in speciali registri di perazioni che effettua il programma quando ese-
stato chiamati Carry e Zero. gue listruzione.
Per capire come usare queste Tabelle di guida ra-
Anche se conoscerete gi il significato delle paro- pida prendiamo ad esempio quella dellistruzione
le utilizzate nellarticolo, ne ricordiamo qui alcune: Set.
Una volta che avrete letto la spiegazione, saprete
Variabile = lindirizzo di memoria Data Space i- anche come usare tutte le altre tabelle.
dentificato da un nome, ad esempio port_a, con-
tenente un valore che nel corso dellelaborazione
pu variare. SET Set Bit

Overflow = letteralmente significa traboccamen- Formato opcode bytes cicli flags


to. Questo evento si verifica se il risultato di uno- SET bit,dst Z C
perazione matematica ci fornisce un valore pi SET b,A b11011 FF 2 4 * *
grande della capacit della variabile in cui lo do- SET b,rr b11011 rr 2 4 * *
vremmo memorizzare. Ad esempio, se il risultato
di una somma 300 e tentate di memorizzare que- Operazione: istruzione che serve per settare uno
sto numero in una variabile lunga 1 byte che pu degli 8 bit della Variabile dst.
contenere un valore compreso tra 0 e 255, si veri-
ficher un overflow. A = registro dellAccumulatore.
b = numero binario di tre bit di indirizzo.
Le abbreviazioni che troverete utilizzate in quasi rr = 1 byte di indirizzo di una Variabile.
tutte le istruzioni hanno il seguente significato. * = Z - C non influenzati.
TESTARE i micro ST6
Come vi abbiamo promesso nella rivista precedente, in questo articolo prose-
guiamo a spiegarvi come usare il software simulatore DSE622 dandovi alcu-
ni utili suggerimenti sui diversi test che possibile eseguire sui programmi scrit-
ti in linguaggio Assembler. Anche i pi esperti infatti possono involontariamente
commettere errori nel programmare i microprocessori della famiglia ST6.

Nella colonna Formato abbiamo riportato il forma- FF = lindirizzo di memoria dellaccumulatore A


to logico dellistruzione. in formato esadecimale. Questo indirizzo di 1 by-
Listruzione Set si compone di un comando (Set), te.
del bit da settare (bit) e della variabile (dst) in cui
verr settato (livello logico 1) il bit. Tutta listruzione b11011FF occupa un totale di 2
byte, come potete vedere nella terza colonna de-
Esempio di SET b,A nominata bytes.

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.

b11011 FF Ammesso di avere un quarzo da 8 MHz, per co-


noscere il tempo di esecuzione espresso in mi-
b = la combinazione di tre bit utilizzati per defi- crosecondi possiamo usare questa formula:
nire in binario un numero decimale da 0 a 7.
microsecondi = (13 : MHz) x cicli macchina
11011 = la combinazione binaria che il micro-
processore riconosce come listruzione Set, quindi Questa istruzione verr perci eseguita in:
non deve essere mai modificata.
(13 : 8) x 4 = 6,5 microsecondi
b+11011 = dunque un numero binario di 8 bit
che il computer utilizza per sapere quale bit dellac- Nella quinta colonna (Flags Z - C) trovate degli a-
cumulatore A deve settare. Questo numero bina- sterischi perch listruzione set non influenza lo sta-
rio occupa 1 byte. to logico di Z e di C.
Esempio: Per settare il bit 7 dellAccumulatore sterischi perch listruzione set non influenza lo sta-
dobbiamo scrivere questa istruzione: to logico di Z e di C.

set 7,A Esempio: Per settare il bit 2 di port_a, cio per


portare a livello logico 1 il piedino PA2 della por-
Il compilatore Assembler convertir listruzione in ta A, dobbiamo scrivere questa istruzione:
questi numeri binari:
set 2,port_a
11111011 11111111
Il compilatore Assembler convertir listruzione in
Nel numero binario 11111011 (esadecimale FB) i questi numeri binari:
primi cinque bit partendo da destra, cio 11011,
corrispondono allistruzione Set. 01011011 11000000
Gli ultimi tre bit, cio 111, corrispondono al numero
decimale 7. Nel numero binario 01011011 (esadecimale 5B) i
primi cinque bit partendo da destra, cio 11011,
Il secondo numero binario, cio 11111111 (esa- corrispondono allistruzione Set.
decimale FF), corrisponde al numero dellindirizzo Gli ultimi tre bit, cio 010, corrispondono al numero
dellAccumulatore. decimale 2.

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.

AND Logical AND CLR Clear

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.

ANDI LOGICAL AND Immediate Formato opcode bytes cicli flags


COM dst Z C
Formato opcode bytes cicli flags COM A 2D 1 4
ANDI dst,src Z C
ANDI A,nn B7 nn 2 4 * Operazione: calcola il complemento al valore con-
tenuto nellAccumulatore e lo memorizza nellAc-
Operazione: viene eseguita la funzione di And di cumulatore stesso. A questo scopo utilizza la fun-
un numero con lAccumulatore. Il risultato della zione di Not che inverte i livelli logici contenuti
funzione memorizzata nellAccumulatore. nellAccumulatore.

A = registro dellAccumulatore. A = registro dellAccumulatore.


nn = numero di 1 byte (da 0 a 255). = Z settato se il risultato della funzione 0, re-
= Z settato se il risultato 0, resettato se di- settato se diverso da 0.
verso da 0. = C settato se prima della funzione il bit 7
* = C non influenzato. 1, resettato se prima della funzione il bit 7 0.
CP Compare Operazione: decrementa di 1 il contenuto dellAc-
cumulatore, del Registro o della Variabile.
Formato opcode bytes cicli flags
CP dst,src Z C A = registro dellAccumulatore.
CP A,A 3F FF 2 4 X-Y-V-W = registri del micro.
CP A,X 3F 80 2 4 rr = 1 byte di indirizzo di una Variabile.
CP A,Y 3F 81 2 4 = Z settato se il risultato 0, resettato se di-
CP A,V 3F 82 2 4 verso da 0.
CP A,W 3F 83 2 4 * = C non viene in alcun modo influenzato, quindi
CP A,(X) 27 1 4 mantiene lo stesso stato, livello logico 0 o livello lo-
CP A,(Y) 2F 1 4 gico 1, in cui si trovava prima dellistruzione.
CP A,rr 3F rr 2 4
Operazione: compara il contenuto di un Registro INC Increment
o di una Variabile con il contenuto dellAccumu-
latore, sottraendo dal contenuto dellAccumulato- Formato opcode bytes cicli flags
re il contenuto della Variabile o del Registro. LAc-
INC dst Z C
cumulatore rimane invariato.
INC A 7F FF 2 4 *
A = registro dellAccumulatore. INC X 15 1 4 *
X-Y-V-W = registri del micro. INC Y 55 1 4 *
rr = 1 byte di indirizzo di una Variabile. INC V 95 1 4 *
= Z settato se il risultato 0, resettato se di- INC W D5 1 4 *
verso da 0. INC (X) 67 1 4 *
= C settato se lAccumulatore minore del INC (Y) 6F 1 4 *
contenuto del Registro o della Variabile, reset- INC rr 7F rr 2 4 *
tato se lAccumulatore uguale o maggiore.
Operazione: incrementa di 1 il contenuto dellAc-
CPI Compare Immediate
cumulatore, del Registro o della Variabile.
Formato opcode bytes cicli flags
CPI dst,src Z C A = registro dellAccumulatore.
X-Y-V-W = registri del micro.
CPI A,nn 37 nn 2 4
rr = 1 byte di indirizzo di una Variabile.
Operazione: compara il contenuto dellAccumula- = Z settato se il risultato 0, resettato se di-
tore con un numero contenuto in un byte, sot- verso da 0.
traendo dal contenuto dellAccumulatore il numero. * = C non viene in alcun modo influenzato, quin-
LAccumulatore rimane invariato. di mantiene lo stesso stato, livello logico 0 o li-
vello logico 1, in cui si trovava prima dellistruzio-
A = registro dellAccumulatore. ne.
nn = numero di 1 byte (da 0 a 255).
= Z settato se il risultato 0, resettato se di-
verso da 0. JP Jump
= C settato se lAccumulatore minore del
numero nn, resettato se lAccumulatore u-
guale o maggiore. Formato opcode bytes cicli flags
JP dst Z C
DEC Decrement JP abc c1001 ab 2 4 * *

Formato opcode bytes cicli flags


Operazione: viene utilizzata per fare un salto in-
DEC dst Z C
condizionato ad una etichetta.
DEC A FF FF 2 4 *
DEC X 1D 1 4 * abc = indirizzo di Program Space delletichet-
DEC Y 5D 1 4 * ta. Nel Program Space viene memorizzato que-
DEC V 9D 1 4 * sto indirizzo ed il programma salta alletichet-
DEC W DD 1 4 * ta per poi proseguire da questo punto in poi.
DEC (X) E7 1 4 * abc espresso in 3 semibytes per un totale di
DEC (Y) EF 1 4 * 12 bit.
DEC rr FF rr 2 4 * * = Z e C non influenzati.
JRC Jump Relative on Carry Flag JRR Jump Relative if Reset

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.

Formato opcode bytes cicli flags A = registro dellAccumulatore.


SET bit,dst Z C X-Y-V-W = registri del micro.
SET b,A b11011 FF 2 4 * * rr = 1 byte di indirizzo di una Variabile.
SET b,rr b11011 rr 2 4 * * = Z settato se il risultato 0, resettato se di-
verso da 0.
Operazione: serve per settare uno degli 8 bit del- = C settato se il contenuto dellAccumulato-
la Variabile o dellAccumulatore di destinazione. re minore della Variabile o del Registro, reset-
tato se maggiore o uguale.
A = registro dellAccumulatore
b = numero binario di tre bit di indirizzo. SUBI Subtraction Immediate
rr = 1 byte di indirizzo di una Variabile.
* = Z - C non influenzati. Formato opcode bytes cicli flags
SUBI dst,src Z C
SLA Shift Left Accumulator
SUBI A,nn D7 nn 2 4
Formato opcode bytes cicli flags Operazione: un numero contenuto in un byte
Z C viene sottratto allAccumulatore ed il risultato
SLA A 5F FF 2 4 delloperazione viene memorizzato nellAccumu-
latore.
Operazione: serve per spostare di un posto verso
sinistra gli 8 bit dellAccumulatore. Il bit 7 passa A = registro dellAccumulatore.
nel Carry cancellando il valore che risultava pre- nn = numero di 1 byte (.da 0 a 255).
sente (equivale ad una moltiplicazione per 2). = Z settato se il risultato 0, resettato se di-
verso da 0.
A = registro dellAccumulatore. = C settato se il contenuto dellAccumulatore
= Z settato se il risultato 0, resettato se di- minore del numero, resettato se maggiore o u-
verso da 0. guale.
= C riporta il valore del bit 7.
WAIT Wait Processor
STOP Stop Operation
Formato opcode bytes cicli flags
Formato opcode bytes cicli flags Z C
Z C WAIT ED 1 2 * *
STOP 6D 1 2 * *
Operazione: serve per mettere in stand-by il mi-
Operazione: serve per bloccare loscillatore del cro ST62, ma loscillatore del clock rimane atti-
clock mettendo in stand-by tutto il micro ST62. vo.

* = Z - C non influenzati. * = Z - C non influenzati.


Chi, subito dopo aver letto larticolo apparso sulla Per questo motivo quando avete assemblato il file
rivista N.184, si affrettato ad acquistare il di- ATEST.ASM per generare il file ATEST.PRJ, so-
schetto con il software DSE.622, che serve a te- no stati creati solo i files:
stare tutti i programmi per i micro ST6, si subi-
to accorto con quanta facilit sia possibile simula- ATEST.HEX
re i programmi in Assembler. ATEST.DSD
Questo software consente di individuare dove e
perch il programma non funziona e di correggere e non il file: ATEST.SYM
gli errore logici, facendo risparmiare cos non so-
lo tempo ma anche denaro, perch non pi ne- Anche se questo file non viene creato, il simulato-
cessario acquistare gli ST6 riprogrammabili per re svolge ugualmente tutte le sue funzioni, ma in-
provare i programmi. vece di mostrarvi nel DSE le etichette in formato
simbolico, fornisce solo la loro codifica in esade-
Abbiamo ricevuto molte lettere di elogio soprattut- cimale.
to dagli uffici tecnici delle piccole e medie Indu-
strie che usano gli ST6 per le loro macchine, e mol- Dal momento che invece molto pi semplice in
ti Professori che insegnano negli Istituti Tecnici fase di simulazione lavorare con il formato .SYM,
ci hanno fatto sapere che lo considerano un valido vi spieghiamo come generarlo.
supporto didattico alle loro lezioni teoriche.
In realt questi complimenti non sono molto meri- Come prima operazione caricate il programma
tati perch noi ci siamo soltanto limitati a cercare DSE622 e quando compare la finestra di fig.91, se-
tra i tanti software disponibili in commercio quello lezionate la scritta Demo per entrare nella finestra
che ci sembrava il pi valido come hardware e principale.
software e, quando labbiamo trovato, abbiamo Cliccate sulla scritta Tools sulla barra dei menu e
spiegato sulla rivista in modo molto semplice e con selezionate ST6 (vedi fig.92).
tanti esempi il suo funzionamento e lutilit delle
sue funzioni pi importanti.

Prima di spiegarvi come cercare e correggere gli


errori che si possono commettere quando si scrive
un programma, vogliamo aprire una parentesi per
insegnarvi a generare il file .SYM.

SE NON APPARE IL FILE .SYM

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.

dal file .HEX, che contiene il programma esegui-


bile in formato INTEL.HEX.
dal file .SYM, che contiene le definizioni delle e-
tichette ed il relativo indirizzo di memoria Program
Space.
dal file .DSD, che contiene le definizioni, le ca-
ratteristiche ed il relativo indirizzo di memoria Da-
Fig.91 Scegliete lopzione Demo per entra-
ta Space delle variabili.
re nella finestra principale del DSE622.
dalle specifiche proprie che vengono scelte da
chi crea il file .PRJ dal file .HEX.
Molti lettori ci hanno segnalato che quando compi-
lano in assembler non riescono a vedere il conte-
nuto del file .SYM, quindi sul video non compare la
parte del programma relativa alle etichette in for- Fig.92 Per entrare nelleditor dellST6 dal D-
mato simbolico, ma solo il loro indirizzo di memo- SE, scegliete ST6 dal menu Tools.
ria (vedi fig.90).
In questo modo entrerete nelleditor dellST6.
Per aprire il file usate il tasto F3 e, nella riga Na-
me, digitate *.BAT come visibile nella fig.93.
Cliccate su Open e vedrete apparire la finestra ri-
portata in fig.94, dove risulta gi selezionato il file
A.BAT.
Cliccate su Open e sul monitor apparir il conte-
nuto di questo file, cio ast6 %1.

Per generare il file .SYM, necessario inserire in


questa riga lopzione -S.

Per aggiungere questa opzione dovete portare il


cursore dopo la scritta ast6, digitare uno spazio e Fig. 93 Utilizzate il tasto funzione F3 per a-
scrivere -s, quindi separare con uno spazio la scrit- prire il file con estensione .BAT.
ta 1%.
In altre parole deve apparire:

ast6 -s %1

come visibile nella finestra di fig.95.

A questo punto salvate il file premendo il tasto


funzione F2, poi uscite premendo i due tasti
Alt+F3.
Per completare la modifica dovete nuovamente
compilare i files:

ATEST.ASM Fig.94 Il file che dovete modificare per ge-


BTEST.ASM nerare il file .SYM si chiama A.BAT.

Per compilare il file ATEST.ASM pigiate il tasto


funzione F3, poi selezionate il programma
ATEST.ASM, quindi portate il cursore su Open e
cliccate.

Nella finestra che appare (vedi fig.96) cliccate sul-


la scritta ST6 poi su Assembla.
Quando il programma sar compilato premete un
tasto qualsiasi, poi premete Alt+F3 per chiudere
il file.
Fig.95 Lopzione -s, che serve a generare il
file .SYM in fase di compilazione, deve es-
La stessa operazione deve essere effettuata per il sere inserita tra le scritte ast6 e 1% sepa-
file BTEST.ASM e per tutti quei files che avete randola con degli spazi.
compilato prima di aggiungere lopzione -S al file
A.BAT.

Terminata questa operazione potete uscire dalle-


ditor premendo i tasti Alt+X.

Rientrerete cos nel software di simulazione del


DSE622 dove tutti i files con estensione .PRJ che
avete generato prima di questa modifica sono sta- Fig.96 Tutti i files che avete compilato pri-
ti automaticamente aggiornati e contengono quin- ma di aggiungere lopzione -s devono es-
di anche le informazioni in formato simbolico rela- sere nuovamente assemblati.
tive al file .SYM.
LA CORREZIONE DEGLI ERRORI non pu essere sostituita dallistruzione JRR (che
lunga 3 bytes), ma si pu invece fare il contra-
Dopo questa parentesi riprendiamo la descrizione rio utilizzando listruzione NOP per coprire i bytes
del funzionamento del DSE fornendovi alcuni sug- non utilizzati.
gerimenti per controllare passo-passo le istruzio-
ni e di conseguenza correggere gli errori che si Esempio: Ammesso di voler modificare listruzio-
possono commettere quando si scrive un pro- ne:
gramma.
jrr 0,potr_b,mains1 ;(istruzione lunga 3 byte)
Per correggere un errore possiamo optare tra due
soluzioni: con listruzione:

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

Eseguite tutte queste operazione potrete simulare


le funzioni del programma.

PRIMO TEST

Se avete seguito quanto fin qui detto, nella finestra


Disassembler sar evidenziata listruzione:

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

Fig.100 Ogni volta che si clicca sullicona


passo-passo viene eseguita una sola istru-
zione del programma.

Fig.98 In questo articolo esaminiamo at-


tentamente gli errori del file BTEST.PRJ. Prima di proseguire riteniamo necessario ricordar-
vi che il programma BTEST utilizza:

i quattro piedini PA0 - PA1 - PA2 - PA3 della por-


ta A come ingressi
i quattro piedini PB0 - PB1 - PB2 - PB3 della por-
ta B come uscite

Una delle funzioni del programma serve a portare


a livello logico 1 un piedino duscita quando sul
corrispondente piedino dingresso viene applicato
un livello logico 1.

Portiamo un esempio: questo programma potreb-


be essere usato per accendere un diodo led o per
polarizzare la Base di un transistor, in modo che
Fig.99 Le finestre del DSE per simulare le- ecciti un rel, collegato su un piedino duscita
secuzione dei programmi. quando si preme un pulsante che porta a livello
logico 1 il corrispondente piedino dingresso.
Nel nostro caso questa istruzione segnala al pro-
gramma di saltare alletichetta main00 se il bit 0 di
port_a, cio se il piedino PA0, resettato.

Controlliamo il contenuto della porta A nella fine-


stra Watch e, come potete vedere in fig.102, il con-
tenuto della variabile port_a allindirizzo C0 00,
quindi i piedini sono resettati.

Se quindi avanziamo di unaltra istruzione il pro-


gramma salter allistruzione con etichetta main00,
ed in effetti premendo passo-passo viene eviden-
ziata questa istruzione:

8C3 03 C1 02 main00 jrr 0,port_b,mains1


Fig.101 Iniziamo a simulare il programma B- Poich PA0 resettato (livello logico 0) anche PB0
TEST.PRJ dalletichetta ripeti memorizzata
deve essere resettato (livello logico 0), ma il pro-
allindirizzo 8B6 (vedi colonna Add).
gramma prima di portarlo a livello logico 0 con-
trolla che questa uscita non si trovi gi in questa
condizione.
Questa istruzione ha proprio il compito di verifica-
re se il piedino PB0 di port_b settato (livello lo-
gico 1), cio se lipotetico diodo led collegato a
questo piedino acceso, e solo in questo caso lo
spegne, cio porta luscita a livello logico 0.

Se controllate la finestra Watch noterete che il con-


tenuto della port_b allindirizzo C1 00. In altre
Fig.102 La finestra Watch ci permette di parole il piedino gi resettato quindi non ne-
controllare in qualunque momento il con- cessario resettarlo.
tenuto delle variabili port_a e port_b. Avanzando di unistruzione il programma salta per-
ci allistruzione con etichetta mains1:

Quindi se pigiamo il pulsante collegato sullingres- 8C8 0D D8 FE mains1 ldi wdog,0feh


so PA1, si deve accendere il diodo led collegato
sulluscita PB1, e lasciandolo si deve spegnere. Questa istruzione ripristina il watchdog.
Se pigiamo il pulsante collegato sullingresso PA4
si deve accendere il diodo led collegato sullusci- Nota: abbiamo descritto la funzione watchdog sul-
ta PB4, e lasciandolo si deve spegnere. la rivista N.175/176 e poich sappiamo che non vi
manca nessun numero di Nuova Elettronica, non
Ora possiamo verificare se le istruzioni rispondono avrete difficolt a rinfrescarvi la memoria.
a questa funzione.
Cliccando sullicona passo-passo viene eviden-
Dalletichetta ripeti (vedi fig.101), cliccando sulli- ziata listruzione:
cona passo-passo per avanzare di unistruzione,
viene evidenziata: 8CB 83 C0 07 jrr 1,port_a,main01

8B9 03 C0 07 jrr 0,port_a,main00 Come avrete gi intuito, avanzando passo-passo il


programma controlla gli altri piedini della porta A,
Listruzione JRR significa letteralmente fai un sal- cio PA1 - PA2 - PA3, ed i rispettivi piedini della por-
to se il bit di una variabile resettato, cio se si ta B, cio PB1 - PB2 - PB3, come ha appena fatto
trova a livello logico 0. per il piedino dingresso PA0 e quello duscita PB0.
Essendo il contenuto di port_a e port_b uguale a
Nota: per la descrizione di tutte le istruzioni del lin- 0 (vedi finestra Watch), cliccando sempre su pas-
guaggio Assembler rimandiamo alla rivista N.174 so-passo alla fine del controllo il programma tor-
che vi consigliamo di leggere attentamente. ner alletichetta ripeti visibile in fig.101.
SECONDO TEST

Se ci fermassimo a questo primo superficiale con-


trollo potremmo affermare che il programma fun-
ziona correttamente.
Noi per sappiamo che il BTEST contiene tre er-
rori, perch li abbiamo messi di proposito, quindi Fig.103 Per accedere al sottomenu relativo
ora vi spieghiamo quali altri controlli vanno effet- ad una finestra, nel nostro caso Data, oc-
tuati per testare ulteriormente il programma. corre rendere attiva la finestra cliccando sul
nome corrispondente, cio Data.
Unaltra prova che va fatta quella di simulare
un interruttore, cio portare a livello logico 1
tutti i quattro ingressi della porta A per verifica-
re se anche le rispettive uscite si portano a li-
vello logico 1.

Per portare a livello logico 1 gli ingressi della por-


ta A attivate la finestra Data cliccando sulla scritta
corrispondente (vedi fig.103).
Fig.104 Scegliendo il sottomenu Goto Ad-
Nel paragrafo Esecuzione in automatico (vedi ri- dress potrete posizionarvi direttamente sul
vista N.184) vi abbiamo spiegato come trovare il valore esadecimale dellindirizzo di memo-
valore esadecimale di un indirizzo di memoria, nel ria in cui memorizzata la variabile.
nostro caso il valore di port_a.
Poich esiste anche una strada diversa per cono-
scere questo valore, riteniamo opportuno che la co-
nosciate, e quindi ora ve la spieghiamo.

Nella barra degli strumenti visibile sulla parte alta


del monitor cliccate sulla scritta Data e nella pic-
cola finestra che appare selezionate la scritta Go-
to Address (vedi fig.104).
Apparir la finestra di dialogo di fig.105. Fig.105 Nella riga Address cercate il nome
della variabile cliccando sulla freccia gi.
Cliccate sulla freccia gi fino a trovare la variabi-
le port_a e quando lavete trovata selezionatela,
quindi cliccate su OK (vedi fig.106).

Nella finestra Data verr evidenziato il valore esa-


decimale 00 (vedi fig.107), che corrisponde al con-
tenuto della variabile port_a.

Cliccate nuovamente sul menu Data e selezionate


Fig.106 Quando avete selezionato la varia-
questa volta la scritta Edit Data. bile cliccate su OK per tornare alla finestra
Apparir la finestra di dialogo di fig.108. Data, visibile in fig.107.

Cliccate sulla scritta Bits per far apparire la fine-


stra di dialogo di fig.109.

Ora portate a livello logico 1 i quattro piedini din-


gresso PA0 - PA1 - PA2 - PA3 di port_a, cliccan-
do con il cursore nelle caselle 0 - 1 - 2 - 3.
In queste caselle apparir una V (vedi fig.110).
Fig.107 In questa finestra viene evidenzia-
Cliccate su OK per tornare alla finestra di dialogo to il valore esadecimale dellindirizzo della
Edit Data, in cui viene ora segnalato il nuovo va- variabile selezionata nella fig.106.
lore esadecimale della variabile port_a, cio F,
che, come sapete, corrisponde al valore decimale
15 ed al valore binario 00001111.
Cliccate nuovamente su OK.

Nota: Nel nostro volume Handbook a pag.372 tro-


verete un articolo dedicato al linguaggio esadeci-
male - binario - decimale e a pag.381 una Ta-
bella di conversione che potr risultarvi molto uti-
le.
Fig.108 Questa finestra di dialogo appare
A riprova di quanto detto nelle finestre Watch e Da- quando si seleziona il sottomenu Edit Data
ta vedrete il nuovo valore assunto da port_a. dal menu Data. Per cambiare lo stato logi-
co dei piedini cliccate su Bits.
A questo punto possiamo far ripartire il programma
per verificare se, portando a livello logico 1 un
piedino dingresso di port_a, ritroviamo un livello
logico 1 anche sul corrispondente piedino dusci-
ta di port_b.

Se il programma non posizionato sulletichetta ri-


peti (vedi fig.101), attivate la finestra Disassem-
bler cliccando sulla scritta corrispondente, quindi
portate il cursore sulla scritta Disassembler sulla Fig.109 Le caselle che interessano i piedini
barra dei menu e cliccate cos che appaia la fine- PA0 - PA1 - PA2 - PA3 sono vuote perch
stra di fig.111 e selezionate lopzione Set New PC. questi piedini sono resettati.

Nella finestra di dialogo New program counter


cliccate sulla freccia gi posta sulla destra fino a
quando non trovate letichetta ripeti, quindi sele-
zionatela e cliccate su OK (vedi fig.112).

Prima di far ripartire il programma sar utile inse-


rire un breakpoint.
Fig.110 Per portare i piedini PA0 - PA1 - PA2
Nella finestra Disassembler cliccate due volte su
- PA3 a livello logico 1 cliccate sulle casel-
ripeti e quando compare la finestra di dialogo di le corrispondenti.
fig.113 cliccate sulla scritta Toggle Breakpoint.
In questo modo a sinistra di questa istruzione ap-
parir un punto esclamativo (!) come visibile in
fig.114.

A questo punto potete lanciare lesecuzione auto-


matica del programma cliccando sullicona che
rappresenta una pagina con una freccia gi (ve- Fig.111 Il sottomenu Set New PC vi con-
di fig.115). sente di aprire la finestra di dialogo New
Vi accorgerete che il programma, arrivato alleti- program counter (vedi fig.112).
chetta mains3, esegue in maniera ciclica e allin-
finito (in gergo si dice che c un loop) un certo
numero di istruzioni, e precisamente quelle relati-
ve alla gestione dei piedini PA3 e PB3.
Questo evento ci mette sullavviso che tra queste
istruzioni c un errore.
Per bloccare lesecuzione del ciclo, cos da sco-
prire lerrore, cliccate sullicona stop (vedi fig.116) Fig.112 Grazie a questa finestra di dialogo
allistruzione: potete far partire lesecuzione del pro-
gramma dalletichetta ripeti.
8EF C3 C0 07 jrr 3, port_a,main03
Se cliccando sullicona stop non riuscite a fermar-
vi su questa istruzione, utilizzate il comando Set
New Pc del menu Disassembler (vedi fig.111).
Nella finestra di dialogo che appare digitate lindi-
rizzo 8EF (vedi fig.117) quindi cliccate su OK.

Ora conviene utilizzare il comando passo-passo


per vedere dove abbiamo commesso lerrore.

Listruzione memorizzata allindirizzo 8EF dice che


se il piedino PA3 della porta A a livello logico Fig.113 Se volete inserire un breakpoint in
0, il programma deve saltare allistruzione con eti- una determinata istruzione, cliccate due
chetta main03. volte sullistruzione corrispondente per at-
Siccome per noi abbiamo posto questo piedino a tivare questo menu di scelta rapida.
livello logico 1, cliccando su passo-passo il pro-
gramma dovrebbe proseguire allistruzione suc-
cessiva e non saltare alletichetta main03.
Infatti cliccando su passo-passo il programma e-
videnzia listruzione successiva:

8F2 D3 C1 09 jrs 3,port_b,mains4

Questa istruzione controlla se il piedino PB3 della


porta B a livello logico 1, e se si trova in que-
Fig.114 Cliccando su Toggle Breakpoint di
sta condizione salta direttamente allistruzione con
fig.113, a sinistra dellistruzione apparir un
etichetta mains4.
punto esclamativo (!).
Cliccando su passo-passo il programma non sal-
ta a mains4, ma prosegue allistruzione successi-
va perch deve prima portare a livello logico 1 il
piedino PB3:

8F5 DB C0 set 3, port_a


Fig.115 Licona segnalata dal cursore per-
Ecco dov lerrore. Infatti questa istruzione do-
mette di lanciare lesecuzione automatica
vrebbe servire a settare il bit 3 di port_b, cio PB3, del programma.
mentre noi abbiamo scritto erroneamente di setta-
re il bit 3 di port_a, cio PA3.

In questo caso possiamo correggere listruzione


apportando una modifica temporanea, cos da po-
ter continuare poi i nostri test, sostituendo allindi-
rizzo di port_a lindirizzo di port_b. Fig.116 Licona segnalata dal cursore per-
mette di fermare lesecuzione automatica
Questa modifica temporanea ci consente di pro- del programma.
seguire il controllo del programma dal punto in cui
ci troviamo senza dover ripristinare tutti i parame-
tri compreso il settaggio dei piedini delle porte.

Per capire come correggere questo errore, rive-


diamo listruzione sbagliata:

8F5 DB C0 set 3, port_a


Fig.117 Come abbiamo gi detto (figg.111-
Listruzione set 3,port_a tradotta dal compilato- 112), potete far ripartire lesecuzione dal
re in formato intel.hex nel valore esadecimale DB programma da qualsiasi punto. In questo
C0, che potete vedere nella finestra Disassembler caso dallindirizzo 8EF.
sotto la colonna Opcode (vedi fig.118).
Ora dobbiamo verificare se effettivamente quando
i quattro piedini dingresso (cio PA0 - PA1 - PA2
- PA3) sono a livello logico 1 anche i quattro pie-
dini di uscita (cio PB0 - PB1 - PB2 - PB3) si tro-
vano a livello logico 1.
Abbiamo una riprova visiva di ci guardando la fi-
nestra Watch, dove sia port_a sia port_b hanno lo
stesso valore esadecimale 0F che corrisponde al
Fig.118 Listruzione set 3 tradotta dal valore decimale 15 ed al valore binario 00001111,
compilatore nel valore DB e memorizzata come potete anche vedere nella Tabella riportata a
allindirizzo 8F5, port_a tradotta nel valo- pag.381 del nostro volume HANDBOOK che pen-
re C0 e memorizzata allindirizzo 8F6 (vedi siamo sar sempre a portata di mano.
colonne Opcode e Add).

La stessa istruzione viene memorizzata allinterno


del micro allindirizzo 8F5 - 8F6 di Program Spa-
ce (infatti se guardate la finestra del Disassembler
sotto la colonna Add, listruzione seguente me-
morizzata a partire dallindirizzo 8F7).

In questo caso il valore DB corrisponde allistru-


zione set 3 e si trova allindirizzo 8F5, mentre il va-
lore C0 corrisponde allindirizzo delloperando Fig.119 Selezionando il sottomenu Goto
Address del menu Code aprite la finestra di
port_a e si trova allindirizzo seguente, cio 8F6,
dialogo visibile in fig.120.
pertanto a questo indirizzo che dobbiamo opera-
re la nostra modifica.

Sostituendo nellindirizzo di memoria 8F6 il valore


corrispondente a port_a (cio C0) con il valore cor-
rispondente a port_b (cio C1) elimineremo questo
errore senza modificare il sorgente BTEST.ASM.
Per conoscere gli indirizzi di port_a e port_b dovete
guardare nella finestra Watch sotto la colonna Add.
Fig.120 Poich dovete correggere la varia-
bile memorizzata allindirizzo 8F6, digitate
Per andare allindirizzo 8F6 attivate la finestra Co-
questo numero quindi date lOK.
de cliccando sul nome corrispondente, quindi dal
menu Code della barra degli strumenti seleziona-
te il comando Goto Address (vedi fig.119).
Nella finestra di dialogo digitate 8F6 (vedi fig.120),
quindi cliccate su OK.
Ritornerete cos nella finestra Code dove vedrete
evidenziato il valore C0 che dovete correggere (ve-
Fig.121 Nella finestra Code viene eviden-
di fig.121).
ziato il valore C0, che corrisponde alla va-
Cliccate su questo valore 2 volte e nella finestra di
riabile port_a. Cliccate due volte su C0.
dialogo che appare (vedi fig.122) digitate C1, che
come abbiamo gi detto, lindirizzo di port_b.
Cliccate su OK e nella finestra Disassembler ve-
drete che listruzione si modificata in:
8F5 DB C1 set 3, port_b
Ora che abbiamo corretto questo errore possiamo
continuare la simulazione del programma premen-
do licona esecuzione automatica, cio il disegno
con la pagina e la freccia gi (vedi fig.115). Fig.122 Nella finestra Edit digitate C1, cio
lindirizzo della variabile che dovete sosti-
In questo modo il programma prosegue in modo
tuire che corrisponde a port_b.
automatico fino alletichetta ripeti, dove, come ri-
corderete, abbiamo messo un breakpoint.
Un altro modo per verificare lo stato dei piedini di gono resettati i rispettivi piedini di port_a, in altre
port_b ripetere la procedura eseguita allinizio di parole di portare a livello logico 0 i piedini dusci-
questo paragrafo per portare a livello logico 1 i ta quando vengono posti a livello logico 0 i piedi-
piedini di port_a, sostituendo lindirizzo di port_a ni dingresso.
con lindirizzo di port_b, cio sostituendo C0 con
C1. Il terzo test si propone di verificare questa funzione.

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.

Come potete verificare, ai 4 piedini settati della por-


ta A corrispondono 4 piedini settati della porta B
(infatti le caselle 0 - 1 - 2 - 3 hanno una V).

Uscite da questa finestra senza fare nessuna mo-


difica cliccando sulla scritta Cancel.
Fig.124 Per portare a livello logico 0 i pie-
Vi consigliamo di eseguire in automatico una o dini della porta A, dal menu Data scegliete
due volte il programma per essere certi di non a- Goto Address.
ver modificato senza volere i valori di port_a e
port_b.

Premete sullicona esecuzione automatica e se tut-


to procede in modo regolare il programma si fer-
mer al breakpoint.

TERZO TEST Fig.125 Poich lindirizzo C0 corrisponde a


port_a, digitate questo valore quindi clic-
La seconda funzione del programma BTEST cate su OK.
quella di resettare i piedini di port_b quando ven-
Ora potete eseguire il programma in automatico,
cliccando cio sullicona con una pagina con la
freccia in gi (vedi fig.115), e vedrete che si fer-
mer al breakpoint.
Si potrebbe supporre che il programma rispetti an-
che questa funzione, ma se guardate nella finestra
Watch (vedi fig.127) noterete che pur essendo tut-
ti i piedini di port_a a livello logico 0 (valore esa-
decimale 00) i piedini di port_b non sono tutti a li-
vello logico 0 (valore esadecimale 04).
Fig.126 Per resettare i piedini di porta A clic-
Nel programma c quindi un errore. cate sulle caselle 0 - 1 - 2 - 3.

Se non sapete a quale valore binario corrisponde


il valore esadecimale 04, cio se non sapete qua-
le bit a livello logico 1, attivate la finestra Data e
dal menu Data selezionate Goto Address.
Nella finestra di dialogo che appare digitate lindi-
rizzo di port_b, cio C1 (vedi fig.128), poi cliccate
su OK.
Fig.127 Controllando la finestra Watch vi
Quindi cliccate due volte sul valore 04 evidenzia- accorgerete che sebbene il contenuto di
to nella finestra Data e nella finestra di dialogo che port_a sia 00, il contenuto di port_b 04.
appare selezionate la scritta Bits.
Come visibile in fig.129, il piedino PB2 risulta an-
cora a livello logico 1 sebbene lingresso corri-
spondente, cio PA2, risulti a livello logico 0.

E dunque ovvio che nel programma c una istru-


zione sbagliata, che non porta a livello logico 0
il piedino PB2 quando il corrispondente piedino
dingresso PA2 a livello logico 0. Fig.128 Per sapere quale bit della porta B
a livello logico 1, in Goto Address digitate
Senza modificare nulla chiudete le finestre di dia- C1, che lindirizzo di port_b.
logo cliccando su Cancel.

La gestione dei piedini PA2 e PB2 associata alle-


tichetta mains2, quindi ricontrolliamo il programma
partendo da questa etichetta.

Attivate la finestra Disassembler cliccando sulla


scritta corrispondente, quindi dal menu Disassem-
bler della barra dei menu selezionate la scritta Set
New PC (vedi fig.111).
Fig.129 Il valore esadecimale 04 che ave-
Cliccando sulla freccia gi cercate la scritta
vate visto nella finestra Watch (fig.127) cor-
mains2 e selezionatela (vedi fig.130), poi cliccate risponde al piedino PB2 settato.
su OK.

Il programma si posizioner sullistruzione:

8DA 0D D8 FE mains2 ldi wdog,0FEH

che serve a caricare il watchdog.

A questo punto cliccate sullicona passo-passo e Fig.130 Ricontrollate il programma parten-


verr evidenziata listruzione successiva: do dalletichetta mains2, che gestisce i pie-
dini PA2 e PB2.
8DD 43 C0 C7 jrr 2,port_a,main02
Questa istruzione significa: salta a main02 se il pie- In altre parole con un numero binario di 8 bit riu-
dino 2 di port_a resettato, cio se PA2 si trova sciamo a definire listruzione, nel nostro caso RES
a livello logico 0. che occupa i primi 5 bit da 0 a 4, ed il piedino a
Siccome avevamo posto a livello logico 0 tutti gli cui listruzione si riferisce, nel nostro caso il bit 2
ingressi della porta A, cliccando su passo-passo che occupa gli ultimi 3 bit da 5 a 7.
il programma salter allistruzione corrispondente
alletichetta main02: posizione bit 7 6 5 4 3 2 1 0
codice opcode b 0 1 0 1 1
8E7 43 C1 02 main02 jrr 2,port_b,mains3

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.

Posizionatevi sulletichetta ripeti e lasciate il


breakpoint.
Guardate nella finestra Watch dove le variabili
port_a e port_b dovrebbero essere a 0.

Per trovare questo errore dovete riportare a livel-


lo logico 1 il piedino PA3 di port_a
Fig.133 Ora potete correggere il valore e- Riteniamo che la procedura per settare i piedini di
sadecimale 5B, che equivale a set 2, con il una porta vi sia gi familiare (vedi figg.104-110),
valore esadecimale 4B, che equivale alli-
comunque, nel caso ancora non aveste preso con-
struzione res 2.
fidenza con il programma, dovete attivare la fine-
stra Data ed utilizzare il comando Goto Address
del menu Data. Digitate il valore di port_a, cio C0,
quindi, dopo aver dato lOK, cliccate due volte su
Cliccate su OK e nella finestra Disassembler ve- 00 poi nella finestra di dialogo che appare cliccate
drete che questa istruzione sar stata modificata su Bits.
come sotto riportato:
Dopo aver portato a livello logico 1 il piedino PA3
8EA 4B C1 res 2, port_b potrete uscire cliccando su OK.
In questo modo tornate nella finestra principale e Il programma ha svolto regolarmente la sua fun-
vedrete nella finestra Watch che la variabile port_a zione: controlla se PA3 settato, cio se si trova
ha valore 8 (vedi fig.134). a livello logico 1, poi controlla ed eventualmente
modifica la porta duscita PB3.
Per averne una verifica immediata controllate il va-
lore della variabile port_b nella finestra Watch e
vedrete che 8 (vedi fig.134).

A questo punto il programma dovrebbe proseguire


andando a controllare gli ultimi piedini, cio PA4 e
PB4, quindi dovrebbe saltare allistruzione con eti-
chetta mains4, ma il realt lultima istruzione ese-
gue un salto incondizionato alletichetta mains3 co-
me potrete constatare cliccando nuovamente su
Fig.134 Avendo portato a livello logico 1 il passo-passo:
piedino PA3, nella finestra Watch viene e-
videnziato il nuovo contenuto di port_a. 8EC 0D D8 FE mains3 ldi wdog,FEH

Cliccando sullicona passo-passo viene eviden-


ziata listruzione:
A questo punto rieseguite il programma passo-
passo fino allistruzione: 8EF C3 C0 07 jrr 3,port_a, main03

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.

Per concludere lerrore subdolo listruzione:

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.

Per fare le correzioni andate direttamente nelle-


ditor di ST6 selezionando dal menu Tools la scrit-
ta ST6 (vedi fig.135).
Apparir cos la finestra delleditor di ST6.
Premete F3 per aprire il file e nella finestra di dia- Fig.136 Per aprire un file nelleditor dellST6
logo che appare selezionate BTEST.ASM (vedi potete usare il tasto funzione F3, che attiva
fig.136) quindi cliccate su Open. questa finestra di dialogo. Selezionate con
Appariranno sul vostro monitor le istruzioni del pro- il cursore file BTEST.ASM, quindi cliccate
gramma BTEST.ASM. su Open.
Utilizzate la freccia gi fino allistruzione da noi nu-
merata come 87 (accanto a questo numero vedre-
te anche un asterisco) che corrisponde al numero
147:1 delleditor.
Modificate set 2,port_b in res 2,port_b.

Ora proseguite fino al secondo asterisco *91 (che


corrisponde a 153:1) e modificate set 3,port_a in
set 3,port_b.

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.

Nella fig.137 potete vedere la parte del program-


ma con le istruzioni gi corrette.

Tutte le modifiche devono essere salvate pigian-


do semplicemente il tasto funzione F2.

Poich avete apportato delle correzioni al sorgen-


te del programma, dovete ricompilarlo.
Cliccate quindi sul menu ST6 e su Assembla (ve-
di fig.138). Fig.138 Prima di chiudere il file dovete ri-
Se avete apportato tutte queste modifiche in ma- compilare il programma BTEST.ASM, quin-
niera corretta la compilazione si concluder rego- di dal menu ST6 scegliete Assembla.
larmente.
Per tornare alleditor premete un tasto qualsiasi poi
premete ALT+F3 per chiudere il programma BTE-
ST.ASM ed Alt+X per uscire dalleditor di ST6.
Rientrerete cos nella finestra del DSE622 aperta
su BTEST.PRJ e sul video comparir un messag-
gio che vi informa del fatto che il project ha una
data precedente al sorgente del programma (vedi
fig.139).
Fig.140 Il DSE622 vi informa che laggior-
namento del file .PRJ annuller i break-
point. Cliccate pure su OK.

Rileggendo quanto fin qui scritto ci siamo accorti


che la spiegazione per cercare e correggere gli er-
rori con il simulatore DSE stata abbastanza lun-
ga, ma in questo modo siamo certi che questo ar-
Fig.139 Per aggiornare le modifiche anche ticolo risulter per voi molto utile perch ora sape-
sul file BTEST.PRJ dovete cliccare su S. te in quale finestra dovete controllare i diversi li-
velli logici, come si fa per trasformare un numero
esadecimale in un decimale o in un binario, e se
Infatti avendo appena ricompilato il programma, il inizialmente tutto questo vi sembrer difficile e
project che attualmente attivo su DSE622 verr complesso con un po di pratica capirete quanto
aggiornato solo cliccando su S. invece risulti facile e semplice.
In questo modo le modifiche apportate diventeran- Anche la primissime volte che avete iniziato ad an-
no definitive anche in BTEST.PRJ. dare in bicicletta dover rimanere in equilibrio, pe-
Comparir un altro messaggio che vi avvisa che dalare e fermarsi, potevano sembrare manovre dif-
laggiornamento del project annuller i breakpoint ficilissime, poi con un poco di perseveranza e di
(vedi fig.140) e a questo punto potrete cliccare su pratica riuscite ora a pedalare anche controllando
OK. il manubrio con una sola mano.
Alcuni lettori ci hanno inviato valide solu-
zioni per far girare sotto Windows 95 il pro-
gramma ST6PGM della SGS-Thomson e per
richiamare velocemente il sistema operativo
MS-DOS. Noi ve le proponiamo per poter ri-
solvere i problemi che ora riscontrate.

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.

Infatti a causa dei problemi incontrati nel caricare i


vecchi programmi qualcuno aveva addirittura ab-
bandonato WINDOWS 95 ed era ritornato a Win-
dows 3.1.
Tra i nostri lettori per ci sono anche dei softwari-
sti molto esperti che hanno cercato e trovato solu- Fig. 1
zioni alternative alla nostra e subito hanno provve-
duto a segnalarcele affinch potessimo renderle di
dominio pubblico tramite la rivista.

Tra le tante lettere che ci sono pervenute ve ne


proponiamo oggi due che ci sembrano particolar-
mente utili ed interessanti, ma non escludiamo di
pubblicare anche le altre nei prossimi numeri.
Fin da oggi desideriamo ringraziare tutti questi let-
tori per la loro collaborazione.

Sig. Luca Montefiore - Teramo

La prima proposta ci viene dal Sig. Luca Monte-


fiore che riuscito a lanciare il programma
ST6PGM.BAT, scritto per i microprocessori ST6, Fig. 2
sotto Windows 95 aggiungendo semplicemente u-
na riga di istruzione al file CONFIG.SYS.

Se anche a voi interessa aggiungere questa riga


dovete procedere come segue:

Quando siete in Windows 95 portate il cursore


sulla scritta Avvio (vedi fig.1) e cliccate. Nella fi-
nestra che appare scegliete Programmi e nel me-
nu a destra portate il cursore su Gestione Risor-
se quindi cliccate (vedi fig.2). Fig. 3
A sinistra della finestra che appare selezionate
lunit Ms-dos_6 (C) (vedi fig.3), quindi attivate il
menu a tendina di Visualizza e cliccate su Opzio-
ni (vedi fig.4).

Nella finestra di dialogo che appare scegliete Tut-


ti i file cliccando con il mouse sul cerchietto visi-
bile in fig.5, poi portate il cursore sulla scritta OK e
cliccate. Nella finestra a destra vedrete apparire tut-
ti i file, compresi quelli nascosti.

Utilizzate il tasto freccia gi per cercare il file


CONFIG.SYS e quando lavete trovato seleziona-
telo cliccando una sola volta con il tasto destro
del mouse.

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.

Dopo questa verifica cliccate su OK (vedi fig.7)


per tornare al file CONFIG.SYS (vedi fig.8) che sar
ancora selezionato e cliccate due volte ma con il
tasto sinistro del Mouse.

Apparir la finestra di dialogo Apri con (vedi fig.9)


Fig. 6 in cui dovrete selezionare uno di questi programmi
A questo punto dovete nuovamente ripristinare
lopzione di file nascosti, perch se questo file di
sistema rimane visualizzato potreste per errore
cancellarlo o modificarlo.

Sulla barra dei menu posta in alto cliccate su Vi-


sualizza e dal menu che appare scegliete la scrit-
ta Opzioni e cliccate nuovamente. Nella finestra
che appare cliccate sul cerchietto posto a sinistra
della scritta Non visualizzare i file tipo (vedi
Fig. 10 fig.12) in modo che appaia un punto. Per chiude-
re questa finestra cliccate su OK.
di gestione testi, EDIT, NOTEPAD, WINWORD.
Poich questi programmi sono equivalenti potrete Uscite dal programma Gestione Risorse, chiu-
indifferentemente scegliere luno o laltro cliccando dete Windows 95 quindi ricaricatelo.
due volte sul nome corrispondente. A questo punto la modifica proposta dal Sig. Mon-
Noi abbiamo usato Edit. tefiore sar operativa.

Nellultima riga del programma dovete inserire li-


struzione SWITCHES /C come visibile in fig.10.
Sig. Fabio Chiribiri - Marola (La Spezia)
Per salvare il file cliccate sul menu File, poi clic-
cate sulla scritta SALVA (vedi fig.11) ed uscite.
La seconda proposta che sottoponiamo alla vostra
attenzione ci viene dal Sig. Fabio Chiribiri che
riuscito a richiamare il sistema operativo MS-DOS
6.2 senza utilizzare il tasto funzione F8.

Sulla rivista N.183 vi avevamo spiegato che pre-


mendo il tasto funzione F8 si attivava un menu
col quale era possibile scegliere tra varie moda-
lit di caricamento sia di WINDOWS sia di MS-
DOS.
Questo tasto doveva essere premuto al momento
Fig. 11 giusto altrimenti il computer si poteva bloccare.

Il Sig. Chiribiri ci ha spiegato che modificando il fi-


le MSDOS.SYS si pu fare a meno di premere il
tasto funzione F8.
Per modificare il programma MSDOS.SYS dovete
procedere come segue:

Quando siete in Windows 95 portate il cursore


sulla scritta Avvio (vedi fig.1) e cliccate. Nella fi-
nestra che appare scegliete Programmi e nel me-
nu a destra portate il cursore su Gestione Risor-
se quindi cliccate (vedi fig.13).

A sinistra della finestra che appare selezionate


lunit Ms-dos_6 (C) (vedi fig.14). Ora attivate il
menu a tendina di Visualizza e cliccate su Opzio-
ni (vedi fig.15).

Nella finestra di dialogo che appare scegliete Tut-


ti i file cliccando con il mouse sul cerchietto visi-
bile in fig.16, poi portate il cursore sulla scritta OK
e cliccate. Nella finestra a destra vedrete apparire
Fig. 12 tutti i file, compresi quelli nascosti.
Utilizzate il tasto freccia gi per cercare il file
MSDOS.SYS e quando lavrete trovato selezionatelo
cliccando una sola volta con il tasto destro del mouse.

Nel menu che appare cliccate sulla scritta Pro-


priet (vedi fig.17) e quando appare la finestra di
dialogo visibile in fig.18 controllate che non siano
selezionate le opzioni solo lettura e nascosto, nel
qual caso cliccate nelle rispettive caselle per to-
gliere la selezione.

Dopo questa verifica cliccate su OK (vedi fig.18)


per tornare al file MSDOS.SYS (vedi fig.19) che
sar ancora selezionato e cliccate due volte ma
Fig. 13 con il tasto sinistro del Mouse.

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.

Siccome MSDOS.SYS oltre ad essere un file na-


scosto un file di sola lettura, dovete cliccare una
Fig. 20 volta con il tasto destro del mouse sulla scritta M-
Sotto la scritta [Options] dovrebbero apparire SDOS.SYS poi selezionare Propriet (vedi fig.17).
queste due scritte:
Nella finestra di dialogo che appare cliccate ac-
BootGui=1 canto alla scritta sola lettura per ripristinare que-
BootMulti=1 sta opzione, poi cliccate su OK (vedi fig.18).

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

BootMenu=1 Nella finestra di dialogo che appare ripristinate la


BootMenuDelay=10 condizione di file nascosti cliccando sul cerchietto,
quindi uscite cliccando su OK (vedi fig.23).

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:

I CICLI MACCHINA microsecondi = (13 : MHz) x cicli

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:

Prendiamo in considerazione due istruzioni molto (13 : 8) x 2 = 3,25 microsecondi


utilizzate in un programma, cio call e ret.
Usando un quarzo da 4 MHz i tempi raddoppiano.
Listruzione call esegue 4 cicli macchina, vale a
dire che il microprocessore quando esegue questa Nota = Vogliamo far presente a tutti coloro che u-
istruzione compie 4 passi: tilizzano il Simulatore DSE622 della Softec senza
lemulatore, che la gestione dei registri di Stack,
1 passo o ciclo il microprocessore riconosce il anche se viene eseguita correttamente, sul video
codice operativo opcode della istruzione call. appare in senso inverso a quanto sopra riportato,
e lindirizzo di rientro viene memorizzato nel livello
2 passo o ciclo il microprocessore sposta al pi alto disponibile ed evidenziato con il simbolo
livello superiore il contenuto dei registri di >, mentre il contenuto degli altri livelli non viene tra-
Stack, innalzando di 1 livello anche lo Stack sferito.
correttamente i micro ST6
Nella rivista N.185 abbiamo pubblicato delle tabelle che vi permettono
di decifrare le decodifiche dellOpcode e degli Indirizzi di Memoria. Og-
gi cercheremo di spiegarvi i Cicli macchina, il Watchdog, la funzione Re-
set e tante altre cose.

RESET In pratica la locazione FFEH una cella di memo-


ria nella quale, durante la stesura del programma,
Sono tanti i lettori che ci hanno chiesto perch ini- stato scritto cosa deve fare il microprocessore
zialmente il microprocessore si posiziona nella lo- quando si attiva lInterrupt generato dalla funzio-
cazione FFEH di Program Space. ne reset.

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 - si alimenta il microprocessore. WATCHDOG


2 - viene messo un livello logico 0 sul piedino di
Reset del microprocessore ST6. Il Watchdog, come gi vi abbiamo spiegato nella
3 - il contatore Watchdog arriva a 0. rivista N.174/175, un contatore che si decre-
menta con una frequenza legata al Clock del mi-
In questa locazione di memoria FFEH il micropro- croprocessore e che genera un reset ogni volta
cessore trover la prima istruzione che dovr ese- che arriva a 0.
guire, ad esempio Jp inizio.
Per gestire il Watchdog il microprocessore utilizza
un registro chiamato Digital Watchdog Register che
formato da 8 bit come visibile in fig.1.

Mettendo a 1 il bit C il Watchdog si attiva, mentre


mettendolo a 0 si disattiva.
Nei micro ST6 con estensione /SWD lattivazione molto importante, perch quando inseriamo una
e la disattivazione sono gestibili tramite software, routine possiamo calcolare con buona approssi-
mentre nei micro ST6 con estensione /HWD sono mazione la cifra da caricare nel Watchdog Regi-
gestite direttamente dallhardware e quindi non si ster, in modo che la somma dei tempi di ciclo
possono modificare tramite software. macchina delle istruzioni risulti sempre minore del
tempo totale di decremento.
Nei micro con estensione /SWD se mettiamo a 0,
tramite software, il bit denominato C, il Watchdog Tutto questo si fa per poter ricaricare al termine di
non risulta attivato e i bits T1-T2-T3-T4-T5-T6-SR una routine il Watchdog Register prima che arri-
possono essere utilizzati come timer a 7 bits. vi a 0, generando in questo modo un reset indesi-
derato nel microprocessore.
Quando il Watchdog viene attivato, cio il bit C
a 1, se tramite software mettiamo a 0 il bit SR, il Usando questo artificio, se il microprocessore do-
microprocessore si resetta. vesse andare in loop a causa di un impulso spu-
rio, il Watchdog Register arriverebbe a 0 in un
Quando il Watchdog risulta attivato utilizza come tempo brevissimo attivando il reset.
contatore solo 6 bit, cio quelli siglati T1-T2-T3-
T4-T5-T6 (vedi fig.1); per questo solo particolare Qui sotto riportiamo un esempio di calcolo effet-
registro bisogna tener presente che il bit pi si- tuato su una routine, utilizzando un ST6 tipo /HWD
gnificativo il T6 e il meno significativo il T1. con un quarzo da 8 MHz.

Il peso di questi bits perci il seguente: Esempio:


bit T1 = peso 1 rout01 ldi wdog,130 (4)
bit T2 = peso 2 call dsend (4)
bit T3 = peso 4 ldi wdog,130 (4)
bit T4 = peso 8
bit T5 = peso 16 dsend ld save1a,a (4)
bit T6 = peso 32 ld a,ddata (4)
andi a,11110000b (4)
Sommando tutti questi pesi otteniamo un peso to- ld port_c,a (4)
tale di 63 e se a questo sommiamo il ciclo 0, che res 0,port_b (4)
per il Watchdog significativo, otteniamo 64 cicli. set 0,port_b (4)
call delay (4)
Per sapere dopo quanti microsecondi il Watch- ld a,ddata (4)
dog si decrementa di una unit dobbiamo usare sla a (4)
questa formula: sla a (4)
sla a (4)
microsecondi = (1 : MHz) x 3.072 sla a (4)
ld port_c,a (4)
In questa formula la frequenza MHz quella del res 0,port_b (4)
quarzo utilizzato per il Clock del microprocessore. set 0,port_b (4)
call delay (4)
Se nel nostro microprocessore inserito un quar- ld a,save1a (4)
zo da 8 MHz, il Watchdog sar decrementato di ret (2)
una unit ogni:
delay ldi del1,30 (4)
(1 : 8) x 3.072 = 384 microsecondi delay_A dec del1 (4 x 30)
delay_B jrnz delay_A (2 X 30)
Poich il numero massimo di cicli 64, potremo delay_C ret (2)
raggiungere un massimo di:

384 x 64 = 24.576 microsecondi Accanto ad ogni istruzione abbiamo indicato i cicli


macchina.
che corrispondono a 24 millisecondi circa. Come potete notare, nella routine dsend troviamo
due call delay e di conseguenza questa sub-rou-
Conoscere il tempo di decremento del Watchdog tine viene richiamata due volte.
T1 T2 T3 T4 T5 T6 SR C

1 2 4 8 16 32 RESET Wdg

Fig.1 Il Watchdog utilizza come contatore i soli 6 bits indicati T1-T2-T3-T4-T5-T6.


Come visibile nel disegno, il bit T1 vale 1 e il bit T6 vale 32, quindi sommando tutti que-
sti pesi otteniamo 63 e sommando a questi il ciclo 0 otteniamo un totale di 64.

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:

Se scriveremo wdog,254 eseguiremo il massimo save_pa def xxx


dei cicli, cio 64, ma, come gi abbiamo accenna-
to, se il microprocessore va in loop dovremo at- ld a,port_a
tendere molto tempo prima che si resetti. ld save_pa,a
set 1,save_pa
Nota = Quando il Watchdog attivo, se in un pro- oppure (res 1,save_pa)
gramma abbiamo inserito listruzione stop, il mi- ld a,save_pa
croprocessore esegue al suo posto listruzione wait ld port_a,a
e non blocca il Clock (rivista N.174).
Nota = Il passaggio dati da una variabile ad unal-
GESTIONE OTTIMALE delle PORTE tra, come ben sapete, deve avvenire tramite luti-
lizzo intermedio dellaccumulatore a.
Tutti i micro con 20 piedini (vedi fig.2) hanno due
porte Input-Output contraddistinte da A-B. Vi sono tanti altri casi in cui si possono generare
Tutti i micro con 28 piedini (vedi fig.3) hanno tre degli errori e falsi impulsi sui piedini della stessa
porte Input-Output contraddistinte da A-B-C. porta; ad esempio quando nel corso di un pro-
gramma si passa pi volte da Ingressi a Uscita e
Come noterete, i terminali della porta A sono si- viceversa, come spesso avviene quando, dialo-
glati A0-A1-A2, ecc., quelli della porta B sono si- gando con un integrato esterno, inviamo un treno
glati B0-B1-B2, ecc., e quelli della porta C sono si- di dati e lo stesso integrato ce li rimanda per po-
glati C4-C5-C6-C7. terli leggere.
Se non si eseguono dei passaggi con un ordine
Come gi vi abbiamo spiegato nella rivista ben definito si verificheranno sempre degli errori.
N.174/175 (sarebbe opportuno rileggerla), la con-
figurazione e lutilizzo di queste porte e di conse- Questi passaggi sono visibili in fig.5.
TABELLA N.1 per micro ST62/E10 - ST62/E20 e per micro ST6/T10 - ST6/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

A0 Fig.2 Allinterno dei micro della


PORTA A A1 1 20
serie T10-T20 non riprogramma-
A2 2 19 A0
A3 3 18 A1 bili e della serie E10-E20 che so-
4 17 A2
5 16 A3
no riprogrammabili, troviamo due
6 15 B0 sole porte indicate A-B.
7 14 B1
B0 B7 8 13 B2
Nella Tabella soprariportata ab-
B1 B6 9 12 B3 biamo indicato a quale numero di
B2 B5 10 11 B4
B3 piedino corrispondono le due
PORTA B B4 porte A-B.
B5
B6
B7

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

TABELLA N.3 per predisporre gli ingressi e le uscite

INGRESSI USCITE
Registri

con senza con segnali open uscita


pull-up pull-up interrupt analogici collector push-pull
pdir 0 0 0 0 1 1 1 1
popt 0 0 1 1 0 0 1 1
port 0 1 0 1 0 1 0 1

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.

INTERRUPT INPUT INPUT ANALOG Le espressioni vengono eseguite quando si effet-


PULL-UP PULL-UP NO PULL-UP IN tua la Compilazione in Assembler e non durante
010 000 001 011 lesecuzione del programma.

Nota = In molti degli esempi che riporteremo tro-


verete delle Direttive Assembler che in seguito vi
spiegheremo meglio, anche se nella rivista N.174
OPEN OPEN
COLLECTOR
100 101 COLLECTOR abbiamo gi accennato qualcosa in merito.

Come noto, una istruzione Assembler composta


da:
PUSH PUSH
PULL
110 111 PULL ETICHETTA ISTRUZIONE OPERANDO ; COMM. RIGA

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.

Etichetta Istruzione Operando Etichetta Istruzione Operando

seg1 .def 088h seg1 .def 088h


seg2 .def seg1+1 offset .set 10h
seg3 .def seg2+1 inizio ldi x,(seg1 - offset)/ 2
Nella prima istruzione la Direttiva .def associa la
variabile seg1 allindirizzo di Data Space 088h. Etichetta Istruz. Operando

seg1 .def 088h


Nella seconda istruzione la Direttiva .set associa
offset .set 0Fh
alla costante offset il valore 10h.
valtst .set 04h
inizio ldi seg1,offset&(~(valtst>>1))
Nella terza istruzione contrassegnata dalletichetta
inizio, listruzione ldi carica nel registro x il risul-
tato dellespressione (seg1 - offset) / 2.
Listruzione seg1 - offset stata racchiusa tra pa- Nella prima istruzione la Direttiva .def associa la
rentesi perch deve essere eseguita prima della variabile seg1 allindirizzo di Data Space 088h.
divisione per 2.
Infatti, come vi abbiamo gi spiegato nelle priorit, Nella seconda istruzione la Direttiva .set associa
la divisione verrebbe altrimenti eseguita prima del- alla costante offset il valore 0Fh.
la sottrazione.
Nella terza istruzione la Direttiva .set associa alla
divisione priorit 2 costante valtst il valore 04h.
sottrazione priorit 3
Nella quarta, alletichetta inizio, listruzione ldi ca-
Se eseguite queste istruzioni con un software si- rica nella variabile seg1 il risultato della Espres-
mulatore potrete vedere alletichetta inizio che le- sione offset&((valtst>>1)).
spressione (seg1 - offset) / 2 stata sostituita dal
valore 3Ch. Analizziamo ora questa Espressione per capire o-
gni singola funzione.
E ora vi spiegheremo il perch.
Subito viene data la priorit a (valtst>>1) essendo
Poich viene data la priorit a (seg1 - offset), il racchiusa tra parentesi interne e viene semplifica-
compilatore Assembler eseguir la sottrazione: ta in 04h>>1 = 02h.
Infatti valtst vale 04h e loperatore >> che indi-
088h - 10h = 78h ca di spostare a destra, esegue uno shift bina-
rio a destra di tante posizioni quante risultano in-
quindi lespressione (seg1 - offset) / 2 verr dicate nellespressione.
semplificata in 78h / 2. Nel nostro esempio con 1 si ottiene il numero e-
sadecimale 02h.
Successivamente il compilatore Assembler ese-
guir la divisione 78h / 2 e come risultato finale ot- Convertendo in binario il valore esadecimale 04h
terremo 3Ch. questo calcolo diventer pi comprensibile.

Se volessimo ragionare in decimale, gi sappiamo 04h = binario 00000100b


che i numeri esadecimali equivalgono a:
Se ora spostiamo a destra il valore di ogni singo-
088h = 136 decimale lo bit otterremo:
10h = 16 decimale
78h = 120 decimale 00000010b
3Ch = 60 decimale
Se riconvertiremo questo numero da binario in e-
Eseguendo queste stesse operazioni in decimale sadecimale otterremo 02h.
otterremo:
Perci il compilatore Assembler semplificher la e-
136 - 16 = 120 che corrisponde a 78h spressione:
120 : 2 = 60 che corrisponde a 3Ch
offset&((valtst>>1)) in offset&(02h)
4 Esempio
Nota = Se avete dei problemi a convertire un nu-
In questo esempio vi facciamo vedere come si pu mero binario in esadecimale o decimale vi con-
utilizzare una espressione con le funzioni And, In- sigliamo di consultare il nostro volume HAND-
versione di bit e sposta a destra. BOOK a pag.372.
Attenzione = Poich non esiste nessun controllo il compilatore Assembler lha semplificata in:
sul numero di bits che vengono spostati a destra,
il compilatore non segnaler mai nessun errore. ldi seg1,0Dh.

Quindi se spostate verso destra pi di 7 bit otter-


rete come risultato un valore uguale a 0. 5 Esempio

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.

Poich la nostra lespressione stata semplificata


Etichetta Istruz. Operando
in offset&(02h) la priorit passa a (02h).
seg1 .def 088h
Il compilatore Assembler eseguendo linversione offset .set 80h
della configurazione 02h (si noti il segno ~ della valtst .set 05h
funzione inverti i bit) ci dar come risultato il valo- inizio ldi seg1,offset (1<<valtst)
re esadecimale FDh.

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.

02h = binario 00000010b Nella seconda istruzione la Direttiva .set associa


alla costante offset il valore 80h.
Se ora invertiremo questi bits otterremo:
Nella terza istruzione la Direttiva .set associa alla
11111101b costante valtst il valore 05h.

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:

Come noterete, nella funzione And solo se nella 00000001b


colonna sopra e in quella sotto presente un va-
lore logico 1 otteniamo come risultato 1.
Poich il valore di valtst 05h che in decimale e-
Ogni altra combinazione ci dar risultato 0.
quivale a 5, il compilatore sposter di 5 posizioni,
verso sinistra, il numero 1:
Se riconvertiamo il numero binario 00001101b in
esadecimale otterremo 0Dh.
00100000b
Pertanto la quarta istruzione :
Se convertiamo questo numero binario in esade-
ldi seg1,offset&((valtst>>1)) cimale otterremo 20h.
Pertanto la quarta istruzione: Il simbolo $ in Assembler significa Valore del
Program Counter Relativo, perci in fase di Com-
ldi seg1,offset (1<<valtst) pilazione (e non di esecuzione) al posto di $ vie-
ne inserito lindirizzo della cella di memoria Pro-
verr semplificata dal compilatore in: gram Space Relativa.
ldi seg1,offset 20h
Nella prima istruzione la direttiva .block definisce
Attenzione = Il compilatore Assembler segnala unarea di Program Space la cui estensione il ri-
errore di Overflow nel caso si tenti di spostare a sultato della Espressione 64$%64.
sinistra bits significativi, oltre la capacit di 1 Byte.
Questa espressione va letta come segue:
Ad esempio, se nel nostro numero sono presenti
sulla sinistra quattro zeri = 00001000 potremo ef-
- Sottrai da 64 leventuale resto risultante dalla di-
fettuare uno spostamento solo di quattro, ottenen-
visione fra il valore del Program Counter Relati-
do cos 10000000.
vo e il numero 64.
Se invece sulla sinistra del numero sono presenti
solo due zeri = 0011100 lo spostamento potr es-
Supponiamo che la direttiva:
sere solo di due, ottenendo cos 11100000.

Tornando al nostro esempio, quando il compilato- .block 64$%64


re incontra lespressione offset20h, eseguendo la
funzione OR tra offset (che vale 80h) e 20h otter- si trovi allindirizzo di memoria:
remo come risultato A0h.
Program Space 894h
Infatti, se convertendo in binario i numeri esade-
cimali 80h e 20h proviamo ad eseguire la funzio- Il compilatore sostituir questo indirizzo di me-
ne OR, otterremo: moria al simbolo $ e semplificher questa espres-
sione come segue:
80h = 10000000b
20h = 00100000b .block 64894h%64
risultato = 10100000b
che espressa in decimale diventer:
che convertito in esadecimale ci dar A0h.
.block 642196%64
Come noterete nel risultato vengono riportati tutti
gli 1 presenti nelle due colonne. La funzione modulo ha priorit 2, mentre la fun-
zione sottrazione ha priorit 3, perci verr svol-
Pertanto la quarta istruzione: ta prima loperazione 2196%64.
Eseguendo questa operazione con la calcolatrice
ldi seg1, offset(1<<valtst) si otterr:
il compilatore la semplificher in:
2196 : 64 = 34,3125
ldi seg1,A0h
Per ricavare il resto di questa divisione sar suffi-
ciente moltiplicare 0,3125 per 64:
6 Esempio
0,3125 x 64 = 20
In questo esempio vi facciamo vedere come si pu
utilizzare una espressione con la funzione modu- LEspressione verr ulteriormente semplificata co-
lo indicata con il simbolo % che esegue una divi- me segue:
sione e ci d come risultato il resto se questo
presente, altrimenti ci d come risultato 0. .block 6420 = 44

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:

Anche larea di memoria definita Data Rom Win- .block 64$%64


dow riservata per poter utilizzare i dati contenuti
nelle tabelle in grado di contenere un massimo Avendo in questo modo collocato tutta la stringa
di 64 pedine (vedi fig.6). nel blocco D, quando la trasferiremo nella Data
Rom Window (vedi fig.6) il 1 byte della stringa
Se abbiamo un programma composto da 163 pe- coincider con il 1 byte della Data Rom Window.
dine riusciremo a riempire completamente i primi
due vassoi A-B e per met il terzo vassoio C (ve-
di fig.6) fino ad arrivare alla casella 35. Importante = Come vi abbiamo spiegato, il .block
Se di seguito inseriamo una stringa di dati compo- permette di spostare tutta la stringa dei dati nel
sta da 50 pedine (senza inserire lespressione vassoio D (vedi fig.6). Uno dei vantaggi che offre il
.block), queste verranno inserite partendo dalla ca- .block quello di non doverci pi preoccupare se
sella 36 fino ad arrivare alla casella 64 e nel suc- nel vassoio C aggiungiamo o togliamo delle righe
cessivo vassoio D lAssemblatore inserir le altre di istruzione, perch il compilatore provveder au-
21 pedine. tomaticamente a calcolare larea necessaria per fa-
re saltare tutto il blocco dei dati nel vassoio D.
Se ora volessimo trasferire la nostra stringa di da-
ti nella Data Rom Window, poich possiamo pre- A questo punto dobbiamo forzatamente interrom-
levare solo dei blocchi di 64 byte potremmo tra- pere questo articolo. Per il momento non ponetevi
sferire il solo blocco C o il solo il blocco D ed in domande sul concreto utilizzo degli esempi che vi
questo caso avremmo sempre una stringa di dati abbiamo presentato, ma limitatevi ad osservarne il
spezzata ed incompleta. risultato.
Nel prossimo numero ci addentreremo nelle diret-
Si pu ovviare a questo inconveniente facendo cal- tive assembler e tratteremo in pratica e con e-
colare allAssemblatore lo spazio necessario per sempi le Espressioni.
NUOVO software SIMULATORE
Chi desidera un software simulatore per testare i micro ST6 pi completo
del DSE.622 presentato nelle riviste N.184 e N.185, potr installare sotto
Windows 3.1 o 95 il nuovo software che qui vi presentiamo.

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.

Nella fig.3 vi facciamo vedere la finestra che ap-


parir facendo una Attivazione/Disattivazione di
un BreakPoint.

Potete trovare una esauriente spiegazione della


funzione BreakPoint nella rivista N.148.
Fig.1 Quando appare la finestra di dialogo
Lunica differenza che noterete che nella fig.62 dellEdit Data dovete premere Bits.
tutte le scritte sono in inglese, mentre nella fig.3 so-
no riportate in italiano.
Facciamo presente che la scritta Breakpoint e-
quivale a Interruzione ON/OFF.

Nelle figg.4-5-6-7 abbiamo riportato i menu dispo-


nibili affinch possiate rendervi conto delle possi-
bilit che offre questo simulatore.

per micro ST6


Fig.2 Automaticamente vi apparir la fine-
stra della mappa binaria della porta B.

I comandi supplementari che troverete in questo


nuovo software sono:

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.

Consigliamo di usare sempre lo stesso nome del


programma che si desidera simulare, quindi se a-
vete denominato il programma Tester.Hex o
Led.Hex lo dovete chiamare Tester.CMD. o
Led.CMD.

Importante! Il file deve risultare presente gi pri-


ma di effettuare la prima simulazione, quindi lo do- Fig.4 Cliccando File apparir la finestra del
vrete creare con un Editor qualsiasi sulla direc- menu con lelenco dei comandi.
tory di lavoro.
Cliccando ora sulla funzione Cronologia Porte
(vedi fig.6) sottointeso che la prima volta la fine-
stra di fig.9 apparir completamente vuota.
In questa finestra potete inserire o variare su ogni
porta i livelli logici 1-0 oppure i livelli analogici
come visibile in fig.10 (vedi in alto le scritte PA-PB-
PC-Varie).

Se selezionerete Varie, potrete agire sui piedini del


TIMER e dellNMI.
Oltre agli stati logici possibile selezionare sia la
Fig.5 Cliccando Esegui apparir questa fi- base dei tempi (vedi riga indicata Ampiezza) che
nestra e tutti i relativi comandi. loffset (durata dellimpulso) fino ad un tempo mas-
simo di 500.000 microsecondi.

Nota = Questo tempo di 500.000 microsecondi,


corrispondente a 0,5 secondi, che a voi pu sem-
brare irrisorio, per il microprocessore un tempo
esagerato perch corrisponde a diverse migliaia
di cicli macchina.

In fig.9 abbiamo riportato un esempio grafico del-


la funzione Cronologia Porte.

Se, a questo punto, volete inserire nel programma


Fig.6 Cliccando Porte appariranno le tre di prova i dati visibili in fig.9, dovrete innanzitutto
funzioni che potrete eseguire. cliccare sulla barra di scorrimento orizzontale po-
sta in basso (vedi scritta Ampiezza) e selezionare
una base dei tempi di 12,5 msec.
Cliccando poi sul cerchietto PB selezionerete la
porta B e, posizionandovi con il mouse su PB0 e
PB1, dovrete inserire i seguenti valori:

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

Nota = Cliccando con il mouse al di sotto della li-


nea tratteggiata orizzontale relativa a PB0 o PB1
si inserisce un livello logico 0, mentre cliccando
al di sopra si inserisce un livello logico 1.
Per conoscere gli esatti tempi di salita e di disce-
sa degli stati logici dovrete tenere premuto il tasto
destro del mouse e, in questo modo, sul video ap-
parir una riga verticale di colore viola che po-
trete spostare in orizzontale tenendo ovviamente
sempre premuto il tasto del mouse.
Fig.8 Cliccando nella fig.4 Dati in Ingresso
apparir questa finestra. Come potete vedere infatti in fig.12, il piedino PB1
si porta a livello logico 1 dopo 37 msec.
Potrete leggere questo numero nel piccolo riqua-
dro posto in alto a destra.

Spostando la riga viola verso destra (vedi fig.13)


potrete constatare che il piedino PB1 si porta a li-
vello logico 0 dopo un tempo di 81 msec.

In fig.14 sono riportati gli stessi stati logici di fig.9


ma con una base tempi di 50 msec.

Questo simulatore permette anche linserimento di


segnali analogici e non soltanto di stati logici.

Ad esempio, ammesso che nel nostro programma


il piedino 4 della porta A sia stato predisposto co-
Fig.9 Esempio grafico della funzione Cro-
me ingresso per un segnale analogico, poich
nologia Porte che permette di vedere i li-
lAD/converter dellST6 accetta un massimo di 5
velli logici presenti sui piedini del micro.
volt e utilizza un registro di 8 bit per la conversio-
ne che corrisponde ad un numero decimale 255,
ovvio che 1 volt corrisponde al numero:

255 : 5 = 51

Ammesso di voler simulare una tensione di 3 volt


dopo 125 microsecondi, dovrete cliccare sulla fun-
zione Cronologia Porte visibile in fig.6 e, in que-
sto modo, apparir la finestra di fig.9; a questo pun-
to dovrete cliccare nel cerchietto PA.

La prima operazione da effettuare quella di an-


dare con il cursore sulla barra di scorrimento con
la scritta Offset fino a quando sul video non ap-
parir un tempo di 125 msec.

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.

Allinterno del riquadro posto sulla destra scrivere-


te 153 che corrisponde ad un valore di 3 volt, in-
fatti 51 x 3 = 153.

Se a questo punto cliccherete su OK apparir la fi-


nestra di fig.15 e sulla riga orizzontale della porta
PA4 apparir il numero 153.

Per memorizzare tutti i segnali riportati nelle figg.9-


15 nel file con lestensione .CMD dovrete premere
il tasto OK e, in tal modo, comparir la finestra ri-
prodotta in fig.11.

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.

In tutti gli altri normali programmi di simulazione si


costretti a fermare lesecuzione, inserire le mo-
difiche e poi ripartire.

Concluse le spiegazioni relative alla funzione Dati


in Ingresso, possiamo passare alla funzione Scri-
vi Dati in Uscita.

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:

Scrivi Dati in Uscita e cliccare

Da questo preciso istante il simulatore memoriz-


zer tutti gli eventi presenti sui piedini del micro-
processore configurati come uscita sia come va-
lore digitale che analogico, compresa la loro du-
rata.
Il tempo massimo di memorizzazione, come gi ac-
cennato, non pu superare i 500.000 msec che
corrispondono esattamente a 0,5 secondi.

Per vedere graficamente sul monitor quanto ave-


te memorizzato in modo da verificare istante per i-
stante come cambiano i livelli logici o analogici sui
piedini delle porte e controllare cos se le routine
Fig.13 Per sapere quando la porta PB1 cam- eseguono le funzioni da voi richieste, dovrete an-
bia da 1 a 0 dovrete spostare la riga verti- dare alla maschera di fig.6 e selezionare la riga
cale nella posizione visibile in figura. Cronologia porte.

Cliccando su questa riga comparir la finestra vi-


sibile in fig.16 dove, in rosso, appaiono tutti i livelli
logici delle porte duscita.

La barra verticale azzurra visibile sulla destra delle-


sempio segnala il punto esatto di fine registrazio-
ne eventi.
Nel nostro caso di 181 msec (come visibile an-
che in alto a destra).

Nel nostro esempio i segnali sono riferiti alla porta


B, quindi se avessimo predisposto come uscita la
porta A avremmo dovuto selezionare il cerchietto
posto in alto con la scritta PA anzich PB.

Per salvare definitivamente questi dati memoriz-


Fig.14 Modificando la base dei tempi da zati dovrete premere OK e, in tal modo, riapparir
12,5 msec. (vedi fig.9) a 50 msec potrete au- la finestra di fig.11 e su questa dovrete cliccare sul-
mentare il campo di visualizzazione. la scritta File in modo da far apparire la finestra ri-
prodotta in fig.4.
Portate il cursore sulla riga Scrivi File Dati Usci-
ta, poi premete Enter e, cos facendo, apparir la
finestra visibile in fig.17 e nel riquadro sottostante,
in corrispondenza della scritta Nome file, inserite
il nome del file con estensione .DAT.
Premete infine OK.

Nellesempio di fig.17 abbiamo denominato questo


file TESTER.DAT.
Tutti i file memorizzati con estensione .DAT e an-
che quelli con estensione .CMD possono essere ri-
chiamati, visualizzati e stampati con un qualsiasi
programma di Editor.
Troverete la spiegazione della struttura dei dati
contenuti in questi due files nelle NOTE che lAu-
tore ha inserito nel software. Fig.15 Poich nel nostro esempio abbiamo
Per stampare queste note dovrete andare su File assegnato alla porta PA4 un valore di 3 volt
Manager se avete il Windows 3.1 oppure su Ri- vedrete apparire il numero 153.
sorse del Computer se avete Windows 95, poi vi
dovrete posizionare nella directory in cui avete in-
stallato questo software.
In directory cercate manuale.wri, poi cliccate e
sul monitor potrete leggere queste note.

Lultima funzione Test I/O serve per visualizzare


ed eventualmente modificare la configurazione
delle Porte e del Timer del microprocessore e an-
che i livelli logici dei dati dingresso.

Nella fig.18 potete vedere la maschera che com-


pare sul monitor quando si attiva questa funzione.
Osservando in basso a destra, sotto la scritta Mo-
do potrete notare che stata selezionata la fun-
zione Linee che permette di visualizzare i segna-
li che sono presenti sui piedini del microprocesso-
re nel preciso momento in cui stata attivata la fun-
zione Test I/O.
Fig.16 In questo grafico potete vedere tutti
Sul lato sinistro riportata la zoccolatura del mi- i livelli logici 1-0 che risulteranno presenti
croprocessore (nel nostro esempio riportata la sulle porte configurate Out.
zoccolatura dellST62/15 - ST62/25) e sul lato de-
stro la piedinatura di ogni porta.
Il segno V presente nei riquadri sta ad indicare che
nel corrispondente piedino presente un livello lo-
gico 1.
Ammesso di voler modificare lo stato logico del pie-
dino PA2 della porta A, sar sufficiente portare il
cursore nel riquadro corrispondente e cliccare con
il mouse e, cos facendo, apparir una V; se clic-
cherete una seconda volta la V sparir.
Se sotto la scritta Modo selezionerete la modalit
Configurazione (vedi fig.19), vedrete come risul-
tano configurate tutte le porte del micro.
Come potete notare nel riquadro che appare sulla
destra, tutti i piedini della porta B sono configura-
ti Out Push Pull. Fig.17 Per salvare in un file i segnali pre-
Il piedino 4 della porta A configurato Analog In, senti sui piedini duscita (vedi fig.16) do-
mentre i restanti piedini di questa porta sono con- vrete utilizzare questa finestra.
figurati Input Pull Up.
Per modificare la configurazione di una porta do-
vrete rispettare i valori logici che abbiamo indica-
to nella Tabella N.1.
Premendo OK uscirete da questa maschera e poi-
ch avete apportato delle modifiche vi converr sal-
varle sul file con estensione .CMD tramite la fun-
zione Scrivi File Data in Ingresso dopo aver fat-
to apparire la maschera di fig.4.
A questo punto rilanciate la simulazione del vo-
stro programma, selezionando Dati in ingresso e
verificando quale risultato si ottiene con le modifi-
che apportate.

INSTALLAZIONE del SOFTWARE


Fig.18 Questa finestra appare attivando la sotto WINDOWS 3.1
funzione Test I/0 in Modo Linee.
Inserite nellunit floppy disk il dischetto ST622-1 e
nel menu del Program Manager portate il cursore
in alto a sinistra sulla scritta File e cliccate.
Andate sulla scritta Esegui, cliccate nuovamente e
quando apparir la finestra di dialogo digitate:

A:\setup poi cliccate su OK

In questo modo il computer inizier a leggere il con-


tenuto del primo dischetto e quando questo risul-
ter trasferito, apparir la maschera di fig.20.
Togliete il dischetto ST622-1, inserite il dischetto
ST622-2 e a questo punto cliccate su OK.
Completata la lettura anche di questo dischetto sul
Fig.19 Questa finestra appare attivando Te- video apparir la maschera di fig.21.
st I/0 in Modo Configurazione. Cliccate su OK per proseguire.
Dopo qualche istante apparir la maschera ripro-
dotta in fig.22.
Se a questo punto volete modificare la directory di
installazione, cliccate su cambia directory e se-
guite le indicazioni su video, altrimenti cliccate sulli-
cona contenente limmagine di un computer per in-
stallare il software sotto la directory c:\ST622.
Completata linstallazione, apparir la maschera di
fig.23 per confermarvi che nellhard-disk risulta in-
serito questo software sotto la directory ST622.
Fig.20 In fase dinstallazione, quando ap-
Come noterete, nel Program Manager verr ge-
pare questo messaggio inserite il disco 2.
nerata la relativa icona.

INGRESSI USCITE
Registri

con senza con segnali open uscita


pull-up pull-up interrupt analogici collector push-pull

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

Inserite nellunit floppy disk il dischetto ST622-1 e


cliccate sulla scritta Avvio posta in basso a sini-
stra, poi andate sulla scritta Esegui e cliccate nuo-
vamente e quando apparir la finestra di dialogo
digitate:

A:\setup poi cliccate su OK

In questo modo il computer inizier a leggere il con-


tenuto del primo dischetto e quando questo risul- Fig.21 Se in fase dinstallazione appare que-
ter trasferito, apparir la maschera di fig.20. sto messaggio dovrete uscire e poi chiu-
dere tutte le altre applicazioni attive.
Togliete il dischetto ST622-1, inserite il dischetto
ST622-2 e a questo punto cliccate su OK.
Completata la lettura anche di questo dischetto, sul
video comparir la maschera di fig.21.
Cliccate su OK per proseguire.
Dopo qualche istante, apparir la maschera ripro-
dotta in fig.22.
Se, a questo punto, volete modificare la directory
di installazione, cliccate su cambia directory e se-
guite le indicazioni che appariranno sul video, al-
trimenti cliccate sullicona contenente limmagine
di un computer per installare il software sotto la di-
rectory c:\ST622.
Completata linstallazione apparir la maschera di
fig.23 per confermarvi che nel vostro hard-disk ri-
sulta inserito il software sotto la directory ST622 e
automaticamente verr generata la relativa icona.

Nota = Nel dischetto ST622-2 presente una di-


rectory Esempi in cui lAutore ha inserito un pro- Fig.22 Letti tutti e due i dischetti, il pro-
gramma chiamato PEDALI con varie estensioni gramma dinstallazione chieder se volete
(.Dat - .Cmd - .Asm, ecc.), che potranno servirvi cambiare oppure no la directory.
per impratichirvi nelluso del simulatore.
In fase di installazione questa directory non viene
copiata nellHard-Disk, quindi per trasferirla dovre-
te usare la funzione Copy File.

CONCLUSIONE

Questo software simulatore sar molto utile a tut-


ti i softwaristi che programmano dei microproces-
sori tipo ST6 perch, a differenza di altri, permette
di vedere - modificare - variare con estrema fa-
cilit le condizioni logiche su tutte le porte din-
gresso e duscita.
Pi prenderete confidenza con luso di questo
software pi vi renderete conto dei tanti problemi
che esso in grado di risolvere.

COSTO del SOFTWARE Fig.23 Completata linstallazione sullHard


Disk, apparir licona che dovrete utilizza-
Costo dei due dischetti floppy ST622-1 e ST622-2 re in seguito per lanciare il software.
Iva inclusa ................................................. 10,32
NellAssembler per ST62 esistono delle istruzio- Chiusa questa breve parentesi, proseguiamo ri-
ni chiamate direttive, che in pratica esauriscono portando lelenco di tutte queste Direttive.
la loro funzione in fase di compilazione e non ge-
nerano, come le altre istruzioni, una OPCODE e- A quanti hanno gi acquistato e utilizzato i pro-
seguibile. grammi didattici contenuti nei nostri dischetti mol-
In parole povere queste istruzioni non fanno ese- te di queste istruzioni risulteranno familiari.
guire nulla al microprocessore ma agiscono solo
sul Compilatore. Vi sono ben 36 di queste direttive e qui sotto ve
le elenchiamo raggruppate per funzioni:
A questo punto qualcuno si chieder quale utilit
possano avere queste direttive che non fanno nul- Direttive usate per la definizione
la di concreto, quindi se volete scoprirlo dovrete di Dati nellarea del Programma:
leggere questo articolo e alla fine capirete che mol-
te di esse sono indispensabili. .block
.byte
Per fare un esempio iniziamo dalla direttiva .di- .word
splay che possiamo chiamare digitando: .ascii
.ascii
.display stringa

SOFTWARE emulatore per


Se imparerete a conoscere e ad utilizzare le Direttive dellAssembler riu-
scirete ad ottimizzare i vostri programmi, a gestire le librerie di moduli
e di macro, a sezionare i programmi in pagine logiche, a generare mo-
duli in formato .obj ecc., risparmiando cos del tempo nella stesura.

La parola stringa che abbiamo inserito tra le virgo-


Direttiva usata per la definizione
lette, pu essere sostituita con una parola diversa
di Variabili nellarea dei Dati:
oppure con una frase di messaggio, ad esempio:
.def
.display Compilato routine PIPPO.ASM

Quando il Compilatore legge questa Direttiva, Direttive usate per la definizione


provvede a visualizzare sul Monitor del Computer delle Costanti Simboliche:
la frase:
.equ
Compilato routine PIPPO.ASM .set

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:

In programmazione, questa tecnica di segnalazio- .glob


ne sul monitor viene molto utilizzata in combina- .window
zione con le direttive .input oppure .macro e .ifc .windowend
perch consente di vedere direttamente sul moni- .transmit
tor, in tempo reale, quali routine sono state carica- .notransmit
te nel programma in fase di Compilazione.
TESTARE i micro ST6
Direttive relative al solo Hardware: Direttive da usare per la Compilazione
Condizionata in Assembler:
.pp_on
.dp_on .ifc
.w_on .else
.page_d .endc
.section

Direttive di carattere Generale: Direttive da utilizzare per la


gestione delle Macro:
.display
.end .macro
.input .endm
.org .mexit
.error
.warning
Completato lelenco delle direttive, poich non e-
siste un ordine ben preciso per iniziare da una di-
Direttive da utilizzare rettiva anzich da unaltra, prendiamo in conside-
per impaginare il listato: razione quella denominata .w_on, strettamente le-
gata alla Data Rom Window, alla quale abbiamo
.eject gi fatto cenno nella rivista N.189.
.list
.pl La direttiva .w_on ha ununica funzione che consi-
.linesize ste nellabilitare la Data Rom Window allinterno
.title del programma.
.comment
Se allinizio del programma non inseriamo la diret-
tiva .w_on non potremo usufruire di questarea ed Come potete notare, abbiamo definito 4 direttive .a-
il Compilatore ci segnaler: scii lunghe 16 Bytes cadauna ed alla prima ab-
biamo associato letichetta test01.
Error .W_ON Directive Required
Per caricare questi dati in Data Rom Window dob-
Una volta abilitata, per accedere e utilizzare la Da- biamo scrivere:
ta Rom Window dovremo inserire in coda a de-
terminate istruzioni le due sigle .w e .d. ldi drw,test01.w

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:

A40h test01 .ascii TESTO DI PROVA - 8 bit value overflow


.ascii PER VISUALIZZARE
.ascii CARATTERI ALFAN nel caso le stringhe di test01 risultino inserite in co-
.ascii UMERICI - FINE - da alle istruzioni del programma.

TABELLA N.1 di conversione binario/decimale

bit 11 10 9 8 7 6 5 4 3 2 1 0

peso 2048 1024 512 256 128 64 32 16 8 4 2 1

binario 1 0 1 0 0 1 0 0 0 0 0 0

Il codice binario 101001.000000 posto sotto al relativo peso.

TABELLA N.2 di conversione binario/decimale

bit 11 10 9 8 7 6 5 4 3 2 1 0

peso 2048 1024 512 256 128 64 32 16 8 4 2 1

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:

Questi errori vengono segnalati dal Compilatore 2624 : 41 = 64


tutte le volte che incontra una istruzione che cari-
ca un indirizzo di Program Space (sempre e-
In pratica quando il Compilatore assembla una i-
spresso con 12 bits) in una variabile o registro in
struzione con .w, divide per 64 lindirizzo di Pro-
grado di contenere solo 8 bits.
gram Space delletichetta:
Inserendo invece in coda allistruzione la sigla .w
come qui riportato: 2624 : 64 = 41 (esadecimale 29H)

ldi drw,test01.w perdendo leventuale resto e memorizza il risultato


della divisione (nel nostro esempio 29H) al posto
il Compilatore utilizza solo i 6 bits pi significativi delloperando test01.w.
dellindirizzo (quelli di sinistra) di Program space
di test01, che verranno poi caricati, in fase di ese- Disponendo di un software simulatore (vedi fig.1)
cuzione, nel registro drw senza generare errore. sar possibile vedere, tramite la finestra Disas-
sembler, che listruzione:
A questo punto dobbiamo spiegarvi come utiliz-
zando solo 6 bits non si generi nessun errore. ldi drw,test01.w

Se convertiamo in binario il numero esadecimale sar diventata:


A40h che corrisponde allindirizzo di test01 otter-
remo:
ldi drw,29H
101001-000000
Una volta assemblato il programma, quando il mi-
Se collochiamo questo numero binario, composto croprocessore incontrer questa istruzione il risul-
di 12 bits, nella Tabella N.1 (vedi tabella a sini- tato verr memorizzato nel Data Window Register
stra) e sommiamo i loro i pesi otterremo: che, come gi saprete, deve essere tassativamen-
te definito allindirizzo di memoria Data Space C9h
2048 + 512 + 64 = 2624 (vedi fig.2).

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.

Rom Window tutti i 64 bytes, cio: Se per errore scriveremo:

TESTO DI PROVA ldi x,test01


PER VISUALIZZARE
CARATTERI ALFAN senza inserire .d in coda a test01, il compilatore ci
UMERICI - FINE - segnaler errore dal momento che tentiamo di ca-
ricare nel registro x un indirizzo di memoria Pro-
Infatti, se prendiamo il numero 41 contenuto nel gram Space.
Data Window Register e lo moltiplichiamo per 64
otterremo un numero decimale: Scrivendo correttamente:

41 x 64 = 2624 ldi x,test01.d

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

ldi x,test01.d che in esadecimale corrisponde a 40h.

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.

Se ora scriviamo: Quando il Compilatore assembla listruzione:

ldi drw,test01.w ldi x,test02.d

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:

PREMI PULSANTE PREMI PULSANTE


-SPEGNI DISPLAY- -SPEGNI DISPLAY-

Fig.5 Anche gli spazi sono considerati caratteri e vengono memorizzati.


Fig.6 Se controllate con il
software la finestra del Di-
sassembler, potrete nota-
re che listruzione:
ldi X,test02.d
si sar tramutata in:
ldi X,60H

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.

BOX OK Quindi al posto delloperando test01.w il Compila-


tore sostituir il valore 48 che in esadecimale cor-
Infine, che scompaia anche questa scritta per es- risponde a 30h.
sere sostituita da una scritta che faccia apparire
sulle due 2 righe del display: Se disponete di un software simulatore troverete
che nella finestra Disassembler listruzione:
-ATTENDERE FASE-
-DI SPEGNIMENTO- ldi drw,test01.w
sar diventata: stringhe: di conseguenza perderemo dei dati ed in-
fatti noteremo che lultima stringa riporter solo:
ldi drw,30h
ENDERE FASE DI
Una volta assemblato e lanciato il programma vie-
ne eseguita questa istruzione e il risultato viene me- quindi verr perso SPEGNIMENTO-.
morizzato nel Data Window Register.
La stringa INIZIO anche se parte da 44h anzich
Il valore contenuto nel Data Window Register in- da 40h riusciremo sempre a visualizzarla.
dicher lindirizzo (espresso in blocchi di 64 bytes)
della stringa di dati che verr cos caricata in Da- Quindi quando digiteremo listruzione con .d:
ta Rom Window.
ldi x,test01.d
Il microprocessore riconosce che il registro drw de-
finito alla locazione di memoria C9h il Data Win-
il Compilatore assembler questa istruzione divi-
dow Register, quindi carica in Data Rom Window
dendo lindirizzo di Program Space di test01 per
64 bytes del nostro testo a partire dal 48 blocco
64, poi prelever il resto di questa divisione, som-
(di 64 bytes luno) di Program Space.
mer a questo resto il valore decimale 64 e lo me-
morizzer nellistruzione stessa al posto dellope-
Se prendiamo il valore 48 contenuto nel Data Win-
rando test01.d.
dow Register e lo moltiplichiamo per 64 otterre-
mo:
Nel nostro caso, poich test01 stato definito allin-
dirizzo di Program Space C04h che corrisponde
48 x 64 = 3072
al valore decimale 3076, avremo:
Espresso in esadecimale 3072 vale C00h.
3076 : 64 = 48,0625 (rimane 0,0625)
64 x 0,0625 = 4 (che sarebbe il resto)
Perci come risultato finale listruzione:
resto 4 + 64 = 68
ldi drw,test01.w
che in esadecimale corrisponde a 44h.
caricher in Data Rom Window, 64 bytes di dati
definiti in Program Space a partire dallindirizzo Nota = Lesempio dei resti in tutte le operazioni
C00h, cio 4 bytes prima e non da C04h come ri- che abbiamo riportato sono quelli che ci ritrovere-
chiesto. mo usando una normale calcolatrice tascabile.

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:

3082 : 64 = 48,15625 (rimane 0,15625) 3098 : 64 = 48,40625 (rimane 0,40625)


64 x 0,15625 = 10 (che sarebbe il resto) 64 x 0,40625 = 26 (che sarebbe il resto)
resto 10 + 64 = 74 resto 26 + 64 = 90

che corrisponde al numero esadecimale 4Ah. che in esadecimale corrisponde al numero 5Ah.

Se controllate la finestra Disassembler, noterete Osservando la finestra Disassembler noterete che


che listruzione: listruzione:

ldi x,test02.d ldi x,test03.d

sar diventata: sar diventata:

ldi x,4Ah ldi x,5Ah


Quando verr lanciato il programma assemblato li- ma, se ricordate (vedi fig.7), in Data Rom Window
struzione soprariportata caricher nel registro x il risulta caricata soltanto:
valore 5Ah.
ATTENDERE FASEDI
Se guardate in fig.7 potrete constatare che in Da-
ta Rom Window lindirizzo 5Ah corrisponde in ef- perch le stringhe dichiarate sono pi lunghe di 64
fetti al primo byte della stringa ATTIVAZIONE bytes, infatti in totale abbiamo 72 bytes.
BOX.
A questo punto andr solo inserita una routine ci- Poich la prima stringa labbiamo definita per er-
clica che provveder a portare i 16 caratteri del te- rore allindirizzo C04h anzich C00h, osservando
sto ATTIVAZIONE BOX sul display. la fig.9 potrete capire perch si perde lultima pa-
rola:
Lo stesso dicasi per la scritta:
SPEGNIMENTO
BOX OK
A questo punto per visualizzare la scritta comple-
per visualizzare la quale occorre solo digitare: ta verrebbe logico pensare che risulti sufficiente ri-
caricare la frase completa:
ldi x,test04.d
-ATTENDERE FASE-
A questo punto il programma per terminare deve -DI SPEGNIMENTO-
visualizzare sulle 2 righe del display:
in Data Rom Window con listruzione:
ATTENDERE FASE
DI SPEGNIMENTO ldi drw,test05.w

C00h C04h TEST01 C00h C04h TEST01


I N I Z I N I Z
I O I N I Z I A I O I N I Z I A
TEST02 L I Z Z A Z I O TEST02 L I Z Z A Z I O
N E A T T I V A TEST04 N E A T T I V A TEST04
TEST03 Z I O N E B O TEST03 Z I O N E B O
X O K A T T X O K
E N D E R E F TEST05 .block 64
C2Ch
A S E D I

C40h C40h TEST05


S P E G N I M E A T T E N D E
N T O R E F A S E
D I S P E G
N I M E N T O

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:

ldi x,test05.d ldi drw,test05.w


e successivamente visualizzarla con una routine
sul nostro display. lindirizzo di Program Space delletichetta test05
viene diviso per 64. Il risultato di questa divisione
Se eseguirete queste due operazioni commettere- viene poi memorizzato nel Data Window Register
ste il pi grossolano degli errori. (drw) perdendo leventuale resto.

C00h C00h .block 64

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

C40h TEST04 C40h TEST01 TEST02


N E B O X O I N I Z I O I N
K I Z I A L I Z Z TEST03
.block 64 A Z I O N E A T
TEST04 T I V A Z I O N
E B O X O K

.block 64

C80h TEST05 C80h TEST05


A T T E N D E A T T E N D E
R E F A S E R E F A S E
D I S P E G D I S P E G
N I M E N T O N I M E N T O

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

ldi drw,test05.w caricher in Data Rom Window il testo completo:

caricher in Data Rom Window, 64 bytes di dati ATTENDERE FASE


definiti in Program Space, a partire dallindirizzo DI SPEGNIMENTO
C00h; pertanto ci ritroveremo sempre nella condi-
zione di fig.7, cio con la frase incompleta.
Per poterla caricare in un registro dovremo sem-
plicemente scrivere:
Per ovviare a questo inconveniente dovremo inse-
rire la direttiva:
ldi x,test05.d
.block 64 - $%64
Per poter trasferire questa frase sul display dovre-
come qui sotto riportato: mo utilizzare una routine ciclica.

.block 64 - $%64 Con la soluzione soprariportata non pensate di a-


test05 .ascii ATTENDERE FASE ver risolto il problema, purtroppo ancora presen-
.ascii DI SPEGNIMENTO te un errore.

quindi avremo: Come potete vedere in fig.10 la stringa test01 non


inizia dalla locazione C00h e per questo motivo la
test01 .ascii INIZIO stringa test04 termina alla locazione C2Ch.
test02 .ascii INIZIALIZZAZIONE Avendo inserito in questo punto .block 64 - $%64
test03 .ascii ATTIVAZIONE obbligheremo test05 ad iniziare dalla locazione
test04 .ascii BOX OK C40H.
.block 64 - $%64
test05 .ascii ATTENDERE FASE Se eseguendo dei test ci trovassimo costretti a in-
.ascii DI SPEGNIMENTO serire o togliere nel programma delle istruzioni,
ovvio che lindirizzo di Program Space delle no-
Nella rivista N.189 abbiamo spiegato la funzione stre stringhe verrebbe automaticamente variato e
completa di .block 64 - $%64. potremmo cos correre il rischio di non caricare in
Data Rom Window tutto il nostro testo.
Dal punto in cui viene definito .block 64 - $%64 il
Compilatore calcola quanti bytes deve lasciare li- Ammettiamo che in fase di controllo abbiamo do-
beri per posizionare linizio della stringa test05 sul vuto inserire delle nuove istruzioni allinterno del
primo byte del blocco successivo di 64 bytes co- programma e che, in questo modo, test01 passi da
me possibile vedere in fig.10. C04h allindirizzo C21h (vedi fig.11).
Se ora caricassimo in Data Rom Window la strin- Non dovremo perci pi preoccuparci se durante il
ga test01 perderemmo le ultime lettere: test del programma aggiungiamo o togliamo i-
struzioni dal programma, perch automaticamente
NE -BOX -OK .block 64-$%64 provveder a calcolare larea ne-
cessaria per allineare le definizioni di dati al bloc-
perch fuoriescono dallarea 64 bytes di Data Rom
co ottimale (divisibile per 64) di Program Space
Window.
come visibile in fig.12.
Non avremo invece nessun problema per test05
perch ce lo ritroveremo nella successiva area di
memoria C80h (vedi fig.11). Come visibile in fig.12 la stringa di test01 partir
sempre dal primo byte di memoria del secondo
Per evitare questo errore sufficiente inserire blocco da 64, che nel nostro esempio C40h.
.block 64 - $%64 prima della stringa test01 come
qui sottoriportato:
Il successivo blocco di test05 inizier dalla loca-
.block 64 - $%64 zione di memoria C80h.
test01 .ascii INIZIO
test02 .ascii INIZIALIZZAZIONE
test03 .ascii ATTIVAZIONE Dopo questa spiegazione molti, per evitare di in-
test04 .ascii BOX OK correre in uno degli errori sopracitati, abuseranno
.block 64 - $%64 di questo .block 64 - $%64, ma in questo modo
test05 .ascii -ATTENDERE FASE- potrebbero sprecare inutilmente molti blocchi di 64
.ascii -DI SPEGNIMENTO- bytes di Program Space.

C40h necat01 C40h .block 64


I M P O S T A R
E I P A R A
M E T R I D I
C O N F I G U
R A Z I O N E
E P R O S E G
U I R E C O N
I L T E S T

C80h C80h necat01


I M P O S T A R
E I P A R A
M E T R I D I
C O N F I G U
R A Z I O N E
E P R O S E G
U I R E C O N
I L T E S T

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

U I R E C O N Per ovviare a questo inconveniente c una sem-


plice soluzione che non tutti conoscono, che utiliz-
I L T E S T za la direttiva:
CC0h .block 64 .ifc che significa Compila solo se...
Questa direttiva ci permette di compilare parti di
programma o di inserire moduli a scelta solo se
sono Vere (o False) le condizioni specificate.
Pertanto se nel programma, prima delle definizio-
ni di dati in Program Space inseriremo:
.ifc ne ($%64)
.block 64 - $%64
.endc
necat01 .ascii IMPOSTARE I PARA
.ascii METRI DI CONFIGU
D00h .ascii RAZIONE E PROSEG
D U R A N T E .ascii UIRE CON IL TEST
L A F A S E otterremo che .block 64 - $%64 sar Compilata in
D I T E S T assembler solo se non si trova in una locazione di
Program Space divisibile esattamente per 64.
N O N S O N O
Quindi con le tre istruzioni riportate prima della
E M E R S E A
stringa necat01, il Compilatore compila listruzione
N O M A L I E . .block64-$%64 solo se il risultato della Espres-
sione ($%64) non uguale a zero (ne).
F I N E D E L
L A P R O V A Facciamo presente che la direttiva .endc deve es-
sere sempre inserita come istruzione finale quan-
Fig.15 In questo esempio non stata usa- do si usa .ifc.
re la direttiva .ifc ne ($%64) e per questo
motivo il 1 e il 3 blocco sono vuoti. Nella rivista N.189 abbiamo spiegato cosa sono le
Espressioni e come procedere al loro svolgimento.
LE DIRETTIVE dellassembler ST6
Poich in nessun manuale spiegato in modo comprensibile come usare
correttamente le Direttive dellAssembler dellST6, cercheremo di risolvere
questo problema spiegandovi anche tutti quei piccoli segreti di cui pochi
sono al corrente. In questo articolo, tutto sulle direttive .ASCII .ASCIZ .DEF.

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.

/*-INIZIO-*\/*-Premi P1 > per uscire Se si utilizza .asciz, il compilatore Assembler de-


finisce nella Program Space la seguente stringa:
per un totale di 12 + 24 = 36 bytes
/*-INIZIO-*\(null)/*-Premi P1 > per uscire (null)
ed associa allindirizzo di Program Space del pri-
mo byte della stringa letichetta scritta1. e in questo caso non necessario realizzare una
routine che conti i caratteri, ma una diversa rou-
LA DIRETTIVA chiamata .ASCIZ tine che provveda ad inviare sul video tutti i carat-
teri della stringa precisando che si deve fermare
Anche questa direttiva viene utilizzata per definire quando incontra 00h = null.
in Program Space delle stringhe di caratteri alfa- In pratica questo 00h equivale ad un comando di
numerici ed associarvi eventuali etichette. stop lettura.

Con la direttiva .ASCIZ, il compilatore inserisce in


coda ad ogni singola stringa 1 byte contenente il LA DIRETTIVA chiamata .DEF
valore 00h che un carattere non editabile (null).
La direttiva .def viene utilizzata per definire delle
La lunghezza in bytes di questa stringa definita etichette associandole ad una cella di memoria di
dal numero di caratteri alfanumerici inseriti fra le Data Space il cui indirizzo, come gi saprete,
virgolette, addizionando a questi 1 byte. contenuto nelloperando indiriz.
Il formato logico della direttiva .def il seguente: golette in sostituzione di R-mask come indicato in
questo esempio:
[etich] .def indiriz,[R-mask],[W-ask],[value],[M]
pippo .def 08Dh,,10000000b
Nota = Gli operandi posti fra parentesi quadra so-
no opzionali e possono essere omessi, togliendo [value] = questo operando non risulta utilizzabile,
anche le parentesi quadre. Inserite tutte le virgole quindi listruzione che abbiamo riportato in prece-
come visibile nellesempio. denza, cio:

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

Di questa variabile risulta leggibile il solo 5 bit per-


ch settato a 1 (vi ricordiamo che i bit si leggono
da destra verso sinistra 7-6-5-4-3-2-1-0), mentre gli
altri non risultano leggibili perch settati a 0.

Perch tutti gli 8 bit risultino leggibili occorre o-


mettere R-mask e ci si ottiene scrivendo sempli-
cemente:
Fig.1 Poich nel programma TEST.ASM,
pippo .def 08Dh preso come esempio, in coda alle variabili
flag - resa - wdog risulta inserita una M, in
[W-mask] = utilizzando questo operando potremo fase di compilazione nel file TEST.DSD ap-
definire quali degli 8 bits della variabile possono ri- parir la lettera M ad indicare che in queste
sultare scrivibili (W sta per WRITE = scrivi). tre variabili presente un marker.

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.

Ammettiamo per esempio di voler testare in una


variabile i bits 1 - 4 - 6 con le istruzioni:

jrs 1,status,flag1
jrs 4,status,flag4
jrs 6,status,flag6

Se per errore scrivessimo come visibile in fig.4:

jrs 1,status,flag1
jrs 3,status,flag4 (errore)
jrs 6,status,flag6

quando il programma passer sulla seconda riga


dove presente lerrore, non salter mai sul flag4,
quindi non usando R-mask perderemmo tempo
Fig.2 In fase di simulazione potrete vedere prima di individuarlo.
sul vostro monitor tutte le variabili con-
trassegnate con il marker M, complete del Usando R-mask subito apparir sul video il nu-
loro contenuto. mero della riga dov presente lerrore (vedi ASM
Ogni tipo di simulatore far apparire sul mo- 58) con indicato il tipo di errore = 113 (vedi fig.5).
nitor una sua particolare videata.
Vi sono comunque delle precise regole che dovre-
mo osservare nel dichiarare R-mak e W-mask e
avessimo definito la variabile store come qui sot-
per farvelo meglio comprendere vi proponiamo al-
to riportato:
cuni esempi:
store .def 08Dh,11110111b
1) Esempio
avremmo definito leggibili tutti i bit tranne il bit 3,
storex .def 084h,10001000b,00001111b,M
perch avremmo messo uno 0 anzich 1, quindi il
prova jrs 0,storex,finepr
compilatore segnaler errore.
set 1,storex
finepr res 7,storex
Perch il compilatore non segnali nessun errore
dovremo rendere leggibile il bit 3 scrivendo:

store .def 08Dh,00001000b

Utilizzando R-mask e dichiarando leggibili i soli


bits che ci interessano di una variabile, sar lo
stesso compilatore a trovare lerrore che potrem-
mo aver commesso involontariamente, facendo ap-
parire sul video listruzione che ha tentato di leg-
gere il bit che non doveva leggere.

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

Fig.5 Poich abbiamo tentato


di compilare la riga 58 che
errata, il compilatore subito ce
lo segnaler indicandoci an-
che il tipo di errore = 113.

Fig.6 Nel 1 esempio solo la i-


struzione 72 corretta, men-
tre le due istruzioni 71-73 che
sono errate vengono subito
segnalate dal compilatore.

Con la prima istruzione: significa salta alletichetta finepr se il bit 0 di sto-


rex settato.
storex .def 084h,10001000b,00001111b,M Poich nel R-mask il bit 0 non leggibile, sul vi-
deo apparir un messaggio di errore.
il compilatore associa la variabile storex alla cel-
la di memoria 084h di Data Space e in pi defini- La successiva istruzione:
sce nell R-mask leggibili i soli bits 3-7.
Nuovamente facciamo presente che i bits si leg- set 1,storex
gono da destra verso sinistra 7-6-5-4-3-2-1-0.
che significa metti a 1 il bit 1 di storex, viene cor-
Poi definisce scrivibili nel W-mask i bits 0-1-2-3.
rettamente compilata perch il bit 1 definito in W-
mask scrivibile.
Inoltre nel file .DSD (generato in compilazione) al-
la variabile storex viene associato un marker. Lultima istruzione:

La successiva istruzione: finepr res 7,storex

prova jrs 0,storex,finepr significa metti a 0 il bit 7 di storex.


In questo caso il compilatore far apparire un mes- significa carica nella variabile storex il valore de-
saggio di errore (vedi fig.5) perch il bit 7 di sto- cimale 6.
rex definito nella W-mask non scrivibile es- Poich si sa che 6 equivale a 00000110b (vedi a
sendo presente 0. pag.381 del nostro volume Handbook), quando
questo numero viene caricato nella variabile sto-
In presenza di questi errori dovremo ricontrollare rex si riesce a modificare lo stato dei tre bits 0-1-
tutto il programma per scoprire se listruzione uti- 2 perch in W-mask li abbiamo configurati scrivi-
lizza un bit sbagliato oppure se sono sbagliati i bili, pertanto questa istruzione viene correttamen-
bits inseriti in R-mask o W-mask. te compilata.

2) Esempio (vedi fig.7) La quarta istruzione:

a .def 0FFh ldi storex,32


storex .def 084h,00000000b,00000111b
prova ldi storex,6 significa carica nella variabile storex il valore de-
ldi storex,32 cimale 32.
ldi a,32 Poich si sa che 32 equivale a 00100000b (vedi
ld storex,a sempre pag.381 del volume Handbook), quando
cp a,storex viene caricato nella variabile storex non riuscir a
modificare lo stato del quinto bit, perch questo in
Spiegazione: W-mask non stato configurato scrivibile.
Infatti su questo bit presente uno 0 e non un 1.
Con la prima definizione: In questo caso verr subito segnalato un errore di
a .def 0FFh compilazione (vedi ASM 75 in fig.8).
abbiamo definito laccumulatore a.
La quinta istruzione:

ldi a,32

significa carica nellaccumulatore a il valore 32.

Questa istruzione viene correttamente compilata


perch nellaccumulatore a non abbiamo definito
n R-mask n W-mask, comunque consigliamo di
non utilizzarle mai nellaccumulatore perch po-
trebbero bloccare qualche altra funzione.

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.

La successiva istruzione: Infatti per il compilatore sufficiente che risulti scri-


vibile anche uno solo degli 8 bits di W-mask di
prova ldi storex,6 storex per ritenere questa istruzione corretta, quin-
di quando si usa una istruzione con due variabili, Invece il compilatore non segnaler nessun erro-
nel nostro esempio storex e a, occorre sempre re in cp a,storex perch, non riuscendo a control-
confrontare il valore contenuto nellaccumulatore lare il contenuto nellaccumulatore a, sufficien-
a con i bits della W-mask della variabile storex te che un qualsiasi bits di storex riportato nel R-
durante la stesura del programma. mask risulti leggibile per considerare listruzione
valida.
La settima istruzione:

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:

In questo caso il compilatore dovrebbe segnalare storex .def 084h,0ffh,00001111b


un errore perch nel primo esempio abbiamo de-
finito leggibili i bits 7-6 e nel secondo esempio ab- significa, associa la variabile storex alla cella di
biamo definito leggibili i bits 1-0, mentre nel nu- memoria 084h di Data Space e poich abbiamo
mero 32 dovrebbe risultare leggibile il solo bit 5. reso leggibili tutti i bits di R-mask con 0ffh, il com-

Fig.8 Nel 2 esempio solo le i-


struzioni 73-74-76-77 sono
corrette, mentre le 75-78 risul-
tando errate verrano subito
segnalate dal compilatore.
pilatore non effettuer nessun controllo di lettura, Nel nostro esempio alletichetta valfix viene asso-
mentre effettuer un controllo nella W-mask per- ciato il valore 086h (storex+2).
ch abbiamo definito scrivibili i soli bits 0-1-2 3.
Le tre successive istruzioni:
La seconda istruzione:
inizio cp a,storex
campo .def storex+1, 0ffh,00010000b cp a,campo
cp a,verfin
associa la variabile campo alla cella di memoria
085h (ormai dovreste essere esperti nel decodifi- confrontano il valore contenuto nellaccumulatore a
care lespressione storex + 1) di Data Space.
con i valori contenuti rispettivamente in storex,
Tutti gli 8 bits della variabile R-mask sono leggi-
campo e verfin.
bili mentre nella W-mask scrivibile solo il bit 4.
In fase si compilazione non viene segnalato nes-
sun errore, perch tutte e tre le variabili sono sta-
te dichiarate leggibili in R-mask.

La successiva istruzione:

clr campo

che significa azzera il valore della variabile cam-


po, viene normalmente compilata senza problemi
e senza generare degli errori.

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-

per MICRO ST62/60-65


Sulla rivista N.172/173 vi abbiamo presentato un programmatore per i
micro della famiglia ST62T10-T15-T20-T25 e ST62E15-E20-E25. Poich
da tempo uscita la nuova famiglia ST62T60-T65 e ST62E60-E65, in mol-
ti ci hanno richiesto un programmatore dalle prestazioni simili a quello
gi progettato, ma che programmi questi nuovi micro.

Tabella N.1

Micro tipo OTP ( NON CANCELLABILI )

sigla memoria memoria memoria piedini numero numero numero


micro program. RAM EEPROM zoccolo Porte A Porte B Porte C
ST62T60 4K 128 bytes 128 bytes 20 4 6 3
ST62T65 4K 128 bytes 128 bytes 28 8 8 5

Micro tipo EPROM ( CANCELLABILI con lampade ULTRAVIOLETTE )

sigla memoria memoria memoria piedini numero numero numero


micro program. RAM EEPROM zoccolo Porte A Porte B Porte C
ST62E60 4K 128 bytes 128 bytes 20 4 6 3
ST62E65 4K 128 bytes 128 bytes 28 8 8 5

In questa tabella sono riportate le caratteristiche pi interessanti dei micro ST62.


mazione e il linguaggio assembler rimangono gli neggerete i micro se per errore li inserirete negli
stessi che abbiamo iniziato a spiegare per gli zoccoli textool in senso errato.
ST62T10 ecc., chi ha seguito i nostri precedenti ar-
ticoli (abbiamo iniziato dalla rivista N.172) non in- Fino a quando il computer non invia al program-
contrer nessuna difficolt ad usarlo. matore il comando di scrittura o lettura, sul piedi-
no 2 (D0) del CONN.1 troviamo un livello logico
Per questo motivo vi spiegheremo come dovete 1 che viene invertito da IC1/A. Poich luscita di
procedere per le sole funzioni supplementari, cio questo trigger collegata al transistor NPN siglato
Seriale, PWM ed EEprom. Se sar il caso in un TR2, sulla sua Base viene applicato un livello lo-
prossimo futuro vi prepareremo anche un valido gico 0.
software simulatore. Con questo livello logico il transistor TR2 non con-
duce e quindi non riesce a polarizzare la Base del
transistor PNP siglato TR1. La tensione positiva dei
20 volt applicata sul suo Emettitore non pu dun-
SCHEMA ELETTRICO
que fuoriuscire dal suo Collettore e, di conseguen-
za, non raggiunge i due integrati stabilizzatori IC3
Per quel che concerne lo schema elettrico raffigu-
ed IC4 che a loro volta non possono inviare al mi-
rato in fig.2, vogliamo subito precisare che il
cro, inserito in uno dei due zoccoli textool, nes-
CONN.1, visibile sul lato sinistro, un connettore
suna tensione di alimentazione.
maschio a 25 poli, che deve essere collegato tra-
mite un cavo parallelo alla porta parallela LPT1
Solo quando abilitiamo il computer a leggere o scri-
del vostro computer.
vere sul micro, sul piedino 2 (D0) del CONN.1 tro-
Se acquistate i cavi paralleli in un supermercato
viamo un livello logico 0, che porta in conduzio-
accertatevi che i piedini 1 - 2 - 3 - 4 ecc. del ma-
ne il transistor TR2. Automaticamente questo prov-
schio risultino collegati sui piedini 1 - 2 - 3 - 4 ecc.
vede a polarizzare la Base del transistor TR1 e co-
del connettore femmina, perch piuttosto facile
s la tensione positiva dei 20 volt applicata sul suo
trovare cavi paralleli con le connessioni invertite.
Emettitore fuoriesce dal suo Collettore e raggiun-
ge i due integrati stabilizzatori IC3 ed IC4 che su-
Come qualsiasi altro programmatore, anche il no-
bito provvedono ad alimentare il micro inserito in
stro legge i dati contenuti nel micro e logicamente
uno dei due zoccoli textool.
li scrive al suo interno prelevandoli dal computer.
Per programmare i micro ST62/60-65 necessa-
rio un nuovo Software chiamato ST626xPG che Lintegrato stabilizzatore IC3 viene utilizzato per
totalmente diverso da quello che fino ad oggi ave- fornire una tensione di 5 volt stabilizzata sul pie-
te usato per i micro ST62/10-15-20-25. dino Vcc e, tramite il diodo schottky siglato DS5,
Poich non tutti riusciranno a procurarsi questo una tensione di poco inferiore sul piedino Vpp.
nuovo software, abbiamo ritenuto opportuno for-
nirvi assieme al kit anche il dischetto software. Prima di procedere alla programmazione del micro
il computer testa tramite i comandi Blanck Check
Come potete notare dalla fig.2, in questo pro- e Read se il micro non risulti gi programmato op-
grammatore abbiamo inserito due zoccoli textool, pure se non sia vergine o difettoso e, se tutto ci
uno da 28 piedini ed uno da 20, per il semplice non bastasse, verifica che tutti i piedini siano inse-
motivo che i piedini di programmazione Vcc - Vpp riti nello zoccolo ed anche che sia stato scelto il mi-
- OSC.IN. - RESET - GND - PB2 - PB3 non fanno cro giusto per il programma che si vuole memoriz-
sempre capo agli stessi piedini nei due zoccoli. zare.

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

ELENCO COMPONENTI LX.1325

R1 = 4,7 ohm R14 = 1.000 ohm DS3 = diodo tipo 1N.4150


R2 = 4.700 ohm R15 = 10 ohm DS4 = diodo tipo 1N.4150
R3 = 10.000 ohm C1 = 100.000 pF poliestere DS5 = diodo schottky BAR.10
R4 = 1.000 ohm C2 = 100.000 pF poliestere DZ1 = zener 8,2 volt 1/2 watt
R5 = 10.000 ohm C3 = 22 mF elettrolitico TR1 = PNP tipo BD.140
R6 = 560 ohm C4 = 100.000 pF poliestere TR2 = NPN tipo BC.547
R7 = 4.700 ohm C5 = 100.000 pF poliestere TR3 = PNP tipo BC.328
R8 = 10.000 ohm C6 = 100.000 pF poliestere TR4 = NPN tipo BC.547
R9 = 1.000 ohm C7 = 100.000 pF poliestere IC1 = C/Mos tipo 74HC14
R10 = 10.000 ohm C8 = 100.000 pF poliestere IC2 = uA.78L05
R11 = 1.000 ohm C9 = 100.000 pF poliestere IC3 = uA.78L05
R12 = 1.000 ohm DS1 = diodo tipo 1N.4007 IC4 = uA.78L05
R13 = 10.000 ohm DS2 = diodo tipo 1N.4150 CONN.1 = connettore 25 poli
ELENCO COMPONENTI LX.1170/B

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.

ne posto in conduzione dal transistor NPN siglato


TR4, pilotato dallinverter IC1/B collegato sul pie-
dino 3 (D1) del CONN.1.

Dopo aver testato il micro, se tutto risulta regola-


re inizia la fase di programmazione ed il pro-
gramma da noi scritto ed assemblato viene trasfe-
rito dal computer verso il microprocessore inserito
nello zoccolo textool.

Durante la fase di programmazione il computer in-


via sul piedino 3 (D1) del CONN.1 un livello logi-
co 0 che, raggiungendo lingresso dellinverter
IC1/B, viene convertito in un livello logico 1.
Poich luscita di IC1/B risulta collegata sulla Ba-
se di TR4, questo transistor si porta in conduzione Fig.4 Foto del circuito di alimentazione.
polarizzando la Base del transistor PNP siglato
TR3. In questo modo la tensione positiva di 13,2
volt applicata sul suo Emettitore pu fuoriuscire dal
suo Collettore raggiungendo il piedino 3 (Vpp) del
micro. +V 13 12 11 10 9 8

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.

Vcc GND TEST/Vpp

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

R10 TR4 TR2 TR3


R7 R6 DS5

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.

Il programmatore andr collegato alla por-


ta parallela LPT1 del computer e non sulla
porta siglata LPT2 (leggere articolo).

Lo stadio di alimentazione siglato


LX.1170/B, visibile in alto a destra, stato
presentato sulla rivista N.172/173 per ali-
mentare il primo programmatore LX.1170.
che i due soli condensatori C6 - C9 devono esse- Ora potete montare il kit LX.1170/B stagnando sul
re inseriti sul lato opposto del circuito stampato, co- suo circuito stampato tutti i suoi componenti.
me risulta ben evidenziato anche in fig.9.
Quando inserite il condensatore elettrolitico C3 ri- Guardando leloquente schema pratico di fig.10 ri-
volgete il suo terminale positivo verso il basso. teniamo che nessuno incontrer difficolt ad ese-
guire questo semplice montaggio.
A questo punto potete inserire il transistor TR1, si-
glato BD.140, rivolgendo il lato del corpo con il me-
tallo verso la resistenza R1. MONTAGGIO nel MOBILE
Ora prendete i minuscoli integrati stabilizzatori IC2
- IC3 - IC4, sul loro corpo c la sigla 78L05, ed in- Il mobile di questo programmatore, di tipo a con-
seriteli nelle posizioni visibili nello schema pratico solle e perfettamente identico a quello del prece-
di fig.10, rivolgendo la parte piatta del loro corpo dente programmatore per ST6 (vedi fig.14), confe-
verso destra. risce al progetto un aspetto decisamente profes-
I transistor TR2 - TR4, siglati BC.547, vanno sta- sionale.
gnati sotto la resistenza R3, rivolgendo la parte Come potete vedere in fig.11, lo stadio di alimen-
piatta delluno verso la parte piatta dellaltro. tazione LX.1170/B va collocato sulla base del se-
Il transistor TR3, siglato BC.328, va inserito ac- micoperchio con tre distanziatori con base autoa-
canto al diodo zener DZ1 rivolgendo la parte piat- desiva, mentre lo stampato LX.1325 va fissato sul
ta del suo corpo verso destra. pannello frontale con quattro viti in ferro.
Fate attenzione a non confondere i transistor TR2 Prima di avvitare questo stampato vi consigliamo
- TR4 che sono degli NPN con il transistor TR3 che di inserire sul piccolo pannello inclinato la gemma
invece un PNP. cromata per il diodo led e linterruttore a levetta
Completato il montaggio, potete inserire nel suo S1 dello stadio di alimentazione.
zoccolo lintegrato IC1 rivolgendo la sua tacca di ri- Effettuati i pochi collegamenti richiesti, il program-
ferimento a forma di U verso destra. matore gi pronto per esplicare la sua funzione.

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.

COME caricare il PROGRAMMA Nota importante: per caricare il programma usa-


te le due sole istruzioni sopra riportate, perch so-
Assieme al kit riceverete un dischetto floppy con- lo cos il programma verr scompattato ed auto-
tenente il programma per programmare tutti i mi- maticamente verr creata una directory chiamata
croprocessori della famiglia ST62/60-65, pi sei ST626 per poterla distinguere da quella del prece-
supplementari programmi che vi aiuteranno a ca- dente programma che avevamo chiamata ST6.
pire come usare le funzioni PWM ed EEprom. Per copiare il contenuto del dischetto non usate n
Per caricare il dischetto nellHard-Disk seguite le il Copy del Dos o altri programmi come il PCshell
nostre istruzioni. - PCtools - Norton ecc., perch non riuscireste a
memorizzarlo nel vostro hard-disk.
Inserite il dischetto nellunit floppy poi digitate:
Durante la scompattazione del programma appa-
C:\>A: premete Enter rir sul monitor lelenco di tutti i files e ad opera-
A:\>installa premete Enter zione conclusa leggerete la scritta visibile in fig.13.

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.

PER RICHIAMARE il PROGRAMMA

Per richiamare questo programma dovete sempli-


cemente digitare queste due sole istruzioni:

C:\>CD ST626 premete Enter


C:\ST626>ST6 premete Enter

I 6 PROGRAMMI di TEST

Prima di trasferire allinterno della memoria vergi-


ne di un micro ST62/60 o ST62/65 uno dei sei pro-
grammi di test che abbiamo inserito nel dischetto,
dovete collocare il micro nel suo zoccolo textool
Fig.13 Una volta scompattati tutti i pro- poi bloccarlo con la sua levetta.
grammi inseriti nel disco floppy, apparir Dopo aver richiamato il programma digitando:
sul monitor questa scritta. Per proseguire
potete pigiare un tasto qualsiasi. C:\>CD ST626 premete Enter
C:\ST626>ST6 premete Enter
Fig.14 Se avete gi costruito il precedente programmatore per gli ST6, siglato LX.1170 (ve-
di rivista N.172/173), mettetelo a confronto con il modello LX.1325 da utilizzare solo per
gli ST62/60-65 e noterete che hanno la stessa estetica. Questi mobili non sfigureranno an-
che se messi vicino ai pi moderni ed eleganti computer.

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.

NOTE IMPORTANTI COSTO di REALIZZAZIONE

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.

funzioni PWM e EEPROM

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.

ELENCO COMPONENTI LX.1329

R1 = 2,2 megaohm C6 = 100.000 pF poliestere VCC 13 12 11 10 9 8


R2 = 1.000 ohm C7 = 100 mF elettrolitico
R3 = 100.000 ohm XTAL = quarzo 8 MHz
C1 = 100.000 pF poliestere DS1 = diodo tipo 1N.4007
C2 = 100.000 pF poliestere DS2 = diodo tipo 1N.4007
C3 = 10 pF ceramico IC1 = C/Mos tipo 74HC00 1 2 3 4 5 6 GND

C4 = 10 pF ceramico CONN.1 = connettore 24 poli


C5 = 1 mF elettrolitico P1 = pulsante 74 HC 00
Fig.3 Foto del Bus che ci
servir per ricevere le
schede LX.1204 - LX.1206
- LX.1329/B per i test.

Fig.4 In basso lo schema


pratico di montaggio del
Bus siglato LX.1329.

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

Inserite un micro ST62E60, cio del tipo cancella-


bile, nello zoccolo del programmatore LX.1325.

Dopo aver richiamato il programma, premete il ta-


sto F3 in modo da far apparire i nomi dei files e
portate il cursore sulla riga:

EEPROM60.ASM premete Enter

Appariranno cos le istruzioni del programma con i


relativi commenti (vedi fig.7).
A questo punto tenendo pigiato il tasto ALT pigia- Fig.5 Per trasferire un programma dal com-
te il tasto T per visualizzare la finestra di fig.8. puter ad un micro dovete usare il program-
matore LX.1325. Dopo aver richiamato il
Premete il tasto R e subito apparir la finestra di
programma, quando appare questa finestra
programmazione con una infinit di sigle di micro-
premete il tasto F3.
processori (vedi fig.9).

ST62E60
ST62E60B
ST62T60
ST62T60B
ST62E65
ST62E65B
ST62T65
ST65T65B

Importante: nessuno si mai preso la briga di pre-


cisare se conviene scegliere il micro senza la B fi-
nale oppure quello con la B finale, per cui ora vi
spiegheremo come sceglierli.

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.

Se sul corpo del vostro micro stampigliato la si-


gla ST62T60/B dovete selezionare ST62T60.

Se sul corpo del vostro micro stampigliata la si-


gla ST62T60/BB dovete selezionare ST62T65B.

Quanto detto sopra vale anche per gli ST62/65.

Poich il primo programma-test funziona su un mi-


cro cancellabile ST62E60, prima di scegliere la ri-
ga di programmazione controllate attentamente
quale sigla presente sul vostro micro.
Fig.7 Scelto il programma che volete me-
Se trovate ST62E60/B selezionate ST62E60. morizzare, sul video appariranno tutte le i-
Se trovate ST62E60/BB selezionate ST62E60B. struzioni con il relativo commento.
Leggendo queste istruzioni potete impara-
A questo punto pigiate L = Load e nella finestra re come va impostato un programma.
che appare (vedi fig.10) scrivete il nome del pro-
gramma, cio EEPROM60 tralasciando .ASM,
quindi premete Enter e quando appare la finestra
con la scritta File checksum premete Enter.

Apparir cos una finestra bianca. Se ora premete


il tasto P = Prg e di seguito il tasto N, dopo pochi
secondi apparir la scritta:

Verifying the target chip ... Please Wait


Verifica chip da programmare ... attendi
Fig.8 Pigiando ALT e T vedrete apparire sul-
lo schermo questa piccola finestra.
Se tutto risulta regolare apparir la scritta:

Programming the targhet chip ... Please Wait


Programmazione in corso ... attendi

Loperazione di scrittura dal computer verso il mi-


cro richiede circa 10 - 14 secondi.

A programmazione completata sul monitor appare


questa scritta:

The device is succesfully programmed


Il micro stato correttamente programmato

Ora potete estrarre dal programmatore il micro gi


programmato per posizionarlo nello zoccolo della Fig.9 Premendo R vedrete apparire tutte le
scheda Bus LX.1329, a cui avrete collegato la sigle dei micro che potete programmare.
scheda con i quattro display siglata LX.1204, pub-
blicata sulla rivista N.179.

Sulla morsettiera del Bus dovete applicare due ten-


sioni di 12,6 e 5,6 volt pi il filo di massa, che pre-
levate dal kit LX.1203.

Il programma EEprom che avete memorizzato nel


micro un timer con 4 diversi cicli che contano
allindietro.

Se sul Bus risultasse collegata in parallelo alla


Fig.10 Scelto il micro pigiate L e digitate il
scheda LX.1204 anche la scheda del rel siglata
nome del programma da trasferire.
LX.1205, pure questa pubblicata sulla rivista
N.179, con il primo ciclo vedreste apparire 00:20 e
contemporaneamente eccitarsi il rel RL1, che si
disecciter quando il conteggio arriver a 00:00.

Con il secondo ciclo apparir sui display 01:30, e


se fosse presente la scheda LX.1205 vedremmo
eccitarsi il RL2, che si disecciter quando il con-
teggio arriver a 00:00.

Il terzo ciclo partir dal numero 00:47 ed il quarto


ciclo dal numero 03:00.

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:

1 ciclo = righe 626-627


2 ciclo = righe 635-636
3 ciclo = righe 643-644
4 ciclo = righe 651-652

Portiamo qualche esempio.


Se volete che il 1 ciclo abbia una durata di 2 mi-
nuti e 30 secondi dovete inserire nel riga 626 i se-
condi e nella 627 i minuti:
Fig.13 Quando appare questa finestra pi-
ldi stsex,30 ; 626 tempo in secondi giate Barra e Enter per andare su EEprom.
ldi stmix,2 ; 627 tempo in minuti
set 6,port_b ; setta luscita 6 di port B a 1

La riga 628 serve per portare a livello logico 1 il


piedino 6 della porta B, cos da poterlo utilizzare
per eccitare un rel oppure dei Triac tramite un cir-
cuito pilota.

Dopo 2 minuti e 30 secondi, il nuovo tempo da


voi impostato, il programma passa al 2 ciclo che
porta a livello logico 0 il piedino 6 (riga 637) e a
livello logico 1 il piedino 7 (riga 638).

Se volete modificare i tempi del 2 ciclo per por-


tarlo ad esempio a 45 secondi, dovete modificare Fig.14 Portate il cursore sulla finestra in al-
la riga 635 inserendo questo numero e scrivere nel- to con scritto READ poi pigiate Y.
la riga 636 0 minuti:

ldi stsex,45 ; 635 tempo in secondi


ldi stmix,0 ; 636 tempo in minuti
res 6,port_b ; resetta luscita 6 di port B a 0
set 7,port_b ; setta luscita 7 di port B a 1

Se nel 1 ciclo voleste portare il piedino 6 a livel-


lo logico 0 per la durata di 2 minuti e 30 secondi
modificate il programma come qui sotto riportato:

ldi stsex,30 ; 290 tempo in secondi


ldi stmix,2 ; 291 tempo in minuti
res 6,port_b ; resetta luscita 6 di port B a 0 Fig.15 Quando apparir questa finestra pi-
giate 2 volte di seguito il tasto Enter.
Per portare a livello logico 1 il piedino 6 della por-
ta B nel 2 ciclo, modificate il programma cos:

ldi stsex,45 ; 296 tempo in secondi


ldi stmix,0 ; 297 tempo in minuti
set 6,port_b ; setta luscita 6 di port B a 1

I PULSANTI P1 - P2

I pulsanti P1 - P2 sulla scheda display permettono


di bloccare, far ripartire e resettare il conteggio.
Fig.16 Andate sulla scritta rAm poi pigiate
Premendo in successione P1 bloccate e fate ri- Enter e sullo schermo apparir il contenu-
partire il conteggio dal numero sul quale era stato to della EEprom. Notate nella prima riga i
fermato. Dopo aver bloccato il conteggio con P1, dati memorizzati nella EEprom.
premendo il tasto P2 il programma verr resetta-
to. In questo caso quando premerete P1 il con-
teggio ripartir sempre dal 1 ciclo.

TEST con EEPROM tipo ST62E65

Inserite un micro ST62E65 nello zoccolo del pro-


grammatore LX.1325 e, dopo aver richiamato il pro-
gramma, premete il tasto F3 in modo da far appa-
rire i nomi dei files.
Portate il cursore sulla riga:

EEPR65T.ASM premete Enter

In questo modo appaiono le istruzioni del pro-


gramma con i relativi commenti (vedi fig.11).
A questo punto tenendo pigiato il tasto ALT pigia-
te il tasto T ed apparir la finestra di fig.8. Fig.17 Se nella EEprom non memorizzato
Premete il tasto R e quasi subito apparir la fine- nessun dato, vedrete tutti 00 oppure tutti
stra di programmazione con tutte queste sigle. FF. Normalmente FF presente nei soli mi-
cro OTP non cancellabili.
ST62E60
ST62E60B
ST62T60
ST62T60B
ST62E65
ST62E65B
ST62T65
ST65T65B

Se sul corpo del vostro micro stampigliata la si-


gla ST62E65/B6 dovete selezionare ST62E65.

Se sul corpo del vostro micro stampigliata la si-


gla ST62E65/BB6 dovete selezionare ST62E65B.

Pigiate L = Load e nella finestra che appare (vedi


fig.12) digitate il nome del programma, cio EE-
PR65T tralasciando .ASM, quindi premete Enter e Fig.18 Per ripulire una EEprom andate sul-
quando appare la finestra con la scritta File check- la riga FILL e quando appare questa fine-
sum premete Enter. stra scrivete nella terza riga FF, poi andate
Apparir una finestra bianca e a questo punto po- sullultima riga e pigiate il tasto Y.
tete pigiare il tasto P = Prg poi pigiate il tasto N.
Fig.19 Inserendo nel bus la scheda
con display LX.1204 ed anche un mi-
cro ST62/60 programmato con il pro-
gramma Test EEPROM60, potete ve-
dere come un dato memorizzato nel-
la EEprom non si cancelli anche
quando si toglie la tensione di ali-
mentazione al Bus.

Fig.20 Inserendo nel bus la scheda


con Triac LX.1206 ed anche un mi-
cro ST62/65 programmato con il pro-
gramma Test EEPR65T, togliendo la
tensione di alimentazione e poi rein-
serendola il programma ripartir
sempre dalla lampada che risultava
accesa in precedenza.

Fig.21 Inserendo nel bus la scheda


LX.1329/B (vedi fig.28) potrete vede-
re come funziona il PWM.
Modificando le righe del programma
come spiegato nellarticolo riuscire-
te a fare un po di pratica che vi sar
molto utile per poter usare corretta-
mente la EEprom e il PWM.
Quando il micro risulter programmato sul monitor Se volete che il 1 ciclo abbia una durata di 5 se-
apparir la scritta: condi, modificate nel modo seguente le righe 626
- 627 del programma:
The device is succesfully programmed
Il micro stato correttamente programmato ldi stsex,5 ; 626 tempo in secondi
ldi stmix,0 ; 627 tempo in minuti
A questo punto potete estrarre dal programmato- set 6,port_b ; setta luscita 6 di port B a 1
re il micro gi programmato per inserirlo nella
scheda Bus LX.1329 alla quale dovete collegare la La riga 628 del programma serve per mantenere
scheda del kit LX.1206, pubblicata sulla rivista accesa la lampada per il tempo prefissato, dopo-
N.180, provvista di quattro Triac. dich il programma passa al 2 ciclo .

Per modificare i tempi di accensione dovete ap-


portare modifiche su ognuno dei 4 cicli. Per que-
Nel programma EEPR65T inserito un timer che
ste modifiche vi aiuteranno i commenti da noi ri-
provvede ad accendere e spegnere a ciclo conti-
portati per ogni riga di programma.
nuo le quattro lampade collegate ai Triac.
NOTE IMPORTANTI
Anche questo programma utilizza la memoria EE-
prom. Infatti se togliete la tensione di alimentazio-
La lampada ad ultravioletti riesce a cancellare il
ne al Bus quando una delle lampade accesa, a-
programma memorizzato nel micro, ma non can-
limentandolo nuovamente dopo 10 minuti oppure
cella il contenuto della memoria EEprom.
dopo 3 ore o anche dopo 1 mese, si riaccender
la lampada che risultava accesa al momento dello
Per controllare il contenuto di questa memoria e
spegnimento, perch questo dato stato memo-
cancellarla procedete come segue:
rizzato nella EEprom.
Inserite il micro nel programmatore.

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.

Fig.22 Dal piedino duscita del PWM non


0 esce una tensione continua variabile da
5 V. 0 a 5 volt, ma solo delle onde quadre con
un livello logico 0-1.
Modificando tramite programma il duty-
0
cycle di queste onde quadre, vale a di-
5 V. re il tempo che queste rimangono a li-
vello logico 0 e a livello logico 1, riusci-
0 rete ad ottenere una tensione efficace
5 V.
che da un minimo di 0 volt potete ele-
vare fino a un massimo di 5 volt.
0
Nella pagina che appare (vedi fig.10) andate sul-
la scritta Load e pigiate Enter. 0 255
R1 5 V.
5 V.
5 V.
Digitate il nome dal file utilizzato, ad esempio EE- 60
40 80

prom60, poi pigiate Enter. 20

10
0

0
0 C1

Andate sulla scritta Space, posizionata nella ri-


ga in alto, poi pigiate Enter.

Nella finestra di fig.13 andate sulla riga EEPROM


Fig.23 Se londa quadra generata dal PWM
pigiando il tasto della Barra ed Enter. rimane a livello logico 1 per i suoi totali 256
step, in uscita otterrete 5 volt.
Per vedere il contenuto della EEPROM andate
sulla scritta Read poi digitate Y (vedi fig.14) e nel-
la finestra che appare (vedi fig.15) pigiate Enter
due volte. 0 200 255
3,9 V.
R1
5 V.
3,9 V.
Andate sulla scritta rAm poi pigiate Enter. Ve-
drete cos sullo schermo il contenuto della EEprom 20
40 60
80

10
0

0
(vedi fig.16). 0 C1

Se la EEprom non programmata vedrete tutte


le celle su FF (vedi fig.17).

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.

Nella terza riga della finestra che appare (vedi


fig.18) scrivete FF, poi andate con il cursore sullul-
0 128 255
tima riga in basso, quindi pigiate Y per conferma- R1 2,5 V.
re la modifica. Automaticamente tutte le celle si ca- 5 V.
2,5 V.
richeranno con FF. 20
40 60
80

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.

Per uscire pigiate Escape poi X.


0 20 255
R1 0,39 V.
Tenete presente che le modifiche appena appor- 5 V.
0,39 V.
tate non vanno automaticamente a ripulire le EE-
prom, in cui rimarranno memorizzati i vecchi dati. 20
40 60
80
10

0
0

0 C1

Per memorizzare i dati cambiati nelle memorie EE-


prom dovete andare sulla scritta PROG, poi pigia-
re due volte Enter.

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

POWER POWER OHM

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.

ELENCO COMPONENTI LX.1329/B

Fig.27 Schema elettrico della scheda sigla- R1 = 10.000 ohm


ta LX.1329/B. Come potete vedere in figura R2 = 10.000 ohm
la tensione variabile da 0 a 5 volt presa su R3 = 22.000 ohm
B7 del CONN.1 si applica sulla Base del R4 = 4.700 ohm
transistor TR1 che provvede ad accendere C1 = 100.000 pF poliestere
dal suo minimo al suo massimo una lam- C2 = 100.000 pF poliestere
padina da 12 volt. Collegando un Tester sui C3 = 100.000 pF poliestere
terminali +/ potrete leggere la tensione for- TR1 = NPN darlington BDX.53C
nita dal PWM. P1 = pulsante
P2 = pulsante
LP1 = lampada 12 volt 3 watt

P1 TR1
C1

Fig.28 Schema pratico


B 9231 XL

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

Fig.29 Schema elettrico dello stadio di ali-


mentazione da usare per alimentare il Bus
LX.1329. Chi ha gi realizzato il Bus per il
precedente programmatore per ST6 potr
usare lalimentatore che gi possiede an-
che per questo Bus.

ELENCO COMPONENTI LX.1203

C1 = 2.200 mF elettr. 35 volt


C2 = 100.000 pF poliestere
C3 = 100.000 pF poliestere
C4 = 100 mF elettr. 35 volt
C5 = 2.200 mF elettr. 35 volt
C6 = 100.000 pF poliestere
C7 = 100.000 pF poliestere
C8 = 100 mF elettr. 35 volt
DS1 = diodo 1N.4007
DS2 = diodo 1N.4007
RS1 = ponte raddriz 100 V 1 A
RS2 = ponte raddriz 100 V 1 A
IC1 = uA.7812
IC2 = uA.7805
T1 = trasform. 25 watt (T025.01)
sec. 14 V 1A 8 V 1 A
S1 = interruttore

Fig. 30 Foto dello stadio di alimentazione


gi presentato sulla rivista N.179 perch u-
sato per alimentare il Bus LX.1202 per i nor-
mali micro ST6 senza EEprom e PWM.
Innanzitutto precisiamo che lEDIT da noi inserito vete sempre assemblarlo, quindi uscite dal pro-
allinterno del floppy DF.1325 assieme ai program- gramma pigiando ALT + F, poi ALT + X e cos ap-
mi di test molto limitato. Non accetta infatti pro- parir sul monitor:
grammi maggiori di 30 Kilobyte. Se andrete a sal-
vare dei programmi che occupano uno spazio mag- C:\ST626>
giore, tutto quello che eccede i 30 Kilobyte verr
inesorabilmente cancellato. Ora dovete digitare:

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

Fig.31 In questo disegno riportiamo lo


S1 A 7805
A 7812 schema pratico di montaggio nel caso qual-
che lettore non avesse a disposizione la ri-
vista N.179. I due integrati stabilizzatori an-
USCITA dranno fissati sopra unaletta di raffredda-
~
14V. E MU mento come visibile in fig.30.
Se al posto di questa scritta dovesse apparirne u- Ora salvate il file, quindi spegnete il computer e
na di errore, ad esempio: riaccendetelo. A questo punto non dovreste pi
incontrare nessun problema ad utilizzare il pro-
ERROR C:\ST626\pluto.ASM 151: gramma:

significa che nella riga 151 esiste un errore, quin- ST626xPG


di rientrate allinterno del vostro programma e cor-
reggete listruzione in tale riga. Con tutte queste spiegazioni ed esempi vogliamo
sperare di aver dissipato buona parte dei dubbi che
Per fare questa correzione dovete nuovamente ri- avevate sulle EEprom e sul PWM.
chiamare lEditor, andare sulla riga 151 e dopo a-
ver corretto listruzione dovete riassemblare il pro-
gramma procedendo come vi abbiamo appena
spiegato.

Poich in fase di compilazione abbiamo usato le


opzioni L S, verranno generati questi 4 files:

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

***SUCCESS*** Costo di un ST62E60 cancellabile ............ 20,66


Costo di un ST62T60 non cancellabile ..... 12,39
proseguite digitando:
Costo di un ST62E65 cancellabile ............ 18,08
C:\ST626>ST626xPG premete Enter Costo di un ST62T65 non cancellabile ..... 14,98

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.

LA DIRETTIVA chiamata .BYTE Space senza riempire inutilmente larea di Data


Space che di soli 60 bytes, che potr cos es-
La direttiva .byte viene utilizzata per definire in Pro- sere utilizzata per la dichiarazione delle Variabili
gram Space una successione di bytes contenenti del programma tramite la direttiva .def.
valori binari ai quali si possono associare eventuali
Etichette. Il formato logico della direttiva .byte il seguente:
Ogni tentativo di inserire questa direttiva nella Da-
ta Space dar un errore in Compilazione. [etichetta] .byte espress[,espress]
Come per le direttive .ascii e .asciz, i valori defi-
niti in Program Space non sono modificabili du- Nota: gli operandi posti fra parentesi quadre so-
rante il corso del programma. no opzionali quindi possono essere omessi.
Per utilizzare i valori definiti con la direttiva .byte
bisogna prima caricarli in Data Rom Window uti- [etichetta] = va inserito il nome delletichetta che
lizzando le stesse modalit e gli stessi accorgimenti vogliamo associare alla locazione di Program Spa-
gi spiegati nel capitolo riguardante la direttiva ce del 1 valore definito. Questo nome opziona-
.w_on (vedi rivista N.190). le quindi pu essere omesso.

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.

elisto .def 086h tabval1 .byte 10,15,18,23,45,78,109 = definisce


costan .set 025h in un indirizzo di memoria di Program Space una
step01 .equ 020h sequenza di 7 bytes contenenti i valori decimali
.block 64-$%64 sopra riportati ed associa al primo byte letichetta
tabval1 .byte 10,15,18,23,45,78,109 tabval1. Poich i numeri separati dalle virgole non
tabval2 .byte 010h,015h,018h,023h superano 255 il compilatore non segnaler errore.
tabval3 .byte 00100000b,01010111b
tabval4 .byte costan*2,elisto+10 tabval2 .byte 010h,015h,018h,023h = definisce
tabval5 .byte step01+18,step01+31 in un indirizzo di memoria di Program Space una
sequenza di 4 bytes contenenti i valori esadeci-
mali sopra riportati ed associa al primo byte leti-
chetta tabval2.
ISTRUZIONI SIMBOLICHE Poich i valori separati dalle virgole non supera-
no 0FFh (che equivale a 255 decimale) il compila-
tore non segnaler nessun errore.
DIRETTIVE ESEGUIBILI
tabval3 .byte 00100000b,01010111b = definisce
in un indirizzo di memoria di Program Space una
COMPILAZIONE COMPILAZIONE sequenza di 2 bytes contenenti i valori binari so-
pra riportati ed associa al primo byte letichetta tab-
val3. Poich i valori separati dalle virgole non su-
DEFINIZIONE OPCODE perano 11111111b (che equivale a 255 decimale)
e/o il compilatore non segnaler nessun errore.
ABILITAZIONE
DATI MICRO
VARIABILI tabval4 .byte costan*2,elisto+10 = definisce in
COSTANTI un indirizzo di memoria di Program Space una se-
GESTIONE MICRO ESECUZIONE quenza di 2 bytes contenenti il valore risultante dal-
le espressioni costan*2 ed elisto+10.
Poich costan stato definito 025h, moltiplican-
Fig.1 Semplificando possiamo definire le di- dolo per 2 otteniamo 04Ah.
rettive come disposizioni generali atte a fis- Infatti 025h corrisponde al numero decimale 37,
sare le caratteristiche di fondo che neces- che moltiplicato per 2 da 74, che corrisponde al nu-
sitano al programma. Ad esempio: defini- mero esadecimale 04Ah.
zione di dati, variabili, macro, costanti sim- Poich elisto stato definito 086h, che convertito
boliche, abilitazione dellarea di memoria in decimale corrisponde al valore decimale 134,
Data Rom Window, ecc. Perci, come le i- sommando a questo 10 otteniamo 144, che corri-
struzioni eseguibili, vengono compilate, ma sponde al numero esadecimale 090h.
non generano una opcode, cio un codice Poich entrambi i numeri non superano 255 deci-
operativo eseguibile.
male o 0FFh esadecimale il compilatore non se-
gnaler nessun errore.
tabval5 .byte step01+18,step01+31 = definisce decimale 2.579, quando il compilatore andr ad e-
in un indirizzo di memoria di Program Space una seguire lultima istruzione, cio:
sequenza di 2 bytes contenenti il valore risultante
dalle espressioni step01+18 e step01+31. tabval5 .byte step01+18,step01+31
Poich step01 stato definito 020h, che converti-
to in decimale corrisponde al valore decimale 32, segnaler subito questo errore:
sommando a questo 18 e 31 otteniamo:
Error on (8) bits Overflow
32 + 18 = 50 corrispondente a 032h
32 + 31 = 63 corrispondente a 03Fh Infatti la Costante Simbolica step01 che equivale
a 2.579 decimale supera gi il massimo consenti-
Una volta compilate, le tabelle si troveranno me- to di 255 decimale quindi non riesce a sommare
morizzate una di seguito allaltra in Program Spa- come richiesto step01+18,step01+31.
ce ed occuperanno un totale di 17 bytes:
Se lultima istruzione fosse una sottrazione:
7 bytes per tabval1
4 bytes per tabval2 tabval5 .byte step012360,step012500
2 bytes per tabval3
2 bytes per tabval4 il compilatore eseguirebbe correttamente questa i-
2 bytes per tabval5 struzione senza segnalare nessun errore, perch
il risultato delle sottrazioni non supera 255, infatti:
Per utilizzarle dovete procedere come gi spiega-
to nella Rivista N.190, al capitolo relativo alla di- 2.579 2.360 = 219 (0DBh)
rettiva .w_on. 2.579 2.500 = 79 (04Fh)

2 Esempio Poich durante la simulazione sul monitor appaio-


no sempre dei valori espressi in esadecimali, per
In questo esempio abbiamo inserito un errore che evitare errori vi consigliamo di consultare le Tabelle
verr segnalato in fase di Compilazione. riportate a pag.381 del nostro volume intitolato
Nuova Elettronica HANDBOOK.
elisto .def 086h
costan .set 025h
step01 .equ $+20 LA DIRETTIVA chiamata .EQU
.block 64-$%64
tabval1 .byte 10,15,18,23,45,78,109 La direttiva .equ viene utilizzata per associare un
tabval2 .byte 010h,015h,018h,023h valore numerico, che pu essere ricavato anche
tabval3 .byte 00100000b,01010111b dal risultato di una espressione, ad una Etichet-
tabval4 .byte costan*2,elisto+10 ta senza sprecare nessun byte di memoria del mi-
tabval5 .byte step01+18,step01+31 cro e questo la rende molto interessante.

La 3 riga dellesempio precedente era: Usando lEtichetta in sostituzione di valori anoni-


mi viene facilitata la lettura ed anche linterpreta-
step01 .equ 020h zione di un programma sorgente (.asm), persino a
distanza di mesi dalla sua compilazione.
In questo secondo esempio stata sostituita con: La direttiva .equ deve essere inserita sempre pri-
ma di quella istruzione o di quella routine che uti-
step01 .equ $+20 lizza lEtichetta.
Non possibile definire la stessa Etichetta pi di
Nel capitolo riguardante le espressioni abbiamo una volta, mentre possibile associare Etichette
detto che il Compilatore sostituisce al simbolo $ il diverse allo stesso valore.
valore del Program Counter Relativo. Ammesso
quindi che nella Compilazione la definizione: Il formato logico della direttiva .equ il seguente:

step01 .equ $+20 [etichetta] .equ [operando]

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.

scrivi .equ 014h 2 Esempio


rout00 ldi a,scrivi
call maiusc La direttiva .equ pu risultare molto utile quando si
rout01 ldi a,scrivi vogliano associare valori diversi partendo da un
call minusc numero fisso ed utilizzando i simboli matematici
rout02 ldi a,scrivi per fare una somma, una moltiplicazione o una
call corsivo sottrazione.

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.

LA DIRETTIVA chiamata .SET In rout06 viene caricato nellaccumulatore a il va-


lore associato alletichetta ritardo cio 40
Questa direttiva simile alla precedente con la so-
la differenza che con .set noi possiamo definire In rout07 viene caricato nellaccumulatore a il ri-
allinterno del programma pi Etichette con lo stes- sultato dellespressione ritardo+40 cio 80.
so nome, ma con associati valori diversi.
In qualche manuale sullST6 abbiamo riscontrato
Il formato logico della direttiva .set il seguente: un uso errato della direttiva .set dal quale voglia-
mo mettervi in guardia perch, non essendo se-
[etichetta] .set [operando] gnalato dal compilatore, potrebbe mettere in un ma-
re di guai un programmatore poco esperto.
[etichetta] = va inserito il nome della etichetta da as-
sociare al valore numerico definito nelloperando. Vi abbiamo pi volte avvisato sul fatto che il Com-
pilatore Assembler non esegue il programma, ma
[operando] = va inserito il valore numerico o il ri- lo traduce solamente in codice Intel.Hex, sosti-
sultato di una espressione da associare alleti- tuendo alle istruzioni le relative opcode e agli o-
chetta. Questo numero, che pu essere espresso perandi i relativi valori o gli indirizzi di memoria, e
in esadecimale, binario o decimale non deve mai controllando unicamente lintegrit di ogni singola
superare la capacit di 2 bytes, cio: istruzione.

FFFFh in esadecimale Per spiegarvi gli errori in cui si pu involontaria-


1111111111111111b in binario mente incappare riscriviamo il nostro precedente
65535 in decimale esempio secondo i consigli dati in alcuni manuali e
vi spieghiamo dove e perch sono scorretti.
1 Esempio
ritardo .set 150
call rout01
Per questo esempio abbiamo scelto due istruzioni
ritardo .set 40
.set con due diversi valori: 150 e 40.
call rout06
ritardo .set 150 rout01 ldi a,ritardo
rout01 ldi a,ritardo call ritardo1
call ritardo1 rout02 ldi a,ritardo+15
call ritardo2
rout02 ldi a,ritardo+15 ret
call ritardo2
rout06 ldi a,ritardo
seguono righe del programma, quindi: call ritardo6
rout07 ldi a,ritardo+40
ritardo .set 40 call ritardo7
rout06 ldi a,ritardo ret
call ritardo6
rout07 ldi a,ritardo+40 Le istruzioni relative rout01 e rout02 sono state
call ritardo7 raggruppate in un unica subroutine chiamata
rout01, mentre le istruzioni relative a rout06 e semplicemente alla istruzione successiva che nel
rout07 sono raggruppate nella subroutine chiama- nostro caso la direttiva:
ta rout06.
Abbiamo quindi posto sotto le due direttive asso- ritardo .set 40
ciate a ritardo le due rispettive call.
Da un punto di vista logico il programma sembra ed associa il valore 40 alletichetta ritardo.
corretto, in realt completamente sbagliato. Ne consegue che ritardo non vale pi 150 ma 40.

E qui sta lerrore. Infatti quando il Compilatore, pro-


Per capire il perch analizziamo ci che avviene
seguendo in sequenza, arriva alle istruzioni della
quando tentiamo di compilarlo.
subroutine rout01:
Quando il Compilatore incontra la direttiva: rout01 ldi a,ritardo
call ritardo1
ritardo .set 150 rout02 ldi a,ritardo+15
call ritardo2
la esegue ed associa il valore 150 alletichetta ri- ret
tardo, quindi passa alla successiva istruzione:
non utilizza il valore 150 come dovrebbe, ma con-
call rout01 sidera il valore 40 e, di conseguenza, carica nellac-
cumulatore a questo valore.
Controlla che sia stata scritta correttamente (non Poich a questo viene sommato 15, avremo 55
cals o catl o altro) e che loperando rout01 sia (40 + 15) anzich 165 (150 + 15).
unetichetta di Program Space esistente.
Se tutto risulta ok la compila. Quando in seguito arriver alle istruzioni relative a
rout06, le compiler in modo corretto perch
A questo punto per non salta alla subroutine nellaccumulatore a verr caricato il valore 40 e,
rout01 (come avviene in esecuzione), ma passa come richiesto, avremo 40 + 15 = 55.
OPZIONI del compilatore Assembler
Proseguiamo i nostri articoli esplicativi sul linguaggio di programma-
zione Assembler per i micro ST6 illustrando le Opzioni del compilatore.

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:

Poich ci che diremo verr successivamente ri- Pnn


preso ed approfondito, ci limitiamo ora a fornirvi u- Snn
na spiegazione molto condensata. Wnn

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

479 P00 02DB C92C P00 02DB 479 jp ciclo1 ; salta


480 480
481 481 ;=====================================
482 482 ;= DEFINIZIONE DI TABELLE IN PROGRAM S
483 483 ;=====================================
484 484
485 485 .block 64-$%64 ;452 ta
486 P00 0300 P00 0300 486 masc01 ;453 et
487 487 .ascii VOLT ;454 ca
488 P00 0306 7E P00 0306 488 .byte 01111110b ;
489 P00 0307 20 P00 0307 489 .byte 32,32,32 ;
490 P00 0308 20 P00 0308 489
491 P00 0309 20 P00 0309 489
492 P00 030A 7F P00 030A 490 .byte 01111111b ;
493 P00 030B P00 030B 491 masc02 ;455 et
494 492 .ascii max5V ;456 ca
495 493
496 494 .block 64-$%64 ;457 ta
497 P00 0340 P00 0340 495 cdgramd ;458 et
498 496 .input TB_CGR02.ASM ;459 DI

SOURCE FILE : TB_CGR02.ASM

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

significa che listruzione relativa allindirizzo 0034h


Snn La lettera S sta per Program Section, cio
si trova nella Pagina 0 di Program Space.
Sezione di area di Programma, ed nn il nume-
ro di sezione in cui si trova listruzione.
OPCODE = C92C
La sezione viene generata quando si compila in as-
sembler un programma rilocabile, vale a dire non
Il numero C92C la codifica esadecimale delli-
eseguibile, in formato .obj (vedi opzione O).
struzione jp ciclo1 dopo la compilazione del pro-
In questo caso il programma sorgente dovr con-
gramma tester.hex.
tenere la direttiva .section e opzionalmente la di-
rettiva .pp_on.
Sulla rivista N.185 trovate lelenco completo di tut-
Sono previste 33 sezioni di Program Space a par-
te le istruzioni dellassembler con le relative OP-
tire dalla sezione 0, pertanto inserendo nel pro-
CODE e semplici istruzioni per decodificarle.
gramma .section 1, poi .section 2 ecc. il compi-
latore suddivide larea di program space in 1 op-
ST2 = P00
pure 2 ecc. sezioni.
La 33 sezione, che corrisponde alla direttiva .sec-
tion 32, serve solo per inserire le istruzioni inerenti Come avrete notato, questo numero equivalente
alla gestione dei Vettori di Interrupt. a quanto riportato sotto la sigla STY, per cui ri-
Normalmente una sezione di Program space di mandiamo a quanto gi spiegato.
2 kbytes (2048 bytes) per i micro ST6210 -
ST6220 e di 4 kbytes (4096 bytes) per i micro SCO2 = 02DB
ST6215 - ST6225.
Per i micro da 4 Kbytes esiste la possibilit di sud- Questo numero equivalente a quanto riportato
dividere la Program space in due sezioni di 2 Kby- sotto la sigla SCOU ed anche in questo caso ri-
tes inserendo la direttiva .pp_on nel programma. mandiamo a quanto gi detto.

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.

Sotto la colonna SNU c il numero 479, che cor- OPZIONE X


risponde al numero di riga che ha listruzione nel
file tester.asm. Il compilatore genera un file con lo stesso nome
del programma sorgente, ma con estensione .X,
A questo proposito non inutile ricordare che nel- contenente lelenco di tutte le etichette e di tutte
la colonna List riportato il numero della riga del le variabili del programma e con lindicazione di
listato, cio del file con estensione .LIS, mentre sot- tutte le righe in cui queste vengono utilizzate.
to la colonna SNU il numero della riga che ha li-
struzione nel programma sorgente (.ASM). Ad esempio nel file tester.x possiamo trovare:

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

A proposito di questa direttiva importante rileva-


re innanzitutto che sotto la colonna NLEV c il nu-
mero 1, quindi questa istruzione non contenuta
nel programma principale TESTER.ASM, ma nel fi-
le TB_CGR02.ASM.

Inoltre sotto la colonna SNU troviamo il numero 5,


che ci dice che la direttiva .byte 0,0,0,0 posi-
zionata nella riga 5 del file TB_CGR02.ASM.

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

PG0_0 un area di Program Page 0 che contie- Analizziamo la prima riga:


ne 300h bytes di istruzioni in formato eseguibile
che corrispondono a 768 byte in decimali, serout : EQU 00966H P
PG0_1 un area di Program Page 0 che contie-
ne 08h bytes di istruzioni in formato eseguibile che La lettera P indica che serout un etichetta defi-
corrispondono a 8 byte in decimale, nita in Program Space ed il numero che si trova
PG0_2 un area di Program Page 0 che contie- dopo EQU, cio 00966H, il suo lindirizzo.
ne 04h bytes di istruzioni in formato eseguibile che
corrispondono a 4 byte in decimale. Nella seconda riga:

Sommando i numeri decimali abbiamo outstart: EQU 00090H 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).

OPZIONE O Se si compilato un programma rilocabile trami-


te lopzione O, si ottiene un file .obj e alle sue va-
Questa opzione serve per generare un programma riabili ed istruzioni viene assegnato un indirizzo
rilocabile non eseguibile in formato .OBJ. di memoria (indirizzamento relativo a questo .obj).
Usando questa opzione non vengono generati i fi- Unendo, tramite il Linker, uno o pi programmi ri-
le .hex, .dsd e .sym. locabili otteniamo un file eseguibile che pu es-

Fig.5 Il programma rilocabile sub_in.obj generato dallopzione O.

Fig.6 Lo stesso programma di fig.5 dopo lesecuzione Linker.


sere memorizzato nel micro, ma nellunione il Il valore dellopcode che prima del Linker era
Linker assegner ad ogni istruzione ed ad ogni A101h diventato 419Eh.
variabile un nuovo indirizzo di memoria. Infatti letichetta get_byte che prima del linker si
Come esempio in fig.5 riportiamo alcune istruzioni trovava allindirizzo relativo di Program Section
del listato del programma sub_in.asm compilato 014h, dopo il Linker stata memorizzata allindi-
con lopzione O. rizzo di Program Space 9E4h.

Come potete vedere alla riga 463 troviamo: OPZIONE E

S01 0000 0D8098 S01 0000 51 Se compilando il file TESTER.ASM digitiamo:

corrispondente allistruzione: ast6 E TESTER.ASM

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.

Come potete vedere, alla riga 463 troviamo ora: OPZIONE D

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.

Vi abbiamo dimostrato che unendo i due file con


estensione .obj vengono modificati gli indirizzi del-
le variabili e delle opcode.
Se volete unulteriore conferma, confrontate il va-
lore che si trova sotto la colonna OPCODE in cor-
rispondenza dellistruzione call get_byte di fig.5 Fig.7 Segnalazione a video del numero di errori.
con il rispettivo valore riportato in fig.6.
Ad esempio, scrivendo: Nel segnalare questo tipo di errore il compilatore
gli assegna un numero, 0, 1 o 2 seguito dal sim-
ast6 D09 TESTER.ASM bolo >, che rappresenta la tipologia dellerrore.
E comunque consigliabile andare a verificare, al-
la parte di Program Space non utilizzata viene meno la prima volta che si compila il programma,
riempita con il valore 09. anche questo tipo di errore, perch potrebbe com-
Allatto pratico questa opzione pu servire come promettere la corretta esecuzione del programma.
chiave di controllo. In fase di compilazione possibile comunicare al
Tenete presente che il numero riportato dopo la D compilatore quale tipologia di errore warning vo-
deve essere esadecimale, diversamente verr se- gliamo che sia segnalata.
gnalato errore. Ad esempio, per inserire il numero Ad esempio se scriviamo:
174 dobbiamo digitare DAE.
ast6 W1 TESTER.ASM
OPZIONE F
verranno segnalati solo gli errori di tipologia 0 ed
Inserendo questa opzione, se si verificano errori 1, ma non di tipologia 2.
nella compilazione, nel messaggio di errore viene Nella terza riga di fig.8 segnalato un errore tipo
visualizzato lintero Pathname del file contenente warning con lindicazione 1> e la spiegazione
il programma sorgente. dellerrore riscontrato.
Per inserire lopzione F basta digitare: Potendo differenziare tre diverse tipologie di erro-
re warning, possiamo compilare pi volte il pro-
ast6 F TESTER.ASM gramma sorgente dando ogni volta lopzione W
con un diverso numero.
Sapere il Pathname completo del programma che In questo modo potremo controllare prima tutti gli
ha dato errore utile nel caso esistano pi versio- errori W0, poi i W1 ed infine i W2.
ni dello stesso memorizzate in directory diverse o
su floppy come copie di sicurezza. CONCLUSIONE

OPZIONE W Lanciando la compilazione potete caricare pi op-


zioni in una volta, ma tenete presente che alcune
In fase di compilazione possono essere segnalati opzioni non sono compatibili tra loro.
dal compilatore due diversi tipi di errori:
Se usate lopzione O non dovrete usare la D,
WARNING oppure ERROR comunque se la inserite verr ignorata.

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.

Fig.8 Esempio di come vengono segnalati gli errori con le opzioni E e W.


Le memorie RAM-EEPROM
Continuiamo anche in questo numero le nostre lezioni teorico-pratiche
sulla programmazione dei micro ST6. Infatti, contrariamente a quanto
supponevamo, i nostri lettori, unitamente a molti Istituti professionali
e tecnici e a parecchie piccole e medie Industrie, li aspettano con im-
pazienza perch li trovano molto istruttivi e interessanti.

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

Timer Prescaler register psc 0D2h Miscellaneous mis 0DDh


Timer counter register tcr 0D3h
Timer status control register tscr 0D4h SPI data register spda 0E0h
SPI divider register spdv 0E1h
Watchdog register wdog 0D8h SPI mode register spmc 0E2h

Accumulator a 0FFh Data Ram/EEprom register eedbr 0E8h


EEprom control register eecr 0EAh
Nota: ricordiamo che nei micro ST6210-20 non
presente le porta C, di conseguenza i registri Accumulator a 0FFh
port_C - pdir_C e pop_C non sono utilizzabili.
I registri segnalati in negativo sono Write Only Re- Nota: i registri segnalati in negativo, cio ior - drw
gister, cio registri di sola scrittura. - ocr - eedbr, sono Write Only Register.
Nessuno ha mai esplicitamente messo in eviden- Only dobbiamo riscrivere tutti gli 8 bits utilizzando
za che ai registri Write Only si pu accedere e- listruzione LDI:
sclusivamente con istruzioni che settano o re-
settano tutti gli 8 bits contemporaneamente, vale ldi ior,00010000b
a dire con le istruzioni tipo LD - LDI - CLR ecc.
oppure possiamo scrivere:
I registri Write Only comuni a tutti i micro della se-
rie ST6 sono: ldi ior,16

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:

Oscillator control register 0DCh (ocr) ldi ior,010h


Data ram/eeprom register 0E8h (eedbr)
Esempio per Data Ram/EEprom Register
Quindi anche il Data Ram-EEprom register un
registro di sola scrittura. Fig.2 Formato del registro EEDBR
Per chiarire come vanno utilizzati questi registri fac- 7 6 5 4 3 2 1 0
ciamo un esempio molto semplice, ma che ci sem- EEDBR4 EEDBR1 EEDBR0
bra appropriato.
Poniamo il caso di voler scrivere la parola IN- Per attivare una delle 3 pagine aggiuntive di me-
GRESSO, ma per errore scriviamo INGRASSO. moria dei micro ST6260-65, dobbiamo configurare
Se fossimo in un programma di videoscrittura, per il registro EEDBR come segue:
correggere questo errore basterebbe sostituire la
lettera A con la lettera E e la parola sarebbe for- bit 0: settare a 1 per attivare la Eeprom Page 0
malmente corretta. bit 1: settare a 1 per attivare la Eeprom Page 1
bit 4: settare a 1 per attivare la Ram Page 2
Per i registri di sola scrittura questo non possi-
bile, perch non possiamo accedere al singolo bit, In altre parole, essendo anche questo un registro
ma solo a tutti gli 8 bits contemporaneamente. Write Only, per attivare la Eeprom Page1 non pos-
Nel nostro esempio dovremmo riscrivere lintera siamo scrivere:
parola INGRESSO e non correggere la A con la E.
set 1,eedbr
Esempio per Interrupt Option Register
ma dobbiamo invece scrivere:
Fig.1 Formato del registro IOR
ldi eedbr,00000010b
7 6 5 4 3 2 1 0
LES ESB GEN
Volendo questa istruzione in decimale scriveremo:

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:

ldi ior,00000000b res 1,eedbr

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

Oltre ai registri Write Only, esistono tre registri che 7 6 5 4 3 2 1 0


hanno solamente alcuni bits Write Only. TLCD TEN PWMODE EE CPIEOVIE ARMC1 ARMC011
Anche questi, se utilizzati in maniera impropria,
possono creare malfunzionamenti nel programma. Nel registro ARMC c un solo bit Write Only e
precisamente il bit 7 siglato TLCD.
Il registro Write Only Bits comune ai micro ST6 : Quando questo bit settato a 1 ricarica il contato-
re del timer con il valore di base.
A/D converter control register 0D1h (adcr) Questo particolare registro stato trattato nei pro-
grammi di esempio del PWM, nella Rivista N.192.
Nei micro ST6260-65 abbiamo in pi: Nel dischetto DF.1325 da noi fornito troverete una
serie di semplici programmi corredati di note coi
EEprom control register 0EAh (eecr) quali sar semplice capire come usare il PWM.
AR timer mode control register 0D5h (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

NMI INTERRUPT PORT B

DATA ROM Fig.6 Diagramma a blocchi dei


PROGRAM USER
MEMORY SELECTABLE PORT C microprocessori ST6210-15-
1836 Bytes (ST6215-25)
(ST6210-15) 20-25. Come evidenziato an-
DATA RAM
3884 Bytes
(ST6220-25) 64 Bytes
che nella figura, la Port C
presente solo nei micro
ST6215-25. Di conseguenza i
TIMER registri port_C, pdir_C e
PC pop_C non sono utilizzabili
con i micro ST6210-20.
STACK LEVEL 1
DIGITAL
STACK LEVEL 2 WATCHDOG

STACK LEVEL 3
8 BIT CORE
STACK LEVEL 4

STACK LEVEL 5

STACK LEVEL 6

POWER OSCILLATOR RESET


SUPPLY

V DD V SS OSCin OSCout RESET


8-BIT
TEST/Vpp TEST PORT A
A/D CONVERTER

NMI INTERRUPT DATA ROM PORT B Fig.7 Diagramma a blocchi dei


USER
SELECTABLE micro ST6260-65. Rispetto al-
la serie precedente, questi mi-
PROGRAM DATA RAM PORT C
MEMORY
64 BYTES 64 BYTES
cro possiedono in pi la fun-
3884 bytes EPROM DATA EEPROM
zione Autoreload Timer, un
(ST6260-65)
64 BYTES 64 BYTES AUTORELOAD Serial Peripheral Interface, u-
TIMER
na Data Ram di 128 bytes ed
una Data EEprom di 128 bytes.
TIMER
PC

STACK LEVEL 1 SPI


SERIAL PERIPHERAL
STACK LEVEL 2 INTERFACE

STACK LEVEL 3
8 BIT CORE
STACK LEVEL 4
DIGITAL
STACK LEVEL 5 WATCHDOG

STACK LEVEL 6

POWER OSCILLATOR RESET


SUPPLY

V DD V SS OSCin OSCout RESET

Naturalmente potendo utilizzare una pagina di me- Ad esempio se scriviamo:


moria alla volta, non possibile settare contempo-
raneamente pi di un bit e se lo farete il program- pippo .def 000h
ma segnaler errore. gatto .def 001h

Quindi se scrivete: associamo letichetta pippo allindirizzo di memo-


ria 000h e letichetta gatto allindirizzo 001h.
ldi eedbr,011h Essendo larea di memoria comune a tutte e tre le
pagine, gli indirizzi 000h e 001h costituiscono il by-
fate un errore perch avete settato contempora- te 0 e il byte 1 sia della Eeprom Page 0 sia della
neamente il bit 0 e il bit 4. Eeprom Page 1 sia della Ram Page 2.
Infatti 011h corrisponde in binario a 00010001. Quindi pippo e gatto definiscono il primo ed il se-
condo byte di tutte e tre le pagine.
Per selezionare la Ram page 2 dovete settare il Se ora riprendiamo listruzione:
solo bit 4 scrivendo:
ldi eedbr,010h
ldi eedbr,010h
che seleziona la Ram page 2 e successivamente
infatti 010h corrisponde al binario 00010000. scriviamo:

Con il registro EEDBR siamo quindi in grado di di- ld a,pippo


re al programma quale pagina di memoria aggiun-
tiva vogliamo utilizzare. carichiamo nellaccumulatore a il valore corri-
spondente alletichetta pippo, cio il valore conte-
Nella stesura del programma inoltre possibile as- nuto nel byte 0 della memoria Ram Page 2.
sociare agli indirizzi di queste pagine delle etichet- Se invece scriviamo:
te con listruzione .def, tenendo sempre presente
per che queste etichette identificano un indirizzo ldi eedbr,001h
comune a tutte e tre le pagine. ld a,pippo
selezioniamo la Eeprom Page 0 e carichiamo i bytes sono molti, ad esempio 7, la durata della fa-
nellaccumulatore a il valore contenuto nel byte se completa di scrittura data da 7 x T, cio:
0 di questa memoria.
7 x 10 = 70 millisecondi
Come sempre, queste gestioni richiedono un po di
attenzione nella stesura del programma. Nella scrittura in modalit parallela invece i bytes
vengono scritti allinterno delle Eeprom Page con-
E possibile poi, durante lesecuzione del program- temporaneamente, cio 8 alla volta.
ma, spostarsi da una pagina allaltra di queste tre Con questa modalit si risparmia notevolmente
memorie tenendo per sempre presente che me- tempo, perch la durata della fase di scrittura di
glio utilizzare e soprattutto scrivere nelle Eeprom un T per tutti gli 8 bytes.
Page solamente quando effettivamente necessita,
per allungare cos la loro vita il pi possibile. Con- Il microprocessore in grado di posizionarsi au-
viene perci, dove naturalmente sia fattibile, che il tomaticamente nel punto in cui vogliamo che abbia
programma, una volta che si posizionato in una inizio la registrazione e da quel punto scrive 8 by-
Eeprom Page, non elabori i dati direttamente l, ma tes per riga.
li trasporti in una o pi variabili definite nella nor-
male memoria Data RAM. Infatti scrivendo in modalit parallela anche se i by-
Qui sar possibile elaborarli tranquillamente e so- tes da scrivere nelle Eeprom Page sono minori di
lamente quando necessario il programma li riscri- 8 o non sono multipli esatti di 8 (ad esempio 3 o
ver nella Eeprom Page di partenza. 15 o 27) vengono sempre scritti a 8 bytes alla vol-
ta per ogni ciclo di scrittura.

Nella fig.8 riportata la suddivisione logica delle


LA SCRITTURA nella MEMORIA EEPROM Eeprom Page in righe di 8 bytes nel caso di scrit-
tura in modalit parallela.
La fase di scrittura delle Eeprom Page pu esse- Nel caso di 10 bytes servono almeno 2 cicli di
re effettuata in due modalit: scrittura; se dovessimo scrivere 64 bytes dovrem-
mo effettuare 8 cicli di scrittura parallela, infatti 64
Modalit byte o Byte mode bytes : 8 bytes alla volta = 8 cicli.
Modalit parallela o Parallel Mode
Quindi se i 10 bytes da scrivere in Eeprom Page
Nella scrittura in modalit byte i bytes utilizzati dal iniziassero allindirizzo 0, basterebbero 2 cicli di T
programma vengono scritti uno alla volta allinter- per scrivere 10 bytes: i primi 8 bytes con un ciclo
no delle Eeprom Page. T e i restanti 2 con un altro ciclo T.
Si tratta di una modalit da utilizzare solo nel caso
i bytes siano pochissimi o addirittura 1 solo. Ma cosa succede se dobbiamo iniziare a registra-
Infatti ogni ciclo di scrittura dura una certa frazione re i 10 bytes ad esempio dallindirizzo 01Fh, che
di tempo T, tipicamente 10 millisecondi, quindi se equivale a 31 decimale?

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

D7 EEOFF D5 D4 EEPAR1 EEPAR2 EEBUSY EEENA

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

stramx .def 084h Quando arriva a zero abbiamo completato il tra-


sferimento dei 14 bytes quindi usciamo da questa
Dopo la definizione delle porte utilizzate dal pro- fase saltando alla etichetta fineep:
gramma e la gestione degli eventuali interrupt, il
programma arriver alla gestione della lettura del- jrz fineep
la Eeprom Page 0.
Assegniamo quindi innanzitutto letichetta leepr0 a Se invece il trasferimento non stato ancora com-
questa fase, poi ricarichiamo il Watchdog: pletato, ci posizioniamo al byte successivo sia nel-
la Eeprom Page 0 sia nella Data Ram.
leepr0 ldi wdog,0ffh
inc x
Ora attiviamo la memoria aggiuntiva EEPROM: inc y

ldi eecr,0 ed eseguiamo di nuovo il ciclo:

e selezioniamo la Eeprom Page 0: jp ciclor

ldi eedbr,1 Il trasferimento del contenuto dei 14 bytes ora


completato e quindi possiamo per ora disattivare la
Dopo questa istruzione nellarea di memoria dallin- memoria EEPROM:
dirizzo 000h allindirizzo 03Fh sono contenuti i va-
lori della Eeprom Page 0. ldi eecr,01000000b
Fig.10 Listato 1 Esempio. Fig.11 Listato 2 Esempio.

beep0 .def 000h wrieep ldi eecr,0


sceep1 .def 012h ldi eedbr,2
stramx .def 084h ldi eecr,00000001b
...... ... ... ldi w,14
...... ... ... ldi x,stramx
leepr0 ldi wdog,0ffh ldi y,sceep1
ldi eecr,0 ciclos ldi wdog,0ffh
ldi eedbr,1 ld a,(x)
ldi w,14 ld (y),a
ldi x,beep0 jrs 1,eecr,$
ldi y,stramx dec w
ciclor ldi wdog,0ffh jrz finwrp
ld a,(x) inc x
ld (y),a inc y
dec w jp ciclos
jrz fineep finwrp
inc x ldi eecr,0
inc y
jp ciclor
fineep Questo esempio riguarda la gestione della
ldi eecr,01000000b scrittura in Modalit Byte. Per la prima par-
call rou_add te del programma, cio fino allelaborazio-
call rou_clc ne dei dati nelle routine rou_add, rou_clc e
call rou_str rou_str, si pu fare riferimento allesempio
riportato in fig.10.
wrieep ldi eecr,0
ldi eedbr,2
ldi eecr,00000101b
ldi w,14 Fig.12 Listato 3 Esempio
ldi v,6
ldi x,stramx
wrieep ldi eecr,0
ldi y,sceep1
ldi eedbr,2
ciclos ldi wdog,0ffh
ldi eecr,00000001b
ld a,(x)
ldi w,14
ld (y),a
ldi x,stramx
dec w
ldi y,sceep1
jrz finwrp
ciclos ldi wdog,0ffh
inc x
jrs 1,eecr,$
inc y
ld a,(x)
dec v
ld (y),a
jrnz ciclos
dec w
ldi eecr,00001101b
jrz finwrp
jrs 1,eecr,$
inc x
ldi eecr,00000101b
inc y
ldi v,8
jp ciclos
jp ciclos
finwp
finwrp
jrs 1,eecr,$
ldi eecr,00001101b
ldi eecr,0
jrs 1,eecr,$
Questo esempio riguarda la gestione del
ldi eecr,0 tempo durante la fase di scrittura nelle Ee-
prom Page. Notate il posizionamento delli-
struzione JRS 1,EECR,$ con cui si evita che
qualche comando inerente alla memoria
Questo esempio riguarda la gestione della EEprom venga attivato prima che la fase di
scrittura in Modalit Parallela. scrittura sia terminata.
A questo punto i dati cos caricati in Data Ram ven- A questa fase assegniamo letichetta ciclos e ri-
gono elaborati da una serie di routines che nel no- carichiamo il Watchdog:
stro esempio sono rou_add, rou_clc e rou_str:
ciclos ldi wdog,0FFh
call rou_add
call rou_clc Ora tramite laccumulatore a trasferiamo (non scri-
call rou_str viamo ancora nulla) i dati da Data Ram a Eeprom
Page 1 un byte alla volta:
Finita questa fase di elaborazione, il programma
deve memorizzare i valori ottenuti nella Eeprom ld a,(x)
Page 1. Riattiviamo perci la memoria EEPROM: ld (y),a

wrieep ldi eecr,0 e decrementiamo il registro w di uno:

e ci posizioniamo nella Eeprom Page 1: dec w

ldi eedbr,2 Quando arriva a zero abbiamo completato il tra-


sferimento dei 14 bytes ed usciamo da questa fa-
se saltando alla etichetta finwrp:
Ora dallindirizzo di memoria 000h a 03Fh sono
contenuti i dati presenti nella Eeprom Page 1.
jrz finwrp
Attiviamo quindi (non eseguiamo ancora) la scrit-
tura in modalit parallela:
Se invece non stato ancora completato, ci posi-
zioniamo al bytes successivo sia nella Eeprom Pa-
ldi eecr,00000101b
ge 1 sia nella Data Ram:
Siccome i bytes elaborati da trasferire dalla Data inc x
Ram alla Eeprom Page 1 sono 14 e vanno me- inc y
morizzati a partire dallindirizzo sceep1, carichia-
mo i registri necessari. e decrementiamo il registro v:
Nel registro w carichiamo il numero 14 per effet-
tuare 14 cicli di trasferimento: dec v
jrnz ciclos
ldi w,14

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:

ldi eecr,00001101b ldi w,14


jrs 1,eecr,$
Nel registro x carichiamo lindirizzo di stramx, che
Finita la fase di scrittura parallela il bit 3 ed il bit 2 corrisponde alla locazione iniziale di memoria Data
del registro eecr, denominati rispettivamente EE- Ram dove verranno prelevati i valori dei 14 bytes:
PAR1 e EEPAR2, vengono automaticamente re-
settati, mentre rimane settato solo il bit 0 denomi- ldi x,stramx
nato EEENA. Non ci rimane dunque che disattiva-
re subito la modalit scrittura per evitare il perico- Nel registro y carichiamo lindirizzo di sceep1, che
lo di sporcare i dati appena scritti. corrisponde allindirizzo iniziale di Eeprom Page 1
dove verranno trasferiti i valori dei 14 bytes:
ldi eecr,0
ldi y,sceep1
Il perch di questa ultima affermazione lo capirete
meglio con il secondo esempio. A questa fase assegniamo letichetta ciclos e ri-
carichiamo il Watchdog:

2 Esempio: Scrittura in Modalit Byte ciclos ldi wdog,0FFh

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.

Iniziamo dunque la spiegazione dal punto in cui si jrs 1,eecr,$


inizia a gestire la scrittura nella Eeprom Page 1 e
cio dallistruzione con etichetta wrieep (fig.11). A questo punto il dato stato definitivamente scrit-
Finita questa fase di elaborazione, il programma to nella Eeprom Page 1 ed anche se si verificasse
deve memorizzare i valori ottenuti nella Eeprom una caduta di tensione non andrebbe perso.
Page 1. Riattiviamo perci la memoria EEPROM: Ora decrementiamo il registro w di uno:

wrieep ldi eecr,0 dec w

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:

Ora attiviamo la scrittura in modalit byte: jrz finwrp

ldi eecr,00000001b Se invece non stato ancora completato, ci posi-


zioniamo al byte successivo sia nella Eeprom Pa-
Siccome i bytes elaborati da trasferire dalla Data ge 1 sia nella Data Ram:
Ram alla Eeprom Page 1 sono 14 e vanno me-
morizzati a partire dallindirizzo sceep1, carichia- inc x
mo i registri necessari. inc y
ed eseguiamo di nuovo il ciclo: i cicli delle istruzioni che seguono la scrittura nelle
EEPROM si utilizza listruzione:
jp ciclos
jrs 1,eecr,$
Una volta finita la fase di scrittura disattiviamo la
modalit byte: Nella fig.12 abbiamo proposto un diverso modo di
gestione della scrittura in EEPROM.
ldi eecr,0 Una soluzione questa che pu velocizzare la ge-
stione rispetto a quella di fig.11.
Come avete avuto modo di capire con questo e- Infatti dopo listruzione che scrive in EEPROM:
sempio, quando attiviamo la scrittura in modalit
byte ogni variazione che apportiamo ai dati conte- ld (y),a
nuti nella Eeprom Page selezionata viene imme-
diatamente scritta nella memoria. Questo il mo- il programma esegue le istruzioni successive, cio:
tivo per cui dopo ogni fase di scrittura vi consiglia-
mo sempre di disattivare la modalit scrittura. dec w
jrz finwrp
3 Esempio: Gestione del Tempo in Scrittura inc x
inc y
Prima di concludere vogliamo portarvi un ultimo jp ciclos
semplice esempio per chiarire soprattutto laspetto ciclos ldi wdog,0ffh
della gestione del tempo di scrittura dentro le me-
morie EEPROM. e solo a questo punto eseguendo listruzione:
Nella fig.12 riportiamo le stesse istruzioni di fig.11
con una piccola differenza. jrs 1,eecr,$
Abbiamo spostato listruzione jrs 1,eecr,$ dopo:
si ferma in attesa che la scrittura nella EEPROM
ciclos ldi wdog,0ffh sia terminata.
E evidente che questa attesa sar sicuramente mi-
e poi labbiamo ripetuta dopo letichetta: nore perch parte del tempo gi trascorso con
lesecuzione delle istruzioni precedenti.
finwrp
Nota: poich scopo di questi esempi era chiarire
Qualcuno a questo punto si domander il perch come utilizzare le due modalit di scrittura nella
visto che, come abbiamo spiegato, questa istru- memoria EEprom, per non complicare ulterior-
zione serve per gestire il tempo di scrittura della mente la spiegazione, abbiamo utilizzato le istru-
EEPROM e sembrerebbe logico doverla inserire zioni JRZ e JRNZ in maniera impropria, senza te-
subito dopo listruzione di scrittura. nere conto cio del fatto che hanno un salto con-
dizionato a 15/+16 bytes.
Con questa istruzione si vuole solamente evitare Per luso corretto di queste istruzioni rimandiamo a
che venga attivata unaltra fase di scrittura o la se- quanto scritto nella rivista N.185.
lezione di una pagina diversa di memoria prima che
sia terminata la fase attuale di scrittura.
Infatti quando si attiva la fase di scrittura nelle me-
morie EEPROM il micro non sta ad aspettare che
questa fase sia terminata, ma continua ad esegui-
re le istruzioni successive.
Se, per assurdo, le istruzioni successive fossero in
numero tale che sommate ci danno un tempo su-
periore ai 10-20 millisecondi stimati per la scrittu-
ra in EEPROM, in teoria non sarebbe nemmeno
necessario utilizzare listruzione: jrs 1,eecr,$.

La condizione necessaria che le istruzioni suc-


cessive non contengano nessun altro comando i-
nerente a queste memorie, perch non sarebbe e-
seguito. Per non essere perci costretti a contare
software SIMULATORE
Dopo il successo ottenuto con la prima versione del software simula-
tore per micro ST6 (vedi rivista N.190), oggi vi presentiamo la nuova ver-
sione che permette di simulare anche i micro della serie ST6260-ST6265.
Con questo software simulatore potrete leggere e scrivere nelle memo-
rie EEprom e Ram aggiuntiva, verificare la trasmissione Seriale sulla
porta Spi, testare il PWM e lAuto Reload Timer.
A distanza di poco meno di un anno dalla pubbli- Come gi abbiamo accennato, la novit principale
cazione del software simulatore per micro ST6, il della nuova versione riguarda la possibilit di si-
nostro collaboratore, il Sig. Ivano Cesarin di Por- mulare non solo i programmi scritti per i micro del-
petto (UD), ha realizzato una nuova versione di si- la serie ST6210 ecc., ma anche i programmi per la
mulatore in grado di testare tutti i micro della serie serie ST6260-65.
ST6210-15-20-25 compresi gli ST6260-65. Ci significa che ora potete simulare le fasi di let-
tura e scrittura nelle memorie Eeprom e Ram ag-
Tutti i softwaristi che per motivi di lavoro o per giuntiva (definita dallAutore Extra Ram), verifica-
hobby impiegano questi micro nei loro progetti, riu- re la trasmissione seriale sulla porta Spi, testare il
sciranno con questo simulatore a scoprire pi fa- PWM e lAuto Reload Timer.
cilmente eventuali errori e a correggerli.
Per le modalit di installazione del programma e
Tanto per cominciare vi diciamo che nel nuovo si- per luso dei comandi identici alla precedente ver-
mulatore sono state eliminate tutte quelle piccole sione, rimandiamo a quanto gi scritto nella rivista
anomalie presenti in fase di apertura dei files con- N.190. A questo proposito vi informiamo che se
tenenti i programmi da simulare. cambierete la directory di installazione del simu-
Rispetto alla versione precedente sono state ap- latore, dovrete modificarla anche nel programma di
portate migliorie e aggiunte altre possibilit di si- esempio pedali.prg utilizzando un normale editor.
mulazione che troverete molto interessanti, perch
vi aiuteranno nei vostri test. Ora vi spieghiamo solo le nuove funzioni presenti
Ad esempio, stato aggiunto un valido e utile Help in questo simulatore, completandole con le imma-
contestuale con semplici spiegazioni in italiano che gini delle finestre che appaiono sul monitor, perch
vi accompagnano in ogni fase della simulazione. una figura a volte chiarisce pi di tante parole.
LA VIDEATA PRINCIPALE

Dopo aver memorizzata nellhard-disk la nuova ver-


sione del programma simulatore, quando lanciate
il programma appare la finestra di fig.1.

1 Cliccando su SimST622 lanciate la simulazio-


ne dei programmi scritti per i soli microprocessori Fig.1 La videata principale della nuova ver-
della serie ST6210-15-20-25. sione del software simulatore per i pro-
grammi scritti per i micro ST6.
2 Cliccando su SimST626 lanciate la simulazio-
ne dei programmi scritti per i soli microprocessori
della serie ST6260-65.

3 Cliccando su Conv > CMD potete effettuare la


conversione di files .DAT in files .CMD.

4 Cliccando su Aiuto visualizzate le note di aiu-


to del programma (Help contestuale).

per micro ST6


Fig.2 Per modificare la memoria Eeprom o
la Ram aggiuntiva, scegliete dal menu File
il comando Modifica EEprom/Extra RAM.

MODIFICA della EEPROM ed EXTRA RAM

Dopo aver lanciato la simulazione di un program-


ma per ST6260-65, scegliendo dal menu File (ve-
di fig.2) il comando Modifica EEProm/Extra RAM
potete accedere alla finestra di dialogo visibile in
fig.3, in cui possibile modificare tutta o una par-
te sola della memoria Ram aggiuntiva (di seguito
chiamata Extra Ram) o della memoria EEprom.
A questa finestra si accede anche in fase di Crea-
zione o Modifica Progetto cliccando sul pulsante
Precarica EEprom (vedi fig.4). Fig.3 Dopo aver selezionato la memoria, per
Una volta entrati nella finestra visibile in fig.3 pos- modificarne lintero contenuto cliccate sul
sibile: pulsante Riempimento.

1 Selezionare il tipo di memoria che si vuole mo-


dificare o anche solo visualizzare, cliccando nel
cerchietto alla destra delle scritte EEprom o Extra
Ram. La scelta di una memoria esclude laltra.

2 Modificare il contenuto di una singola cella clic-


candoci sopra 2 volte. In questo caso appare la ma-
schera di fig.5 in cui bisogna digitare il valore che
si vuole inserire in quella determinata cella.

3 Modificare tutto il contenuto della memoria se-


lezionata cliccando sul pulsante Riempimento. Ap- Fig.4 Alla maschera di fig.3 si accede an-
pare sempre la maschera di fig.5, ma in questo ca- che in fase di Creazione - Modifica Proget-
so il valore che digitate viene memorizzato in tut- to, cliccando su Precarica EEPROM.
te le celle della memoria.
MODIFICA delle ISTRUZIONI

Grazie alla nuova versione ora possibile cam-


biare in tempo reale listruzione del programma
che si sta simulando senza dover uscire dalla si-
mulazione e senza dover ricompilare il sorgente.

In questo modo si evitano grosse perdite di tempo


e non si deve pi impazzire per ritornare nel pun-
to esatto in cui si era dovuta interrompere la simu-
Fig.5 Se avete cliccato sul pulsante riempi- lazione per uscire dal programma, apportare la mo-
mento, il valore che digitate verr memo- difica e ricompilare il sorgente.
rizzato in tutte le celle.
Vediamo quindi quali passi bisogna compiere per
correggere le istruzioni.

Dal menu Debug cliccate su Edit Codice ASM (ve-


di fig.6) per aprire la finestra di dialogo visibile in
fig.7, nella quale possibile scegliere fra tre diversi
tipi di digitazione del programma che si testa: Mo-
difica, Inserisci o Elimina.
Fig.6 Con il comando Edit Codice ASM dal
menu Debug si pu modificare listruzione
senza interrompere la simulazione. Fate attenzione perch le variazioni che apportate
al sorgente con questi comandi durante la simula-
zione non vengono memorizzate nel file .ASM, ma
sono temporanee e verranno perse nel caso si
chiuda la simulazione e se ne inizi una nuova.
Potrete comunque memorizzarle in un file .TXT.
In seguito vi spiegheremo come questa operazio-
ne vi fornir unutile traccia per poter in seguito mo-
Fig.7 Listruzione pu essere modificata o dificare in maniera definitiva il file .ASM originale.
eliminata totalmente, inoltre possibile in-
serire una nuova istruzione. Cliccando sul pulsante Modifica (vedi fig.7) com-
pare la maschera di fig.8 in cui viene mostrata li-
struzione che stava per essere eseguita suddivisa
in Etichetta - Istruz. - 1 - 2 - 3 Campo.

Nel caso si sostituisca listruzione con unistruzione


pi lunga o pi corta, prima della conferma delle va-
riazioni il programma vi chiede se volete inserire del-
le istruzioni Nop per riempire i bytes restanti.
Fig.8 Con il pulsante Modifica, listruzione
Nota: ogni istruzione ha una sua precisa lunghez-
visualizzata suddivisa in pi campi corri-
za in bytes e a questo proposito consigliamo di
spondenti alle parti che la compongono.
consultare le tabelle pubblicate sulla rivista N.185.

Nellesempio visibile in fig.8 abbiamo sostituito li-


struzione ldi orc,00h, lunga 3 bytes, con listru-
zione reti lunga 1 bytes (vedi fig.9).

Pertanto quando diamo lOK, il programma ci chie-


de se vogliamo che i bytes restanti, che, mancan-
do lOpcode, contengono dati non validi, vengano
Fig.9 Se listruzione modificata pi lunga rimpiazzati con dei Nop.
o pi corta di quella originale, potete rim- Inserendo due Nop non viene falsata la numera-
piazzare i bytes mancanti con dei NOP. zione del Displacement e listruzione seguente ini-
zia dallindirizzo di memoria esatto.
Se osservate infatti la fig.10 potete vedere che li-
struzione ldi da 3 bytes stata sostituita con tre
istruzioni da 1 byte ciascuna:

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.

Cliccando sul pulsante Elimina, sempre in fig.7,


compare la maschera di fig.12, in cui si chiede con-
ferma della cancellazione della istruzione.
Fig.11 Inserendo unistruzione fate atten-
Se si clicca su S, compare di seguito la masche-
zione, perch il Displacement viene variato
ra visibile in fig.13 che consente di rimpiazzare i
e gli indirizzi di salto vengono falsati.
bytes dellistruzione eliminata con altrettanti Nop
per non perdere il corretto Displacement.

Come abbiamo accennato allinizio del paragrafo,


apportata la modifica potete salvarla in un file .TXT
cos da avere una traccia che vi servir per cam-
biare in maniera definitiva anche il file .ASM.
Per fare questo, scegliete il comando Salva Codi-
ce ASM dal menu File (vedi fig.14) e quando ap- Fig.12 Il comando di eliminazione di uni-
pare la finestra di dialogo visibile in fig.15 date un struzione dal programma in simulazione va
nome al vostro file, quindi cliccate su OK. sempre confermato.

INSERIRE unONDA QUADRA CICLICA

In questo paragrafo vi spieghiamo come procede-


re per generare una forma di onda quadra sui pie-
dini del microprocessore indicando solamente il
periodo espresso in numero cicli e come visua-
lizzare i segnali in ingresso e in uscita sui piedi-
ni del micro anche in modalit numerica.

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.

Cliccando sul pulsante Grafica appare la masche-


ra visibile in fig.17.
Per il nostro esempio abbiamo selezionato la Por-
ta C e le funzioni Edit e Limitato cliccando nelle
apposite caselle. A sinistra sono evidenziati i pie-
dini PC2 - PC3 e PC4 di porta C.
Dopo aver selezionato uno dei piedini con il cur- Fig.14 Le variazioni apportate al sorgente
sore, dovete scegliere il tipo di segnale in ingres- durante la simulazione sono temporanee,
so (la lettera C sta per ciclico) e di seguito dove- quindi vanno salvate in un file .TXT.
te digitare il valore del periodo del ciclo.
Fig.19 Per generare unonda quadra con un
periodo di 10 cicli sufficiente digitare il
valore 10 e cliccare su OK nella finestra di
Fig.15 Con il comando Salva Codice ASM dialogo qui raffigurata.
dal menu File, si apre questa finestra di dia-
logo in cui dovete dare un nome al file .TXT
che conterr le variazioni fatte.

Fig.16 Con questo simulatore possibile


generare una forma donda quadra sui pie-
dini del microprocessore e vederla a video
in modalit grafica.
Fig.20 Dopo le operazioni visualizzate nel-
le due figure precedenti, sul piedino PC2
ora presente una forma donda quadra con
un periodo di 10 cicli.

Fig.17 Nellesempio riportato in questa fi-


gura abbiamo immaginato di generare on-
de quadre sui piedini di PORT C, quindi ab- Fig.21 Per generare un altro segnale ad on-
biamo selezionato: Edit, Limitato e PC. da quadra clicchiamo sul piedino PC3 e per
il tipo di segnale in ingresso scegliamo an-
cora C, cio segnale ciclico.

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.23 In questa figura potete vedere la rap-


presentazione grafica dei segnali ad onda
quadra con differenti periodi generati sui
piedini PC2 e PC3 di port C.

Fig.28 Il simulatore ha rilevato unaltra i-


struzione formalmente corretta, ma logica-
mente errata: non possibile scrivere nel-
la EEprom se il bit 2 uguale a zero.

Fig.24 In questa figura potete vedere un e-


sempio di visualizzazione numerica dei se-
gnali immessi o rilevati sui piedini del mi-
cro durante la simulazione.

Fig.25 Cliccando sul menu Variabili potete


visualizzare il contenuto delle variabili uti-
lizzate dal programma che si sta simulan-
do in codifica esadecimale o binaria.

Fig.29 Cliccando sul pulsante Conv>CMD


nella videata principale si attiva la Conver-
sione dei segnali in uscita, memorizzati in
un file .DAT, in segnali in ingresso, da me-
Fig.26 Per passare dalla codifica esadeci- morizzare in un file .CMD. In questo modo,
male a quella binaria cliccate sulla lettera partendo da un solo file, si possono gene-
visibile in alto a destra: H per esadecimale rare numerosi files di segnali in ingresso
e B per binario (vedi fig.25). per le successive simulazioni.
Fig.30 Per aprire un file .DAT, che contiene
i segnali in uscita ottenuti durante una si-
mulazione, cliccate sul menu File e sce-
gliete Apri File.

Fig.31 Nella finestra di dialogo visibile in


questa figura necessario selezionare il Fig.33 Per effettuare la conversione clicca-
nome del file di cui vogliamo convertire i te prima a sinistra e poi indicate nella co-
segnali. Nel nostro caso il file eet60.dat. lonna centrale su quale piedino deve esse-
re trasferito il segnale.

Fig.34 Completato il trasferimento dei se-


gnali in uscita in segnali in ingresso, sce-
gliete Salva File CMD dal menu File per me-
morizzare la conversione.

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.

A titolo di esempio, nelle figg.27-28 abbiamo ripor-


tato solo due delle molteplici indicazioni di anoma- COSTO del PROGRAMMA
lie previste dal simulatore, che, nel caso specifico,
il Compilatore Assembler non avrebbe potuto se- Questo nuovo ed aggiornato software simulato-
gnalare dal momento che, pur errate logicamente, re, che sostituisce la precedente versione pubbli-
le istruzioni sono formalmente corrette. cata sulla rivista N.190, inserito nei 2 dischetti
Cliccando su OK possibile continuare nella si- floppy siglati ST626/1 - ST626/2.
mulazione e verificare cos fino in fondo lesattez-
za del programma. Costo dei due dischetti con IVA inclusa ..... 10,32
LA funzione SPI
Tutti i micro ST6260-65 possiedono una Serial-Synchronous Peripheral
Interface conosciuta pi comunemente come SPI, che pu essere uti-
lizzata per lo scambio dati tra due micro o per dialogare con una EE-
prom ecc. In questo articolo vi spieghiamo come settare correttamente
i piedini e i registri coinvolti nella trasmissione e ricezione dei dati.

La SPI o Serial Peripheral Interface quindi importante conoscere bene le specifiche


della funzione SPI, che pu avere ben 6 differenti
La SPI uno standard di trasmissione e ricezione configurazioni o modalit.
dati in modalit seriale sincrona che pu essere u-
tilizzato, con opportune istruzioni di programma, per One wire Autoclocked Mode: viene utilizzato un
dialogare con una Eeprom esterna, con uno Shift re- solo piedino per linvio dei dati ed il clock di tra-
gister, con un Micro, per pilotare dei display ecc. smissione prestabilito.
Uno dei vantaggi che offre la SPI riguarda il fatto
che essendo la trasmissione e la ricezione dei da-
ti completamente automatica, il microprocessore Two wire Half Duplex Mode: vengono coinvolti
pu continuare ad eseguire altre istruzioni. 2 piedini: uno definisce il clock di trasmissione, lal-
inoltre possibile effettuare una ricezione di dati tro, alternativamente, serve per la trasmissione e
da un integrato e ritrasmetterli ad un terzo presso- per la ricezione.
ch simultaneamente, senza mai uscire cio dalla
stessa routine. Tree wire Half Duplex with Master/Slave se-
lect: la modalit utilizzata dagli ST6260/65 e vi
Ovviamente questa funzione viene attivata tramite sar spiegata nel corso di questo articolo. Per il
il settaggio di particolari registri; in caso contrario i momento ci limitiamo a dire che in questa moda-
piedini coinvolti continueranno a svolgere i norma- lit vengono utilizzati 3 piedini indicati con le sigle
li compiti per cui sono stati programmati. Sin (ingresso), Sout (uscita) e Sck (clock).
Tree wire Full Duplex Mode: sono coinvolti 3 Questa configurazione impiega tre piedini di Por-
piedini ed possibile la contemporanea trasmis- ta C: uno per la ricezione (Sin), uno per la tra-
sione e ricezione dei dati. smissione (Sout) ed uno per inviare o ricevere il
segnale di clock (Sck) per il sincronismo dei dati.
Tree wire Full Duplex Mode with Clock Arbi-
tration: il risultato della fusione delle modalit 2 Nel caso specifico dei micro ST6260 ed ST6265 i
e 4 e implica luso di 3 piedini. dati da trasmettere o da ricevere si trovano memo-
rizzati in un apposito shift register da 1 byte.
Four wire Full Duplex Mode with Master/Sla- Ci porterebbe a concludere che sia possibile tra-
ve select: ha origine dalla fusione delle modalit 3 smettere o ricevere un massimo di 8 bits per ciclo,
e 4 ed impiega 4 piedini. ma vedremo in seguito che non proprio cos.
Se si devono trasmettere pi dati occorre scrivere
una subroutine che esegua tanti cicli di trasmis-
Linterfaccia SPI negli ST6260 - ST6265 sione quanti sono i bytes da inviare; ad esempio,
se volessimo trasmettere 32 bytes, la subroutine
I microprocessori della serie ST6260 - ST6265 u- dovrebbe eseguire 32 cicli di trasmissione.
tilizzano solo la configurazione:
I termini Master Mode indicano che i dati vengo-
Tree wire Half Duplex with Master/Slave select no inviati dal micro ad un integrato esterno, uti-

per lo scambio DATI


8-BIT
TEST/Vpp TEST PORT A
A/D CONVERTER

NMI INTERRUPT DATA ROM PORT B


USER
SELECTABLE

PROGRAM DATA RAM PORT C Fig.1 Schema a blocchi dei mi-


MEMORY
64 BYTES 64 BYTES
cro ST6260-65. I micro di que-
3884 bytes EPROM DATA EEPROM
(ST6260-65) sta serie possiedono al loro
64 BYTES 64 BYTES AUTORELOAD
TIMER interno una comoda e pratica
Serial-Synchronous Periphe-
TIMER
ral Interface, comunemente
PC chiamata SPI, che consente lo
scambio di dati tra due o pi
STACK LEVEL 1 SPI micro o tra un micro e altri in-
SERIAL PERIPHERAL
STACK LEVEL 2 INTERFACE tegrati. La configurazione u-
STACK LEVEL 3 sata dagli ST6 permette di at-
8 BIT CORE tivare una comunicazione Half
STACK LEVEL 4
DIGITAL
STACK LEVEL 5 WATCHDOG Duplex su tre fili con selezio-
ne dispositivo Master e Slave.
STACK LEVEL 6

POWER OSCILLATOR RESET


SUPPLY

V DD V SS OSCin OSCout RESET


lizzando il clock generato dallo stesso micro. spdv = Spi Divide Register. il registro che ge-
I termini Slave Mode indicano che i dati vengono stisce la velocit di trasmissione e il numero di bit
inviati da un integrato esterno al micro, utilizzan- da inviare e ricevere. E lungo 1 byte ed definito
do il clock generato dallintegrato esterno. allindirizzo 0E1H. I suoi 8 bits da 7 a 0 verranno
Cercate di ricordare la differenza tra Master e Sla- sempre indicati con le seguenti sigle.
ve, perch nellarticolo citeremo frequentemente
queste due modalit di trasmissione. 7 6 5 4 3 2 1 0
Spint Div6 Div5 Div4 Div3 CD2 CD1 CD0
Vi sono altre parole che troverete spesso nella do-
cumentazione relativa ai microcontrollori e, tra que- spda = Spi Data Register. il registro nel quale
ste, vale la pena spiegare subito i termini Rising vengono memorizzati i dati ricevuti o da trasmet-
edge e Falling edge. tere. Si tratta di uno shift register quindi la rice-
Rising edge indica il fronte di salita dellonda qua- zione-trasmissione dei dati viene effettuata shif-
dra del clock di trasmissione. tando di un bit verso sinistra ad ogni fronte del
Falling edge indica il fronte di discesa dellonda clock. E lungo 1 byte ed definito allindirizzo
quadra del clock di trasmissione. 0E0H. I suoi 8 bits da 7 a 0 verranno sempre in-
dicati con le seguenti sigle.
Tenete presente che per utilizzare al meglio lo stan-
dard SPI sarebbe preferibile che tutti gli integrati o 7 6 5 4 3 2 1 0
i micro con i quali desiderate dialogare dispones- D7 D6 D5 D4 D3 D2 D1 D0
sero di tale funzione.
In teoria si pu dialogare anche con integrati o mi- misc = Miscellaneous Register. Solitamente que-
cro sprovvisti della funzione SPI; in questi casi per sto registro, lungo 1 byte e definito allindirizzo
potrebbe essere necessario utilizzare un piedino in 0DDH, contiene dati per settare diverse funzioni.
pi per attivare un eventuale segnale di conferma Nel nostro caso viene utilizzato solo il bit 0.
trasmissione o ricezione o per memorizzare i dati
trasmessi (latch, strobe, ecc.). 7 6 5 4 3 2 1 0
Inoltre potrebbe essere necessario realizzare un
M0
certo numero di subroutines, perdendo cos il van-
taggio dellesecuzione automatica della SPI. CONFIGURAZIONE dei PIEDINI
PIEDINI e REGISTRI della SPI Ora cercheremo di spiegarvi nel modo pi sempli-
ce possibile la configurazione iniziando da alcune
Per attivare la funzione SPI sui piedini PC2-PC3- note generali riguardanti i tre piedini di Port_C.
PC4 di Port_C dei micro ST6260-ST6265 occorre Innanzitutto va ricordato che i piedini PC2 Sin e
settare 4 registri, diversamente questi tre piedini PC4 Sck vengono utilizzati come normali piedini
svolgeranno le normali funzioni di I-O. standard I-O quando il bit 4 del registro spmc si-
Prima per di fornire le necessarie spiegazioni per glato Spclk a 0. Lo stesso dicasi per il piedino
la loro configurazione, dovete prendere confidenza PC3 Sout se il bit 0 M0 del registro misc a 0.
con i termini e le abbreviazioni utilizzate. Se tramite i registri standard per la gestione di
port_c, pdir_c, popt_c (vedi rivista N.175/176), il
Sin = Serial Input. il piedino PC2 di Port_C u- piedino PC2 sin viene configurato in input, qual-
tilizzato per la ricezione dati. siasi segnale che entra sul piedino PC2 (non im-
Sout = Serial Output. il piedino PC3 di Port_C porta se si in Master Mode o in Slave Mode) vie-
utilizzato per la trasmissione dati. ne automaticamente memorizzato nello shift regi-
Sck = Serial Clock. il piedino PC4 di Port_C u- ster spda, indipendentemente dallo stato logico del
tilizzato per il segnale di clock di trasmissione o ri- bit Spclk del registro spmc.
cezione dati.
Se settiamo a 1 il bit M0 del registro misc, il pie-
spmc = Spi Mode Register. il registro che con- dino PC3 Sout viene configurato come SPI push-
trolla tutta linterfaccia SPI. lungo 1 byte ed de- pull output, indipendentemente dai settaggi pre-
finito allindirizzo 0E2H. I suoi 8 bits da 7 a 0 ver- senti sui registri port_c, pdir_c e popt_c.
ranno sempre indicati con le seguenti sigle.
Per trasmettere il clock (Master Mode), il piedino
7 6 5 4 3 2 1 0 PC4 Sck deve essere settato come push-pull out-
put nei registri port_c, pdir_c e popt_c, inoltre, va
Sprun Spie Cpha Spclk Spin Spstrt Efilt Cpol
settato a 1 il bit Spclk del registro spmc.
Per ricevere il clock (Slave Mode), il piedino PC4 Nelle figg.2-5 potete vedere i 4 tipi di diagramma
Sck deve essere settato come input nei registri di sincronismo SPI in cui stata ipotizzata una tra-
port_c, pdir_c e popt_c, inoltre, deve essere set- smissione-ricezione di 8 bits.
tato a 0 il bit Spclk del registro spmc.
Con questultima configurazione il piedino PC4 pu In queste figure sono richiamati i piedini PC4-PC3
essere usato anche come piedino in input. di Port_C, che abbiamo indicato con le sigle Sck
e Sout, ed il bit 7 Sprun del registro spmc. A pro-
SINCRONISMO SPI posito di questo bit il caso di anticipare che Sprun
sta per Spi run; in altre parole questo bit lo start
Nel paragrafo successivo chiariremo bit per bit il della funzione SPI.
settaggio dei registri coinvolti nella gestione della Quando Sprun viene posto a 1 inizia la trasmis-
SPI, ma prima di continuare necessario illustra- sione o la ricezione dei dati, completata la quale il
re con laiuto di qualche disegno, cosa significano bit va automaticamente a 0.
i termini rising edge, falling edge, polarit e fa-
se, perch la combinazione di questi dati ci con- Per semplificare il disegno non abbiamo riportato il
sente di dialogare con la quasi totalit degli inte- piedino PC2 Sin; daltra parte la logica descritta per
grati che dispongono della funzione SPI. la trasmissione identica in caso di ricezione.

SPRUN
0

SCK
0

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Sout

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

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Sout

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

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Sout

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

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 Sout

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

Fig.6 Diagramma di sincronismo SPI in cui abbiamo ipotizzato una trasmissione di 11


clock per ciclo. Con i primi 8 clock vengono trasmessi gli 8 bits contenuti nel registro
spda, mentre per i successivi tre clock vengono trasmessi dei livelli logici 0. Poich i da-
ti, man mano che vengono ricevuti, shiftano nel registro spda del micro ricevente verso
sinistra, dopo 11 clock il registro spda conterr solo gli ultimi 8 bits trasmessi. La quan-
tit dei bits da inviare deve essere identica alla quantit dei bits da ricevere, cio i regi-
stri spdv del Master e dello Slave devono avere la stessa configurazione.

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.

Fig.8 Sulla rivista N.192 ab-


biamo presentato un valido
programmatore per i micro
ST62/60 e ST62/65 che vi ser-
vir per programmare questi
nuovi microprocessori.
Sappiamo per esperienza che le spiegazioni pura- quarzo da 8 MHz, un pulsante, un deviatore, un
mente teoriche sono solitamente molto noiose e trimmer e 8 diodi led, che vi consentiranno di sa-
quasi sempre difficili da capire e da assimilare. pere quale livello logico 0-1 presente sulle usci-
Per questo, quando possibile, cerchiamo di af- te del microprocessore che trasmette i dati.
fiancare ad esse la realizzazione di circuiti pratici A seconda del programma che memorizzerete nel
che, consentendoci di vedere quello che la teoria micro, potrete effettuare una trasmissione o una ri-
ci spiega, rendono tutto pi comprensibile. cezione dati tra due micro ST62/65.

Sulla terza interfaccia siglata LX.1382 (vedi fig.11),


Abbiamo quindi scritto alcuni programmi dimo-
che deve essere collegata tramite una piattina
strativi sulla trasmissione e ricezione di dati con lo
allinterfaccia siglata LX.1380, dovrete montare
standard SPI utilizzato dai micro ST62/65, che si
quattro shift register HC/Mos tipo HCF.4094 o
possono vedere in funzione montando 3 semplici
MC.14094 (vedi IC1-IC2-IC3-IC4), le reti resistive
interfacce periferiche.
siglate R1-R2-R3-R4, tre display e otto diodi led.
Sui display apparir il dato ricevuto espresso col
La prima interfaccia, siglata LX.1380, va innesta- sistema decimale e sui diodi led il corrisponden-
ta nella scheda bus siglata LX.1329 (vedi fig.1), te valore espresso col sistema binario.
apparsa sulla rivista N.192, che molti tra voi a- Quando il numero binario corrisponde a 255 deci-
vranno sicuramente gi montato per poter testare male tutti i diodi led sono accesi, quando corri-
le funzioni PWM ed EEprom. sponde a 0 tutti i diodi led sono spenti.

CIRCUITI test per la SPI


Grazie ai cinque programmi dimostrativi, che vi forniamo su richiesta
insieme alle tre semplici interfacce presentate in queste pagine, non so-
lo potrete sperimentare subito la trasmissione-ricezione dati con lo stan-
dard SPI utilizzato dai micro ST62/65, ma avrete anche a disposizione
delle utili schede di valutazione per testare immediatamente se i pro-
grammi scritti da voi trasmettono e ricevono i dati correttamente.

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-

Fig.2 Questa la foto della


scheda LX.1380 provvista di
un dip-switch, un pulsante e
due connettori maschio per
poter collegare le schede
LX.1381-LX.1382 (vedi fig.1).
7 6 5 4 3 2 1 0 bit
ON
CONN.2 CONN.2

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

Fig.3 Schema elettrico dellinterfaccia LX.1380.


ELENCO COMPONENTI LX.1380 Quando le levette del dip-switch S1 sono poste in
posizione ON (vedi fig.4), commutano sul livello
R1 = 22.000 ohm logico 1 i piedini A0-A7 di porta A.
R2 = 22.000 ohm
R3 = 22.000 ohm
R4 = 22.000 ohm
R5 = 22.000 ohm
R6 = 22.000 ohm
R7 = 22.000 ohm PIATTINA PIATTINA
R8 = 22.000 ohm LX.1381 o LX.1382 LX.1381 o LX.1382
C1 = 100.000 pF poliestere
P1 = pulsante
S1 = dip-switch 8 posizioni
CONN.1 = connettore 24 poli
CONN.2 = connettore 5+5 poli

Fig.4 Schema pratico


della scheda LX.1380.
Le asole dei connettori P1
CONN. 2 CONN. 2
CONN.2 vanno rivolte
0831.XL

verso lalto. Le levette di


S1 corrispondono ai C1
piedini di porta A (vedi ON
fig.3) secondo la nume-
R1 7 6 5 4 3 2 1 0 bit R8
razione presente sulla ON
R2 R7
serigrafia dello stam-
R3 R6
pato, quindi non consi- 1 2 3 4 5 6 7 8

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

Dopo aver assemblato il file PROG01.ASM in


PROG01.HEX, caricate questo programma su un
micro ST62E65 che inserirete nella scheda bus si-
glata LX.1329.
Eseguita questa operazione collegate la scheda
LX.1380 alla scheda bus LX.1329 tramite il con-
nettore CONN.1 e la scheda LX.1382 alla scheda
LX.1380 tramite piattina utilizzando a vostro pia-
cere il CONN.2 a destra o quello a sinistra.

Spostate a vostro piacere una o pi leve del dip-


switch presente nella scheda LX.1380 e non ap-
pena premerete il pulsante P1 la configurazione se-
lezionata sul dip-switch verr inviata tramite la SPI
alla scheda siglata LX.1382. Fig.5 Foto della scheda LX.1381 sulla qua-
le dovrete inserire un micro ST62/65 per po-
Sui diodi led apparir il valore binario degli 8 bits ter dialogare con il micro inserito nella
selezionati tramite dip-switch e sui display appa- scheda LX.1329 (vedi fig.1).
rir lequivalente valore decimale.
C4
5 Volt
PC3 C3
PC1
DIODI
CONN.2 R2 LED
R3 bit
B 11 23
S1 26 9 7
A 8 6 Fig.6 Schema elettrico del cir-
cuito LX.1381. Gli 8 diodi led
IC1 7 5
NMI collegati al micro si accende-
14 ST62/65 6 4
PC4/S CK
ranno con lo stesso codice bi-
24 5 3 nario impostato col dip-switch
PC2 4 2
25 S1 montato sullinterfaccia pe-
2 1 riferica LX.1380 (vedi fig.4).
R1 10 1 0
C1
C6
20

13 XTAL1

21
3 12 22
C7
P1 C2
C5

7 6 5 4 3 2 1 0 bit
ELENCO COMPONENTI LX.1381

R1 = 10.000 ohm trimmer A A A A A A A A


R2 = 10.000 ohm C1 R3
R3 = 330 ohm rete resist. x 8
C1 = 100.000 pF poliestere R1 C3
C4 1831.XL
A
C2 = 100.000 pF poliestere R2
C3 = 22 mF elettrolitico C2
IC1
C4 = 100.000 pF poliestere ST62/65
C5 = 1 mF elettrolitico P1 S1
C6 = 22 pF ceramico
C7 = 22 pF ceramico C6
DL1-DL8 = diodi led
IC1 = micro ST62/65 XTAL 1
C5 B
XTAL1 = quarzo 8 MHz
P1 = pulsante CONN.2
C7
S1 = deviatore
CONN.2 = connettore 5+5 poli

Fig.7 Schema pratico di montaggio della scheda


LX.1381. Ricordate che la levetta del deviatore S1 de-
ve essere rivolta su A quando userete i programmi
TXPG02-RXPG02 e su B quando userete i programmi
TXPG03-RXPG03 (leggete il testo).
VERSO LX.1380
Sul micro in cui avete caricato il programma Per il momento vi diciamo solo di concentrare lat-
TXPG02 attaccate unetichetta con la scritta TX02 tenzione sulla configurazione del registro spmc,
(master), mentre sul micro in cui avete caricato il tramite il quale stata attivata la Start Condition.
programma RXPG02 attaccate unetichetta con la
scritta RX02 (slave). Compito del programma TXPG02-Master legge-
Il micro TX02 va innestato nella scheda LX.1329, re la configurazione del dip-switch presente nella
mentre il micro RX02 nella scheda LX.1381. scheda LX.1380 per trasmetterla al programma
Eseguite queste operazioni collegate la scheda RXPG02-Slave.
LX.1380 alla scheda bus LX.1329 tramite il con- Questo programma, dopo aver ricevuto i dati, li vi-
nettore CONN.1 e la scheda LX.1381 alla scheda sualizza con gli 8 diodi led presenti sul circuito.
LX.1380 tramite piattina utilizzando a vostro pia- Nellesempio che abbiamo scritto, la trasmissione
cere il CONN.2 a destra o quello a sinistra. dati avviene soltanto quando viene premuto il pul-
sante P1 presente nella scheda LX.1381.
IMPORTANTE: il deviatore S1 presente sul circui- In sostanza dunque il programma Slave che, ri-
to LX.1381 va posizionato verso A in modo da col- levando la pressione esercitata sul pulsante, invia
legare il piedino 26 (PC2) del micro Slave con il al programma Master la richiesta di trasmissione.
piedino 25 (PC3) del micro Master, diversamente
non verr effettuata nessuna trasmissione dati. I programmi TXPG03 - RXPG03
Nella fig.8 potete vedere la piedinatura elettrica e
logica del micro ST62/65. Dopo aver assemblato il programma TXPG03.A-
SM ottenendo TXPG03.HEX ed il programma
Questi due programmi offrono un esempio di tra- RXPG03.ASM ottenendo RXPG03.HEX, dovrete
smissione dati tra 2 micro ST62/65 tramite la fun- caricarli su due micro cancellabili tipo ST62E65.
zione SPI. Sul micro in cui avete caricato il programma
Vi facciamo notare che il pulsante P1 che si trova TXPG03 applicate unetichetta con la scritta TX03
sulla scheda LX.1380 inattivo, mentre attivo (master), mentre nel micro in cui avete caricato il
il pulsante P1 ed inattivo il trimmer R1 presenti programma RXPG03 applicate unetichetta con la
nella scheda LX.1381. scritta RX03 (slave).
Pi avanti spiegheremo nei particolari le istruzioni
specifiche della SPI presenti in questi programmi. Il micro RX03 va inserito nella scheda LX.1329,
Voi stessi leggendo i sorgenti potrete verificare mentre il micro TX03 nella scheda LX.1381.
che la trasmissione e la ricezione dei dati non Eseguite queste operazioni collegate la scheda
continua, ma avviene solo quando il programma LX.1380 alla scheda bus LX.1329 tramite il con-
RXPG02 (Slave) ne fa richiesta. nettore CONN.1 e la scheda LX.1381 alla scheda

Vcc GND TEST/Vpp

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

IC1 15 IC2 15 IC3 15 IC4 15

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.

ELENCO COMPONENTI LX.1382


DL1-DL8 = diodi led
R1 = 330 ohm rete DISPLAY1 = display TIL.702
R2 = 330 ohm rete DISPLAY2 = display TIL.702
R3 = 330 ohm rete DISPLAY3 = display TIL.702
R4 = 330 ohm rete IC1 = C/Mos tipo 4094
C1 = 100.000 pF poliestere IC2 = C/Mos tipo 4094
C2 = 100.000 pF poliestere IC3 = C/Mos tipo 4094
C3 = 100.000 pF poliestere IC4 = C/Mos tipo 4094
C4 = 100.000 pF poliestere CONN.2 = connettore 5+5 poli

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

DISPLAY 1 DISPLAY 2 DISPLAY 3

R1 R2 R3 R4

IC1 C1 IC2 C2 IC3 C3 IC4 C4

CONN.2

Fig.11 Schema pratico di montaggio del-


la scheda LX.1382. Il terminale pi cor-
to dei diodi led (vedi terminale K) va ri-
volto in basso verso i tre display.

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:

I Programmi TXPG02 e RXPG02 misc .def 0ddh


ISTRUZIONE per ISTRUZIONE spda .def 0e0h
spdv .def 0e1h
Le possibilit offerte dalla funzione SPI sono mol- spmc .def 0e2h
teplici, ma non potendo fare un articolo fiume che
contemplasse tutte le casistiche necessarie ad il- I piedini della porta A gestiti dal dip-switch risul-
lustrarle, abbiamo realizzato i programmi di esem- tano configurati Input Pull-Up senza Interrupt.
pio di cui avete appena letto una sintetica descri-
ldi port_a,00000000b
zione. Oltre a permettervi di sperimentare subito la
ldi pdir_a,00000000b
SPI, potranno servirvi per testare un programma
ldi popt_a,00000000b
scritto da voi.
Ad esempio, caricando sul circuito Master il vostro A questo proposito vi ricordiamo che i piedini di
programma e sul circuito Slave il nostro RXPG02, Port_A corrispondono alle levette del dip-switch
sarete in grado di valutare immediatamente se il come qui sotto riportato:
vostro programma trasmette i dati correttamente.
Stessa cosa potrete fare per testare un vostro pro- ldi port_a, 0 0 0 0 0 0 0 0b
gramma in ricezione. S1 0 1 2 3 4 5 6 7

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.

Provvede ad assegnare alletichetta main questa Listruzione che segue, cio:


istruzione che ricarica il watchdog.
ldi spmc,00010100b
ldi misc,1
carica nel registro spmc i valori di configurazione
Come abbiamo spiegato, mettendo a 1 il bit 0 di Master per la trasmissione dati e seleziona la mo-
misc, il piedino 3 di Port_C passa dallo stato di I- dalit Clock Master mode con polarit e fase nor-
O a PC3 Sout e diventa il piedino di trasmissione mali. Non previsto un filtro in trasmissione e il
della funzione SPI. bit 2 Spstrt posto a 1 serve a gestire assieme al
bit 7 Sprun la condizione di Start trasmissione-ri-
Attenzione: vi ricordiamo che se non inserite que- cezione. Inoltre il bit 7 Sprun stato messo mo-
sta istruzione, anche configurando il registro spmc mentaneamente a 0. Infatti ponendolo a 1 avrem-
in Master Mode, la trasmissione dei dati non av- mo attivato la condizione di Start trasmissione-ri-
verr mai e il clock di trasmissione su PC4 Sck cezione e se durante la fase iniziale di configura-
non partir mai. zione dei due micro fosse stato inviato un falso se-
La successiva istruzione: gnale sul piedino PC2 del Master, questi avrebbe
iniziato a trasmettere con il programma Slave non
ldi spdv,01000111b ancora pronto a ricevere i dati.

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.

ldi armc,00000000b res 3,port_c


ldi adcr,00000000b
ldi tscr,00000000b Questa istruzione , come vedete bene, identica a
ldi ior,00000000b quella inserita nella routine di interrupt, ed ha lo
stesso scopo.
Linterrupt da gestire in questo programma quello
su SPI per fine ricezione dati (ricordate il bit 6 Spie ldi misc,0
del registro spmc spiegato nellarticolo teorico a
pag.107), quindi prima del programma principale in- Mettendo a 0 il bit 0 del registro misc noi riportia-
seriamo la routine per gestire questo interrupt. mo il piedino 3 di porta C a normale piedino di I-O
e non pi PC3 Sout di SPI.
CS_int res 3,port_c Se per errore lo avessimo settato a 1 in questo pro-
ldi wdog,0ffh gramma specifico, i dati che mano a mano veni-
ld a,spda vano ricevuti su PC2 Sin e caricati bit per bit sul
ld port_b,a registro spda, con la stessa sequenza sarebbero
res 7,spdv stati ritrasmessi sul piedino 3 di porta C (PC3 Sout)
reti creando probabilmente un notevole caos.
Questa routine viene attivata quando la ricezione
ldi spdv,01000111b
dati terminata e svolge la seguente funzione:
Con questa istruzione configuriamo il registro spdv
res 3,port_c
e quindi la ricezione dati sar di 8 bits alla velocit
trasmette cio subito un segnale falling edge (fron- di 2400 bit rate.
te di discesa) tramite il piedino 3 di Port_C al mi-
cro Master, cosicch il relativo piedino 2 si trover Come avrete notato, abbiamo inserito le identiche
a livello logico 0 e sar ripristinata la condizione di modalit del programma TXPG02, anche se nel ca-
start di trasmissione gi spiegata per il programma so della velocit completamente superfluo dal
TXPG02. momento che la ricezione dei dati avviene sul fron-
te del clock presente sul piedino PC4 Sck e quin-
ldi wdog,0ffh di comanda sempre la frequenza del Master. Se
ad esempio avessimo scritto:
Questa istruzione ricarica il watchdog.
ldi spdv,01000110b
ld a,spda
ld port_b,a che corrisponde ad una velocit di ricezione di 9600
bits rate (vedi Tabella N.2 nella rivista N.198), la ri-
La ricezione terminata, quindi il registro spda cezione sarebbe avvenuta comunque a 2400 bits
contiene il valore del dato ricevuto e trasmesso dal rate, dal momento che Master trasmette con un
Master. Per visualizzarlo tramite gli 8 leds lo dob- clock di 2400 bits rate. Comunque, nel caso di dia-
biamo caricare su porta B e per questo utilizziamo logo tra due microprocessori, per coerenza tra i da-
laccumulatore a. ti conviene sempre definire unidentica velocit di
trasmissione e di ricezione.
res 7,spdv
Per il numero dei bit da ricevere invece assolu-
Il bit 7 del registro spdv, come gi spiegato, si set-
tamente necessario definirli sempre uguali al nu-
ta automaticamente a 1 allattivazione dellinterrupt
mero dei bit da trasmettere altrimenti potrebbero
e quindi prima di uscire dalla routine relativa sar
sorgere grossi problemi di valorizzazione dati.
nostra cura portarlo a 0.
Infatti, se ricordate, la trasmissione finisce quando
reti sono stati trasmessi un numero di bits pari a quel-
lo indicato nel registro spdv del programma Ma-
Conoscete oramai tutti la sua funzione. ster e stessa cosa vale anche per la ricezione do-
Definita e spiegata questa routine di interrupt si ve vengono ricevuti un numero di bits pari a quel-
passa ora al programma principale: lo indicato nel registro spdv del programma Slave.
Questo significa che se i due valori non sono u-
main ldi wdog,0ffh guali la trasmissione dei dati potrebbe durare pi
della ricezione e viceversa e vi lasciamo immagi- In questo caso il bit 7 Sprun di spmv viene setta-
nare quali valori strani potreste ritrovare nel regi- to a 1 e ci d inizio alla ricezione dati.
stro spda al termine di tutto ci. Il programma per non riceve ancora nulla, perch,
come gi detto, il micro Master in condizione di
ldi spmc,01001000b Start di trasmissione e attende solamente un se-
gnale sul suo piedino 2 di Port_C sotto forma di
In questo modo il registro spmc viene caricato con fronte di salita (rising edge) per iniziare ad inviare
valori di configurazione Slave per la ricezione dati. il clock e i dati.
Viene selezionata la modalit Clock Slave mode,
con polarit e fase normali e senza filtri in rice- set 3,port_c
zione. Notate che il bit 7 Sprun stato caricato a
0: questo sta a significare che, per il momento, non Con questa istruzione inviamo finalmente questo
abbiamo dato inizio a nessuna ricezione dati. segnale e a questo punto avr inizio la trasmissio-
Inoltre abbiamo attivato la richiesta di interrupt SPI ne del Master e la corrispondente ricezione.
settando a 1 il bit 6 Spie.
Pertanto, tutte le volte che verr rilevata la fine ri- jp pippo
cezione, il programma attiver la richiesta di inter-
rupt su SPI, salter alla locazione di memoria re- Ora il programma ritorna al ciclo di gestione pul-
lativa al vettore e cio 0F4H dove trover listru- sante P1 per attivare eventualmente altri cicli di ri-
zione di salto jp CS_int, e attiver cos la routine cezione dati.
descritta poco sopra.
COSTO di REALIZZAZIONE
Nota: se avete gi usato i programmi che fornia-
mo come esempio dovreste gi avere questo vet-
Tutti i componenti necessari per realizzare la sche-
tore corretto, in caso contrario allindirizzo 0F4H in-
da LX.1380 visibile in fig.4 ......................... 8,30
serite listruzione jp CS_int.
Tutti i componenti necessari per realizzare la sche-
Proseguendo troviamo:
da LX.1381 visibile in fig.7, compresi il quarzo, i
ldi ior,00010000b diodi led, una piattina cablata completa di due con-
nettori femmina Escluso il micro ST62/65 che po-
con questa istruzione abilitiamo tutti gli interrupt. trete richiedere a parte .............................. 12,65

Di seguito sono inserite: Tutti i componenti necessari per realizzare la sche-


da LX.1382 visibile in fig.11, compresi i tre display,
pippo ldi wdog,0ffh gli 8 diodi led, 4 integrati 4049 pi 8 zoccoli,
jrr 3,port_c,res3 una piattina cablata completa di due connettori fem-
jp pippo mina .......................................................... 20,90
res3 jrr 0,port_a,rilp1
jp pippo Un dischetto floppy DF.1380 contenente i 5 pro-
rilp1 jrs 0,port_a,sipl1 grammi descritti nel testo .......................... 7,75
ldi wdog,0ffh
jp rilp1 Su richiesta possiamo fornire anche i micropro-
cessori ST62/E65 riprogrammabili a ........ 18,08
Queste 8 istruzioni hanno il compito di testare se
stato premuto il pulsante P1 e, nel caso, il rela- Costo del solo stampato LX.1380 .............. 4,29
tivo rilascio evitando cos rimbalzi e falsi segnali sul Costo del solo stampato LX.1381 .............. 3,41
piedino 0 di Port_A. Costo del solo stampato LX.1382 .............. 5,68
Inoltre si accede alla parte della gestione del pul-
sante P1 solamente quando il piedino 3 di Port_C Nota: se ancora non avete la scheda bus siglata
a livello logico 0 e cio solo quando il dato sta- LX.1329, pubblicata sulla rivista N.192, ve la pos-
to ricevuto e viene visualizzato tramite gli 8 leds siamo fornire completa di circuito stampato, zoc-
(vedi routine CS_int). coli, quarzo ed integrato 74HC00 a .......... 19,60

sipl1 set 7,spmc Tutti prezzi sono gi comprensivi di IVA. Coloro


che richiedono il kit in contrassegno, dovranno ag-
Il programma salta a questa etichetta nel caso sia giungere le sole spese postali richieste dalle P.T.
stato premuto correttamente il pulsante P1. che si aggirano intorno a 3,10 per pacco.
COME PROGRAMMARE i
La SGS/Thomson ha cessato di produrre tutta la serie dei micro con le
sigle ST62 e li ha sostituiti con la nuova serie ST6/C da programmare
in ambiente Windows. Chi possiede il programmatore LX.1325 potr u-
sarlo anche per gli ST6/C, ma chi possiede solo il vecchio programma-
tore LX.1170 dovr completarlo con questa semplice interfaccia.

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-

nuovi MICRO serie ST6/C


CONN. 1 CONN. 2
DS1
14
C1
16
DS2
3 3 ELENCO COMPONENTI

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

Fig.4 Schema pratico di montaggio del-


la piccola interfaccia. Il connettore fem-
mina va inserito verso la R12.

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.

FEMMINA 25 POLI VISTA FRONTALE MASCHIO 25 POLI

13 1 1 13
25 14 14 25

Fig.6 Guardando frontalmente il connettore Femmina, a sinistra visibile il terminale


13 e a destra il terminale 1. Guardando frontalmente il connettore Maschio, a sinistra
visibile il terminale 1 e a destra il terminale 13.
scolo contenitore plastico (vedi fig.3).
Potete iniziare il montaggio di questa scheda inse-
rendo tutte le resistenze da 1/8 di watt, dopo aver
ovviamente controllato il loro valore ohmico per non
inserirle in una posizione errata.

Dopo le resistenze potete montare i due diodi DS1-


DS2 rivolgendo il lato contornato da una fascia ne-
ra verso il condensatore C1, che potete inserire su-
bito dopo nello stampato (vedi fig.4).

Completato il montaggio di questi componenti mon-


tate lintegrato IC1 che, contrariamente ad ogni no-
stro montaggio, va innestato nello stampato senza
zoccolo, diversamente non riuscirete a chiudere Fig.7 Dopo aver lanciato il file Epromer, sul
il mobile plastico. monitor vi apparir questa videata.

Prima di saldarne i piedini sul circuito stampato,


controllate che la sua tacca di riferimento a forma
di U sia rivolta verso il condensatore C1.
A questo punto prendete il connettore maschio ed
il connettore femmina e innestate il circuito stam- Fig.8 Dopo aver cliccato sullo scritta Con-
pato tra le due file dei loro terminali come visibile figure, cliccate su Configure Epromer.
nelle figg.4-5, in modo che sopra ci sia la fila di 13
terminali e sotto quella di 12 terminali, poi salda-
te tutti i 25 terminali sulle piste del circuito stam-
pato facendo attenzione a non cortocircuitare due
piste adiacenti con un eccesso di stagno.
Completate le saldature, potete inserire il circuito
stampato dentro i due gusci del mobile plastico e
chiuderlo.

CARICARE il PROGRAMMA

Per caricare il programma sul vostro hard-disk in-


serite il disco siglato DFST6/C nel drive floppy.

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.

Se nel vostro computer installato Windows 95


dovete cliccare con il cursore del mouse sulla scrit-
ta Avvio, posta in basso a sinistra, e nella finestra
che appare andate sulla riga Esegui ... quindi di-
gitate A:setup e cliccate su OK.

Se nel vostro computer installato Windows 98


dovete cliccare con il cursore del mouse sulla scrit-
ta Start, posta in basso a sinistra, e nella finestra
che appare andate sulla riga Esegui ... e digitate
A:setup poi cliccate su OK.
Fig.10 La mappa del micro risulter vuota
In questo modo lancerete linstallazione e verr cio con tutti 00, fino a quando non verr
creato il gruppo di programmi contenente il file del richiamato un programma .Hex.
programmatore.
Per far partire questo programma sufficiente clic-
care sul nome del programma Epromer.

Nella nuova maschera che appare a video clicca-


te sulla scritta Configure e poi su Configure
Epromer (vedi figg.8-9).

Quando sullo schermo appare la finestra visibile in


fig.9 dovete selezionare la porta parallela che vo-
lete utilizzare, cio LPT1 o LPT2.
Se il vostro computer ha la sola LPT1 e su questa
gi collegata la stampante, dovete scollegarla
ed inserire in sua sostituzione il connettore colle-
gato al nostro programmatore.

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.

Se utilizzate il nostro programmatore LX.1325 do-


vete selezionare la riga ST626X, perch con que-
sto potete programmare tutti i microprocessori del-
la serie ST6260 -ST6265, ecc.

Se utilizzate il programmatore LX.1170, completo


dellinterfaccia LX.1430, dovete selezionare la riga
ST622X, perch con questo potete programmare
tutti i micro ST6210-ST6215, ecc.

Dopo aver selezionato la porta parallela ed il tipo


di programmatore, cliccate prima sul tasto con la
scritta APPLY e poi sul tasto con la scritta OK ed
in basso sullo schermo vedrete apparire il tipo di
configurazione e la porta selezionata.
Fig.12 Andando sulla scritta Program, po- Sul monitor apparir la mappa della memoria rela-
tete trasferire un programma .Hex allinter- tiva al programma da caricare nel micro.
no del microprocessore. Questa mappa, come visibile in fig.10, risulter vuo-
ta finch non verr richiamato il programma .HEX.
Come avrete modo di appurare, con questo nuo-
vo programma oltre a programmare i nuovi ST6/C,
riuscirete anche a programmare tutte le versioni
dei micro precedenti.

Infatti, cliccando sulla freccia a V posta sulla de-


stra della sigla del micro (vedi fig.15), compariran-
no a video tutte le sigle dei micro che possibile
programmare.

Per selezionare uno dei tanti micro inclusi nella li-


sta basta cliccare una volta sola sulla sigla del mi-
cro desiderato.
Nella riga in basso appariranno queste scritture:

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.

EEprom visualizza larea di memoria della EE-


prom; questa funzione attiva solo per quei micro
che dispongono di tale memoria.

Options visualizza loption byte che potrete set-


tare secondo le vostre esigenze.

Chip Information visualizza alcune informazio-


ni sul micro selezionato.

OPTION BYTE per micro ST62XX


Fig.14 Andando sulla scritta Help, potete
accedere ad una guida in linea, che risulta Se cliccate su Options e selezionate ad esempio
per scritta in inglese. un micro ST62T10C (vedi fig.16), a video appari-
ranno le seguenti righe, che vi permetteranno di
settare o resettare le funzioni delloption byte:

[0] D0 OSG enabled


[0] D1 Watchdog activation
[0] D2 TIMER pin pull-up enabled
[0] D3 NMI pin pull-up enabled
[0] D6 Oscillator selection
[0] D7 Read-Out Protection
[0] D8 LVD Reset
[0] D9 External STOP MODE Control

OPTION BYTE per micro ST626X

Se cliccate su Options e selezionate ad esempio


un micro ST62T60 della serie C, a video appari-
Fig.15 Cliccando sulla freccia a V, posta a ranno le seguenti righe, che vi permetteranno di
destra di ST62T00, vi apparir la lista dei settare o resettare le funzioni delloption byte.
micro ST6 che potete programmare.
[0] D0 OSG enabled
[0] D1 Oscill select
[0] D2 POR delay
[0] D3 Watchdog activation
[0] D4 PB0-1 pins pull-up disabled
[0] D5 PB2-3 pins pull-up disabled
[0] D6 Extern STOP mode enabled
[0] D7 Read-Out Protection
[0] D8 HLVD enabled
[0] D9 NMI pin pull-up enabled
[0] D12 ADC Synchro

Poich non tutti sapranno gi come usare queste


nuove funzioni, vi diciamo subito che modificando
il numero 0 racchiuso dentro le parentesi quadre
con il numero 1 si ottiene quanto segue:
Fig.16 Ammesso di aver scelto il micro
ST62T10C, cliccando su Options appari- OSG enabled Tutti i micro della serie C dispon-
ranno tutte le funzioni dellOption Byte. gono internamente di uno stadio oscillatore di e-
mergenza che permette al micro di funzionare con
un clock interno ausiliario minore di 1 MHz, nel ca-
so venisse a mancare il clock dello stadio oscilla-
tore principale. Se lasciate [0] questa funzione ri-
sulta disattivata, se invece mettete [1] questa fun-
zione viene attivata.

Oscillator selection Lasciando [0] dovrete uti-


lizzare per lo stadio oscillatore un quarzo; se in-
vece mettete [1] potrete escludere il quarzo ed in-
serire tra il piedino Osc.out e la massa una resi-
stenza il cui valore determiner la frequenza di
clock. Con un valore di 470.000 ohm otterrete u-
na frequenza di 1 MHz circa, con un valore di
100.000 ohm otterrete una frequenza di 3 MHz cir-
ca e con un valore di 47.000 ohm otterrete una fre-
Fig.17 Cliccando sulla scritta Chip Infor- quenza di circa 5 MHz. La frequenza generata non
mation, potete avere delle utili informazio- risulter per stabile come quella di un quarzo.
ni sul micro prescelto.
POR delay Lasciando [0] avrete un ritardo sulle-
secuzione della prima istruzione dopo che si ve-
rificato un reset di 2.048 cicli; se mettete [1] a-
vrete un ritardo sullesecuzione della prima istru-
zione di ben 32.768 cicli.

Watchdog activation Lasciando [0] potrete atti-


vare e disattivare il watchdog tramite istruzioni
software; se mettete [1] il watchdog sar di tipo
hardware e non potrete disattivarlo tramite nessu-
na istruzione software.

PB0-1 Lasciando [0] i pin PB0 e PB1 risultano


collegati con una resistenza di pull-up al positivo di
alimentazione; se mettete [1] viene esclusa su
questi due piedini la resistenza che li collega al po-
Fig.18 Per programmare un microproces- sitivo di alimentazione.
sore ST62T60, dovete usare il programma-
tore LX.1325 e selezionare ST626X. PB2-3 Lasciando [0] i pin PB2 e PB3 risultano
collegati con una resistenza di pull-up al positivo di
alimentazione; se mettete [1] viene esclusa su
questi due piedini la resistenza che li collega al po-
sitivo di alimentazione.

TIMER pin pull-up Se mettete [1] il pin del ti-


mer viene collegato al positivo di alimentazione tra-
mite una resistenza interna.

NMI pin pull-up Se mettete [1] il pin del NMI vie-


ne collegato al positivo di alimentazione tramite u-
na resistenza interna.

External STOP Se mettete [1] ed il pin NMI si


trova a livello logico 1, potrete eseguire la fun-
zione di Stop anche con il watchdog hardware.
In passato questa istruzione di Stop poteva esse-
Fig.19 I micro da programmare possono es- re eseguita solo con watchdog software.
sere selezionati anche cliccando sulla scrit-
ta Select Chip di questa finestra. Read-Out Protection Se mettete [1] protegge-
rete il micro in lettura.
LVD (HLVD) enabled Lasciando [0] il reset vie-
ne attivato solo portando a livello logico 0 il pin
reset oppure allaccensione del micro. Se invece
mettete [1] la condizione di reset viene automati-
camente attivata quando la tensione di alimenta-
zione scende al disotto dei 3,7-3,5 volt, e disatti-
vata automaticamente quando la tensione sale ol-
tre i 4 volt.

ADC Synchro Lasciando [0] la lettura dellA/D


viene eseguita non appena si comanda lo start
convertion. Se mettete [1] potete posizionare il mi-
cro sulla funzione Wait in modo da ridurre il ru-
more durante la lettura A/D. Per ottenere questa
lettura bisogna eseguire lo start conversion
Fig.20 Dopo aver lanciato il programma, dellA/D e poi si deve obbligatoriamente eseguire
cliccate sulla scritta Configure e poi nuo- listruzione di Wait.
vamente su Configure Epromer.
Terminata la conversione, viene generata una ri-
chiesta di interrupt dellA/D che automaticamente
permette luscita dalla condizione di Wait.

ESEMPIO di programmazione ST62E10C

Supponiamo che abbiate un file gi compilato, che


potreste aver chiamato ad esempio Prova.Hex, e
che lo abbiate memorizzato nella directory C:\ST6.
Con questo programma desiderate programmare
un micro ST62E10C utilizzando il nostro program-
matore LX.1170 completo dellinterfaccia LX.1430.

Come prima operazione dovete richiamare il pro-


gramma Epromer e, se ancora non stato confi-
gurato, cliccate sul menu Configure e selezionate
Fig.21 Ammesso di voler programmare un la riga ST622X, quindi cliccate sulla piccola fine-
micro ST62E10C, come prima operazione stra APPLY e di seguito su OK (vedi fig.21).
andate sulla prima riga ST622X.
Dopodich cliccate sulla freccia a V posta sulla de-
stra della sigla del micro (vedi fig.22) per far com-
parire a video tutte le sigle dei micro.

Ora andate sulla scritta ST62E10C e con un clic


selezionate questo micro.

Per caricare il programma andate sulla scritta Fi-


le, posta in alto nella riga dei menu, e cliccando u-
na sola volta col mouse apparir una finestra e qui
cliccate sulla scritta Open (vedi fig.23).
Ora andate nella finestra C:\ e cercate la directory
ST6 e qui cliccate 2 volte.

Sulla finestra di sinistra appariranno tutti i file .HEX


e nel nostro esempio selezionate la scritta Pro-
Fig.22 Dopo aver cliccato sulla freccia a V, va.Hex e poi cliccate su OK (vedi fig.25).
ricercate la sigla ST62E10C corrisponden- In questo modo avrete caricato in memoria il file
te al micro da programmare. per programmare questo micro.
Ora potete cliccare su Options per far apparire
le righe delloption byte (vedi fig.27).

[0] D0 OSG enabled


[0] D1 Watchdog activation
[0] D2 TIMER pin pull-up enabled
[0] D3 NMI pin pull-up enabled
[0] D6 Oscillator selection
[0] D7 Read-Out Protection
[0] D8 LVD Reset
[0] D9 External STOP MODE Control

Se volete modificare lopzione Watchdog, portate


il cursore sullo [0] e cliccate 2 volte: in questo mo-
do apparir [1].

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

Ora tornate sulla riga Eprom posta in basso a si-


nistra e cliccate su questa scritta per far apparire
la finestra di fig.26.
Per programmare il micro cliccate su Program poi
sulla finestra All.

Le scritte poste nella parte alta di questa finestra so-


no gi molto intuitive, comunque vi diciamo che an-
dando su READ potrete leggere il contenuto del mi-
cro a patto che questo non risulti protetto in lettura.

Andando sulla scritta VERIFY e poi su Blanck


Check potrete verificare se il micro risulta ancora
vergine o contiene gi un programma. Questa fun-
zione potrebbe risultare utile per verificare se la
Fig.24 Dopo aver cliccato su Open, appa-
lampada ultravioletta lha totalmente cancellato.
rir una finestra e qui ricercherete la direc-
tory C:\ST6 che contiene il programma.
ESEMPIO di programmazione ST62E60C

Supponiamo che abbiate un file gi compilato, che


potreste aver chiamato ad esempio Prova.Hex, e
di averlo memorizzato nella directory C:\ST626.
Con questo programma desiderate programmare
un micro ST62E60C utilizzando il nostro program-
matore LX.1325.

Come prima operazione dovete richiamare il pro-


gramma Epromer e se ancora non stato confi-
gurato, andate sul menu e cliccate su Configure e
selezionate la riga ST626X, quindi cliccate sulla
piccola finestra APPLY e di seguito su OK.

Dopodich cliccate sulla freccia a V posta sulla de-


stra della sigla del micro (vedi fig.22) per far com-
Fig.25 Dopo aver selezionato la directory parire a video tutte le sigle dei micro.
C:\ST6, nel riquadro di sinistra appariranno
tutti i file con estensione .Hex. Ora andate sulla riga ST62E60C e con un clic se-
lezionate questo micro.
Per caricare il programma andate sulla scritta Fi-
le, posta in alto nella riga dei menu, e cliccando u-
na sola volta col mouse apparir una finestra (ve-
di fig.23) dove cliccherete sulla scritta Open.
Ora andate nella finestra C:\ e cercate la directory
ST626 per cliccarci sopra 2 volte.

Sulla finestra di sinistra appariranno tutti i file .HEX


e nel nostro esempio selezionate la scritta Pro-
va.Hex e poi cliccate su OK.
In questo modo avrete caricato in memoria il file
per programmare questo micro.
Ora potete cliccare su Options per far apparire le
righe delloption byte.

Fig.26 Avendo scelto come esempio il file [0] D0 OSG enabled


Prova .Hex, dopo averlo caricato vedrete [0] D1 Oscill select
sul video il contenuto del file compilato. [0] D2 POR delay
[0] D3 Watchdog activation
[0] D4 PB0-1 pins pull-up disabled
[0] D5 PB2-3 pins pull-up disabled
[0] D6 Extern STOP mode enabled
[0] D7 Read-Out Protection
[0] D8 HLVD enabled
[0] D9 NMI pin pull-up enabled
[0] D12 ADC Synchro

Se volete proteggere il micro in lettura, dovete por-


tare il cursore sullo [0] della riga Read-Out pro-
tection e cliccare velocemente 2 volte in modo che
appaia [1].

Con questo micro potete visualizzare il contenuto


della EEprom cliccando in basso sulla riga EE-
prom. Nella schermata che appare potete modifi-
Fig.27 Selezionando Options vedrete le fun-
care manualmente il contenuto di questa area di
zioni dellOption Byte, che potete modifica-
memoria.
re come spiegato nel testo.
Ora ritornate sulla riga Eprom posta in basso a si-
nistra e cliccate su questa scritta per far apparire
la finestra di fig.26.
Per programmare il micro cliccate su Program poi
sulla finestra All.

COSTO di REALIZZAZIONE

Tutti i componenti necessari per realizzare questa


interfaccia LX.1430 (vedi fig.4), compresi due con-
nettori e un piccolo mobile plastico ............ 5,40

Costo del circuito stampato LX.1430 ........ 1,03

Programma DFST6/C sotto Windows ........ 7,75

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:

Di conseguenza se avete una macro che esegue ledflash


delle somme, datele il nome sommat, se avete u-
na macro che configura le porte, datele il nome Ricordatevi sempre che i nomi non possono mai
defport e cos via. superare gli 8 caratteri.

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:

SOURCE FILE : LEDFLASH.LMA

In fig.4 invece visibile il punto del listato in cui a-


vevamo inserito la macro ledflash.

Sottolineiamo ancora una volta che il compilatore


ha sostituito la macro con le relative istruzioni e
anche se nella riga 109 il nome ledflash rima-
sto, non occupa nessuna area di memoria come
visibile alla sua sinistra.

LE SPECIFICHE della DIRETTIVA .MACRO

abbastanza intuitivo che la macro ledflash cos


com pu essere richiamata solo nei programmi
che utilizzano il pin 4 di porta B.
Fig.2 Nella simulazione del programma
LAMPLED.HEX, listruzione ledflash stata
sostituita con le istruzioni della macro. Se volessimo utilizzare un qualsiasi piedino di u-
na qualsiasi porta dovremmo necessariamente

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:

dimenticandoci di completarla con port_b, il com- ledflash port_b,4


pilatore si sarebbe trovato nellimpossibilit di so-
stituire cheporta ed avrebbe segnalato lerrore che Quando il Compilatore assembler trover ledflash
abbiamo riportato in fig.5, pertanto quando si uti- port_b,4 caricher al suo posto le istruzioni di LED-
lizzano i parametri della direttiva .macro bisogna FLASH.LMA sostituendo il parametro cheporta
fare molta attenzione. con port_b ed il parametro chepin con 4.

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.

quando il compilatore avrebbe assemblato il pro-


Il parametro [,?label]
gramma avrebbe sostituito i parametri cheporta e
chepin presenti in LEDFLASH.LMA con port_b e
A questo punto abbiamo ottenuto una macro che
con 6. Il lampeggio in questo ultimo caso sareb-
setta e resetta un qualsiasi piedino di una qual-
be avvenuto sul pin 6 della porta B e non pi sul
siasi porta del micro.
pin 4 della porta B.
Come avrete capito bastano poche modifiche per
Esiste per un altro problema dovuto al fatto che
far lampeggiare il diodo led posto su un qualsiasi
allinterno di ledflash ci sono le labels lamp0 e
piedino delle porte del micro.
lamp1. Infatti ogniqualvolta vorremo utilizzare que-
Qualcuno certamente si star chiedendo cosa av-
sta macro dovremo assicurarci di non avere gi u-
viene se per errore si scrive:
tilizzato queste labels nel nostro programma prin-
cipale, perch se esistono il compilatore segnaler
ledflash 4,port_b
errore.
In questo caso, quando il Compilatore incontra led-
Inoltre se in pi punti del programma principale noi
flash carica le istruzioni relative sostituendo che-
inseriamo la macro ledflash, il compilatore sosti-
porta con 4 e chepin con port_b, quindi segnala
tuir ad ogni ledflash che incontra la relativa se-
lerrore visibile in fig.6 perch nelle istruzioni suc-
quenza di istruzioni ed anche in questo caso le la-
cessive la macro caricata contiene istruzioni as-
bels lamp0 e lamp1 sarebbero doppie, triple ecc.
solutamente sbagliate:
Conviene quindi sempre parametrizzare anche le
jrr port_b,4,lamp0
labels interne di una macro utilizzando il parame-
res port_b,4
tro [,?label].
jp lamp1
lamp0 set port_b,4
Modifichiamo dunque il file LEDFLASH.LMA come
lamp1
qui sotto riportato:

.macro ledflash cheporta,\chepin,?chelab0,?chelab1


jrr chepin,cheporta,chelab0
res chepin,cheporta
jp chelab1
chelab0
set chepin,cheporta
chelab1
.endm
Nella riga .macro abbiamo inserito, oltre ai para- per nel programma LAMPLED.ASM dovremo in-
metri di cui abbiamo gi parlato, anche i parametri serire il richiamo della macro in questo modo:
?chelab0 e ?chelab1 e nelle righe successive ab-
biamo sostituito la label lamp0 con chelab0 e la ledflash port_b,4
label lamp1 con chelab1.
Il simbolo ? davanti a chelab0 e chelab1 definisce omettendo volutamente le labels.
che si tratta di una label interna e quindi le label
situate internamente alla macro e gli eventuali sal- Assemblando il programma LAMPLED.ASM, il
ti di programma verranno automaticamente effet- compilatore inserir le istruzioni ledflash, sosti-
tuati allinterno della stessa. tuendo cheporta con port_b e chepin con 4.

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

.macro ledflash cheporta,\chepin,?chelab0,?chelab1


jrr chepin,cheporta,chelab0
res chepin,cheporta
jp chelab1
chelab0
set chepin,cheporta
chelab1
.endm
Fig.7 Seguendo le lezioni sulle istruzioni del linguaggio Assembler, imparare a
programmare i micro ST6 sar pi semplice di quanto possiate immaginare.

(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:

Unico inconveniente che potremmo riscontrare chelab0 con lamp0chext


che le labels cos generate siano veramente poco chelab1 con lamp1chext
comprensibili rendendo molto difficoltosa la lettura
del programma. Ora prendiamo il nostro programma principale
LAMPLED.ASM e andiamo a modificare entrambi
SECONDA SOLUZIONE i richiami a ledflash.

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-

.macro ledflash cheporta,\chepin,?chext


jrr chepin,cheporta,lamp0chext
res chepin,cheporta
jp lamp1chext
lamp0chext
set chepin,cheporta
lamp1chext
.endm
sce le istruzioni relative sostituendo cheporta con ledflash con la differenza che lamp0chext diven-
port_b e chepin con 4, quindi ricerca le label che ter lamp0r2 e lamp1chext diventer lamp1r2.
contengono chext e le sostituisce con r1 effet-
tuando una concatenazione. A questo punto abbiamo creato una macro che
Il risultato che la label lamp0chext diventer: in grado di settare e resettare un bit qualsiasi di u-
na qualsiasi variabile e che utilizza le labels in-
lamp0r1 terne significative parametrizzandole.
Abbiamo quindi una macro che pu essere richia-
e la label lamp1chext diventer: mata tranquillamente allinterno di qualsiasi pro-
gramma senza alcuna precauzione.
lamp1r1
Vi solo una piccola regola da rispettare, cio
Stessa cosa avverr quando verr letto il secondo quando si utilizza la concatenazione di queste la-

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

lamp0ret e lamp1ret Con questa sub-routine anzich scrivere per due


lamp0ret e lamp1ret volte la parola ledflash scriverete solo:

e verr segnalato un errore perch le labels sono call lampeg


doppie e gi definite. .
.
Come per le labels, la propriet di concatenazione call lampeg
esiste anche per le variabili, come riportato nelle-
sempio che segue. Lutilizzo di macro allinterno dei programmi, se da
Modifichiamo ledflash.LMA scrivendo: un lato pu facilitare e snellire la stesura dei pro-
grammi stessi, dallaltro permette anche di proteg-
.macro ledflash cheporta,\chepin gerli dalla lettura.
jrr chepin,port_cheporta,lamp0 Infatti se qualcuno venisse in possesso di un sor-
res chepin,port_cheporta gente, dove nei punti principali anzich le istruzio-
jp lamp1 ni scritte in modo chiaro trovasse delle macro, non
lamp0 potrebbe decifrare il programma senza il listato di
set chepin,port_cheporta queste macro.
lamp1
.endm A chi volesse proteggere i propri programmi con-
sigliamo di memorizzare queste macro directory
Avrete dunque notato che nella 2-3-6 riga ab- su supporti esterni come Floppy Disk, unit Zip o
biamo inserito port_ prima di cheporta. Hard Disk removibili da inserire solo al momento
In questo modo noi possiamo modificare LAM- della compilazione in assembler.
PLED.ASM scrivendo solo: In questi casi dovete ricordarvi di modificare il co-
mando .input.
ledflash b,4
Ad esempio se la macro ledflash fosse stata me-
cio abbiamo sostituito port_b con b. morizzata su Floppy Disk anzich nella directory
di LEDFLASH.LMA, avremmo dovuto scrivere nel
Ricompilando il programma LAMPLED.ASM il programma questa istruzione:
compilatore quando incontra ledflash carica le i-
struzioni relative sostituendo cheporta con b. .input a:\ledflash.LMA
Quindi port_cheporta diventa port_b e la parola
chepin diventa 4. In questo modo la macro verr direttamente pre-
Abbiamo cos ottenuto un concatenamento dei pa- levata dal Floppy Disk e solo cos il programma
rametri della variabile definita port_b. riuscir ad assemblarsi.
Per PROGRAMMARE i
I microprocessori della serie ST6/B sono stati sostituiti dalla nuova se-
rie ST6/C programmabile in ambiente Windows 3.1-95-98. Il linguaggio
di programmazione non cambiato, ma poich nuove funzioni sono sta-
te aggiunte ed altre sono state modificate, in questo articolo ci occu-
peremo delle novit pi rilevanti.

La funzione SPI ve select, propria degli ST6260-65, permettono di


attivare una comunicazione Half Duplex su tre fili
Come abbiamo spiegato nella rivista N.198, la Se- con selezione Master e Slave.
rial Peripheral Interface, meglio conosciuta come
SPI, consente di mettere in comunicazione il no- Dei piedini e dei registri coinvolti nella ricezione
stro micro con una EEprom esterna oppure con - trasmissione dati ci siamo occupati, con parti-
uno Shift register o con un altro integrato, se- colare riguardo, nella rivista N.198, che vi consi-
condo uno standard di trasmissione e ricezione gliamo di rileggere.
dati in modalit seriale sincrona. In questa circostanza invece utile ricordare che
la SPI si attiva predisponendo adeguatamente cer-
Le possibilit offerte da questa particolare funzio- ti registri, diversamente i piedini coinvolti continue-
ne, di cui sono dotati anche i nuovi microproces- ranno a svolgere le normali funzioni per cui erano
sori della serie ST6/C, sono molteplici e offrono al stati in precedenza programmati.
programmatore non pochi vantaggi, soprattutto
considerando il fatto che svolgendosi la trasmis- Vediamo dunque subito quali differenze ci sono tra
sione e ricezione dati in maniera del tutto auto- la serie B e la nuova serie C degli ST6.
matica, il microprocessore pu nel frattempo ese- Nella versione degli ST6/B, per attivare la SPI in
guire le altre istruzioni del programma. Master Mode era necessario configurare il piedi-
no PC4 (Sck) di Porta C come Output Push Pull
In sostanza, le specifiche della funzione SPI in con- e settare a 1 il bit Spclk del registro spmc (Spi
figurazione Tree wire Half Duplex with Master/Sla- Mode Register).
Il bit Spclk, Base Clock Selection, consente infatti Ponete particolare attenzione al fatto che nella terza
di selezionare il clock e informa il microcontrollo- riga (vedi port_c) abbiamo configurato a 1 il piedino
re se il clock sar interno (bit a 1 e dunque atti- PC2 (00000100) in modalit Input No Pull-Up; nella
vazione del Master Mode) o esterno (bit a 0 e dun- sesta riga, avendo settato a 1 il bit 2 del registro
que attivazione dello Slave Mode). spmc (00010100), abbiamo attivato la condizione di
Start Selection (vedi rivista N.198) e nella settima ri-
Nella versione degli ST6/C, per attivare la SPI in ga (vedi spda) abbiamo inserito il valore esadeci-
Master Mode, i piedini PC3 (Sout) e PC4 (Sck) male C8h che corrisponde al valore decimale 200.
devono essere configurati in Reset State, cio:
Dopo aver visto come va configurata la funzione
pdir_c = 00000000b
SPI per attivare il Master Mode nei nuovi micro del-
popt_c = 00000000b
la serie C, ora descriviamo alcune importanti ca-
port_c = 00000000b
ratteristiche di questi nuovi microprocessori e le
perch sufficiente settare a 1 il bit Spclk del re- funzioni delloption byte, che abbiamo gi avuto
gistro spmc (Spi Mode Register) per configurare modo di presentarvi nella rivista N.202.
automaticamente il PC4 di Porta C come Output
Push Pull. Il dispositivo LFAO
I bit relativi a pdir_c e popt_c non devono essere
assolutamente modificati e quindi devono rimane- Nella versione C degli ST62X stato inserito un o-
re in Reset State. scillatore ausiliario interno di emergenza siglato

nuovi MICRO serie ST6/C


Quando settiamo a 1 il bit M0 del registro misc (Mi- LFAO (Low Frequency Auxiliary Oscillator).
scellaneous), che attiva la SPI per la trasmissio- Questo oscillatore pu essere attivato in sostitu-
ne dati, automaticamente il PC3 di Porta C si con- zione delloscillatore principale settando a 1 il bit
figura come Output Push Pull. 2 denominato OSC. OFF, cio Main Oscillator Off,
del registro adcr dellA/D converter (vedi fig.1).
Anche in questo caso i bit relativi a pdir_c e popt_c
non devono essere modificati, cio devono rima-
nere in Reset State. bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
Per capire meglio le peculiarit della programma- EAI EOC STA PDS
OSC.
OFF.
zione della SPI nei micro ST6 della versione C vi
portiamo un semplice esempio. Fig.1 Gli ST6 della serie C hanno un oscil-
latore ausiliario interno di emergenza che
Ammesso di voler trasmettere il valore 200 trami- pu essere attivato ponendo a livello logi-
te SPI da un dispositivo in Master Mode ad un di- co 1 il bit 2 (vedi OSC. OFF) del registro AD-
spositivo Slave, in modalit 8 bits alla velocit di CR dellA/D converter.
9600 B/Rate, in Polarit e Fase normali, senza Fil-
tro e Interrupt, le istruzioni saranno:
Attivando questo dispositivo si riduce drastica-
ldi pdir_c,00000000b
mente la frequenza interna di clock ad una fre-
ldi popt_c,00000000b
quenza compresa tra 0,8-1 MHz, che permette al
ldi port_c,00000100b
microcontrollore di eseguire tutte le sue funzioni,
anche se a velocit ridotta. Allo stesso tempo si
ldi misc,1
riduce la corrente di assorbimento del micro, che
scende ad un valore di circa 1 mA.
ldi spdv,01000110b
ldi spmc,00010100b
Solitamente questo dispositivo si attiva solo quan-
ldi spda,C8h
do non necessitano elevate velocit di esecuzione
set 7,spmc
oppure per ridurre il consumo di corrente quando
loop jrs 7,spmc,loop
il micro alimentato da un Gruppo di Continuit.
Pu inoltre risultare utile per diminuire il rumore Quando si accende il microcontrollore, si attiva il
durante una conversione A/D in concomitanza con Power On Reset (POR) per cui tutte le porte di
lutilizzo dellistruzione wait (modalit stand-by). I/O sono inizialmente configurate come input pull-
Nel paragrafo relativo allA/D sync, riportato in que- up e non viene eseguita alcuna istruzione.
sto articolo, parleremo proprio di questo caso in Non appena la tensione di alimentazione raggiun-
modo esauriente. ge i 2,5 - 3,0 volt, loscillatore inizia a generare la
sua frequenza di clock e poco dopo il micro inizia
Resettando il bit OSC. OFF, ponendolo cio a 0, ad eseguire la prima istruzione.
si riattiva automaticamente loscillatore principale. Questa fase abbastanza critica, perch se per
vari motivi la tensione non raggiungesse i 4,1 volt
La funzione LVD o non fosse stabile, il micro potrebbe presentare
anomalie di funzionamento nella partenza o du-
Nelle versioni degli ST6 precedenti alla C, la con- rante lesecuzione del programma.
dizione di Reset del microprocessore veniva atti-
vata quando si verificava una di queste condizioni: Attivando la funzione LVD, il micro esegue sola-
mente la fase di POR, dopodich attende che la
1 allaccensione del micro (Power On Reset), tensione raggiunga un valore superiore ai 4 volt
2 quando il watchdog si decrementava fino a 0, prima di iniziare ad eseguire tutte le istruzioni del
3 quando il piedino di Reset veniva esternamente programma (vedi fig.3).
cortocircuitato a massa. Garantendo una tensione stabile e, di conseguen-
za una frequenza di clock stabile, si evitano false
Nella versione C stata prevista una quarta con- partenze di programmi e altre possibili anomalie di
dizione di Reset, che si pu attivare in fase di pro- funzionamento.
grammazione settando la funzione LVD o Low Vol-
tage Detector delloption byte. In conclusione la funzione LVD attiva una condi-
zione di Reset temporaneo in due occasioni:
Con LVD attivato, cio settato a 1, quando la ten-
sione di alimentazione, che deve essere di 5 volt, 1 nella fase di inizializzazione o POR, fino a
scende al disotto di 3,7-3,5 volt, il micro si posizio- quando la tensione non raggiunge un valore supe-
na automaticamente sul vettore di interrupt reset. riore a 4 volt;
In altre parole entra nel cosiddetto Reset Statico
sospendendo temporaneamente ogni attivit sen- 2 durante lesecuzione del programma, quando
za resettarsi. Quando la tensione di alimentazione la tensione scende al disotto di 3,7-3,5 volt.
sale nuovamente sopra i 4 volt, il micro riparte ed
esegue leventuale routine legata al vettore di in- In entrambi i casi la condizione di Reset tempora-
terrupt RESET. neo permane fino a quando la tensione non si
In fig.2 riportato il diagramma di intervento della stabilizzata sopra i 4 volt.
funzione LVD.
Lo stadio OSG
C anche un altro caso in cui lattivazione della
funzione LVD interviene provocando una condizio- Allinterno dei nuovi micro della serie C stato in-
ne di Reset temporaneo. serito uno stadio denominato OSG (Oscillator Sa-

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

In questo modo la frequenza massima di clock non


OS OUT. LFAO potr mai superare gli 8 MHz.
Poich il suo periodo corrisponde a un tempo di:
Main Oscillator off
1 : 8 = 0,125 millisecondi

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.

Listruzione stop dovrebbe in teoria bloccare an-


che loscillatore e il watchdog, ma essendo que- ADC sync
stultimo di tipo HW non si pu disattivare e si ot-
tiene lo stesso risultato dellistruzione wait. LA/D converter presente nei micro ST62 un
convertitore analogico - digitale a 8 bit in grado
Se per si setta a 1 loption byte denominato Ex- di eseguire una conversione in un tempo di 70 na-
ternal Stop Mode Control e contemporaneamen- nosecondi con una frequenza di clock di 8 MHz.
te si setta a 1 anche loption byte denominato NMI
pin pull-up a 1 (vedi rivista N.202), si pongono i La conversione di un segnale analogico in un se-
presupposti necessari per utilizzare listruzione gnale digitale viene eseguita con una sequenza di
stop anche con un watchdog di tipo HW. approssimazioni successive, utilizzando per il
A queste condizioni, quando il programma incon- clock la frequenza generata dalloscillatore princi-
tra listruzione stop, il watchdog viene tempora- pale divisa per 12.
neamente bloccato e il micro entra nella condizio-
ne halt mode o stop mode fermandosi completa- Lavorando quindi per approssimazioni successive,
mente. se nel micro sono presenti varie fonti di rumore (ti-
Nella condizione di stop mode il micro blocca tut- mer attivo, Vdd instabile - PWM ecc.), si potrebbe
te le sue funzioni compreso loscillatore lasciando avere sul valore finale un errore di 1 o 2 bit.
attivo solo linterrupt sul piedino di NMI.
Per uscire dalla condizione di stop mode si deve Per evitare questo errore in molti nostri programmi
far giungere sul piedino NMI un fronte di discesa, (vedi dischetto DF.1208) abbiamo utilizzato la tec-
attivando cos un interrupt che potr essere e- nica del campionamento, che consiste nel ripe-
ventualmente gestito con una routine software. tere la stessa conversione A/D per 16, 32, 64 vol-
te e poi dividere il risultato per il numero scelto.
Watchdog software
In questo modo si ottiene una maggiore precisione
Settando a 0 la funzione Watchdog activation, il per si ha lo svantaggio di allungare notevolmente
watchdog diventa di tipo SW (software), pertanto il tempo di esecuzione della routine di conversione.
per attivarlo si dovr settare a 1 il bit denominato
C e settarlo a 0 per disattivarlo (vedi fig.7). Per eliminare le fonti di rumore ed ottenere un ri-
sultato finale pi preciso durante una conversione
Un Watchdog SW pu essere disattivato tramite il A/D utilizzando i micro con watchdog SW, veniva
programma e dunque si possono tranquillamente consigliato di usare listruzione wait subito dopo li-
utilizzare le istruzioni wait e stop. struzione ldi, come qui sotto riportato:

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

Fig.7 Se la funzione Watchdog viene setta- Purtroppo se il programma utilizza pi di un clock


ta a 0, il watchdog di tipo SW (software), (timer - PWM ecc.), prima che listruzione wait rie-
quindi per attivarlo si deve settare a 1 il bit sca a mettere il micro in stand-by la conversione
C del registro di Watchdog. gi completata, quindi si continuano ad avere
degli errori sul risultato finale.
Per ovviare a questo problema stata aggiunta la
funzione ADC Syncro nelloption byte dei micro ;- routine A/D
della serie C. adcon ldi adcr,10110000b
Attivando a 1 questa funzione, la conversione A/D wait ;stand-by
parte non con listruzione ldi, ma con listruzione wait, nop ;va sempre inserito
quando cio il micro in condizione di stand-by. ld a,addr ;risultato a/d in a
Chiaramente listruzione wait deve essere posta
subito dopo listruzione ldi adcr,10110000b, altri-
menti la conversione A/D non risulter corretta. ;-subroutine di interrupt A/D
tad_int ldi adcr,00010000b
Di seguito riportiamo un piccolo esempio di una reti
routine di conversione A/D per ST62/65C con la
modalit ADC synchro attivata. Ovviamente il wat- ;-vettori di interrupt
chdog di tipo SW ed disattivato. .org 0ffh
jp tad_int ;interrupt a/d e timer
addr .def 0d0h ;dati a/d conv. jp art_int
adcr .def 0d1h ;registro a/d jp CS_int
.. jp AB_int
.org 0ffch
;- Inizio programma jp nmi_int
inizio ldi wdog,0feh ; disattivo wdog jp inizio
.end

ldi ior,10h ;Global Interrupt On
Utilizzando la funzione ADC Syncro riuscirete ad
ottenere una conversione A/D molto precisa.
LA DIRETTIVA .IFC
Obiettivo di questo articolo spiegarvi lutilizzo di modo automatico durante la compilazione del pro-
un gruppo di direttive in uso nel linguaggio As- gramma, in modo da ottenere un completo pro-
sembler per ST6 che, utilizzate durante la stesu- gramma eseguibile gi parametrizzato.
ra di programmi e macro, vengono elaborate gi
in fase di compilazione snellendo lesecuzione del Queste direttive sono:
programma o della macro stessa.
.ifc = direttiva che equivale a se
Non dobbiamo infatti dimenticare che la quasi to- .else = direttiva che equivale ad altrimenti
talit dei programmi contiene al suo interno istru- .endc = direttiva che equivale a fine
zioni, sub-routine, moduli che effettuano delle .mexit = direttiva che equivale a uscita for-
scelte in base al valore di variabili, costanti, e- zata
spressioni o condizioni logiche.
.error = direttiva che mostra un messaggio
In base ai valori riscontrati o ottenuti, si attivano al-
di errore impedendo al compilatore
tre istruzioni o sub-routine o si effettuano salti di
di generare il programma .HEX
programma oppure si richiamano moduli ecc.
.warning = direttiva che pur mostrando un mes-
Quando si compila un programma per generare il saggio di errore consente al compila-
file in formato .HEX, anche le istruzioni, le sub- tore di generare il programma .HEX
routine e i moduli che comportano una scelta ge- .display = direttiva che provvede a visualizza-
nerano un codice eseguibile. re sul monitor un messaggio
Questo significa che le scelte vengono effettuate
durante l'esecuzione del programma, cio quando Per farvi capire a cosa servono le tre direttive:
il programma sta effettivamente funzionando.
In alcuni casi per ci porta a un appesantimen- .ifc
to del programma o d luogo a una maggiore dif- .else
ficolt durante la fase di test e di simulazione. .endc

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.

dellASSEMBLER per ST6


In questo articolo ci occupiamo di un gruppo di direttive del linguaggio
Assembler per ST6 che, opportunamente utilizzate, vi consentono di ot-
tenere con la compilazione un programma eseguibile parametrizzato.

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

Quindi lazione pago con carta di credito si pu df = significa definita


eseguire solo nel caso risulti vera la condizione in
cui la cassa accetti la carta di credito. ndf = significa non definita

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

Se ad esempio scriviamo: Se inseriamo gt prima di valx:

.ifc eq valx .ifc gt valx


ldi coms,8 ldi coms,8
.else .else
ldi coms,13 ldi coms,13
.endc .endc

Quando il compilatore incontra: Il compilatore assembla:

.ifc eq valx ldi coms,8


verifica se il valore di valx uguale a 0 ed as- solo nel caso valx risulti maggiore di 0; se invece
sembla listruzione: uguale o minore di 0 assembla:
ldi coms,8 ldi coms,13
solo se la condizione vera.
sottinteso che, in questo caso, il compilatore
Se invece valx e diverso 0, noi abbiamo una con-
in grado di riconoscere anche un valore negativo
dizione non vera quindi assembla listruzione che
come risultato di una espressione.
si trova dopo la direttiva .else:
Nel secondo esempio che chiude questo articolo,
avremo modo di spiegarvi come ci accada.
.else
ldi coms,13
lt = condizione minore di 0
Ricordate che per diverso da 0 si intende un valo-
Se inseriamo lt prima di valx:
re che pu essere maggiore o minore di 0.
La direttiva .endc segnala al compilatore la fine
.ifc lt valx
del blocco della condizione e deve essere sempre
ldi coms,8
inserita come ultima istruzione.
.else
A questo punto vi chiederete come fa valx a con-
ldi coms,13
tenere un valore uguale a 0 o diverso da 0.
.endc
Gli esempi che seguono chiariranno ogni dubbio.

ne = condizione non uguale a 0 Il compilatore assembla:

Si tratta della condizione opposta alla precedente, ldi coms,8


per cui se sostituiamo eq con ne:
solo nel caso in cui valx risulti minore di 0; se in-
.ifc ne valx vece risulta uguale o maggiore di 0 assembla li-
ldi coms,8 struzione:
.else
ldi coms,13 ldi coms,13
.endc
quindi passa alla direttiva .endc, che gli segnala la
Il compilatore assembla: fine del blocco della condizione.

ldi coms,8 le = condizione minore o uguale a 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

ldi coms,8 la condizione opposta alla precedente, per cui la


condizione ndf ci permetter di controllare e quin-
solo se valx risulta minore o uguale a 0. di di gestire (ad esempio per segnalare un errore,
Se valx maggiore di 0 assembla listruzione: per modificare un valore, ecc.) se esiste una va-
riabile, unetichetta o una costante che non sia an-
ldi coms,13 cora stata definita in altri punti del programma con
lo stesso nome.
quindi passa alla direttiva .endc, che gli segnala la
fine del blocco della condizione. .ifc ndf pippo
.display pippo non definito
.endc
ge = condizione maggiore o uguale a 0
Il compilatore assembla:
Se scriviamo ge prima di valx:
.display pippo non definito
.ifc ge valx
ldi coms,8 solo se pippo non risulta definito. In questo caso
.else vedremo apparire sul monitor il messaggio pippo
ldi coms,13 non definito.
.endc
PRIMO ESEMPIO
Il compilatore assembla:
Per completare quanto appena spiegato, abbiamo
ldi coms,8 scritto un programma, che abbiamo chiamato SE-
RIAL.ASM (vedi il listato in fig.1), che effettua una
solo nel caso valx risulti maggiore o uguale a 0. elaborazione di dati e provvede a trasmetterli ad
Se valx minore di 0 assembla listruzione: un dispositivo qualunque in modalit seriale a-
sincrona tramite un piedino di una porta.
ldi coms,13
La velocit di trasmissione viene regolata tramite
quindi passa alla direttiva .endc, che gli segnala la unopportuna configurazione del timer del micro.
fine del blocco della condizione.
Infatti, a seconda delle necessit, la macro che
abbiamo chiamato setbaud che effettua la scelta
df = condizione definita e il settaggio della velocit di trasmissione seriale
asincrona con la possibilit di scegliere tra queste
Nel caso si volessero inserire pi macro o pi mo- quattro velocit: 9600 - 4800 - 2400 - 1200 baud.
duli allinterno di un programma principale, la con-
dizione df ci permetter di controllare e quindi di Il listato completo della macro setbaud visibile in
gestire (ad esempio per segnalare un errore, per fig.2, mentre in fig.1 visibile la parte del pro-
modificare un valore, ecc.) se esiste una variabile, gramma sorgente nella quale durante la compila-
unetichetta o una costante gi definita in altri pun- zione viene inserita la macro.
ti del programma con lo stesso nome.
Come potete notare dalla fig.2, si tratta di una ma-
.ifc df pippo cro (setbaud) parametrizzata (m_baud), pertanto
.display pippo gi definito durante la compilazione il valore (t_baud), definito
.endc nella riga del file sorgente che richiama questa ma-
cro, verr passato e sostituito nella macro stessa
Solo se pippo risulta gi definito, il compilatore utilizzando la Common Area.
assembla: Questo ci che succede anche se, come nel no-
stro caso, i nomi usati per definire i parametri nei
.display pippo gi definito file SERIAL.ASM e SETBAUD.LMA non sono gli
stessi.
facendo apparire sul monitor il messaggio pippo
gi definito. Nota: per rinfrescarvi la memoria sulla formazione
Fig.1 LISTATO del PROGRAMMA SERIAL.ASM

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

Fig.2 LISTATO del PROGRAMMA SETBAUD.LMA

.macro setbaud m_baud


.ifc df set_tcr ;
warning "set_tcr gia definito"
endc
.ifc df set_psc ;
.warning "set_psc gia definito"
.endc
.ifc eq m_baud - 12 ; 1200 -------------+
set_tcr .set 140 ; |
set_psc .set 2 ; |
.display "1200 BAUD" ; |
.else ; altrimenti |
.ifc eq m_baud - 24 ; 2400 -----------+ |
set_tcr .set 140 ; | |
set_psc .set 1 ; | |
.display "2400 BAUD" ; | |
.else ; altrimenti | |
.ifc eq m_baud - 48 ; 4800 ---------+ | |
set_tcr .set 140 ; | | |
set_psc .set 0 ; | | |
.display "4800 BAUD" ; | | |
.else ; altrimenti | | |
.ifc eq m_baud - 96 ; 9600 -------+ | | |
set_tcr .set 70 ; | | | |
set_psc .set 0 ; | | | |
.display "9600 BAUD" ; | | | |
.else ; altrimenti | | | |
.error "ERRORE SELEZ.BAUD" ; ERRORE | | | |
.mexit ; | | | |
.endc ;------------- + | | |
.endc ;--------------- + | |
.endc ;----------------- + |
.endc ;------------------- +
.endm ; fine macro
e lutilizzo delle macro, vi consigliamo di rileggere diamo ora come lavora il compilatore.
larticolo a loro dedicato, che abbiamo pubblicato A partire dalla riga 155 incontriamo:
sulla rivista N.203.
.ifc df set_tcr
Vediamo dunque passo passo cosa succede quan- .warning set_tcr gi definito
do lanciamo la compilazione del programma sor- .endc
gente SERIAL.ASM.
Questo gruppo di istruzioni equivale a: se la co-
Tralasciamo tutte le istruzioni iniziali, che al fine stante set_tcr gi definita, segnalami un mes-
dellargomento di questo articolo non interessano, saggio di attenzione, ma prosegui ugualmente la
e soffermiamoci sullistruzione: compilazione generando il programma eseguibile,
cio il programma SERIAL.HEX.
t_baud .set 96 La direttiva .warning infatti, si utilizza per visualiz-
zare il messaggio di errore non grave racchiuso
Come gi sapete, quando il compilatore incontra tra virgolette. Questo messaggio apparir sul video
la direttiva .set assegna un valore, che nel nostro durante la fase di compilazione, fase che comun-
caso 96, alla costante t_baud. que proseguir per terminare normalmente.
Listruzione successiva:
Il compilatore perci controlla che set_tcr non sia
.input SETBAUD.LMA gi stato definito allinterno del programma princi-
pale SERIAL.ASM.
ci serve per definire setbaud come macro, in mo-
Come potete controllare dal listato in fig.1, nel pro-
do che il compilatore, quando incontra questo no-
gramma SERIAL.ASM non stata inserita nessu-
me, inserisca il contenuto del file SETBAUD.LMA,
na definizione di set_tcr, pertanto per il compila-
cio della macro per settare la velocit di trasmis-
tore si attiver la condizione non vero e quindi
sione (vedi fig.2), allinterno del programma SE-
non eseguir la direttiva .warning, ma proseguir
RIAL.ASM.
a .endc chiudendo cos questa .ifc.
Le tre istruzioni successive:
Per mostrarvi per cosa sarebbe successo nel ca-
main ldi wdog,0feh so set_tcr fosse stato definito, abbiamo provato ad
call init_a inserire in SERIAL.ASM listruzione:
call init_p
set_tcr .set 30
servono in esecuzione per caricare il Watchdog e
inizializzare sia le variabili del programma sia le Abbiamo quindi lanciato di nuovo la compilazione
porte del micro coinvolte. il cui esito visibile in fig.4.
Quando il compilatore Assembler arriva a: In questo caso compare a video il messaggio di
warning con lindicazione del file SETBAUD.LMA
setbaud t_baud e del numero 6 che corrisponde alla riga di istru-
zione della macro che ha generato il messaggio.
riconosce che setbaud una macro e pertanto la Il numero [157] invece il codice dellerrore
sostituisce con le istruzioni relative passando, co- dellAssembler.
me abbiamo gi avuto modo di ricordarvi, il para-
metro t_baud alla macro (vedi fig.3). Nota: vi ricordiamo che lestensione .LIS propria
A questo parametro assegner anche il valore de- del formato listato ottenuto durante la compilazio-
finito con listruzione .set che abbiamo appena vi- ne Assembler, come ampiamente spiegato nellar-
sto, cio 96. ticolo relativo alle opzioni dellAssembler per ST6
pubblicato sulla rivista N.194.
Poich infine questa macro costituita a sua vol-
ta da direttive, le esegue ad una ad una. Notate comunque il messaggio *** SUCCESS ***
che ci informa che il programma SERIAL.ASM
Nota: a questo proposito vi ricordiamo che le di- stato assemblato senza problemi.
rettive sono istruzioni che vengono eseguite du- Viene poi visualizzato il messaggio One warning
rante la fase di Compilazione (vedi rivista N.190). per ricordare che esiste comunque un problema,
anche se non grave.
Aiutandoci con la fig.3, che riporta il file con e-
stensione .LIS del nostro programma sorgente, ve- Ma ora ritorniamo a dove eravamo rimasti e pro-
Fig.3 LISTATO del PROGRAMMA SERIAL.LIS

154 116 setbaud t_baud ; config. velocit trasm/baud


155 1 5 .ifc df set_tcr ;
156 1 6 warning "set_tcr gia definito"
157 1 7 endc
158 1 8 .ifc df set_psc ;
159 1 9 .warning "set_psc gia definito"
160 1 10 .endc
161 1 11 .ifc eq t_baud - 12 ; 1200 -------------+
162 1 12 set_tcr .set 140 ; |
163 1 13 set_psc .set 2 ; |
164 1 14 .display "1200 BAUD" ; |
165 1 15 .else ; altrimenti |
166 1 16 .ifc eq t_baud - 24 ; 2400 -----------+ |
167 1 17 set_tcr .set 140 ; | |
168 1 18 set_psc .set 1 ; | |
169 1 19 .display "2400 BAUD" ; | |
170 1 20 .else ; altrimenti | |
171 1 21 .ifc eq t_baud - 48 ; 4800 ---------+ | |
172 1 22 set_tcr .set 140 ; | | |
173 1 23 set_psc .set 0 ; | | |
174 1 24 .display "4800 BAUD" ; | | |
175 1 25 .else ; altrimenti | | |
176 1 26 .ifc eq t_baud - 96 ; 9600 -------+ | | |
177 1 27 set_tcr .set 70 ; | | | |
178 1 28 set_psc .set 0 ; | | | |
179 1 29 .display "9600 BAUD" ; | | | |
180 1 30 .else ; altrimenti | | | |
181 1 31 .error "ERRORE SELEZ.BAUD" ; ERRORE | | | |
182 1 32 .mexit ; | | | |
183 1 33 .endc ;------------- + | | |
184 1 34 .endc ;--------------- + | |
185 1 35 .endc ;----------------- + |
186 1 36 .endc ;------------------- +
187 1 37 .endm ; fine macro

seguiamo con le successive istruzioni, visibili sem- Fig.4 Messaggio di WARNING


pre in fig.3:

.ifc df set_psc
.warning set_psc gi definito
.endc

Questo gruppo di istruzioni equivale a: se la co-


stante set_psc gi definita segnalami un mes- Fig.5 Messaggio di compilazione riuscita
saggio di attenzione, ma prosegui normalmente la
compilazione generando comunque il programma
eseguibile.

In questo caso, peraltro simile al precedente, la


costante set_psc ad essere controllata e poich
anche stavolta per il compilatore si attiver la con-
dizione non vero, non verr eseguita la direttiva
Fig.6 Messaggio di ERROR
.warning e si proseguir a .endc chiudendo cos
anche questa .ifc.

Apriamo un piccola parentesi per farvi notare che,


contrariamente agli esempi proposti allinizio
dellarticolo, per set_tcr e set_psc non stata u-
tilizzata la direttiva .else per la gestione della con- visualizzare dei messaggi a video durante la fase
dizione di non vero. Infatti, in questi due casi ci di Compilazione del programma.
interessava solo che venisse evidenziata la condi- Nel nostro caso se la condizione fosse vera, a vi-
zione vero delle direttive .ifc. deo comparirebbe 1200 BAUD, per segnalarci
che il programma SERIAL.ASM utilizza una velo-
Proseguiamo dunque con le istruzioni successive: cit di trasmissione di 1200 baud.

.ifc eq t_baud 12 dunque ora necessario verificare qual il risul-


set_tcr .set 140 tato dellespressione t_baud 12 e per farlo biso-
set_psc .set 2 gna prima ricavare il valore di t_baud.
.display 1200 BAUD Se ricordate, la prima istruzione di SERIAL.ASM
.else che abbiamo visto era:
.ifc eq t_baud 24
set_tcr .set 140 t_baud .set 96
set_psc .set 1
.display 2400 BAUD che assegna a t_baud il valore 96.
.else Pertanto lespressione t_baud 12 d come risul-
.ifc eq t_baud 48 tato:
set_tcr .set 140
set_psc .set 0 96 12 = 84.
.display 4800 BAUD
.else A questo punto chiaro che listruzione diventa:
.ifc eq t_baud 96
set_tcr .set 70 .ifc eq 84
set_psc .set 0
.display 9600 BAUD e poich loggetto della condizione, cio 84, non
.else uguale a zero, si attiva la condizione di non ve-
.error Errore Selez. Baud ro, e quindi le istruzioni:
.mexit
.endc set_tcr .set 140
.endc set_psc .set 2
.endc .display 1200 BAUD
.endc
non vengono eseguite. Il compilatore passa dun-
Ci troviamo di fronte ad un esempio un po com- que alle istruzioni poste dopo .else:
plesso di compilazione condizionata (.ifc) dove per
condizione vero viene eseguita la direttiva .di- .ifc eq t_baud 24
splay, mentre per non vero viene posta una nuo- set_tcr .set 140
va condizione .ifc, che a sua volta ha una gestio- set_psc .set 1
ne per vero e rimanda a una nuova condizione .display 2400 BAUD
di .ifc per non vero e cos via. .else

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:

.ifc eq t_baud 48 .ifc eq t_baud 24


set_tcr .set 140
set_psc .set 0 Poi va alla quarta .endc che chiude:
.display 4800 BAUD
.else .ifc eq t_baud 12

Per facilitarvi nella comprensione della sequenza


Anche in questo caso il risultato dellespressione
logica delle istruzioni, alla destra del listato visibile
t_baud 48 un valore diverso da zero:
in fig.3 abbiamo legato con dei trattini le condizio-
ni .ifc alle rispettive .endc.
96 48 = 48
Si vede cos abbastanza chiaramente che si tratta
di una serie di .ifc racchiuse una dentro laltra, do-
pertanto il compilatore ignora:
ve la prima del listato lultima ad essere chiusa.
Si parla in questo caso di .ifc nested che tradot-
set_tcr .set 140 to vuol dire nidificate.
set_psc .set 0 Vi ricordiamo che importantissimo chiudere
.display 4800 BAUD sempre ogni .ifc con una .endc.
Il compilatore segnala infatti errore nel caso che
e passa alle istruzioni dopo .else: siano state inserite un numero maggiore o minore
di .endc rispetto alle .ifc inserite.
.ifc eq t_baud 96 Segnala inoltre errore anche quando si inserisco-
set_tcr .set 70 no pi .else rispetto alle .ifc.
set_psc .set 0
.display 9600 BAUD Dopo lultima .endc il compilatore trova la direttiva
.else .endm che gli segnala la fine della macro.

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.

Notate la dicitura 9600 BAUD visibile prima del-


.error Errore Selez. Baud
la scritta *** SUCCESS *** che testimonia che
.mexit
stata selezionata la velocit di 9600 baud per la tra-
smissione.
e passa alla prima delle quattro .endc che chiude
lultima .ifc vista, cio: A questo punto vi starete chiedendo cosa succede
se nel definire t_baud, anzich utilizzare uno dei
.ifc eq t_baud 96 valori numerici gestiti dalla macro setbaud (cio 12
o 24 o 48 o 96) inseriamo un valore diverso, ad e-
Poi va alla seconda .endc che chiude: sempio 75.
Aiutandovi con il listato di fig.3 che abbiamo appe-
.ifc eq t_baud 48 na descritto provate a simulare il compilatore.
Tutte e quattro le espressioni che utilizzano t_baud ria, non vengono eseguite in fase di esecuzione del
danno un risultato diverso da zero; lultima d ad- programma e non generano nessuna opcode.
dirittura un risultato negativo. A riprova di quanto detto abbiamo lanciato lese-
Ne consegue che verranno eseguite sempre le con- cuzione del programma SERIAL.HEX tramite il si-
dizioni per non vero arrivando a: mulatore SimST626 (presentato sulla rivista N.197)
e come visibile in fig.7, dopo listruzione:
.error Errore Selez. Baud
.mexit call init_p

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.

Fig.7 Esecuzione del file SERIAL.HEX


SECONDO ESEMPIO

Per il secondo esempio abbiamo realizzato una


macro che abbiamo chiamato ritardo e che ab-
biamo salvato nel file RITARDO.LMA.

Abbiamo quindi scritto un semplice programma che


abbiamo chiamato PROVA2.ASM e in due diversi
punti abbiamo utilizzato la macro ritardo.
Fig.8 LISTATO del file SERIAL.SYM t_baud : EQU 00060H C
ad_int : EQU 008a5H P
init_a : EQU 008a3H P
elabor : EQU 008a1H P
Per ottenere un file con estensione .SYM, biso- init_p : EQU 008a4H P
gna compilare il programma sorgente inseren- inizio : EQU 00880H P
do lopzione S. In questo modo si ottiene le- trasmx : EQU 008a2H P
lenco delle etichette definite in Program Space main : EQU 008aaH P
e delle costanti simboliche utilizzate nel pro- loop : EQU 008b1H P
nmi_int : EQU 008a9H P
gramma sorgente. Come potete vedere in que-
set_psc : EQU 00000H C
ste righe, accanto a ogni etichetta (definita con
set_tcr : EQU 00046H C
P) o costante (definita con C), espresso lin- tim_int : EQU 008a6H P
dirizzo in valore esadecimale. A_int : EQU 008a8H P
BC_int : EQU 008a7H P

Fig.9 LISTATO del PROGRAMMA RITARDO.LMA

.macro ritardo time,?lop1


.ifc ndf freqz
.error "Frequenza quarzo non definita"
.mexit
.endc
.ifc gt time*freqz/6/13-256
.error "Tempo troppo lungo"
.mexit
.endc
.ifc le time*freqz/6/13-1
.error "Tempo troppo corto"
.mexit
.endc

ldi carmat,time*freqz/6/13-1
lop1 dec carmat
jrnz lop1
.endm

Fig.10 LISTATO del PROGRAMMA PROVA2.ASM

carmat .def 084h ;Variabile per avere un ritardo


freqz .set 8 ;Segnala 8MHz di frequenza
.input "RITARDO.LMA"

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

delay1 ritardo 1200 ;Esegue un ritardo di 1200 us


ret

delay2 ritardo 1500 ;Esegue un ritardo di 1500 us


ret
In fig.9 potete vedere il listato della macro chiama- cordare con il 1 esempio, questa direttiva informa
ta ritardo, mentre in fig.10 potete vedere il listato il compilatore che deve caricare la macro ritardo
del programma PROVA2.ASM relativo alle sole i- nel programma principale PROVA2.ASM, prele-
struzioni che ci interessano ai fini dellesempio. vandola dal file RITARDO.LMA.

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.

freqz .set 8 Il compilatore passa quindi al successivo blocco di


istruzioni:
definisce la costante freqz associandole il valore 8.
Questo valore corrisponde alla frequenza di oscil- .ifc gt time*freqz/6/13256
lazione del quarzo da 8 MHz utilizzato per il clock. .error Tempo troppo lungo
E ovvio che se si utilizzasse un quarzo da 4 MHz, .mexit
listruzione dovrebbe cambiare in: .endc

freqz .set 4 che equivale a: se il risultato dellespressione ti-


me*freqz/6/13256 maggiore (gt) di 0 allora se-
La terza istruzione che incontriamo riguarda la di- gnala a video il messaggio di errore Tempo trop-
rettiva .input. Come abbiamo gi avuto modo di ri- po lungo ed esci dalla macro senza generare
nessun programma eseguibile. Il compilatore passa poi al successivo blocco di i-
struzioni:
Nota: vi ricordiamo che le espressioni sono state
spiegate nella rivista N.189. .ifc le time*freqz/6/131
.error Tempo troppo corto
Il compilatore esegue automaticamente il calcolo di .mexit
questa espressione, ma noi possiamo verificare, .endc
procedendo passo passo, se la condizione vera
o non vera. che equivale a: se il risultato dellespressione ti-
me*freqz/6/131 minore o uguale (le) a 0, se-
Poich time il parametro della macro ritardo che gnala a video il messaggio di errore Tempo trop-
viene passato nel programma PROVA2.ASM, po corto, quindi esci dalla macro senza genera-
quando si richiama la macro con listruzione: re il programma eseguibile.

delay1 ritardo 1200 Il compilatore esegue automaticamente il calcolo di


questa seconda espressione, ma noi possiamo ve-
noi sappiamo che time equivale a 1200, quindi le- rificare passo passo se questa condizione risulta
spressione time*freqz/6/13256 diventa: vera o non vera.

1200*freqz/6/13256 Poich abbiamo gi visto che time vale 1200, men-


tre a freqz si associa il valore 8, lespressione ti-
Poich la costante freqz stata definita associan- me*freqz/6/131 diventa:
dola al valore 8 del quarzo, la nostra espressione
diventa: 1200*8/6/131

1200*8/6/13256 Come prima operazione eseguiamo la moltiplica-


zione:
Come prima operazione eseguiamo la moltiplica-
zione: 1200*8 = 9600

1200*8 = 9600 poi eseguiamo la prima divisione:

poi eseguiamo la prima divisione: 9600/6 = 1600

9600/6 = 1600 poi eseguiamo la seconda divisione:

quindi la seconda divisione: 1600/13 = 123,0769


1600/13 = 123,0769 e infine, dopo aver scartato i decimali, eseguiamo
lultima operazione con il solo numero intero:
e infine, dopo aver scartato i decimali, eseguiamo
lultima operazione con il solo numero intero:
1231 = 122
123256 = 133
Quindi listruzione:
Quindi listruzione:
.ifc le time*freqz/6/131
.ifc gt time*freqz/6/13256
diventa in pratica:
diventa in pratica:
.ifc le 122
.ifc gt 133
e poich il valore 122 maggiore di 0, anche que-
Poich il valore 133 non maggiore di 0, la con- sto blocco di istruzioni verr ignorato senza se-
dizione posta da .ifc non viene soddisfatta e quin- gnalare nessun errore, perch il valore di 1200 mi-
di il blocco di istruzioni viene ignorato e non viene crosecondi che vogliamo utilizzare come ritardo
segnalato errore. un valore ammesso dalla macro.
A questo punto il compilatore passa a: struzioni, dove lespressione:

ldi carmat,time*freqz/6/131 .ifc le time*freqz/6/131

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

Quindi lespressione: lo carica nella variabile carmat e lo trasforma in


formato eseguibile.
.ifc gt time*freqz/6/13256
Continuando la compilazione trova:
viene semplificata in:
lop1 dec carmat
1500*8/6/13256 jrnz lop1
.endm
il cui risultato :
Con la direttiva .endm il compilatore sa che la ma-
1500*8 = 12000 cro ritardo finita e torna al programma sorgente
12000/6 = 2000 PROVA2.ASM per proseguire la compilazione del-
2000/13 = 153 le istruzioni, dove trova:
153256 = 103
ret
Listruzione diventa pertanto:
che serve per rientrare dalla call delay2 (vedi
.ifc gt 103 fig.10).

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:

delay1 ldi carmat,7Ah


L0$ dec carmat
jrnz L0$
ret

Trasformando il valore esadecimale 7Ah nel suo


decimale corrispondente, otteniamo 122, che, co-
me desiderato, ci permetter di ottenere un ritardo
di 1200 microsecondi.
Le righe evidenziate in verde si riferiscono invece
alla sub-routine delay2 ricavata sempre dalla ma-
cro ritardo:

delay2 ldi carmat,98h


L1$ dec carmat Per un ritardo di 1200 abbiamo:
jrnz L1$
ret call delay1 1 x 4 cicli = 4
delay1 ldi carmat,7Ah 1 x 4 cicli = 4
Trasformando il valore esadecimale 98h nel suo L0$ dec carmat 122 x 4 cicli = 488
decimale corrispondente, otteniamo 152, che, co- jrnz L0$ 122 x 2 cicli = 244
me desiderato, ci permetter di ottenere un ritardo ret 1 x 2 cicli = 2
di 1500 microsecondi.
Sommando i cicli macchina di queste sub-routine
Prima per di verificare se effettivamente si otten- otteniamo 742.
gono i ritardi voluti, apriamo una parentesi per ri- Poich un ciclo macchina corrisponde a 1,625 mi-
cordarvi che, quando il compilatore, come nel no- crosecondi noi otteniamo un effettivo ritardo di:
stro caso, incontra nelle macro delle etichette o la-
bels interne (?lop1 in fig.9) le genera automatica- 742 x 1,625 = 1205,75 microsecondi
mente nel file .HEX assegnandole un numero con-
secutivo. Ecco perch le istruzioni della macro: La differenza di 5,75 microsecondi in pi rispetto
al ritardo impostato nel file sorgente non un er-
lop1 dec carmat rore, ma, in questo caso, dovuto al necessario
jrnz lop1 arrotondamento operato sui decimali nellespres-
sione calcolata.
nella simulazione del programma sono diventate ri-
spettivamente: Per un ritardo di 1500 abbiamo:

L0$ dec carmat call delay2 1 x 4 cicli = 4


jrnz L0$ delay2 ldi carmat,98h 1 x 4 cicli = 4
L1$ dec carmat 152 x 4 cicli = 608
L1$ dec carmat jrnz L1$ 152 x 2 cicli = 304
jrnz L1$ ret 1 x 2 cicli = 2

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

I PROGRAMMI in formato .HEX I PROGRAMMI in formato .OBJ

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.

per i microprocessori ST6


Infatti, allinterno di ogni programma, dopo la defi- 2 le istruzioni contenute non sono in formato as-
nizione dei registri e della variabili, viene posta la soluto, bens in formato rilocabile.
direttiva .org 0800h o 0880h che serve a posizio- In altre parole le istruzioni hanno un indirizzamen-
nare in maniera assoluta le istruzioni da quellin- to di memoria e di Program Counter relativo (e non
dirizzo di memoria ROM in poi. assoluto come nel formato .HEX) e quindi posso-
La stessa cosa si ottiene alla fine con la direttiva no essere ricollocate o, utilizzando un termine
.org 0FF0h, che posiziona le eventuali gestioni dei specifico, rilocate.
vettori di interrupt da quellindirizzo di memoria as-
soluta in poi. E dunque utile chiarire cosa si intende per indiriz-
zamento relativo e indirizzamento assoluto.
Comprenderete quindi che se si tentasse di unire
tramite il linker parti di pi programmi in formato Pensate ad esempio alla numerazione delle pagi-
.HEX, essendo ognuna di esse posizionata a un in- ne di un libro qualsiasi o di una rivista.
dirizzo fisso di memoria, si dovrebbe realizzare un Ogni numero specifica la posizione della pagina ri-
programma ad incastro, in maniera che la routine spetto alle altre, per cui il numero 10 specifica che
che ci interessa inserire dopo le istruzioni del pro- quella pagina la decima della rivista, il numero
gramma principale iniziasse esattamente ad una 128 specifica che quella pagina la centoventot-
ben precisa locazione di memoria successiva a tesima della rivista, e cos via.
quella gi occupata, in caso contrario si correrebbe In questo caso si pu parlare di indirizzamento
il rischio di sovrascrivere porzioni di programma. assoluto e, a patto di non intervenire in maniera
Unire moduli software diventerebbe cos un lavoro cruenta con tagli o strappi, questo indirizzamento
estremamente difficile, se non impossibile. non cambier mai.

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

Solo quando concatenerete uno allaltro gli arti-


coli rinumerando le pagine, darete un nuovo indi- LISTATO del programma CONTA.ASM
rizzamento assoluto alla vostra raccolta.

Chiusa questa parentesi, torniamo ai programmi ;* Programma per fare un conteggio *


.OBJ per precisare che non basta inserire lopzio-
.title CONTA
ne O nella compilazione Assembler per ottenere
.vers ST62E25
questo formato. .w_on
Se provate a compilare un vostro programma in- .romsize 4
serendo questa opzione, vedrete che il compilato- .input ST62X.DEF
re vi segnaler un certo numero di errori.
;VARIABILI usate da questo PROGRAMMA
Proprio per le sue peculiarit, nei programmi sor-
gente bisogna inserire alcune precise direttive e lsb .def 084h
modificarne o toglierne altre prima di generare il msb .def 085h
formato .OBJ. del1 .def 086h
del2 .def 087h
up_dw .def 088h
Le direttive specifiche che servono per generare il
formato oggetto e quindi anche per linkare i pro- .org 0800h
grammi .OBJ, sono:
inizio
.pp_on ldi wdog,0ffh
.extern
ldi port_a,00000000b
.section ldi pdir_a,00001100b
.window ldi popt_a,00001100b
.windowend
ldi port_b,00000000b
.global ldi pdir_b,11111111b
.notransmit ldi popt_b,11111111b
.transmit
ldi port_c,00000000b
Nellesempio che vi proponiamo di seguito cerche- ldi pdir_c,00000000b
ldi popt_c,00000000b
remo di chiarire in quale modo e perch vanno u-
tilizzate queste direttive per ottenere un program- ;*** Disabilita gli Interrupt
ma .OBJ senza errori. ldi adcr,0
ldi tscr,0
I programmi PLEXER.ASM e PCONT.ASM ldi ior,0

Per il nostro esempio abbiamo utilizzato un nostro reti


datato, ma semplice programma dimostrativo che
esegue un conteggio e lo visualizza su due display. jp main
In fig.1 abbiamo riportato il listato del programma
CONTA.ASM cos come lo avevamo realizzato. ;*** GESTORI di INTERRUPT ***

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

;*** SUBROUTINE *** ;*** PROGRAMMA PRINCIPALE ***

;- multiplexa le 2 cifre sui display main


mulplx ldi wdog,0feh
ld a,lsb
addi a,40h ldi lsb,0
ld x,a ldi msb,0
ld a,(x) ldi up_dw,1
ldi port_a,00001100b
ld port_b,a ldi drw,digit.w
ldi port_a,00000100b
loop ldi del1,17
ld a,msb main1 ldi del2,255
addi a,40h main2 ldi wdog,0feh
ld x,a
ld a,(x) call mulplx
ldi port_a,00001100b
ld port_b,a dec del2
ldi port_a,00001000b jrz main3
jp main2
ret main3 dec del1
jrz main6
;- incremento delle 2 cifre
;- con controlli jrs 0,port_a,main4
increm ldi up_dw,0
inc lsb main4 jrs 1,port_a,main5
ld a,lsb ldi up_dw,1
cpi a,10 main5
jrnz incr1 jp main1
ldi lsb,0 main6
inc msb ld a,up_dw
ld a,msb cpi a,0
cpi a,10 jrz main7
jrnz incr1
ldi msb,0 call increm
incr1 jp loop
ret
main7 call decrem
;- decremento delle 2 cifre jp loop
;- con controlli
decrem ;*** tabella con i segmenti per far
ld a,lsb ; apparire sui display le cifre ***
cpi a,0
jrnz decr1 .block 64-$%64
ldi lsb,9 digit .byte 192,249,164,176,153
.byte 146,130,248,128,144
ld a,msb
cpi a,0 ;*** VETTORI DI INTERRUPTS ***
jrnz decr2
ldi msb,9 .org 0ff0h
ret jp ad_int
jp tim_int
decr2 dec msb jp BC_int
ret jp A_int
.org 0ffch
decr1 dec lsb jp nmi_int
ret jp inizio
.end
.

LISTATO del programma PCONT.ASM

;* Programma per fare un conteggio * ;*** PROGRAMMA PRINCIPALE ***

.title PCONT main


.vers ST62E25 ldi wdog,0feh
.w_on ldi lsb,0
.romsize 4 ldi msb,0
.pp_on ldi up_dw,1
.input ST62X.DEF ldi drw,digit.w

;VARIABILI usate da questo PROGRAMMA loop ldi del1,17


main1 ldi del2,255
del1 .def 084h main2 ldi wdog,0feh
del2 .def 085h
up_dw .def 086h call mulplx
lsb .def 087h
msb .def 088h dec del2
jrz main3
.extern decrem,increm,mulplx jp main2
.section 1 main3 dec del1
jrz main6
inizio
ldi wdog,0ffh jrs 0,port_a,main4
ldi up_dw,0
ldi port_a,00000000b main4 jrs 1,port_a,main5
ldi pdir_a,00001100b ldi up_dw,1
ldi popt_a,00001100b main5
jp main1
ldi port_b,00000000b main6
ldi pdir_b,11111111b ld a,up_dw
ldi popt_b,11111111b cpi a,0
jrz main7
ldi port_c,00000000b
ldi pdir_c,00000000b call increm
ldi popt_c,00000000b jp loop

;*** Disabilita gli Interrupt main7 call decrem


jp loop
ldi adcr,0
ldi tscr,0 ;*** tabella con i segmenti per far
ldi ior,0 ; apparire sui display le cifre ***

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
.

LISTATO del programma PLEXER.ASM

;* Modulo per gestire un multiplexer ;- incremento delle 2 cifre


;* a due cifre ;- con controlli
increm
.title PLEXER inc lsb
.vers ST62E25 ld a,lsb
.w_on cpi a,10
.romsize 4 jrnz incr1
.pp_on ldi lsb,0
.input ST62X.DEF inc msb
ld a,msb
;VARIABILI usate da questo PROGRAMMA cpi a,10
jrnz incr1
lsb .def 084h ldi msb,0
msb .def 085h incr1
.section 1 ret

;*** SUBROUTINE ***

;- multiplexa le 2 cifre sui display ;- decremento delle 2 cifre


mulplx ;- con controlli
ld a,lsb decrem
addi a,40h ld a,lsb
ld x,a cpi a,0
ld a,(x) jrnz decr1
ldi port_a,00001100b ldi lsb,9
ld port_b,a
ldi port_a,00000100b ld a,msb
cpi a,0
ld a,msb jrnz decr2
addi a,40h ldi msb,9
ld x,a ret
ld a,(x)
ldi port_a,00001100b decr2 dec msb
ld port_b,a ret
ldi port_a,00001000b
decr1 dec lsb
ret ret
Fig.3 Listato del programma PLEXER.ASM. Queste istruzioni sono state tratte dal pro-
gramma CONTA.ASM (vedi in fig.1 le istruzioni evidenziate in azzurro), e per compilarle
in formato .OBJ abbiamo inserito le direttive evidenziate in giallo.

A questo punto abbiamo due programmi, La direttiva .pp_on


PLEXER.ASM e PCONT.ASM, che dobbiamo mo-
dificare e compilare separatamente per ottenere ri- Rispetto al programma originario, e cio CON-
spettivamente PCONT.OBJ e PLEXER.OBJ. TA.ASM, nel programma PCONT.ASM dopo la di-
Vedremo cos come, linkando questi programmi, si rettiva .romsize 4 abbiamo inserito la direttiva
ottenga un terzo programma in formato .HEX. .pp_on, che abilita la paginazione della memoria
del micro.
Per generare in formato .OBJ il programma
PCONT, abbiamo dovuto modificare il listato come Normalmente questa direttiva va inserita quando si
visibile in fig.2. Per generare in formato .OBJ il pro- realizzano programmi per i microprocessori ST6
gramma PLEXER, abbiamo dovuto modificare il li- che dispongono di pi di 4 kbyte di memoria Pro-
stato come visibile in fig.3. gram Space (ROM).
In entrambe le figure abbiamo evidenziato in gial-
lo le direttive inserite e ora analizzeremo nei det- In questi modelli di micro infatti, esiste una memo-
tagli queste modifiche via via che le incontreremo. ria ROM che possiamo definire primaria di 4096
.

rettiva .section e, di conseguenza, a definire anche


PAGINE ROM SOVRAPPOSTE .pp_on, altrimenti il compilatore segnaler errore.

0000h La direttiva .extern

Sempre rispetto al programma CONTA, la suc-


cessiva istruzione che abbiamo inserito nel pro-
gramma PCONT la direttiva .extern con a fian-
ROM co lindicazione di tre etichette:

.extern decrem,increm,mulplx
ROM PRIMARIA

07FFh La direttiva .extern va obbligatoriamente inserita o-


0800h gniqualvolta si intende assemblare in formato .OBJ
un programma contenente istruzioni che richiama-
no o saltano a labels di routine che non si trovano
allinterno del programma stesso, ma sono inseri-
ROM te in altri programmi. In questo modo si avverte il
compilatore di non segnalare errore quando non
trova le routine richiamate.

0FEFh Nel programma PCONT (vedi listato in fig.2) ci so-


0FF0h VETTORI DI RESET
E DI INTERRUPT no infatti tre routine chiamate con le istruzioni:
0FFFh
call mulplx
Fig.4 I micro con pi di 4 kbytes di memo- call increm
ria Program Space hanno una ROM prima- call decrem
ria suddivisa in tre pagine di grandezza di-
versa: da 0000h a 07FFh, da 0800h a 0FEFh che non vengono assolutamente definite, perch
e da 0FF0h a 0FFFh. Inoltre hanno un mas-
inserite nel programma PLEXER (vedi fig.3).
simo di 30 pagine sovrapposte con loca-
zione da 0000h a 07FFh.
Inserendo la direttiva .extern, abbiamo avvertito il
compilatore che le routine sono esterne, e che
quindi non deve segnalare errore quando incontra
bytes che va da locazione 0000h a 0FFFh e un
le istruzioni che le richiamano.
massimo di 30 pagine sovrapposte di 2048 bytes
di area ROM, tutte con locazione da 0000h a
Per avere una riprova di ci, abbiamo provato a to-
07FFh, come visibile nel disegno di fig.4.
gliere listruzione:
La stessa memoria primaria viene ulteriormente
.extern decrem,increm,mulplx
suddivisa in tre pagine di area ROM di grandezza
diversa: la prima ha locazione 0000h 07FFh, la
e abbiamo compilato PCONT.
seconda ha locazione 0800h 0FEFh e la terza ha
In fig.6 visibile la segnalazione di errore del com-
locazione 0FF0h 0FFFh.
pilatore, in cui queste tre etichette vengono indica-
te come undefined symbol.
A ciascuna per comodit viene virtualmente asso-
ciato un numero di pagina che va da 0 a 32 (vedi E importante annotare che quando si utilizza que-
tabella di fig.5) e ogni pagina deve essere indiriz- sta direttiva per definire labels di routine esterne
zata tramite unaltra direttiva chiamata .section. al programma, conviene sempre porla allinizio co-
Utilizzando .pp_on, e quindi segnalando al compi- s da rendere visibile gi in fase di edit, che il pro-
latore che deve virtualmente suddividere la memo- gramma contiene salti o richiami a routine esterne.
ria in pagine, bisogner utilizzare anche la direttiva
.section che serve a indirizzare queste pagine. Possono essere definite come .extern solamente
labels di Program Space e di Data Rom Windows.
Nel nostro esempio noi utilizziamo un micro
ST62E25 che non supera i 4 kbyte di memoria (ve- Non possono essere definite come .extern i regi-
di .vers in fig.2), ma volendo generare un program- stri, le variabili di Data space o le costanti (.def,
ma in formato .OBJ siamo obbligati ad inserire la di- .equ, .set).
.

Pagina N INDIRIZZO VIRTUALE INDIRIZZO REALE


0 0000 - 07FF 0000 - 07FF
Fig.5 A ogni pagina di memo-
1 0800 - 0FEF 0800 - 0FEF
ria, che ha un suo preciso in-
2 1000 - 17FF 0000 - 07FF dirizzo reale, viene associato
per comodit un indirizzo vir-
3 1800 - 1FFF 0000 - 07FF tuale rappresentato da un nu-
mero da 0 a 32.
da 4 a 31 [n*800]-[(9n*80)+7FF] 0000 - 07FF

32 0FF0 - 0FFF 0FF0 - 0FFF

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.

Fig.6 Errore segna-


lato dal compilatore
quando non si usa
correttamente la di-
rettiva .extern.
.

Pagina N INDIRIZZO VIRTUALE INDIRIZZO REALE SALTO A


0 0000 - 07FF 0000 - 07FF Pagina 1
Fig.7 Esistono delle limitazio-
1 0800 - 0FEF 0800 - 0FEF tutte le Pag. ni sullutilizzo dellistruzione
di salto da una pagina di me-
2 1000 - 17FF 0000 - 07FF Pagina 1 moria allaltra, per cui nelle
pagine 0 e da 2 a 31 si posso-
3 1800 - 1FFF 0000 - 07FF Pagina 1 no inserire solo istruzioni di
salto a pagina 1.
da 4 a 31 [n*800]-[(9n*80)+7FF] 0000 - 07FF Pagina 1

32 0FF0 - 0FFF 0FF0 - 0FFF tutte le Pag.

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.

Fig.8 Il controllo sul rispetto delle condizioni necessarie allesecuzione dellistruzione di


salto viene fatto dal programma linker Lst6. In questa figura segnalato errore perch li-
struzione di salto da pagina 2 pu essere eseguita solo verso pagina 1 (vedi fig.7), e non
a pagina 3 come scritto nel programma a sinistra sopra questa figura.
.

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.

Abbiamo poi simulato lesecuzione del programma


.HEX con un Simulatore Software e in fig.10 pote-
te avere la riprova di quanto affermato poco sopra.

In alto evidenziata lultima istruzione eseguibile


di PCONT e cio jp loop seguita da una serie di i-
struzioni jrnz che indirizzano sempre al byte suc-
cessivo. Questo il risultato dellinserimento delli-
struzione .block 64-$%64 che il compilatore tra-
duce appunto in tanti salti di 1 byte fino a quando
non arriva ad un blocco di memoria divisibile esat-
tamente per 64.
Infatti, quasi in fondo alla figura compare la label
digit che identifica il punto di memoria esatto in cui
sono stati inseriti i dati con i .byte e alla sua sini-
stra compare lindirizzo di memoria relativo e cio
0880h che appunto un indirizzo divisibile esatta-
mente per 64.

Spostate lo sguardo pi sotto e nella riga eviden-


Fig.9 Mappa della memoria risultante dal ziata vedrete listruzione mulplx ld a,lsb, che la
link ottenuto con PCONT.OBJ e prima istruzione del programma PLEXER e si tro-
PLEXER.OBJ. Non avendo inserito le diret- va effettivamente allindirizzo di memoria 088Ah.
tive .window e .windowend i due program-
mi sono stati accodati. Vediamo invece cosa succede inserendo .window
al posto di .block 64-$%64 e aggiungendo .win-
.

dowend. Ricompiliamo in Assembler il programma


PCONT in formato .OBJ con il comando:

ast6 L O PCONT.ASM.

Abbiamo inserito anche lopzione L perch vo-


gliamo generare anche PCONT.LIS.
Quando il compilatore incontra la direttiva .window
prosegue fino a che non trova .windowend (che
deve sempre essere inserita) e memorizza i dati
(.byte, .ascii, ecc.) definiti tra questi estremi in u-
na area rilocabile particolare definita come Win-
dow section.

In fig.11 abbiamo riprodotto la parte del file


PCONT.LIS che riguarda queste direttive.
Allaltezza della riga 119 potete notare la scritta
W00 che appunto rappresenta lassegnazione alla
Window section dei nostri 10 byte di data space i-
dentificati dalla label digit, visibili a destra nella
stessa riga.
Notate inoltre che a fianco di W00 c il numero
0000: normalmente questo numero rappresenta la
locazione di memoria in cui verr memorizzata li-
struzione e in questo caso i nostri 10 bytes ver-
ranno memorizzati a partire dallindirizzo 0 della
Window section.

A questo punto possiamo linkare PCONT.OBJ e


PLEXER.OBJ per ottenere leseguibile .HEX e in
Fig.10 Listruzione .block 64-$%64 stata fig.12 riportiamo la mappa di memoria risultante.
tradotta dal compilatore in salti di 1 byte fi- Notate subito che rispetto alla mappa precedente
no ad un blocco di memoria divisibile per (vedi fig.9) vi una Window section che inizia a
64. Infatti i dati .byte, identificati dalla label 08B5h ed lunga 000Ah (cio i 10 byte di digit).
digit, vengono inseriti allindirizzo 0880h, La stessa Window section poi richiamata pi in
che divisibile per 64. basso, nel programma PCONT.OBJ, nella terza ri-
ga della seconda colonna (vedi type W).

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

Notate per che lindirizzo della Window section


non pi 0000 come era in PCONT.LIS di fig.11
ma diventato come gi detto 08B5h.
Il linker infatti ha unito in sequenza le istruzioni dei
programmi PCONT e PLEXER e solo dopo, in co-
da a tutto, ha rilocato la Window section.

Per fare questo calcola innanzitutto la grandezza


dellarea dati che si vuole inserire in Program Spa-
ce tramite Window section (nel nostro esempio di-
git sono 10 bytes), poi si posiziona alla prima lo-
cazione di Program Space divisibile esattamente
per 64 successiva allultima istruzione del pro-
gramma finale .HEX.

Se la differenza fra questa locazione e quella rela-


tiva allultima istruzione del programma maggio-
re della grandezza dellarea dati da inserire (digit),
inserisce i dati prima di questa locazione (vedi
fig.13), se invece minore, li inserisce dopo (vedi
fig.14).

Per concludere, con le direttive .window e .win-


Fig.12 Mappa della memoria risultante dal link dowend, i dati da inserire in Program Space ven-
dei programmi PCONT.OBJ e PLEXER.OBJ gono automaticamente posizionati in coda a tutte
dopo aver inserito le direttive .window e .win- le istruzioni, in un area gi ottimizzata evitando co-
dowend. Rispetto alla fig.9, c una window s inutili sprechi di memoria e soprattutto predi-
section lunga esattamente 10 byte (000Ah), il sponendoli ad essere caricati in maniera corretta
cui inizio non pi a 0000, ma a 08B5, per- nella Data Rom Window.
ch il linker ha posizionato la window section
in coda a tutte le istruzioni.
Nota: nella rivista N.190 abbiamo spiegato il cor-
retto utilizzo della Data Rom Window.

0800h
0800h

AREA ROM
AREA ROM per le istruzioni
per le istruzioni di programma
di programma

INDIRIZZO DI MEMORIA INDIRIZZO DI MEMORIA


DELL'ULTIMA ISTRUZIONE DELL'ULTIMA ISTRUZIONE
08B5h 08B9h
DIGIT
11 BYTES 10 BYTES 7 BYTES

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.

.title plexer In realt meglio utilizzare il termine collegare,


.vers st62e25 perch i programmi vengono collegati insieme e o-
.w_on gni indirizzo di memoria, che prima era relativo ad
.romsize 4 un singolo programma, diventa indirizzo assolu-
to nel programma finale .HEX.
Abbiamo quindi aggiunto la direttiva .pp_on (vedi
riga evidenziata in giallo) che, come abbiamo gi A questo punto penserete che essendo i program-
detto, attiva la paginazione e abbiamo ripetuto la mi correttamente compilati in formato .OBJ, linkan-
definizione dei registri con la direttiva .input e la doli non incontreremo alcun ostacolo.
definizione delle variabili lsb e msb, che avevamo
gi definito in PCONT.ASM. In realt le cose non stanno proprio cos, ma poi-
ch non sarebbe utile anticipare i problemi, vedia-
Questa ripetizione si resa necessaria dal mo- mo per ora come si lancia il linker Lst6 per colle-
mento che queste variabili e alcuni registri vengo- gare PCONT.OBJ e PLEXER.OBJ e ottenere
no utilizzati nel programma e perci se non li a- XCONTA.HEX.
vessimo segnalati, il compilatore avrebbe dato er- Al prompt di DOS digitiamo:
rore e non avrebbe compilato il programma nel for-
mato oggetto .OBJ. lst6 S I T V M O XCONTA PCONT PLEXER

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

Sotto pass 1 leggiamo:

<PCONT.obj>: program section(s) size is 0x7C (124), window(s) size is 0xA (10)

Il linker calcola e segnala loccupazione di Program


Space (124 bytes) e loccupazione di window sec-
tion (10 bytes: ricordate la definizione di digit tra
.window e .windowend) del programma PCONT.

Di seguito c:

<PLEXER.obj>: program section(s) size is 0x49 (73), window(s) size is 0x0 (0)

Il calcolo della memoria di Program Space (73 by-


tes) e leventuale presenza di window section, av-
viene anche per il programma PLEXER.

Nelle tre righe seguenti leggiamo:

lst6 : ** undefined symbol <decrem> ; first referenced in file <PCONT.obj>


lst6 : ** undefined symbol <increm> ; first referenced in file <PCONT.obj>
lst6 : ** undefined symbol <mulplx> ; first referenced in file <PCONT.obj>
lst6 : <3> fatal error(s) occurred

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

La direttiva .global RILOCAZIONE degli INDIRIZZI

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.

XCONTA.hex Sempre in fig.17 abbiamo evidenziato in verde al-


XCONTA.dsd tre due istruzioni, cio:
XCONTA.sym
loop ldi lsb,11h
Nota: non ci soffermiamo sulle peculiarit dei pro- main1 ldi msb,FFh
grammi con estensione .dsd e .sym ai quali ab-
biamo dedicato larticolo apparso sulla rivista N.194. che sono invece sbagliate. Infatti, verificando il li-
stato di PCONT dovevano essere:
Questa volta il linkaggio andato a buon fine quin-
di non ci resta che effettuare una semplice prova loop ldi del1,11h
di simulazione per verificare se XCONTA.HEX fun- main1 ldi del2,FFh
ziona correttamente.
Verificando il loro opcode, possiamo vedere che
Se vi ricordate, in entrambi i programmi PCONT e loperazione di ldi avviene nelle locazioni 084h e
PLEXER avevamo definito le variabili lsb e msb, 085h, che corrispondono alle locazioni di lsb e
ma in locazioni di memoria diverse. msb definite nel programma PLEXER.
Poich il linker non ha segnalato nessuna anoma-
lia, siamo un po curiosi di vedere cosa succede Il simulatore che, come sapete benissimo, utilizza
nella simulazione. il file con estensione .dsd per assegnare le eti-
Carichiamo perci il software simulatore, il cui uso chette delle variabili e dei registri e rendere cos
stato spiegato nelle riviste N.184 e N.185, ed e- leggibile il programma, quando ha decodificato le
seguiamo la simulazione istruzione per istruzione fi- due ultime opcode, ha visualizzato le labels corri-
no ad arrivare al punto visibile in fig.17, dove in gial- spondenti agli indirizzi 084h e 085h, che in questo
lo sono evidenziate le istruzioni che nel programma file corrispondono alle etichette del1 e del2 del pro-
PCONT riguardavano le variabili lsb e msb, cio: gramma PCONT.
ldi lsb,00h In fig.18 riportiamo il contenuto del file XCON-
ldi msb,00h TA.DSD, dove potete vedere che lsb e msb sono
infatti definite 2 volte e in locazioni di memoria di-
verse.
Inoltre, del1 e del2 hanno la stessa locazione di
memoria della seconda serie di lsb - msb.
Se per guardate pi attentamente, vedrete che
anche tutti i registri, laccumulatore a, le porte lo-
giche sono definite due volte, anche se in questo
caso nella stessa locazione di memoria.
Questo sta a significare che nonostante il linker non
abbia segnalato errore, c un problema.

Per poter assemblare in formato .OBJ sia PCONT


che PLEXER, abbiamo dovuto inserire in entram-
bi i programmi le definizioni standard dei registri,
dellaccumulatore, delle porte logiche e delle eti-
chette utilizzate, perch altrimenti il compilatore a-
Fig.17 In giallo sono evidenziate le istru- vrebbe segnalato errore.
zioni ldi delle variabile lsb e msb del pro- Quando per il linker ha unito i due .OBJ, ha co-
gramma PCONT; in verde altre istruzioni me sdoppiato questi campi, generando una evi-
che non rispettano il listato di PCONT. Vi dente confusione.
facciamo notare (vedi colonna opcode) che
le locazioni di memoria sono differenti. Per impedire che questo si verifichi ci vengono in
aiuto due direttive: .notransmit e .transmit.
.

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.

Le direttive .notransmit e .transmit

Come abbiamo gi visto per la direttiva .global, an-


che le direttive .notransmit e .transmit non sono
strettamente necessarie nella fase di compilazione
in formato .OBJ, ma vanno assolutamente inserite
quando i programmi da linkare contengono le de-
finizioni delle stesse variabili, degli stessi registri,
delle stesse etichette ecc.

In questi casi sufficiente che in uno dei programmi


venga inserita .notransmit prima delle definizioni
delle variabili comuni, e .transmit immediatamen-
te dopo lultima variabile comune.

In questo modo il linker utilizza le variabili, i regi-


stri ecc. di un solo programma e collega tutte le i-
struzioni relative a queste locazioni.

Nel nostro caso, abbiamo inserito le direttive nel


Fig.19 Parte del listato del programma programma PLEXER.ASM come riportato in fig.19,
PLEXER.ASM in cui abbiamo inserito le di- e poi abbiamo ricompilato il programma per avere
rettive .notransmit e .transmit. PLEXER.OBJ e abbiamo rilanciato il linker.
In fig.20 riportiamo il file XCONTA.DSD corretto.
.

Apriamo un editor qualsiasi e digitiamo:

ast6 L O PCONT
ast6 L O PLEXER

lst6 S I T V M O XCONTA PCONT PLEXER

quindi salviamo il file chiamandolo XCONTA.BAT.

A questo punto, ogni volta che dovremo compilare


o linkare i due programmi, sar sufficiente scrive-
re al prompt di DOS:

XCONTA

e automaticamente verranno lanciate in cascata


prima le due compilazioni in formato .OBJ e poi il
linker lst6.

Poich nei comandi Assembler prima dellopzione


O abbiamo inserito lopzione L, che genera an-
che il formato .LIS dei programmi, quando viene
lanciato il linker, oltre a essere generato il pro-
gramma eseguibile, nei files .LIS vengono sostitui-
ti gli indirizzamenti relativi con gli indirizzamenti as-
soluti del programma finale.

Avremo cos a disposizione anche il listato defini-


tivo di XCONTA, che potremo leggere in
PCONT.LIS e PLEXER.LIS.
Fig.20 Il file XCONTA.DSD ottenuto dopo a-
ver inserito correttamente le direttive .no- Sebbene questa parte vi possa essere sembrata
transmit e .transmit. alquanto complicata, non dovete sottovalutare il fat-
to che ottenere dei programmi collegando tra loro
programmi gi esistenti una pratica comune ad
altri linguaggi di programmazione.
ULTIME CONSIDERAZIONI
Pertanto coloro che intendessero approfondire an-
che lo studio di altri linguaggi software, non po-
Nellesempio che vi abbiamo illustrato, abbiamo
tranno che trarre vantaggio dalla lettura degli arti-
linkato due soli programmi, quindi stato relativa-
coli dedicati al linker per i microprocessori ST6.
mente facile ricordare come scrivere le giuste i-
struzioni e la giusta sequenza per il linker.

Quando per i programmi diventano tanti e tante


sono le routine da utilizzare, potrebbe risultare dif-
ficile gestire i programmi senza commettere nes-
sun errore.
Per questo motivo vi suggeriamo un semplice me-
todo, utilizzato da molti programmatori, che vi con-
I PROGRAMMI LST6 E AST6
sente di avere a disposizione anche il listato del
programma eseguibile che si ottiene con il linker. Informiamo tutti i nostri lettori che possibile sca-
In questo modo potrete facilmente controllare lop- ricare il programma linker lst6 unitamente alla ver-
code delle istruzioni e il loro indirizzamento nella sione 4.50 dellAssembler ast6 dal nostro sito:
memoria.
WWW.NUOVAELETTRONICA.IT
Prendiamo ancora una volta ad esempio i files
PCONT e PLEXER. Entrambi i programmi sono gratuiti.
.

QUALCOSA in pi sul TIMER


La funzione timer dei microprocessori ST6 e il suo
corretto utilizzo nella programmazione con lin-
guaggio Assembler, uno degli argomenti che ab-
biamo trattato fin dalle nostre prime lezioni.

In quegli esempi per, non si tenuto volutamen-


te conto del fatto che alcuni tipi di micro, oltre i tre
normali registri del timer, hanno un piedino, gra-
zie al quale possibile attivare alcune modalit di
funzionamento particolari e molto interessanti.

A seconda del modello di microprocessore, questo


piedino pu avere una differente numerazione e
pu essere indicato con la scritta TIM1 (vedi fig.1)
oppure con la scritta TIMER (vedi fig.2).

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 le sigle TSCR, TCR e PSC abbiamo invece


chiamato i tre registri utilizzati dal timer.

In fig.3 riportato lo schema a blocchi interno che


fa capo al timer del microprocessore ST6.

Passiamo ora a spiegare a grandi linee come fun-


ziona il timer dei micro ST6.

Il timer non nientaltro che un contatore (TCR)


che si decrementa di 1 ogni volta che un altro con-
tatore, chiamato prescaler (PSC), decrementan-
dosi a sua volta ad ogni impulso generato da un Fig.2 I microprocessori serie ST6210C e
clock interno o esterno, arriva a zero. ST6220C hanno un piedino dedicato allat-
Quando il tcr arriva a zero, setta alcuni valori allin- tivazione del timer. Questo piedino il 2 e
terno del registro di controllo TSCR. viene solitamente chiamato TIMER.

Ricaricando il contatore TCR e ripristinando il re-


gistro TSCR, possibile far ripartire il timer tutte le
volte necessarie al suo utilizzo.

E possibile inoltre impostare un divisore sul pre-


scaler, di modo che questo contatore si decrementi
solamente ogni 1, 2, 4, 8, 16, 32, 64 o 128 impul-
si di clock (interni o esterni).
Ma di questo abbiamo gi parlato abbondante-
mente e spiegato con numerosi esempi negli arti-
coli dedicati ai microprocessori ST6.
Fig.3 Al piedino del timer, che per comodit
In questo articolo, parleremo solamente del regi- abbiamo chiamato nei nostri esempi TIMX,
stro di controllo (vedi fig.4) e cio del: fanno capo tre registri chiamati TSCR -
PRESCALER - TCR.
TSCR Timer Status Control Register
.

BIT 7 6 5 4 3 2 1 0 Fig.4 Il registro TSCR, abbre-


viazione di Timer Status Con-
TMZ ETI TOUT DOUT PSI PS2 PS1 PS0 trol Register, consente il con-
trollo del Timer. In figura po-
TSCR REGISTER tete vedere il suo formato.

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

IL PROGRAMMA CONTAIMP.ASM per la gestione dellinterrupt del timer.

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

te a 1 lo stato logico di TIMX e il conteggio ripar- IL PROGRAMMA ONDAQUA.ASM


te. Il tempo massimo del conteggio di 24 ore.
Per esemplificare la modalit Output Mode ab-
Aprite ora con un editor, ad esempio Notepad, que- biamo scritto il programma ONDAQUA.ASM.
sto programma e posizionatevi alla riga da noi nu-
merata 79, dove trovate le istruzioni: Con questo programma generiamo unonda qua-
dra della frequenza di 100 Hz sul piedino TIMX.
ldi tcr,16
ldi tscr,01011111b Anche in questo caso abbiamo previsto di utilizza-
re un quarzo esterno che oscilli alla frequenza di
Anche in questo caso adoperate la tabellina che 2,4576 MHz e abbiamo opportunamente settato il
abbiamo utilizzato ad inizio articolo, per capire me- contatore tcr e il registro di configurazione tscr.
glio perch abbiamo caricato questo numero nel
registro tscr. Aprite dunque con un editor questo programma e
posizionatevi alla riga da noi numerata 127 dove
7 6 5 4 3 2 1 0 trovate le istruzioni:
TMZ ETI TOUT DOUT PSI PS2 PS1 PS0
0 1 0 1 1 1 1 1 ldi tcr,16
ldi tscr,01111110b
Notate anzitutto che il bit 5 denominato TOUT a Adoperate anche in questo caso la tabellina che
0, mentre il bit 4 denominato DOUT a 1. abbiamo utilizzato ad inizio articolo, per capire me-
glio perch abbiamo caricato questo numero nel
Questa combinazione serve per attivare la mo- registro tscr.
dalit GATED MODE.
7 6 5 4 3 2 1 0
I bit 2-1-0 denominati PS2 PS1 PS0 sono tutti a 1,
quindi il divisore del prescaler settato a 128. TMZ ETI TOUT DOUT PSI PS2 PS1 PS0
Avendo utilizzato un quarzo da 2,4576 MHz e a- 0 1 1 1 1 1 1 0
vendo caricato il contatore tcr con il valore 16 e
settato il prescaler a 128, abbiamo ottenuto una ba- Il bit 5 denominato TOUT settato a 1 per attiva-
se tempi di 10 millisecondi. re la modalit Output Mode.

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.

ld a,minuti Nelle attivazioni successive dellinterrupt del timer


(vedi tad_int dalla riga 138 alla riga 148), il bit
e la riga 145 con listruzione: DOUT verr configurato alternativamente a 0 e poi
a 1 e cos via, in modo da generare una forma di
ld a,ore onda quadra a 100 Hz.
LAMPADA per CANCELLARE EPROM
Recatevi presso un qualsiasi negozio di materiale tr realizzare un mobile adatto, risparmiando note-
elettrico e provate a richiedere delle lampade ul- volmente.
traviolette che lavorino sui 2.300-2.700 Angstrom, Noi, per realizzare il contenitore che vedete nelle
e come accaduto a noi, vi verranno proposte del- foto, abbiamo chiesto ad un falegname nostro a-
le comuni lampade Argon o delle lampade per ab- mico due tavolette delle dimensioni di 47 x 12 cm,
bronzarsi, che sono inadatte ai nostri scopi perch che abbiamo adoperato come piano base e piano
non emettono raggi ultravioletti sulla lunghezza superiore, e due piccoli righelli alti 5,5 cm, che ab-
donda richiesta. biamo inchiodato ed incollato ai due lati delle ta-
Dopo aver spiegato che le lampade ci servivano volette.
per cancellare delle EPROM, ci stato suggerito A chi non piace tenere il contenitore grezzo, ba-
di rivolgerci presso i negozi di computer, dove ab- ster che si procuri un pennello ed un poco di ver-
biamo fatto unamara scoperta. nice opaca per legno, oppure una bomboletta di
La maggior parte di queste rivendite sprovvista vernice spray, e con una spesa irrisoria avr un
di queste lampade o, nel migliore dei casi, i pochi elegante cancella - Eprom.
modelli di cui dispongono hanno prezzi esagerati. Con delle viti per legno abbiamo fissato sul piano
Constatato che larticolo sui microprocessori del- superiore i due zoccoli per la lampada, lo zocco-
la serie ST62 (vedi rivista N.172/173) ha incontra- lo per lo starter ed il reattore.
to un successo superiore alle nostre attese, tutti i Con del filo isolato di plastica abbiamo eseguito un
lettori che hanno realizzato il programmatore semplice impianto elettrico (vedi fig.1) e per fis-
LX.1170 ci hanno tempestato di richieste chieden- sare le estremit del cordone di rete per i 220 volt
doci una lampada per cancellare gli ST62E. abbiamo usato due mammuth.
In passato avevamo disponibile una lampada per Sapendo che questa lampada pu cancellare
cancellare le memorie Eprom dei microprocesso- qualsiasi Eprom in circa 17-20 minuti, le abbia-
ri, che si poteva direttamente collegare ai 220 volt mo collegato, dopo averlo programmato sui 20 mi-
della rete, ma poich andata fuori produzione e nuti, il timer LX.1181, che trovate pubblicato sul-
quindi risulta anche per noi introvabile, ci siamo da- la rivista N.174.
ti da fare per cercarne unaltra che la potesse so- Considerando la lunghezza della lampada, potrete
stituire. cancellare contemporaneamente circa 10-12 me-
La lampada che abbiamo trovato di forma cilin- morie.
drica, ha un diametro di 1,5 cm e misura in lun- Collocate i microprocessori che volete cancellare
ghezza 30 cm; per funzionare ha bisogno di due sopra un cartoncino o sopra un sottile ritaglio di la-
zoccoli, di un reattore e di uno starter, e poich mierino o compensato, quindi infilateli sotto la lam-
anche questi componenti non sono facilmente re- pada in modo che la loro finestra risulti distante
peribili, abbiamo pensato di presentarla in Kit ai no- allincirca 2 cm dal bulbo in vetro.
stri lettori. Come abbiamo gi avuto modo di accennare in pre-
Inizialmente avevamo contattato qualche Industria cedenti articoli, prima di inserire il microprocesso-
per corredarla di un appropriato mobile, ma dopo re sotto la lampada assicuratevi che la sua fine-
aver conosciuto il prezzo per realizzarlo, abbiamo stra sia pulita. Se cos non fosse, sgrassatela con
abbandonato questa idea, perch con solo quattro un batuffolo di cotone imbevuto di alcol o di ace-
pezzi di legno ed un po diniziativa, chiunque po- tone.
Non conveniente fissare per molti minuti la luce Per premunirvi contro questo fastidioso inconve-
viola emessa dalla lampada accesa, perch irri- niente, coprite, per il tempo che la lampada rima-
tante per gli occhi. ne accesa, la parte frontale del contenitore con un
Sul numero 172/173 larticolista ha scritto che que- pezzo di cartoncino o con un panno, in modo da
sta luce nuoce gravemente agli occhi, ma ha un impedire alla luce di raggiungere gli occhi.
poco esagerato, forse perch non avendola mai
personalmente utilizzata, si lasciato influenzare
dalle affermazioni del tecnico.
In realt locchio non viene danneggiato, come si
potrebbe erroneamente dedurre da quanto scritto, COSTO DI REALIZZAZIONE LX.1183
ma si irrita provocando una condizione analoga
(anche se molto inferiore) a quella prodotta quan- Il kit LX.1183 composto da una lampada lunga 30
do si guarda larco di una saldatura elettrica sen- cm della potenza di 8 Watt, completa di Reattore,
za la protezione degli occhiali. Starter Mammuth, Zoccoli mignon e di un cordone
Quindi se guardate per 5-6 minuti di seguito i rag- di rete completo di spina .......................... 25,30
gi ultravioletti emessi dalla lampada, vi sembrer
di avere negli occhi dei fastidiosi ed irritanti gra- NOTA: Questa la lampada che utilizziamo nel no-
nelli di sabbia. stro laboratorio per cancellare le nostre Eprom e
Per far scomparire il dolore, baster fare qualche Microprocessori, perch con altre di potenza mi-
impacco con una soluzione di acido borico. nore non sempre riuscivamo a cancellarle.

Fig.1 Su una piccola tavoletta in legno delle dimensioni di 12 x 47 cm abbiamo fissato a


sinistra il reattore e a destra lo starter. Assieme alla lampada forniamo anche i due por-
talampada miniatura che fisserete con viti in legno sulla tavoletta alla distanza richiesta.
Nel disegno si nota chiaramente come dovete effettuare il semplice schema elettrico.

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

INDICE ANALITICO TEORIA

A L

A/D converter Linker

C M

Carry flag Memoria EEprom


Cicli macchina Memoria RAM e RAM aggiuntiva

D O

Direttiva .ascii Opcode delle istruzioni


Direttiva .asciz Option Byte della serie C
Direttiva .block Option Byte della serie C - funzioni attivabili
Direttiva .byte Opzioni del compilatore Assembler
Direttiva .def
P
Direttiva .equ
Direttiva .extern Porte
Direttiva .ifc Porte - gestione ottimale
Direttiva .ifc - approfondimenti
Direttiva .macro R
Direttiva .pp_on
Registri
Direttiva .set
Reset
Direttiva .w_on
Direttiva .window T
Direttiva .windowend
Timer
E Timer - registri
Tipi di registri
Espressioni
V
F

Formato .hex Variabili

Formato .obj
W
Formato delle istruzioni
Funzione SPI Watchdog
Watchdog - approfondimenti
I
Z
Interrupt
Istruzioni Z flag
INDICE ANALITICO KIT

LX.1170 Programmatore per gli ST62/10-15-20-25


LX.1170 Consigli per migliorare il programmatore LX.1170
LX.1171 Scheda test per provare gli ST6
LX.1183 Lampada per cancellare le Eprom
LX.1202 Bus per testare i micro ST62/10-15-20-25
LX.1203 Stadio di alimentazione per BUS LX.1202
LX.1204 Scheda test con Display per provare gli ST6
LX.1205 Scheda test con Rel per provare gli ST6
LX.1206 Scheda per pilotare 4 diodi triac con un ST6
LX.1207 Scheda per pilotare un display numerico LCD con un ST6
LX.1208/N Scheda per pilotare un display alfanumerico LCD con un ST6
LX.1325 Programmatore per micro ST62/60-65
LX.1329 Bus per testare i micro ST62/60-65
LX.1380 Scheda test per la funzione SPI
LX.1381 Scheda test per la funzione SPI
LX.1382 Scheda test per la funzione SPI
LX.1430 Interfaccia per LX.1170 per gli ST6 serie C

INDICE ANALITICO SOFTWARE

Software simulatore DSE622 sigla DF.622


Correzione degli errori con il simulatore DSE622
Se i programmi in DOS per ST6 non girano sotto Windows 95
Nuovo software simulatore per micro ST62/10-15-20-25 sigla ST622.1 e ST622.2
Nuovo software simulatore per micro ST62/60-65 sigla ST626.1 e ST626.2
Programma per LX.1170 sigla DF.1170.3
Programma per LX.1325 e test per ST62/60 sigla DF.1325
Programma per LX.1430 e per programmare gli ST6/C sigla DF.ST6-C
Programmi per il TIMER
Programmi per la SPI sigla DF.1380
Programmi test per LX.1202 sigla DF.1202.3
Programmi test per LX.1207 sigla DF.1207.3
Programmi test per LX.1208/N sigla DF.1208.3

You might also like