Alunno: Lamacchia Cosimo€¦ · Web view100 mov ah,50 b4 50 → ah 101 50 102 inc ah fe ah +1...
Transcript of Alunno: Lamacchia Cosimo€¦ · Web view100 mov ah,50 b4 50 → ah 101 50 102 inc ah fe ah +1...
Alunno: Lamacchia Cosimo
Alunno: Lamacchia Cosimo
Classe: 4^A informatica
Data consegna:
Oggetto: Programmazione del microprocessore 8086 e interfacciamento
del PPI 8255 INTEL. Verifica di circuiti dell’elettronica analogica.
Fase 1: Programmazione del μP 8086 della INTEL.
Fase 2: Programmazione del PPI 8255 INTEL.
Fase 3: Circuiti raddrizzatori a semionda e a doppia onda (o onda intera).
. Fase 1:
Programmazione del μP 8086
Il microprocessore 8086 è un sistema a logica programmabile.
Internamente ad esso sono presenti una serie di registri ( 16 per la precisione ), oltre che l’esecutore di operazioni aritmetico-logiche (ALU), inoltre nell’architettura interna dell’8086 si possono distinguere due unità:
· BIU (Bus Interface Unit): unità che si interfaccia con i bus e colloquia con la memoria
· EU (Execute Unit): unità di elaborazione e esecuzione.
Nella BIU sono presenti i quattro registri segmento (ES,SS,DS,CS) e il registro IP, oltre alla coda di prefetch che contiene i codici operativi dei processi successivi e alla BI (Bus Interface) il dispositivo che si interfaccia direttamente con i BUS (indirizzi, Dati, Controllo)
Nella EU sono presenti i registri di uso generale (AX,BX,CX,DX), registri puntatore di stack (SP,BP), registri indice (SI,DI), registro dei flag e registro istruzione, oltre all’unità Logico- Aritmetica (ALU).
Esternamente il μP 8086 è composto da 40 pin utilizzati per la comunicazione con altri dispositivi, di memoria o di I/O. Inoltre dispone di un notevole quantitativo di segnali grazie alla tecnica della multimodalità (modalità variabile grazie al segnale di modo MN/MX) che determina il cambiamento di natura di alcuni segnali e mantenendo sempre i 40 pin il μP è in grado di interagire anche con altri μP.
Il dispositivo usato come μP 8086 interpreta il linguaggio Assembly in codice macchina, di conseguenza la programmazione del microprocessore è stata effettuata con l’utilizzo di codice Assembly. Il funzionamento è stato testato provando una serie di istruzioni passando dall’inserimento banale di parole nei registri e arrivando alla costruzione di un ciclo semaforico.
All’accensione dell’8086 c’è una righa di comando su cui si possono inserire le seguenti istruzioni:
· A : caricare un programma in Assembly a partire dalla locazione indicata()
· G : esecuzione di un programma dalla all’istruzione int3 che ne indica la fine
· T : esecuzione di un programma passo passo dalla
· S : accedere alla locazione indicata di memoria
· R : visualizzare il contenuto dei registri
Una volta scelto il comando A si può provvedere all’inserimento riga per riga del codice Assembly, dopo aver eseguito il programma con il comando G si può verificare lo stato dei registri e il codice macchina associato a ogni ciclo macchina.
Tutti i programmi sono stati provati e verificati e i loro dati riportati in tabelle.
Di seguito è riportata la descrizione dei programmi effettuati con le rispettive tabelle:
1. 01 in AL; 02 in AH; 03 in BL; 04 in BH; 05 in CL; 06 in CH; 07 in DL; 08 in DH; INT 3
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV AL,01
B0
01 → AL
101
01
102
MOV AH,02
B4
02 → AH
103
02
104
MOV BL,03
B3
03 → BL
105
03
106
MOV BH,04
B7
04 → BH
107
04
108
MOV CL,05
B1
05 → CL
109
05
10A
MOV CH,06
B5
06 → CH
10B
06
10C
MOV DL,07
B2
07 → DL
10D
07
10E
MOV DH,08
B6
08 → DH
10F
08
110
INT 3
CC
ALT
Risultato finale: AX = 0201; BX = 0403; CX = 0605; DX = 0807; IP = 0110
Il programma è stato inserito a partire dalla locazione 100. Questo programma prevede l’inserimento, grazie all’istruzione MOV (es: MOV AL,01) di alcune parole nei registri di uso generale (AX,BX,CX,DX). Ogni registro è a 2byte, ma, come si vede nella tabella, ognuno dei registri può essere utilizzato come 2 registri da 1 byte, indicando con H la parte più alta del registro ( AH,BH,CH,DH ) e con L la parte più bassa ( AL,BL,CL,DL ).
Ogni istruzione viene, in automatico, codificata in un codice macchina espresso in valori esadecimali. Il termine del programma è segnato dall’istruzione INT 3 che ha come codice macchina il valore CC.
La verifica del funzionamento è stata fatta vedendo i registri dopo l’esecuzione del programma.
2. 50 in AL; AH +1; AH in CL; CL +1;CL in CH; CH + 1; CH in Dl; DL in DH; DH – 1; DH in BH; BH – 1; BH in BL; INT 3.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV AH,50
B4
50 → AH
101
50
102
INC AH
FE
AH +1
103
C4
104
MOV CL,AH
8A
AH → CL
105
CC
106
INC CL
FE
CL +1
107
C1
108
MOV CH,CL
8A
CL → CH
109
E9
10A
INC CH
FE
CH+1
10B
C5
10C
MOV DL,CH
8A
CH → DL
10D
D5
10E
MOV DH,DL
8A
DL → DH
10F
F2
110
DEC DH
FE
DH - 1
111
CE
112
MOV BH,DH
8A
DH → BH
113
FE
114
DEC BH
FE
BH -1
115
CF
116
MOV BL,BH
8A
BH → BL
117
DF
118
INT 3
CC
ALT
Risultato finale: AX = 5100; BX = 5151; CX = 5352; DX = 5253; IP = 0118.
In questo caso oltre all’inserimento nei registri del microprocessore, si sono fatte alcune operazioni di incremento (es:INC AH) e di decremento (es : DEC DH) del valore contenuto dal registro e operazioni di copia del valore da un registro a un altro fatte sempre con l’istruzione MOV. Dopo l’esecuzione del programma si possono notare i valori dei registri utilizzati.
3. [0003] in AH; AH in [0200]; [0201] in BX; AH + 1; AH in [BX]; BL +1; AH in DH; DH+1; DH in [BX]; DH in CH; CH +1; BL+1; CH in [BX], INT 3.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV AH,[0003]
8A
[0003] → AH
101
26
102
03
103
00
104
MOV [0200],AH
88
AH → [0200]
105
26
106
00
107
02
108
MOV BX,[0201]
8B
[0201] → BX
109
1E
10A
01
10B
02
10C
INC AH
FE
AH +1
10D
C4
10E
MOV [BX],AH
88
AH → [BX]
10F
27
110
INC BL
FE
BL +1
111
C3
112
MOV DH,AH
8A
AH → DH
113
F4
114
INC DH
FE
DH +1
115
C6
116
MOV [BX],DH
88
DH → [BX]
117
37
118
MOV CH,DH
8A
DH → CH
119
EE
11A
INC CH
FE
CH +1
11B
C5
11C
INC BL
FE
BL +1
11D
C3
11E
MOV [BX],CH
88
CH → [BX]
11F
2F
120
INT 3
CC
ALT
Risultato finale: AX = 0100; BX = 0002; CX = 0300; DX = 0200; IP = 0120.
Nel programma si è fatto utilizzo, anche, dell’indirizzamento,diretto e indiretto in memoria, ovvero è stato prelevato un dato puntato da un indirizzo e trasferito in uno dei registri del μP o viceversa prelevato da un registro e inserito al riferimento dell’indirizzo. Nell’indirizzamento diretto l’indirizzo è inserito tra parentesi quadre (es: MOV AH,[0003]) nell’indirizzamento indiretto l’indirizzo viene inserito nel registro (BX o DX)e poi prelevato mettendo tra parentesi quadre il registro (es: MOV [BX],AH).
4. 4200 in SP; 01 in AH; 02 in AL; 03 in BH; 04 in BH; 04 in BL; 05 in CH; 06 in CL; AX in stack; BX in stack; CX in stack; INT 3.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV SP,4200
BC
[4200] → AH
101
00
102
42
103
MOV AH,01
B4
01 → AH
104
01
105
MOV AL,02
B0
02 → AL
106
02
107
MOV BH,03
B7
03 → BH
108
03
109
MOV BL,04
B3
04 → BL
10A
04
10B
MOV CH,05
B5
05 → CH
10C
05
10D
MOV CL,06
B1
06 → CL
10E
06
10F
PUSH AX
50
Trasferimento dato da registro generico in stack
SP - 2
110
PUSH BX
53
111
PUSH CX
51
112
INT 3
CC
ALT
Risultato finale: AX = 0102; BX = 0304; CX = 0506; DX = 0000; SP = 41FA; IP = 0112.
In questo caso è stato usato il segmento di stack per memorizzare le parole inserite nei registri.
Per ogni inserimento nello stack si utilizza il comando PUSH che oltre a provvedere a inserire il dato alla locazione di stack puntata dallo Stack Pointer(SP) decrementa di 2 lo SP in quanto ogni locazione di stack è formata da 1byte. Si nota che dopo 3 inserimenti lo SP da puntare alla locazione 4200 punta alla locazione 41FA.
5. 99 in BH; 99 in CH[loop1]; 99 in DH[loop2]; DH-1[loop3]; JNZ a loop3; CH – 1; JNZ a loop2; BH – 1; JNZ a loop1; INT3.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV BH,99
B7
99 → BH
101
99
102
MOV CH,99
B5
99 → CH
103
99
104
MOV DH,99
B6
99 → DH
105
99
106
DEC DH
FE
DH – 1
107
CE
108
JNZ 106
75
Salta a loc.106
109
FC
10A
DEC CH
FE
CH – 1
10B
CD
10C
JNZ 104
75
Salta a loc.104
10D
F6
10E
DEC BH
FE
BH -1
10F
CF
110
JNZ 102
75
Salta a loc.102
111
F0
112
INT 3
CC
ALT
Risultato finale: AX = 0000; BX = 0000; CX = 0000; DX = 0000; IP = 0112. Tempo 26’’.
Il programma gestisce 3 cicli loop effettuati finché tutti i registri utilizzati(BH,CH,DH) non vengono tutti azzerati, partendo da un valore pari a 99h. Nella programmazione non potendo utilizzare le etichette necessarie a effettuare i cicli loop si utilizzano le Jump precisamente la JNZ(salta se l’istruzione precedente non è sero) alla locazione interessata.
Dopo aver mandato in RUN il programma il μP è stato per 26 sec in esecuzione. Questo evidenzia la notevole quantità di operazioni effettuate per terminare l’esecuzione del programma.
6. FF in BH; FF in CH[loop1]; FF in DH[loop2]; DH-1[loop3]; JNZ a loop3; CH – 1; JNZ a loop2; BH – 1; JNZ a loop1; INT3.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV BH,FF
B7
FF → BH
101
FF
102
MOV CH,FF
B5
FF → CH
103
FF
104
MOV DH,FF
B6
FF → DH
105
FF
106
DEC DH
FE
DH – 1
107
CE
108
JNZ 106
75
Salta a loc.106
109
FC
10A
DEC CH
FE
CH – 1
10B
CD
10C
JNZ 104
75
Salta a loc.104
10D
F6
10E
DEC BH
FE
BH -1
10F
CF
110
JNZ 102
75
Salta a loc.102
111
F0
112
INT 3
CC
ALT
Risultato finale: AX = 0102; BX = 0304; CX = 0506; DX = 0000; IP = 0112. Tempo 1’58’’
Questo programma, come si nota anche dalla tabella, è identico al precedente solo che i registri utilizzati hanno un valore iniziale di FFh. Di conseguenza il tempo impiegato per l’esecuzione è notevolmente aumentato(da 26’’ a 1’26’’).
7. Verificare le operazioni di INPUT diretto e indiretto dagli switch di indirizzo 00h.
Il programma prevede il cambiamento dello stato degli switch e l’acquisizione del loro stato.
Dando in input la parola AAh si può acquisire il dato per accesso diretto e indiretto:
→ Accesso diretto
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
IN AL,00
E4
[00] → AL
101
00
102
INT 3
CC
ALT
Risultato finale: AX = 00AA; IP = 0102.
L’accesso diretto si effettua utilizzando l’istruzione IN seguita da registro AX (oppure AL), e come secondo operando l’indirizzo da cui prelevare il dato. Il dato in questo modo viene trasferito nel registro. La verifica può essere fatta vedendo lo stato del registro al termine dell’operazione.
→ Accesso indiretto
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV DX,0000
BA
0000 → DX
101
00
102
00
103
IN AL,DX
EC
[00] → AL
104
INT 3
CC
ALT
Risultato finale: AX = 00AA; DX = 0000; IP = 0104.
Nell’accesso indiretto il secondo operando dell’istruzione IN deve essere il registro DX, precedentemente caricato con l’indirizzo.
La differenza sostanziale che sta nei due tipi di accesso, oltre al fatto che l’indirizzamento indiretto necessita di più cicli macchina, è quella dell’impossibilità di accedere con l’indirizzamento diretto a locazioni che occupano un indirizzo maggiore di 1byte. Quindi nel caso in cui l’indirizzo è di 2byte si utilizza per indirizzare il caricamento del valore dell’indirizzo nel registro DX.
8. Verificare le operazioni di OUTPUT diretto e indiretto su LED di indirizzo 00h e su LED di indirizzo 01h.
Per verificare le operazioni di OUTPUT il registro AL è stato caricato con una parola che è stata poi verificata sulla lettura dei LED.
L’istruzione che consente di inviare un dato a una determinata locazione è OUT che necessita come primo operando l’indirizzo a cui inviare il dato e come secondo operando il registro AX (o AL) che contiene il dato da inviare.
L’operazione è stata fatta in modo diretto e indiretto:
→ Accesso diretto
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV AL,A5
B0
A5 → AL
101
A5
102
OUT 00,AL
E6
AL → [00]
103
00
104
OUT 01,AL
E6
AL → [01]
105
01
106
INT 3
CC
ALT
Risultato finale: AX = 00A5; IP = 0106.
→ Accesso indiretto
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV AL,A5
B0
5A → AL
101
A5
102
MOV DX,00
BA
00 → DX
103
00
104
00
105
OUT DX,AL
EE
AL → [DX]
106
MOV DX,01
BA
01 → DX
107
01
108
00
109
OUT DX,AL
EE
AL → [DX]
10A
INT 3
CC
ALT
Risultato finale: AX = 00A5; DX = 0001; IP = 010A.
Nell’accesso diretto il primo operando è in forma numerica, in quello indiretto, viene prima di tutto caricato l’indirizzo in DX, quindi il primo operando è il registro DX.
L’indirizzamento in OUTPUT e uguale a quello precedentemente descritto per l’azione di INPUT
Dopo ogni prova sia i LED all’indirizzo 00h che quelli all’indirizzo 01h, riportavano lo stato riferito alla parola inviata.
9. Verifica ciclica della porta di INPUT alle due porte di OUTPUT.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
IN AL,00
E4
[00] → al
101
00
102
OUT 00,AL
E6
AL → [00]
103
00
104
OUT 01,AL
E6
AL → [00]
105
01
106
CMP AL,00
35
Confronto AL con 00
107
00
108
JNZ 100
75
Salta se non è 0 a loc.100
109
F6
10A
INT 3
CC
ALT
Per verificare la funzione ciclica si è fatto utilizzo delle istruzioni IN e OUT in modo ripetitivo, e per far si che non si creavi un loop infinito, il programma è stato impostato in modo tale che appena il dato in INPUT dagli switch fosse pari a 00h sarebbe terminato. Per far ciò c’è stata la necessità di utlizzare l’istruzione CMP che confronta 2 dati e l’istruzione di Jump.
All’esecuzione il μP accettava qualunque dato il INPUT ma dando 00h il programma terminava.
10. Verifica del ciclo semaforico.
Locazione
( in esadec.)
Codice Assembly
Codice macchina
Commento
100
MOV DL,0
B2
00 → DL
101
00
102
PUSH DX
52
Trasferim. DX in stack SP -2
103
MOV AL,FF
B0
FF → AL
104
FF
105
OUT 01,AL
E6
AL → 01
106
01
107
MOV AL,00
B0
00 → AL
108
00
109
OUT 00,AL
E6
AL → 00
10A
00
10B
MOV BL,99
B3
99 → BL
10C
99
10D
JMP 126
EB
Salta a loc. 126
10E
17
10F
MOV DL,1
B2
01 → DL
110
01
111
PUSH DX
52
Trasferim. DX in stack SP -2
112
MOV AL,F
B0
0F → AL
113
0F
114
OUT 01,AL
E6
AL → 01
115
01
116
OUT 00,AL
E6
AL → 00
117
00
118
MOV BL,77
B3
77 → BL
119
77
11A
JMP 126
EB
Salta a loc. 126
11B
0A
11C
MOV AL,FF
B0
FF → AL
11D
FF
11E
OUT 00,AL
E6
AL → 00
11F
00
120
MOV AL,00
B0
00 → AL
121
00
122
OUT 01,AL
E6
AL → 01
123
01
124
MOV BL,99
B3
99 → BL
125
99
126
MOV BH,BL
8A
BL → BH
127
FB
128
MOV CH,BL
8A
BL → CH
129
EB
12A
MOV DH,BL
8A
BL → DH
12B
F3
12C
DEC DH
FE
DH – 1
12D
CE
12E
JNZ 12C
75
Salta a loc. 12C
12F
FC
130
DEC CH
FE
CH – 1
131
CD
132
JNZ 12A
75
Salta a loc. 12A
133
F6
134
DEC BH
FE
BH – 1
135
CF
136
JNZ 128
75
137
F0
138
POP DX
5A
Recupero dato da stack SP + 2
139
CMP DL,00
80
Confronta DL con 00
13A
FA
13B
00
13C
JE 10F
74
Se DL = 0 Salta a loc. 10F
13D
D1
13E
CMP DL,01
80
Confronta DL con 00
13F
FA
140
01
141
JE 11C
74
Se DL = 1 Salta a loc. 11C
142
D9
143
JMP 100
EB
Salta a loc. 100
144
B9
145
INT 3
CC
ALT
Per la realizzazione di un ciclo semaforico si è fatto utilizzo delle istruzioni precedentemente spiegate.
La segnaletica di colore rosso è rappresentata dai LED all’indirizzo 01h (LED di colore rosso), la segnaletica di colore verde dai LED all’indirizzo 00h(LED di colore verde), mentre per rappresentare la spia luminosa gialla c’è stata la necessità di utilizzare 4 LED all’indirizzo 00h e 4 LED all’indirizzo 01h.
Il tempo dell’accensione dei colori è stato effettuato generando dei loop come nel caso del punto .5 precedentemente spiegato e si è fatto utilizzo dello stack per selezionare il colore.
Il programma non prevede un termine, ma viene generato all’infinito, o meglio fino al resettaggio.
. Fase 2:
Programmazione del PPI 8255 INTEL
L’integrato PPI (Programmable Peripheral Interface)8255 della Intel è un integrato programmabile utilizzato per interfacciare le porte parallele. È costituito da 3 porte porta A, porta B, porta C, che possono essere utilizzate o singolarmente oppure, nel caso ci sia la necessità di handshaking, a coppie.
Il PPI 8255 ha 3 modi di funzionamento:
· Modo 0: è un modo basico che non utilizza i segnali di handshaking e può funzionare con tutte e 3 le porte;
· Modo 1: utilizza la tecnica di hanshaking e può funzionare solo con le porte A e B perché la porta C è utilizzata per i segnale di handshake;
· Modo 2: è un metodo bidirezionale e funziona solo con la porta A.
La programmazione del PPI avviene tramite parola di controllo inviata all’indirizzo che comporta la relazione 1 1 dei segnali A0 e A1 le altre combinazioni portano:
A1 A0
Destinazione
0 0
0 1
1 0
1 1
Porta A
Porta B
Porta C
Parola di controllo
La parola di controllo è formata da 8 bit.
Partendo dal MSB i bit hanno la seguente utilità:
1°) 1 = programmazione di modo
2° e 3°) la loro combinazione seleziona il modo della porta A (modo 0,1 o 2)
4°) seleziona Input o l’Output della porta A (1 = IN, 0=OUT)
5°) seleziona Input e Output della porta C alta
6°) seleziona modo della porta B (modo 0,modo 1)
7°) seleziona Input e Output della porta B
8°) seleziona Input e Output della porta C bassa
Per verificare il funzionamento del PPI, quest’ultimo è stato montato su una bread board, insieme al decoder 74LS138, utilizzato per generare l’indirizzo a cui inviare i dati da trasmettere o ricevere, e all’integrato 74LS02 che contiene 2 porte NOR utilizzate per collegare il reset e uno dei segnali di Enable del 74LS138. la bread board utilizzata aveva un uscita collegabile con il μP 8086 utilizzato della FASE 1, necessario per la programmazione del PPI 8255.
74LS138
+5 V
1
2
3
4
6
5
7
8
16
2
3
1
2
4
E
E
E
1
2
1
3
A
2
A
3
A
4
A
5
A
6
A
7
Y
7
M
IO
+5 V
+5 V
14
7
4
5
6
74LS02
PPI
8255
5
36
35
7
6
8
9
34
33
32
31
30
29
28
27
37
38
39
40
1
2
3
4
10
11
12
13
17
16
15
14
25
24
23
22
21
20
19
18
26
A
A
0
1
RD
WR
RESET
PA
7
PA
0
PC
7
PC
0
PB
7
PB
0
PC
3
PC
4
A
A
0
1
CS
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
Porta
A
Porta
CH
Porta
CL
Porta
B
RESET
[rappresentazione dell’ingrato PPI 8255 in collegamento con decoder 74LS138 e integrato 74LS02]
La prova si svolge in 3 parti:
· Programmazione della porta A in modo 0 (OUTPUT)
Per visualizzare la parola inviata dal μP alla porta A del PPI i segnali da PA0 a PA7 sono stati collegati a 8 LED presenti sul dispositivo su cui è stata montata la bread board.
La programmazione della porta A avviene settando i bit della parola di controllo. La parola di controllo ricavata risulta essere 10000000 (80h).
Una volta ricava la parola di controllo si ricavano gli indirizzi a cui inviare la parola, nel nostro caso la parola inviata corrisponde a 22h.
A7 A6 A5 A4 A3 A2 A1 A0
Esadec
Riferimento
0 0 0 1 1 1 1 1
0 0 0 1 1 1 0 0
1F
1C
Parola di controllo
Porta A
[la tabella mostra gli indirizzi a cui sono stati inviati i dati]
Successivamente si può programmare il μP. Le istruzioni per la programmazione sono le seguenti:
Istruzione
Commento
MOV AL,80
OUT 1F,AL
MOV AL,22
OUT 1C,AL
INT 3
Inserimento in AL della parola di controllo
Invio della parola di controllo all’indirizzo 1F
Caricamento del dato da inviare in uscita alla porta A
Invio del dato all’indirizzo 1C
Termine programma
[tabella che riporta il programma in ordine con i commenti relativi ad ogni istruzione]
Al termine del programma i LED a cui erano collegati i segnali della porta A, riportano la parola inviata. La programmazione è avvenuta correttamente.
· Programmazione porte A e B modo 0; A in OUTPUT e B in INPUT
In questo caso l’INPUT è dato dall’ingresso della porta B, di conseguenza oltre a collegare i segnali di a ai LED per rilevare il dato, si collegano i segnali da PB0 a PB7 agli switch.
In questo caso bisogna prevedere nell parola di controllo l’ingreso dei bit dalla porta B di conseguenza la parola di controllo sarà 10000010 (82h).
A7 A6 A5 A4 A3 A2 A1 A0
Esadec
Riferimento
0 0 0 1 1 1 1 1
0 0 0 1 1 1 0 0
0 0 0 1 1 1 0 1
1F
1C
1D
Parola di controllo
Porta A
Porta B
[indirizzi delle porte del PPI]
Istruzione
Commento
MOV AL,82
OUT 1F,AL
IN AL,1D
OUT 1C,AL
JMP 104
INT 3
Inserimento in AL della parola di controllo
Invio della parola di controllo all’indirizzo 1F
Acquisizione del dato dalla porta B (ind. 1D)
Invio del dato alla porta A (ind 1C)
Salta all’istruzione IN AL,1D
Termine programma
[tabella che riporta il programma in ordine con i commenti relativi ad ogni istruzione]
Come si può visualizzare dalla programmazione una volta settata la parola di controllo viene ripetuto in modo ciclico l’acquisizione della parola dagli switch(porta B) e l’invio del dato ai LED (porta A). il ciclo è predisposto per terminare solo nel caso si resettasse il μP con il conseguente resettaggio del dispositivo PPI.
· Programmazione porta A in modo 1
Per la programmazione in modo 1 bisogna gestire l’handshking. I segnali che fanno parte dell’handshaking sono OFB e ACK e sono rispettivamente PC7 e PC6, l’OBF se attivo rileva che il buffer è pieno e il dispositivo PPI non può ricevere dati dal μP, l’ACK è il riconoscimento che viene attivato quando il PPI può inviare i dati in uscita.
L’uscita della porta A è collegata a 2 Display a Led, il segnale OBF collegato a un LED e il segnale ACK collegato a uno switch.
La parola di controllo inviata è 10100000 (A0h).
A7 A6 A5 A4 A3 A2 A1 A0
Esadec
Riferimento
0 0 0 1 1 1 1 1
0 0 0 1 1 1 0 0
0 0 0 1 1 1 1 0
1F
1C
1E
Parola di controllo
Porta A
Porta C
[indirizzi delle porte del PPI]
Istruzione
Commento
MOV BH,00
MOV AL,A0
OUT 1F,AL
MOV AL,BH
OUT 1C,AL
INC BH
IN AL,1E
CMP AL,80
JB 10C
JMP 106
INT 3
Inserimento in BH il dato da inviare in uscita alla porta A
Inserimento in AL della parola di controllo
Invio della parola di controllo all’indirizzo 1F
Invio del dato alla porta A (ind 1C)
Incremento del dato
Acquisizione dello stato dei segnali della porta C
Verifica sull’OBF
Se OBF disattivo salta all’istruzione IN AL,1E
Salta all’istruzione MOV AL,BH
Termine programma
[tabella che riporta il programma in ordine con i commenti relativi ad ogni istruzione]
Il programma testa il segnale OBF se attivo attende il riconoscimento ACK, attivando il riconoscimento invia il dato. Appena il segnale ACK viene disattivato si può inviare il nuovo dato. successivo.
Fase3:
Circuiti raddrizzatori a semionda e a doppia onda (o onda intera).
I circuiti raddrizzatori sono utilizzati per la conversione di una tensione alternata, e quindi bidirezionale, in una tensione unidirezionale.
Un circuito raddrizzatore a semionda costituito da un diodo e un utilizzatore la tensione generata in ingresso al diodo, è una tensione alternata. Durante la semionda positiva della tensione, il diodo polarizzato direttamente, produce una tensione pari a quella in ingresso, nel caso ideale, quando la tensione passa alla semionda negativa il diodo diventa polarizzato inversamente di conseguenza non conduce e la tensione è nulla. Nel caso reale il diodo conduce solo quando si raggiunge la tensione di soglia e inoltre la semionda in uscita avrà un valore di picco inferiore al valore della semionda in ingresso.
Questo è dimostrato nella prima parte di questa fase in cui si verificano i circuiti raddrizzatori a semionda.
Prima di tutto viene provato mandando una tensione in ingresso generata da un generatore di funzioni (G. di F. ). Il segnale in ingresso avrà una frequenza pari a 1 KHz e una amplitude di 5V.
L’utilizzatore del circuito è rappresentato da una resistenza di 1KΩ.
Le tensioni in ingresso e uscita sono state rilevate su un oscilloscopio.
G.di.F
A
C
V
i
V
o
R
C
[circuito raddrizzatore a una semionda senza condensatore]
Vi → tensione in ingresso
F = 1KHz
T = 1/F = 1/1KHz = 1 ms T = 5,4 div * 0,2 ms/div = 1,08 ms
TH = 0,5 ms
TH = 2,7div * 0,2 ms/div = 0,54 ms
TL = 0,5 ms
TL = 2,7div * 0,2 ms/div = 0,54 ms
Vpp = 5 V
Vpp = 5 div * 1 V/div = 5V
Vmax = 2,5V
Vmax = 2,5 div * 1 V/div = 2,5V
Vmin = 2,5V
Vmin = 2,5 div * 1 V/div = 2,5V
V
i
V
o
V
V
max
max
V
min
V
min
Vo → tensione in uscita
Caso reale:
T = 5,3 div * 0,2 ms/div = 1,06 ms
TH = 2,4div * 0,2 ms/div = 0,48 ms
TL = 2,9div * 0,2 ms/div = 0,58 ms
F = 1/T = 1/1,06ms = 0,95 KHz
Vpp = 2 div * 1 V/div = 2V
Vmax = 2 div * 1 V/div = 2V
Vmin = 0 div * 1 V/div = 0V
Caso ideale:
T = 1 ms
Vpp = 2,5 V
Vmax = 2,5 V
Vmin = 0V
[grafico sui segnali in ingresso e uscita]
Caduta di tensione VAC = Vimax – Vomax = 2,5 V – 2V = 0,5 V
Successivamente è stato aggiunto un condensatore con capacità C = 1μF per vedere l’influenza che aveva sul circuito.
G.di.F
A
C
V
i
V
o
R
C
[circuito raddrizzatore a una semionda con condensatore]
Vi → tensione in ingresso
(stessa di quella precedente)
V
i
V
o
V
V
V
V
max
max
min
min
Vo → tensione in uscita
T = 5,3 div * 0,2 ms/div = 1,06 ms
TH = 1 div * 0,2 ms/div = 0,2 ms
TL = 4,3div * 0,2 ms/div = 0,86 ms
F = 1/T = 1/1,06ms = 0,95 KHz
Vpp = 1 div * 1 V/div = 1V
Vmax = 1,8 div * 1 V/div = 1,8V
Vmin = 0,8 div * 1 V/div = 0,8V
[grafico sui segnali in ingresso e uscita]
Nei circuiti raddrizzatori a doppia semionda viene collegato un trasformatore e la corrente attraversa 2 diodi. Quando la tensione in ingresso è nella semionda positiva conduce un diodo, quando si trova nella semionda negativa conduce l’altro diodo in questo modo la tensione in uscita Vo presenta una doppia semionda e ha una frequenza doppia rispetto a quella in ingresso.
La dimostrazione è stata effettuata utilizzando una tensione in ingresso al trasformatore con una frequenza pari a 1 KHz e una amplitude di 8V.
L’utilizzatore del circuito è sempre rappresentato da una resistenza di 1KΩ.
R
C
V
i
V
o
G.di.F
[circuito raddrizzatore a doppia semionda senza condensatore]
Vi → tensione in ingresso
F = 1KHz
T = 1 / F = 1 /1KHz = 1 ms T = 5,4 div * 0,2 ms/div = 1,08 ms
TH = 0,5 ms
TH = 2,7div * 0,2 ms/div = 0,54 ms
TL = 0,5 ms
TL = 2,7div * 0,2 ms/div = 0,54 ms
Vpp = 2,4 div * 2 V/div = 4,8V
Vmax = 1,2 div * 2 V/div = 2,4V
Vmin = 1,2 div * 2 V/div = 2,4V
V
i
V
o
V
V
max
max
V
min
V
min
Vo → tensione in uscita
Caso reale:
T = 2,6div * 0,2 ms/div = 0,52 ms
TH = 2,2div * 0,2 ms/div = 0,44 ms
TL = 0,4div * 0,2 ms/div = 0,08 ms
F = 1/T = 1/0,52ms = 1,92 KHz
Vpp = 2 div * 1 V/div = 2V
Vmax = 2 div * 1 V/div = 2V
Vmin = 0 div * 1 V/div = 0V
Caso ideale:
T = 0,5 ms
Vpp = 2,5 V
Vmax = 2,5 V
Vmin = 0VA
[grafico sui segnali in ingresso e uscita]
Caduta di tensione VAC = Vimax – Vomax = 2,4 V – 2V = 0,4 V
Anche in questo caso è stato aggiunto un condensatore con capacità C = 1μF per vedere l’influenza che aveva sul circuito.
R
V
i
V
o
G.di.F
[circuito raddrizzatore a doppia semionda con condensatore]
Vi → tensione in ingresso
(stessa di quella precedente)
V
i
V
o
V
V
V
V
max
max
min
min
Vo → tensione in uscita
T = 2,6 div * 0,2 ms/div = 0,52 ms
F = 1/T = 1/0,52ms = 1,92 KHz
Vpp = 0,7 div * 1 V/div = 0,7V
Vmax = 1,9 div * 1 V/div = 1,9V
Vmin = 1,2 div * 1 V/div = 1,2V
Mettendo a confronto i due circuiti raddrizzatori si nota che mentre nel circuito a una semionda la frequenza in uscita è quasi uguale a quella in ingresso, in quello a doppia semionda si ha una frequenza in uscita paria quasi al doppio della frequenza in ingresso.
Inoltre si può notare che tra i casi reali e quelli ideali c’è una differente tensione massima questo è dovuto dal fatto che il diodo conduce quando raggiunge la sua tensione di soglia e anche perché il diodo per quanto possa essere conduttore possiede una sua resistenza interna.
Allegata alla relazione ci sono le simulazioni della 3 fase
Simulazione del circuito raddrizzatore a una semionda senza condensatore.
Simulazione del circuito raddrizzatore a una semionda con condensatore.
Simulazione del circuito raddrizzatore a doppia semionda senza condensatore.
Simulazione del circuito raddrizzatore a doppia semionda senza condensatore.
� EMBED AutoCAD.Drawing.17 ���
� EMBED AutoCAD.Drawing.17 ���
� EMBED AutoCAD.Drawing.17 ���
� EMBED AutoCAD.Drawing.17 ���
PAGE
19
V
i
V
o
V
V
max
max
V
min
V
min
V
i
V
o
V
V
V
V
max
max
min
min
V
i
V
o
V
V
max
max
V
min
V
min
Lamacchia