Caricare documenti e articoli online 
INFtub.com è un sito progettato per cercare i documenti in vari tipi di file e il caricamento di articoli online.


 
Non ricordi la password?  ››  Iscriviti gratis
 

Il µP Z80 - Scopo, Cenni teorici sul µP Z80

finanze




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:

  • Contatore di programma (PC, dall'inglese Program Counter) registro a 16 bit, contiene l'indirizzo dell'istruzione da prelevare in memoria. L'aggiornamento del PC avviene alla fine della fase di fetch (dall'inglese, prelevamento); 222g63c
  • Registro istruzioni (IR, dall'inglese Instruction Register) immagazzina l'istruzione, o meglio il dice operativo dell'istruzione (op-code), puntata dal PC, che verrà decodificata dall'unità di controllo;
  • Registro indirizzi di memoria (MAR, dall'inglese Memory Addrerss Register) contiene l'indirizzo dell'istruzione che deve essere prelevata dalla memoria oppure del dato che deve essere trasferito da o verso la memoria o i dispositivi di I/O;
  • Registro dati di memoria (MDR, dall'inglese Memory Data Register) provvede allo scambio di dati tra il µP e la memoria o gli organi di I/O con adeguato sincronismo;
  • Registro di stato (SR, dall'inglese Status Register) memorizza essenzialmente un insieme di bit indicatori (bit di flag) che forniscono informazioni sull'ultimo risultato aritmetico - logico eseguito dall'ALU.

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:

  • Trasferimento programmato: lo scambio di dati è controllato dal programma (un esempio può essere il computer che invia una file da stampare alla stampante);
  • Trasferimento pilotato da interruzione: il processori comunicazione è innescato dal dispositivo esterno che invia alla CPU la richiesta di comunicazione, attivandone la linea di interruzione. In linea di massima si può dire che questo metodo si adatta bene alla gestione di eventi e comunicazioni asincrone e non troppo frequenti (rispetto ai tempi di lavoro della CPU) e che il trasferimento vero e proprio, una volta iniziato, si svolge sotto il controllo del programma;
  • Trasferimento tipo DMA (Direct Memory Access): non viene usata; consente l'accesso diretto alla memoria per il trasferimento da e verso le unità periferiche senza passare attraverso la CPU.

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:

  • Riconoscimento da parte della CPU di una richiesta di interruzione;
  • Le modalità con cui la CPU può riconoscere la periferica che ha generato l'interruzione;
  • Le modalità di stabilire, se vi sono due o più richieste di interruzione contemporaneamente, quale periferica abbia la priorità sulle altre.

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

  • Cambiare la directory da C:\ a C:\deneb
  • Copy a:\sorgente.msa

Fase "Assemblaggio"

  • Az80
  • Source.=sorgente.msa

Fase "Linker"

  • xlink
  • def-cpu
  • .Z80
  • load sorgente
  • dump
  • .sorgente
  • exit

Prova sul Deneb

  • com
  • scegliere com2 ed abbassare e alzate l'interruttore "reset" sul modulo Deneb
  • l
  • . lunghezza programma (immettere 100 per non correre rischi)
  • . sorgente.a01
  • g (richiesta dell'indirizzo da cui partire: immettere 00)

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


Hits: 2481
Apprezzato: scheda appunto

Commentare questo articolo:

Non sei registrato
Devi essere registrato per commentare

ISCRIVITI



Copiare il codice

nella pagina web del tuo sito.


Copyright InfTub.com 2024