|
|
Il µP Z80
Scopo:
Realizzare un programma in Assembly che, dati dei valori in codice binario mediante l'uso di switch, ne visualizzi il corrispondente, in codice decimale, su un display a sette segmenti;
Cenni teorici sul µP Z80:
Un µP è costituito da un unico chip che contiene tutti gli elementi della CPU. La potenza è la capacità del microprocessore di elaborare dati in forma binaria, normalmente di esprime in MHz o in GHz. La dimensione della memoria equivale al numero di parole o di byte di memoria a cui il µP può accedere per memorizzare programmi e/o dati. La velocità del µP dipende dalla massima frequenza del segnale di clock, nel caso dello Z80 varia dai 2.5 Mhz della versione base, quella che noi utilizziamo, ai 4, 6 e 8 MHz delle versione Z80A, Z80B e Z80C.
La sua struttura interna comprende una ALU (unità aritmetico logica, dall'inglese Aritmetic Logic Unit), che esegue i calcoli richiesti dal µP, una unità di controllo e vari registri connessi tra loro attraverso tre bus interni, il bus dati, il bus indirizzi il bus di controllo.
La ALU esegue operazioni aritmetico - logiche su operandi contenuti temporaneamente nei vari registri. Dopo un'operazione l'ALU trasferisce e memorizza il risultato in un apposito registro chiamato comunemente accumulatore, nel caso dello Z80 il registro prende il nome di "A".
I registri consentono di memorizzare temporaneamente vari tipi di informazioni ed i principali sono:
I bus dati sono linee dedicate al trasferimento di dati da leggere o da scrivere nella memoria o sui dispositivi di I/O e sono quindi bidirezionali. Il loro numero determina la massima quantità di informazione che può essere trasferita con una singola operazione di scrittura o lettura, ossia il parallelismo del µP.
I bus indirizzi sono linee dedicate alla locazione di memoria a cui deve accedere la CPU durante il prelievo di un'istruzione o durante un'operazione di scrittura o lettura.
I bus di controllo sono gruppi di segnali di controllo che intervengono nelle funzioni di base della CPU e nelle creazioni con la memoria e i dispositivi periferici di I/O.
Le informazioni tra la CPU e il mondo esterno avvengono attraverso dispositivi periferici di I/O i quali si differenziano, oltre al ruolo per cui sono stati progettati, per le loro caratteristiche funzionali ed elettriche.
Vengono connessi alla CPU attraverso specifici circuiti di interfaccia (connessi da un lato al dispositivo periferico, dall'altro alle linee esterne della CPU, tra cui il bus dati, il bus indirizzi ed eventuali linee di controllo).
Ogni dispositivo di interfaccia comprende una o più linee di comunicazione (in genere sono bidirezionali) che consentono lo scambio di dati da un senso all'altro, chiamate porte I/O (la larghezza di una porta è pari al numero di linee del bus dati).
Esistono tre modalità di trasferimento dei dati:
Le interruzioni sono il processo mediante il quale il mondo esterno può richiedere alla CPU di interrompere il programma in corso per eseguire una determinata procedura che, ad un certo istante, si rende necessaria.
All'insorgere di una richiesta di interruzione, la CPU deve memorizzare quegli elementi che le permetteranno di riprendere il programma interrotto. Precisamente devono essere salvati il contenuto del PC, dell'SR ed eventualmente quello di altri registri della CPU che vengono utilizzati dalla routine di servizio.
I problemi connessi alla gestione delle interruzioni riguardano essenzialmente:
Lo Z80, sviluppato con tecnologia NMOS, appartiene alla categoria di µP con bus dati a 8 bit e bus indirizzi a 16 bit. Esso presenta un gruppo di registri di uso speciale e due banchi di registri di uso generale, uno principale e uno secondario, scambiabili fra loro. I registri di flag sono tutti registri a 8 bit ma possono essere usati a coppie in modo da formare dei registri a 16 bit.
Funzionamento del programma:
Il programma che intendiamo creare è una convertitore di codici, da binario a decimale, ed è in pratica un decoder.
Creando un ciclo polling, cioè fare in modo che il programma si ripeta continuamente controllando i dati che si ritrova in input, facciamo in modo che il dato venga immesso attraverso una piastrina con sei switch, anche se noi ne useremo solo quattro, in codice binario. I dati verranno elaborati dal Deneb e come output troviamo il dato immesso in codice decimale visibile su un display a sette segmenti.
Per fare in modo che sul display di visualizzi correttamente il numero, bisogna passare al programma i codici di ogni cifra decimale, in modo che il software del display capisca che segmenti attivare.
Tabella codici da 0 a 9:
Zero |
0C0H |
Uno |
0F9H |
Due |
0A4H |
Tre |
0B0H |
Quattro |
99H |
Cinque |
92H |
Sei |
82H |
Sette |
0F8H |
Otto |
80H |
Nove |
90H |
Nel programma la sintassi prevede il label del numero, l'istruzione "EQU", che fa in modo che il programma associ al label il codice, e infine il codice corrispondente, ad esempio:
zer equ 0C0H
Sintassi del programma:
|
org 00h |
significa che il programma parte dalla posizione 0 |
|
jp alfa |
|
tasti |
equ 10h |
mettiamo in input il tastierino che si trova alla 10h |
vett |
defb zer,uno,due,tre.qua,cin.sei.set.ott.nov |
creazione del vettore; sul simulatore sostituire "defb" con "db" |
zer |
equ 0c0h |
associazione ai label dei codici |
uno |
equ 0f9h |
|
due |
equ 0a4h |
|
tre |
equ 0b0h |
|
qua |
equ 99h |
|
cin |
equ 92h |
|
sei |
equ 82h |
|
set |
equ 0f8h |
|
ott |
equ 80h |
|
nov |
equ 90h |
|
alfa |
In a,(tasti) |
il deneb legge quello che c'è in entrata |
|
Ld hl,vett |
|
|
Add a,l |
|
|
Ld l,a |
|
|
Ld a,(hl) |
|
|
Out (30h),a |
in uscita mandiamo il codice |
|
Jp alfa |
torniamo ad alfa in modo da creare il polling |
|
end |
|
Fase di simulazione:
Si accende al prompt del DOS, si lavora nella directory E:\users\home\3h\z80.sim usando il comando CD (change directory), si scrive il programma usando il comando EDIT e si salva il file in formato .asm, si lancia l'assemblatore con il comando Z80ASM e se non trova errori si può procedere alla simulazione: si usa il comando Z80SIM e si dà 2.5 (MHz) come frequenza di clock. Se si necessita di modificare subito i registri si usa il pulsante F4 per entrare ed uscire dall'editor. Si lancia il file usando il pulsante F2: il programma chiederà il nome del file .obj creato dall'assemblatore e poi bisogna lanciare il programma col tasto G specificando da quale indirizzo inizia il programma. Si eseguono una alla volta le istruzioni premendo il tasto ESC e si controlla sul monitor il funzionamento del programma.
Fase di caricamento ed esecuzione sul Deneb:
Si salva il programma in formato .msa, si salva su floppy e si va a provare sul computer collegato al Deneb eseguendo le seguenti istruzioni:
Fase preparativa
Fase "Assemblaggio"
Fase "Linker"
Prova sul Deneb
NB: ● = premere invio senza immettere nulla
Risultati della prova:
Provando ad immettere i codici dagli switch possiamo osservare il display cambiare valore; se si prova ad immettere valori superiori a 9 il Deneb smette di funzionare poi chè non ha i codici necessari per visualizzare i caratteri.
Privacy |
Articolo informazione
Commentare questo articolo:Non sei registratoDevi essere registrato per commentare ISCRIVITI |
Copiare il codice nella pagina web del tuo sito. |
Copyright InfTub.com 2025