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
 

Realizzazione di una sveglia digitale

informatica



Realizzazione di una sveglia digitale.




Scopo:


Realizzare un programma in Assembly che gestisca attraverso il microprocessore Z80 una sveglia digitale a 4 display, utilizzando il contatore/timer programmabile Z80 CTC e la PIO.


Cenno teorico:


La piedinatura del CTC è riportata sull'esperienza precedente mentre l'utilizzo della Pio e quindi la sua mappatura sono le novità della nuova esperienza; prima di tutto è importante conoscere come è strutturata la PIO:





quelli che seguono sono bit aggiuntivi che hanno a che fare con l'adress bus.


B/A = c'è un bit ch 212d34c e regola se il colloquio in corso con il microprocessore si riferisce alla porta A(0) oppure a quella B(1).

C/D = un ulteriore bit regola la programmazione o la trasmissione dalla porta:

0 -» invio dato

1 -» invio comando

CE = c'è anche la necessità di abilitare o disabilitare la Pio attraverso questo chip di enable che viene preso in considerazione se è uguale a 0.


Come nel CTC attraverso IEI e IEO si controllano le interruzioni.


La programmazione della PIO:


La PIO dispone di una linea B/Ā per selezionare la porta attiva e di una linea C/D(negato) distinguere fra trasferimento dati e scrittura di parole di comando (programmazione).

Pertanto non serve come nel CTC un flip flop D perché ci pensa la stessa PIO a trattenere il dato.


B/Ā  C/D(negato) Operazione Tipo

L L trasferimento dati porta A lettura/scrittura

L H programmazione porta A solo scrittura

H L trasferimento dati porta B lettura/scrittura

H H programmazione porta B solo scrittura


Se, con una scelta opportuna, B/Ā e C/D(negato) fanno capo rispettivamente alle linee A1,A0 dell'address Bus, le 4 operazioni corrispondono ad I/O in 4 locazioni successive ADDR, ADDR+1, ADDR+2, ADDR+3.


Programmazione in modo 0,1,2:


Richiede due parole di comando per porta: una parola di controllo modo e un eventuale vettore di interruzioni (che è più propriamente la parte bassa del vettore interruzione), obbligatorio se la porta è abilitata a generare interruzioni. Entrambe possono essere scritte in qualunque momento e in qualunque ordine, perché sono comunque riconoscibili dai bit fissi che contengono. La PIO è prevista per lavorare con lo Z80 programmato per il modo di interruzione 2 (IM2): nel ciclo di riconoscimento dell' interruzione (IORQ e M1 entrambi bassi) la PIO mette sul bus dati il vettore a 8 bit, che, con il contenuto del registro I dello Z80 come parte alta, costituisce il puntatore alla routine di gestione. Si noti che il LSB del vettore di interruzione è fisso a 0, come deve essere perché il puntatore deve puntare due locazioni successive (indirizzo a 2 byte della routine di gestione) e quindi deve variare di due in due.


Modo 0:

si fa un output del dato sulla porta che a sua volta lo presenta verso l'esterno; si usa RDY per segnalare al microprocessore che c'è un segnale sulla porta, invece il segnale di STROB ci dice che il dato è già stato preso in considerazione dalla periferica, quindi la periferica interessata è pronta per ricevere un nuovo dato. In questo modo la PIO può fare una richiesta di interruzione allo Z80 ma la condizione è che la periferica abbia già letto il dato.


Modo 1:

è l'inverso di prima, la periferica usa lo STROB per segnalare dall'esterno che c'è un dato pronto da leggere sulla porta e provoca l'interruzione dello Z80 che così "capisce" cosa deve fare un input.


Modo 2:

si può utilizzare solamente con la porta A perché vengono utilizzati gli STROB di entrambe le porte. Si ha un input/output bidirezionale infatti si manda 1 byte per volta in un senso e nell'altro, il tutto viene gestito attraverso le interruzioni.

Modo 3:

Richiede come gli altri la specifica parola di controllo modo, seguita immediatamente da una parola di controllo registro I/O (I/O register control word), che seleziona quali linee sono di ingresso e quali di uscita. Se è prevista l'abilitazione della porta a generare interrupt, è necessario passare alla PIO anche il vettore di interruzione e una parola di controllo delle interruzioni (interrupt control word) che, oltre ad abilitare/disabilitare generazione di interrupt (bit D7), permette di scegliere il livello da considerare attivo sulle linee di ingresso ai fini della generazione dell'interrupt (bit D5) e, tramite D6, se la condizione su di esse è AND (interrupt solo se tutte le linee selezionate sono attive) o OR (ne basta una). Infine il bit D4 permette di decidere se le linee di ingresso devono essere testate tutte (0) o in parte (1); in quest'ultimo caso la parola di controllo delle interruzioni deve essere obbligatoriamente e immediatamente seguita da una parola di controllo maschera (mask control word), che definisce quali linee di ingresso devono essere ignorate nella generazione dell'interrupt. Le sue caratteristiche principali sono che non usa né il segnale di STROB né quello di RDY, questo metodo di interruzione è utile perché se la porta A è programmata in modo 2 allora automaticamente la porta B sarà programmata in modo 2.


I comandi o coppie di comandi:


Controllo di modo + Controllo registro I/O

Vettore di interruzione

Controllo interruzioni + eventuale Controllo maschera possono essere in ogni caso essere passati al PIO in qualunque momento e in ordine arbitrario.


Abilitazione e disabilitazione della generazione degli interrupt


In ogni momento è possibile abilitare o disabilitare la generazione degli interrupt da parte della PIO mediante una parola di disabilitazione e interruzioni; se usata con una porta in modo 3, essa abilita o disabilita la generazione di interrupt senza per altro modificare il resto dell'impostazione della parola di controllo interruzione.


listato programma


Programmazione di un orologio digitale.


;Tabella delle combinazioni per il display

ORG 5000H

TAB    DB ZERO

DB UNO

DB DUE

DB TRE

DB QUATTRO

DB CINQUE

DB SEI

DB SETTE

DB OTTO

DB NOVE


ZERO    EQU 00111111B

UNO EQU 00000110B

DUE EQU 01011011B

TRE EQU 01001111B

QUATTRO     EQU 01100110B

CINQUE  EQU 01101101B

SEI EQU 01111101B

SETTE   EQU 00000111B

OTTO    EQU 01111111B

NOVE    EQU 01101111B


;CTC

PRCH0   EQU 00100111B

CTCH0   EQU 128

PRCH1   EQU 11000111B

CTCH1   EQU 75

VET    EQU 10H

VETPIO  EQU 20H

STACK  EQU 2000H

CH0    EQU 44H

CH1    EQU 45H


;PIO

PIOADATI EQU 01100000B

PIOBDATI  EQU 01100001B

PIAACOM EQU 01100010B

PIOBCOM EQU 01100011B


;PROGRAMMAZIONE PIO

MODO3 EQU CFH


;DISPLAY:

;Indirizzamento dei quattro display HH:mm

DIS1    EQU 00000000B ;ore (parte alta)

DIS2    EQU 00100000B ;ore (parte bassa)

DIS3    EQU 01000000B ;minuti (parte alta)

DIS4    EQU 01100000B ;minuti (parte bassa)


;Pulsante

PULS  EQU 10H


;Dichiarazione delle variabili

ORE    DB 0

MINUTI DB 0

SECONDI  DB 0

PUNTINO  DB 0



;PROGRAMMA PRINCIPALE


ORG 0000H

JP INIZIO

ORG 0100H

INIZIO   LD SP,STACK

LD A,PRCH0

OUT (CH0),A

LD A,CTCH0

OUT (CH0),A

LD A,PRCH1

OUT (CH1),A

LD A,CTCH1

OUT (CH1),A

LD A,VET

OUT (CH0),A

LD A,MODO3

OUT (PIOACOM),A

LD A,00000011B

OUT (PIOACOM),A

LD A,VETPIO

OUT (PIOACOM),A

LD A,11H

LD I,A

LD A,(TAB)

OUT (DIS1),A

OUT (DIS2),A

OUT (DIS3),A

OUT (DIS4),A

IM 2

EI

NULLA  NOP

NOP

JP NULLA



;Incremento orologio

;Secondi


LOOP PUSH BC

PUSH AF

PUSH HL

LD A,(SECONDI)

INC A

LD (SECONDI),A

CP 60

JR NZ,VISUALIZZA

LD A,0

LD (SECONDI),A

LD A,(MINUTI)

INC A

LD (MINUTI),A

CP 60

JR NZ,VISUALIZZA

LD A,0

LD (MINUTI),A

LD A,(ORE)

INC A

LD (ORE),A

CP 24

JR NZ,VISUALIZZA

LD A,0

LD (ORE),A


;Procedura di Visualizzazione dell`orario sui display

;Controllo della modalita

VISUALIZZA IN A,(PULS)

AND 01H

CP 1

JR Z,OREMINUTI

;Minuti - Secondi

;Visualizzazione secondi

LD A,(SECONDI)

DAA

AND 0FH

LD HL,TAB

ADD A,L

LD L,A

JR NC,SALTA

INC H

SALTA   LD A,(HL)

OUT (DIS4),A

LD A,(SECONDI)

DAA

LD HL,TAB

SRL A

SRL A

SRL A

SRL A

ADD A,L

LD L,A

JR NC,NEXT

INC H

NEXT LD A,(HL)

OUT (DIS3),A

;Visualizzazione Minuti

LD A,(MINUTI)

DAA

AND 0FH

LD HL,TAB

ADD A,L

LD L,A

JR NC,SALTA2

INC H

SALTA2 LD A,(HL)

OUT (DIS2),A

LD A,(MINUTI)

DAA

LD HL,TAB

SRL A

SRL A

SRL A

SRL A

ADD A,L

LD L,A

JR NC,NEXT2

INC H

NEXT2   LD A,(HL)

OUT (DIS1),A

;Visualizzazione Ore - Minuti

;Visualizzazione Minuti

OREMINUTI LD A,(MINUTI)

DAA

AND 0FH

LD HL,TAB

ADD A,L

LD L,A

JR NC,SALTA3

INC H

SALTA3 LD A,(HL)

OUT (DIS4),A

LD A,(MINUTI)

DAA

LD HL,TAB

SRL A

SRL A

SRL A

SRL A

ADD A,L

LD L,A

JR NC,NEXT3

INC H

NEXT3   LD A,(HL)

OUT (DIS3),A

;Visualizzazione delle ore con puntino dei secondi

LD A,(ORE)

DAA

AND 0FH

LD HL,TAB

ADD A,L

LD L,A

JR NC,SALTA4

INC H

SALTA4 LD A,(HL)

LD B,A

LD A,(PUNTINO)

CPL

AND 01H

CP 1

JR NZ,SPENTO

ACCESO LD A,B

SET 7,A

JR VEDI

SPENTO LD A,B

RES 7,A

VEDI   OUT (DIS2),A

LD A,(ORE)

DAA

LD HL,TAB

SRL A

SRL A

SRL A

SRL A

ADD A,L

LD L,A

JR NC,NEXT4

INC H

NEXT4   LD A,(HL)

OUT (DIS1),A

POP HL

POP AF

POP BC

EI

RETI


TASTI ;RISPOSTA ALL'INTERRUZIONE DELLA PIO




ORG 1112H

DW LOOP

ORG 1122H

DW TASTI

END






Privacy




Articolo informazione


Hits: 1495
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