I microprocessori ST62xx

Materie:Appunti
Categoria:Elettronica
Download:267
Data:12.02.2001
Numero di pagine:20
Formato di file:.doc (Microsoft Word)
Download   Anteprima
microprocessori-st62xx_1.zip (Dimensione: 41.13 Kb)
readme.txt     59 Bytes
trucheck.it_i-microprocessori-st62xx.doc     738.5 Kb


Testo

BREVI CENNI SUI MICROPROCESSORI ST62XX
I micro della serie st62 sono reperibili in due versioni: ST62E ed ST62T
La lettera E sta ad indicare che il dispositivo è riprogrammabile più volte mentre la lettera T indica che il dispositivo, una volta programmato, non sarà più possibile cancellare i dati memorizzati al suo interno.
Visivamente i due tipi si distinguono dal loro contenitore: la serie E ha una finestrella nel centro sotto la quale si può vedere la EPROM interna, cancellabile tramite l’esposizione a raggi ultravioletti.
La serie T si riconosce perché è sprovvista della finestrella.
La sigla ST62E o ST62T è sempre seguita da due numeri che possono essere 1 o 2 per la prima cifra e 0 o 5 per la seconda.
La prima cifra sta ad indicare quanta memoria ha il micro:
- 1 indica che la memoria del dispositivo è 2 kbytes
- 2 indica che la memoria del dispositivo è 4 kbytes
La seconda cifra identifica il numero dei piedini:
- 0 indica che il dispositivo ha 20 piedini
- 5 indica che il dispositivo ha 28 piedini
LA TABELLA RIASSUME I SGNIFICATI DELLLE SIGLE
Sigla micro
Memoria utile
Ram utile
N° piedini
Riscrivibile
ST62T10
2K
64 byte
20 pin.
No
ST62T15
2K
64 byte
28 pin.
No
ST62T20
4K
64 byte
20 pin.
No
ST62T25
4K
64 byte
28 pin.
No
ST62E10
2K
64 byte
20 pin.
Si
ST62E15
2K
64 byte
28 pin.
Si
ST62E20
4k
64 byte
20 pin.
Si
ST62E25
4k
64 byte
28 pin.
Si
CARATTERISTICHE PRINCIPALI E PIEDINATURE
• CPU a 8 bit
• Frequenza di clock massima di 8Mhz
• Alimentazione da 3 a 6 volt
• 2 o 4 Kbyte di memoria EPROM/PROM
• 64 byte di memoria RAM
• Un timer multifunzione
• Un convertitore A/D a 8 bit
• Un watchdog digitale
• 6 livelli di stack
• Ingresso di interrupt esterno NMI
I modelli ST62X10 hanno:
• Contenitore DIL a 20 pin
• 12 linee di I/O programmabili come:
• Ingresso con o senza resistenza di pull-up
• Ingresso con interrupt
• Uscita open-collector o push-pull
• Ingresso analogico (solo 8 linee)
I modelli ST62X15 e ST62X25 hanno:
• Contenitore DIL a 28 pin
• 20 linee di I/O programmabili come:
• Ingresso con o senza resistenza di pull-up
• Ingresso con interrupt
• Uscita open-collector o push-pull
• Ingresso analogico (solo 12 linee)
Piedinatura micro ST621x e ST622x
DESCRIZIONE DEI PIEDINI
Vdd e Vss: Il micro è alimentato tramite questi due piedini: Vdd il positivo, Vss è la massa
OSCin e OSCout: sono i piedini al quale è collegato il circuito oscillatore interno, perché funzioni correttamente bisogna applicargli un quarzo e due condensatori.
. .
RESET: è un ingresso attivo basso e viene utilizzato per resettare il microprocessore.
TEST: questo piedino viene utilizzato durante la programmazione: in questa fase è a 5V è quando giungono i dati dal PC passa a 12.5V. Durante il normale funzionamento del micro deve restare a 0V
NMI: Durante il normale funzionamento deve rimanere a livello logico 1, applicando a questo piedino un impulso negativo, il programma che stà eseguendo si interrompe per passare ad una subroutine
TIMER: applicando un livello logico 1 a questo piedino, la frequenza del quarzo divisa x 12 giunge allo stadio contatore. Da questo piedino si può prelevare un segnale ad onda quadra con una frequenza che si può impostare tramite il programma.
PA0-PA7: Sono otto linee organizzate come una porta (A) I/O, attraverso il programma si possono configurare in vari modi:
1. Ingresso con o senza resistenza di pull-up
2. Ingresso con interrupt
3. Uscita open-collector o push-pull
4. Ingresso analogico
N.B. I piedini PA0, PA1, PA2, PA3 possono erogare fino a 20 mA ma non possono essere utilizzati come ingressi analogici, tutti gli altri piedini non possono erogare più di 5mA. I piedini PA4, PA5,PA6, PA7 non esistono negli ST62T10, ST62E10, ST62T20, ST62E20.
PB0-PB7: Sono otto linee organizzate come una porta (B) I/O, attraverso il programma si possono configurare in vari modi:
1. Ingresso con o senza resistenza di pull-up
2. Ingresso con interrupt
3. Uscita open-collector o push-pull (MAX 5mA)
4. Ingresso analogico
PC4-PC7: Sono quattro linee organizzate come una porta (C) I/O, attraverso il programma si possono configurare in vari modi:
1. Ingresso con o senza resistenza di pull-up
2. Ingresso con interrupt
3. Uscita open-collector o push-pull (MAX 5mA)
4. Ingresso analogico
N.B. I piedini PC4, PC5, PC6, PC7 non esistono negli ST62T10, ST62E10, ST62T20, ST62E20.
LA MEMORIA DELL’ ST6
All’interno di un microprocessore ST6 risultano disponibili per il programma 2 o 4 K di memoria ROM e 64 byte di RAM che servono per i registri e per le variabili.
La memoria ROM mantiene tutte le informazioni inserite durante la programmazione del micro anche senza alimentazione.
La memoria RAM invece viene utilizzata per le variabili cioè i dati che di volta in volta vengono letti, modificati o scritti e quindi può essere modificata dallo stesso microprocessore durante lo svolgimento di un programma.
La memoria del dispositivo può essere considerata divisa in celle numerate nel cui interno di ognuna si può inserire un numero.
LE VARIABILI DEL MICROPROCESSORE
Una variabile è un numero che viene inserito in una cella di memoria e che il micro può modificare con delle particolari istruzioni.
Una variabile non viene mai messa nella memoria ROM ma sempre nella RAM, così facendo è possibile modificarla secondo le diverse esigenze.
I REGISTRI DEL MICROPROCESSORE
La memoria RAM di un microprocessore ST6 viene utilizzata anche per i registri.
I registri sono delle celle di memoria che permettono di eseguire delle operazioni già definite.
Ad esempio un registro gestisce quali piedini utilizzare come ingressi analogici, un altro quali piedini utilizzare come uscite o come ingressi, un altro definisce il timer, un altro il convertitore A/D,ecc..
Nel micro è presente un registro particolare chiamato accumulatore e viene identificato con la lettera a, questo registro è molto importante perché è in grado di eseguire le seguenti operazioni matematiche:
- somma
- sottrazione
- tabella di verità di un AND
- complemento di un numero
- comparazione fra due numeri
Queste operazioni si possono eseguire solo tra il numero contenuto nell’accumulatore e una variabile o un numero (vedi set di istruzioni ADD, ADDI, AND, ANDI, COM, CP, CPI, SUB).
Nel micro sono anche disponibili quattro registri (x, y, v, w) che si possono utilizzare a piacimento per semplificare delle operazioni.
Nella Memory Map sottostante si possono vedere i vari indirizzi di memoria (numero delle celle) e per vengono utilizzati

MEMORY MAP PER ST62T10,T15,E10,E25 MEMORY MAP PER ST62T20,T25,E20,E25
indirizzo utilizzo indirizzo utilizzo
Stesura di un programma
Nota su come scrivere i numeri
Dato che si opera con un microprocessore ad otto bit al suo interno i dati digitali verranno trasmessi in un codice binari ad 8 bit il che vuol dire che in numeri decimali si hanno massimo 28=255 combinazioni.
Il numero massimo che può gestire il microprocessore sarà quindi il 255 i numeri che si immettono nel micro possono essere in base binaria, ottale, decimale o esadecimale, per poter distinguere le varie modalità di immissione dei numeri bisogna scrivere una lettera dopo la cifra:
- o se il numero è in base ottale
- h se il numero è in base esadecimale
- b se il numero è in base binaria
- se non viene messa alcuna lettera viene interpretato come numero decimale
ESEMPIO:
10o = numero ottale
01Ah = numero esadecimale
00100101b = numero binario
100 = numero decimale
I numeri decimali iniziano allo 0 e terminano al 255,
I numeri ottali iniziano allo zero e terminano al 377,
I numeri easadecimali iniziano allo 0 e terminano al 0FF,
i numeri binari iniziano allo zero e terminano a 11111111.

PORTE E PIEDINI DEL MICRO
Ogni microprocessore ST6 ha nel suo interno due o tre porte siglate A – B – C i cui terminali sono collegati a dei piedini del microprocessore.
Negli schemi delle piedinature si riconoscono a quali piedini fanno parte ogni terminale di ciascuna porta.
Ogni singolo terminale di ogni porta può essere settato come ingresso con o senza pull-up, con interrupt, per segnali analogici o come uscita open collector o push-pull.
Per poter predisporre ogni piedino di ogni porta bisogna mettere degli 0 o degli 1 nei registri pdir, popt, port secondo la seguente tabella:
REGISTRI
INGRESSI
USCITE
Con pull-up
Senza pull-u
Con interrupt
Analogico
Open collector
Push-pull
Pdir

1
1
Popt

1
1

1
Port

1

1

Ad esempio se si vuole impostare la porta A come ingresso pull-up bisogna caricare uno zero in tutti i tre registri:
LDI pdir_a,00000000B
LDI popt_a,00000000B
LDI port_a,00000000B
Il comando LDI è il comando apposito per caricare un numero in un registro, pdir, popt, port, sono i registri, _a sta ad indicare che è la porta A ad essere settata e la lettera B indica che il numero immesso è in base binaria.
Se però si vuole settare alcuni piedini di una porta diversamente dagli altri, bisogna sapere che ogni terminale di ciascuna porta è individuato da una cifra del numero binario dopo la virgola.
Sapendo che il terminale 7 è la prima cifra e il terminale 0 è la settima cifra, si possono distinguere i singoli piedini.
TABELLA RIASSUNTIVA
CIFRA








PIEDINO
A7
A6
A5
A4
A3
A2
A1
A0
PIEDINO
B7
B6
B5
B4
B3
B2
B1
B0
PIEDINO
C7
C6
C5
C4
XXXXX
XXXXX
XXXXX
XXXXX
Ad esempio se si vuole settare il piedino A6 come ingressi con pull-up e tutti gli altri come uscite open collector bisognerà settare i tre registri in questo modo:
LDI pdir_a,01000000B
LDI popt_a,00000000B
LDI port_a,00000000B
Inizio del programma
;*********************************************************************
;* *
;* FILE SORGENTE DI BASE PER I MICRO ST6210/15/20/25 *
;* *
;*********************************************************************
;Pietro Bertera 06-03-2000
Tutte queste righe sono dei COMMENTI, perche' iniziano con il segno di punto e virgola ; e quindi verranno ignorate dall'assemblatore. E' molto utile inserire questi commenti in tutte le parti del programma per descrivere il funzionamento delle singole parti e anche delle singole istruzioni. In questo caso, all'inizio del programma viene inserito il titolo, l'autore e una breve descrizione. E' utilissimo anche descrivere qui le connessioni delle porte di I/O del micro, le varie modifiche e aggiunte apportare durante lo sviluppo del programma e tutte le informazioni che ritenete utili per rendere piu' facile una comprensione e una lettura del programma anche a distanza di tempo.
Direttive assembler
.title "TITOLO DEL PROGRAMMA"
.vers "ST62E20" ; TIPO DI MICROPROCESSORE USATO
Le direttive .title e .vers permettono di specificare il titolo del programma e la vesione di micro da usare. In questa parte di programma si possono inserire anche altre direttive come ad esempio .w_on per usare la DRW. Notate che la scritta "TIPO DI MICROPROCESSORE USATO" e' un commento perche' e' preceduto dal punto e virgola.
Registri del micro
;**********************************************************************
;* VARIABILI DEL MICRO *
;**********************************************************************
a .def 0ffh ;Registro accumulatore
x .def 080h ;Registro x
y .def 081h ;Registro y
v .def 082h ;Registro v
w .def 083h ;Registro w
port_a .def 0c0h ;Registro Dati porta A
port_b .def 0c1h ;Registro Dati porta B
port_c .def 0c2h ;Registro Dati porta C
pdir_a .def 0c4h ;Registro Direzione porta A
pdir_b .def 0c5h ;Registro Direzione porta B
pdir_c .def 0c6h ;Registro Direzione porta C
popt_a .def 0cch ;Registro Opzioni porta A
popt_b .def 0cdh ;Registro Opzioni porta B
popt_c .def 0ceh ;Registro Opzioni porta C
ior .def 0c8h ;Registro Opzioni per le Interruzioni
addr .def 0d0h ;Registro Dati dell'A/D converter
adcr .def 0d1h ;Registro di Controllo dell'A/D converter
psc .def 0d2h ;Registro per il Prescaler del Timer
tcr .def 0d3h ;Registro Dati del Timer
tscr .def 0d4h ;Registro TSCR del Timer
wdog .def 0d8h ;Registro del WatchDog
drw .def 0c9h ;Registro della zona dati ROM (Rom Data Window)
Qui vengono definiti tutti i registri interni del micro che sono indispensabili in qualsiasi programma: viene assegnata una posizione nella memoria ad ogni registro.
Variabili del programma
;**********************************************************************
;* VARIABILI DEL PROGRAMMA *
;**********************************************************************
mele .def 084h ;DEFINISCE LA VARIABILE 'MELE'
pere .def 085h ;DEFINISCE LA VARIABILE 'PERE'
Le variabili sono delle celle di memoria RAM contenenti i dati che vengono elaborati e manipolati all'interno del programma. In questo esempio la variabile "MELE" corrisponde alla cella di memoria RAM con indirizzo 084h. Non si possono usare due variabili con lo stesso nome.
Impostazioni iniziali
;*********************************************************************
;* SETTAGGIO INIZIALE *
;*********************************************************************
; PER I MICRO ST6210/15 CON 2Kbyte DI ROM/EPROM OCCORRE L'ISTRUZIONE :
.org 0880h
; PER I MICRO ST6220/25/60/65 CON 4Kbyte DI ROM/EPROM OCCORRE L’ISTRUZIONE :
.org 080h
inizio ; INIZIALIZZAZIONE DELLE PERIFERICHE
ldi wdog,0ffh ; RICARICA IL WATCH DOG
; ************* IMPOSTAZIONE DELLE PORTE I/O *******************
ldi pdir_a,11111111b
ldi popt_a,11111111b
ldi port_a,00000000b ; porta A come uscita push-pull
ldi pdir_b,00000000b
ldi popt_b,00000000b
ldi port_b,00000000b ; porta B come input pull-up
ldi pdir_c,11111111b
ldi popt_c,00000000b
ldi port_c,00000000b ; porta C come uscita OC
ldi adcr,0 ;DISABLE A/D INTERRUPT
ldi tscr,0 ;DISABLE TIMER INTERRUPT
ldi ior,0 ;DISABLE ALL INTERRUPT
reti ;RIPRISTINA I FLAG PRINCIPALI
jp main ;SALTA AL PROGRAMMA PRINCIPALE
La direttiva .org specifica l'indirizzo di partenza del programma all'interno della ROM/EPROM del micro ( vedi memory map)a va modificata a seconda della dimensione della memoria del micro usato. Quando il micro ST6 viene resettato o viene alimentato, il programma salta automaticamente all'etichetta "inizio" per cui le successive istruzioni servono ad inizializzare il microprocessore. Vengono definite le configurazioni delle porte di I/O in funzione dell'uso che si farà all'interno del programma. Le successive istruzioni servono a disabilitare tutti gli interrupt. L'istruzione "jp main" serve poi per saltare al programma principale.
Subroutine di interrupt
;**********************************************************************
;* SUBROUTINE DI INTERRUPT *
;**********************************************************************
ad_int ;INTERRUPT DEL CONVERTITORE A/D
reti
tim_int ;INTERRUPT DEL TIMER
reti
BC_int ;INTERRUPT DELLE PORTE A e B
reti
A_int ;INTERRUPT DELLA PORTA A
reti
nmi_int ;INTERRUPT NON MASCHERABILE
reti
Quando si verifica un interrupt durante l'esecuzione del programma, il micro salta ad una di queste subroutine in funzione del tipo di interrupt. N.B. tutte queste subroutine devono terminare con l'istruzione "reti".
Subroutine
;********************************************************************
;* SUBROUTINE *
;********************************************************************
; ESEMPIO
clock ; subroutine CLOCK
" " " ; ISTRUZIONI DELLA SUBROUTINE
" " "
" " "
ret ; esce dalla subroutine
Le subroutine sono dei pezzi di programma che vengono richiamati dal programma principale o da altre subroutine tramite l'istruzione "call". Tutte le subroutine devono sempre iniziare con una etichetta (esempio "clock") e terminare con l'istruzione "ret". E' bene suddidere tutto il programma in subroutine, ognuna con una specifica funzione, in modo da rendere piu' facile la lettura e la correzione del programma e permettendo di riutilizzare alcune parti del programma anche in altre future applicazioni. Inoltre e' consigliabile inserire all'interno delle subroutine delle parti di programma che devono essere richiamate frequentemente durante il funzionamento in modo da non riscrivere piu' volte le stesse istruzioni.
Programma principale
;*******************************************************************
;* PROGRAMMA PRINCIPALE *
;*******************************************************************
main ; INIZIO DEL PROGRAMMA PRINCIPALE
ldi wdog,0feh ;RICARICA IL WATCH DOG
call clock ;RICHIAMA LA SUBROUTINE 'clock' (ESEMPIO)
; ... ;ALTRE ISTRUZIONI
; ... ; " " "
Questo e' il programma principale che deve iniziare sempre con l'etichetta "main".
Vettori di interrupt
;*********************************************************************
;* VETTORI DI INTERRUPTS *
;*********************************************************************
; Questa parte deve essere riportata alla fine del MAIN e prima della
; istruzione finale .END .
; Queste istruzioni non dovranno essere modificate.
.org 0ff0h
jp ad_int ;INTERRUPT DEL CONV. A/D vector #4
jp tim_int ;INTERRUPT DEL TIMER vector #3
jp BC_int ;INTERRUPT PORTE A e B vector #2
jp A_int ;INTERRUPT PORTA A vector #1
.org 0ffch
jp nmi_int ;INTERRUPT NON MASCHERABILE vector #0
jp inizio ;INTERRUZIONE PER IL SETTAGGIO INIZIALE
Queste istruzioni vanno inserire alla fine del programma MAIN per definire tutti i vettori di interrupt. In pratica queste righe specificano a quali etichette il micro deve saltare in corrispondenza di un interrupt. Notate la presenza dell'etichetta "inizio" che corrisponde al vettore di RESET (quando il micro viene resettato o alimentato salta a "inizio").
Fine del programma
.end ; Termine del programma
La direttiva .end specifica la fine del programma, per cui questa e' sempre l'ultima riga da inserire.

Set di istruzioni ST6
ADD -- somma
Il contenuto di una variabile viene sommato al contenuto dell'accumulaore ed il risultato e' memorizzato nell'accumulatore. Formati possibili:
• ADD A,A
• ADD A,X
• ADD A,Y
• ADD A,V
• ADD A,W
• ADD A,(X)
• ADD A,(Y)
• ADD A,rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C e' settato se l'operazione da un riporto, cioe' se e' maggiore di 255 (FFh)
ADDI -- somma immediata
Un numero viene sommato al contenuto dell'accumulatore ed il risultato e' memorizzato nell'accumulatore. Formati possibili:
• ADDI A,nn
A = registro accumulatore
nn = numero da 0 a 255 (FFh)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C e' settato se l'operazione da un riporto, cioe' se e' maggiore di 255 (FFh)
AND -- funzione logica AND
Funzione logica AND tra l'accumulatore ed una variabile. Il risultato e' memorizzato nell'accumulatore. Formati possibili:
• AND A,A
• AND A,X
• AND A,Y
• AND A,V
• AND A,W
• AND A,(X)
• AND A,(Y)
• AND A,rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
ANDI -- funzione logica AND immediata
Funzione logica AND tra l'accumulatore ed un numero. Il risultato e' memorizzato nell'accumulatore. Formati possibili:
• ANDI A,nn
A = registro accumulatore
nn = numero da 0 a 255 (FFh)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
CALL -- chiama subroutine
Richiama una subroutine. Formati possibili:
• CALL nomesub
nomesub = etichetta della subroutine da eseguire
Cicli macchina = 4
I flag Z e C non sono influenzati
CLR -- azzera byte
Resetta l'accumulatore, un registro o una variabile. Formati possibili:
• CLR A
• CLR X
• CLR Y
• CLR V
• CLR W
• CLR rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato
Il flag C e' resettato
COM -- complemento byte
Calcola il complemento del contenuto dell'accumulatore e memorizza il risultato nell'accumulatore. Formati possibili:
• COM A
A = registro accumulatore
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C e' settato se prima della funzione COM il bit 7 di A e' 1
CP -- compara
Compara il contenuto di un registro o di una variabile con l'accumulatore. Formati possibili:
• CP A,A
• CP A,X
• CP A,Y
• CP A,V
• CP A,W
• CP A,(X)
• CP A,(Y)
• CP A,rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se i numeri sono uguali, resettato se diversi
Il flag C e' settato se l'accumulatore e' minore del registro o della variabile, resettato se maggiore o uguale
CPI -- compara immediato
Compara il contenuto dell'accumulatore con un numero. Formati possibili:
• CPI A,nn
A = registro accumulatore
nn = numero da 0 a 255 (FFh)
Cicli macchina = 4
Il flag Z e' settato se i numeri sono uguali, resettato se diversi
Il flag C e' settato se l'accumulatore e' minore del numero, resettato se maggiore o uguale
DEC -- decrementa
Decrementa di 1 il contenuto dell'accumulatore, di un registro o di una variabile. Formati possibili:
• DEC A
• DEC X
• DEC Y
• DEC V
• DEC W
• DEC (X)
• DEC (Y)
• DEC rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
INC -- incrementa
Incrementa di 1 il contenuto dell'accumulatore, di un registro o di una variabile. Formati possibili:
• INC A
• INC X
• INC Y
• INC V
• INC W
• INC (X)
• INC (Y)
• INC rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
JP -- salta
Effettua un salto incondizionato ad una etichetta. Formati possibili:
• JP abc
abc = etichetta
Cicli macchina = 4
I flag Z e C non sono influenzati
JRC -- salta se c'è riporto
Salta ad una etichetta se il Flag Carry e' settato. Formati possibili:
• JRC e
e = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRC
Cicli macchina = 2
I flag Z e C non sono influenzati
JRNC -- salta se non c'è riporto
Salta ad una etichetta se il Flag Carry e' resettato. Formati possibili:
• JRNC e
e = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRNC
Cicli macchina = 2
I flag Z e C non sono influenzati
JRNZ -- salta se l'operazione non dà 0
Salta ad una etichetta se il Flag Zero e' resettato. Formati possibili:
• JRNZ e
e = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRNZ
Cicli macchina = 2
I flag Z e C non sono influenzati
JRR -- salta se bit è 0
Salta ad una etichetta se un determinato bit di una variabile e' resettato. Formati possibili:
• JRR b,rr,ee
b = numero del bit da testare (da 0 a 7)
rr = byte di indirizzo della variabile
ee = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRR
Cicli macchina = 5
Il flag Z non e' influenzato Il flag C contiene il valore del bit testato
JRS -- salta se bit è 1
Salta ad una etichetta se un determinato bit di una variabile e' settato. Formati possibili:
• JRS b,rr,ee
b = numero del bit da testare (da 0 a 7)
rr = byte di indirizzo della variabile
ee = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRS
Cicli macchina = 5
Il flag Z non e' influenzato Il flag C contiene il valore del bit testato
JRZ -- salta se l'operazione dà 0
Salta ad una etichetta se il Flag Zero e' settato. Formati possibili:
• JRZ e
e = numero che rappresenta la distanza in byte dell'etichetta di salto rispetto all'istruzione JRZ
Cicli macchina = 2
I flag Z e C non sono influenzati
LD -- carica registro
Serve per caricare il valore contenuto in una variabile, in un registro o nell'accumulatore. Per questa istruzione va sempre usato l'accumulatore. Formati possibili:
• LD A,X
• LD A,Y
• LD A,V
• LD A,W
• LD X,A
• LD Y,A
• LD V,A
• LD W,A
• LD A,(X)
• LD A,(Y)
• LD (X),A
• LD (Y),A
• LD A,rr
• LD rr,A
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
LDI -- carica registro immediato
Serve per caricare un numero in una variabile, in un registro o nell'accumulatore. Formati possibili:
• LDI A,nn
• LDI X,nn
• LDI Y,nn
• LDI V,nn
• LDI W,nn
• LDI rr,nn
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
nn = numero di 1 byte
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C non e' influenzato
NOP -- nessuna operazione
Esegue 2 cicli macchina a vuoto. Viene usata per creare dei piccoli ritardi. Formati possibili:
• NOP
Cicli macchina = 2
I flag Z e C non sono influenzati
RES -- resetta bit
Resetta uno degli 8 bit di una variabile o dell'accumulatore. Formati possibili:
• RES b,A
• RES b,rr
A = registro accumulatore
rr = indirizzo della variabile (1 byte)
b = numero del bit da resettare (da 0 a 7)
Cicli macchina = 4
I flag Z e C non sono influenzati
RET -- ritorna da una subroutine
Esce dalla subroutine e ritorna al punto della chiamata CALL. Formati possibili:
• RET
I flag Z e C non sono influenzati
RETI -- ritorna da un interrupt
Esce dalla subroutine di interrupt e ritorna al punto precedente all'evento di interrupt. Formati possibili:
• RETI
I flag Z e C vengono riportati alla condizione in cui si trovavano prima dell'interrupt
RLC -- ruota a sinistra con riporto
Ruota a sinistra i bit dell'accumulatore. Trasferisce il bit 7 nel Carry, mentre il contenuto precedente del carry passa nel bit 0 dell'accumulatore. Formati possibili:
• RLC A
A = registro accumulatore
Clicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C riporta il valore del bit 7
SET -- setta bit
Setta uno degli 8 bit di una variabile o dell'accumulatore. Formati possibili:
• SET b,A
• SET b,rr
A = registro accumulatore
rr = indirizzo della variabile (1 byte)
b = numero del bit da settare (da 0 a 7)
Cicli macchina = 4
I flag Z e C non sono influenzati
SLA -- ruota a sinistra senza riporto
Ruota a sinistra i bit dell'accumulatore. Trasferisce il bit 7 nel Carry cancellando il valore precedente. Equivale a una moltiplicazione per 2. Formati possibili:
• SLA A
A = registro accumulatore
Clicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C riporta il valore del bit 7
STOP -- blocca il funzionamento del micro
Blocca l'oscillatore di clock mettendo in standby tutto il microprocessore. Formati possibili:
• STOP
Clicli macchina = 2
I flag Z e C non sono influenzati
SUB -- sottrazione
Il contenuto di una variabile viene sottratto al contenuto dell'accumulatore ed il risultato e' memorizzato nell'accumulatore. Formati possibili:
• SUB A,A
• SUB A,X
• SUB A,Y
• SUB A,V
• SUB A,W
• SUB A,(X)
• SUB A,(Y)
• SUB A,rr
A = registro accumulatore
X,Y,V,W = registri del micro
rr = indirizzo della variabile (1 byte)
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C e' settato se il contenuto dell'accumulatore e' minore della variabile o del registro, resettato se maggiore o uguale.
SUBI -- sottrazione immediata
Un numero viene sottratto al contenuto dell'accumulatore ed il risultato e' memorizzato nell'accumulatore. Formati possibili:
• SUBI A,nn
A = registro accumulatore
nn = numero di 1 byte
Cicli macchina = 4
Il flag Z e' settato se il risultato e' 0, resettato se diverso da 0
Il flag C e' settato se il contenuto dell'accumulatore e' minore del numero, resettato se maggiore o uguale.
WAIT -- stato di attesa
Mette in standby il microprocessore, ma l'oscillatore di clock rimane attivo. Formati possibili:
• WAIT
Clicli macchina = 2
I flag Z e C non sono influenzati
Formato delle istruzioni
Alcune note su come va scritta una tipica riga di un programma per micro ST6.
1ø CAMPO
|___
| ETICHETTA; massimo 8 caratteri. Deve iniziare sempre con una
| lettera e deve partire dalla PRIMA COLONNA. Per passare
| al campo successivo e' preferibile usare il tasto TABULAZIONE.
2ø CAMPO
|______
| ISTRUZIONI; sono le istruzioni da far eseguire al
| micro.
| Per passare al campo successivo usare il
| tasto TABULATORE.
3ø CAMPO
|____
| OPERANDI; sono gli operandi delle
| istruzioni.
4ø CAMPO
|____
| COMMENTI; non e' obbligatorio
| posizionarli proprio in questa
| posizione, ma in tal modo
| consentono di spiegare
| il significato delle varie
| operazioni.
Esempio di una riga con etichetta e commento:
pippo ldi wdog,0ffh ; RICARICA IL WATCH DOG
In questa riga:
pippo e' l'etichetta
ldi e' l'istruzione
wdog,0ffh e' l'operando
; RICARICA IL WATCH DOG e' il commento
Se la riga non ha etichetta, e' necessario comunque lasciare lo spazio vuoto usando il tasto TAB:
ldi wdog,0ffh ; RICARICA IL WATCH DOG
L'etichetta puo' anche essere scritta da sola, senza nessuna istruzione:
pippo
ldi wdog,0ffh ; RICARICA IL WATCH DOG
IL WATCHDOG
Il Watchdog è un contatore all’indietro che viene gestito dalla frequenza del quarzo esterno che parte dal numero inserito e conta all’indietro e quando questo arriva a zero questo resetta il micro.
Perché il Watchdog non interrompa il programma senza che noi lo vogliamo, dobbiamo inserire ogni 20-30 righe qesta istruzione:
ldi wdog,255
TEMPI DI ESECUZIONE
I tempi per eseguire un’istruzione si calcolano in cicli macchina e vanno da un massimo di 5 ad un minimo di 2.
Le istruzioni dei salti condizionati sono le più lente perché impiegano 5 cicli macchina mentre le istruzioni NOP, RET, RETI, STOP, WAIT impiegano 2 cicli macchina.
Il tempo di esecuzione è inversamente proporzionale alla frequenza del quarzo
Si può calcolare il tempo impiegato per ogni ciclo macchina secondo la formula:
microsecondi = 13 : MHz quarzo

Esempio