Alunno: Lamacchia Cosimo€¦  · Web view100 mov ah,50 b4 50 → ah 101 50 102 inc ah fe ah +1...

26
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).

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

_1241971473.unknown
_1241992704.dwg

Lamacchia

_1241972240.dwg
_1241974674.dwg
_1241973333.dwg
_1241971598.unknown
_1241889025.dwg
_1241890086.dwg
_1241890127.dwg
_1241888998.dwg