Assembly funzionamento della PIO

Materie:Appunti
Categoria:Informatica

Voto:

1.5 (2)
Download:150
Data:15.10.2001
Numero di pagine:6
Formato di file:.doc (Microsoft Word)
Download   Anteprima
assembly-funzionamento-pio_1.zip (Dimensione: 18.4 Kb)
trucheck.it_assembly-funzionamento-della-pio.doc     48 Kb
readme.txt     59 Bytes



Testo

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

Esempio



  


  1. gg

    dfgdfgdfgsdfnkvgbn n gfnbjkdfn jdfn nmdf ndf