Documente Academic
Documente Profesional
Documente Cultură
15 Familia Intel
Comandă
Port A PAo - PA7
D0 - D7 grup A
Tampon
magistr.
PC4 - PC7
Port C
sup.
RD
PC0 - PC3
Logica Port C
WR
de inf.
Ao comandă
A1
Port B PBo - PB7
Reset Comandă
grup B
CS
CS A1 A0 Obiectul selectat
0 0 0 Port A (I/O)
0 0 1 Port B (I/O)
0 1 0 Port C (I/O)
0 1 1 Registrul de comandă
1 X X Circuit 8255 neselectat
7
7
6 6
5 5
4 4
3 3
2 2
1 1
0 0
8 amplificatoare 8 bistabile flip-flop
pentru date de de memorie ieşiri
intrare
D0 D1 D2 D3 D4 D5 D6 D7
Magistrala internă de date
(spre microprocesor)
RD WR
CS
Fig. 2 Structura internă a unui port de intrare/ ieşire de 8 biŃi (PA, PB, PC)
255
1 M M A Cs M B Ci Grup B
Port C (PC3-PC0)
bit 7
1=intrare; 0=ieşire
Port B: 1=intrare; 0=ieşire
SelecŃie mod: 0=Mod 0; 1=Mod1
Grup A
Port C (PC7-PC4)
1=intrare; 0=ieşire
Port A: 1=intrare; 0=ieşire
SelecŃie mod:
00 - Mod 0
01 - Mod 1
1X - Mod 2
0 0 0 0
PC: 1 1 1 1 1 0 1 0 = FA H
adresa registrului de comandă: 1 1 1 1 1 0 1 1 = FB H.
La programare, cuvântul de comandă se transmite la adresa FB iar
octeŃii de date se scriu sau se citesc de la adresele corespunzătoare
fiecărui port. Deşi se utilizează aceeaşi adresă atât pentru programarea
modului de operare cât şi pentru poziŃionarea individuală a biŃilor portului
PC, cuvintele de comandă se memorează în registre diferite, în funcŃie de
valoarea bitului b7.
Pentru programarea porturilor PA, PB ca porturi de intrare şi PC ca
port de ieşire, toate în modul M0, rezultă cuvântul de programare:
1 0 0 1 0 0 1 0 = 92 H.
În limbaj de asamblare Intel 8086, secvenŃa de program este:
Sistem numeric
Sistem numeric
de calcul
de calcul
RESET
CLK Logica de
TransmiŃător TxD
C/D comandă
RD / WR
RD Bloc de TxRDY
WR comandă TxE
CS emisie RxC
RxRDY
Bloc de
DTR Bloc de comandă SYNDET
DSR recepŃie RxC
comandă
RTS
CTS MODEM
Receptor RxD
TxD
TxD
RxD Linie Tc.
intel RxD
intel GND
8251
DTR 8251
MODEM Linie Tc. DTR
DSR
DSR
RTS
RTS
CTS
CTS
GND simulare
b) MODEM
a)
Fig. 6 FuncŃionarea cu MODEM (a) şi fără MODEM (b).
Bit de
STOP START STOP START
1 0 1 1 0 1 0 paritate
D2 1 28 D0 D0 - D7 magistrala de date
D3 2 27 D1 RD - citire data sau starea
RxD 3 26 +5 V WR - scriere data sau comanda
GND 4 25 RxC RESET - iniŃializare
D4 5 24 DTR CS - selecŃie circuit
D5 6
Intel23 RTS C/ D - selecŃie comandă / date
D6 7 8251 22 DSR DTR -terminal de date gata
D7 8 21 RESET DSR - echipament de date gata
TxC 9 20 CLK RTS - cerere de transmisie
WR 10 19 TxD CTS - anulare în vederea transm.
CS 11 18 TxE RxD - intrare serială
C/ D 12 17 CTS TxD - ieşire serială
RD 13 16 SYNDET RxRDY - caracter recepŃionat
RxRDY 14 15 TxRDY TxRDY - caracter transmis
RxC - tact de recepŃie
TxC - tact de emisie
TxE - transmiŃător vid
Fig.9 ConfiguraŃia semnalelor la SYNDET - forŃare sau detecŃie
pinii circuitului Intel 8251 sincronă de date
15.2.4. FuncŃionare
La aplicarea tensiunii de alimentare interfaŃa trece în starea ''selecŃie
mod'' în care aşteaptă cuvintele de comandă pentru stabilirea modului de
operare.
Dacă este programat modul asincron, transmiŃătorul aşteaptă date
de transmis iar receptorul aşteaptă date seriale pe intrarea RxD.
Receptorul, pregătit pentru recepŃie asincronă, urmăreşte tranziŃia
1 → 0 la intrarea RXD, la care declanşează un generator intern cu
266
perioada T/2 faŃă de durata T a unui bit; bitul recepŃionat este testat la
mijlocul duratei sale, pe tranziŃia 1 → 0 a tactului intern (fig.10).
Bit de
STOP START 1 0 1 1 0 1 0 STOP START
paritate
Tact
intern t
0 1 0 1 1 0 1 0 1 1 0
Fig.10 RecepŃionarea valorilor logice prin sondare la mijloc
15.2.5. Programarea
Constă în două cuvinte de comandă încărcate succesiv de unitatea
centrală prin instrucŃiunea ''OUT''.
Modul asincron Modul sincron
7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0
Viteza Modul
sincron
0 0 -invalid
0 1 - rata x 1
1 0 - rata x 16
1 1 - rata x 64
7 6 5 4 3 2 1 0
H RS RTS ERR BK R DTR T
activată: 1
Transmisie dezactivată: 0
1 forŃează în ''0'' ieşirea DTR (Data Terminal Ready)
activată: 1
RecepŃie
dezactivată: 0
0 operare normală
Transmite BREAK pe linie
1 forŃează TxD=''0''
Anulare eroare: 1 anulează Err. din reg. de stare
1: ForŃează în ''0'' ieşirea RTS (Request To Send)
1: Reset intern: forŃează 8251 în modul instr.
1: Intrare în modul HUNT
Fig. 12 Structura celui de-al doilea cuvânt de comandă
D0 - D7 C0
Tampon
magistr. Contor G0
0 Out 0
RD
Logica
WR C1
de
Ao comandă Contor G1
A1
1 Out1
CS
C2
Registr.
cuv.
Contor G2
comandă 2 Out2
An .... A2 A1 A0
C/D
n
Decodor n / 2 Intel 8251
....
n 3 2 1 0
2 -1
CS
Fig. 14 Formarea adreselor de port.
CS RD WR A1 A0 FuncŃia
0 1 0 0 0 scrie în contor 0
0 1 0 0 1 scrie în contor 1
0 1 0 1 0 scrie în contor 2
0 1 0 1 1 scrie în registrul de comandă
0 0 1 0 0 citeşte contor 0
0 0 1 0 1 citeşte contor 1
0 0 1 1 0 citeşte contor 2
0 0 1 1 1 combinaŃie inoperantă
1 X X X X circuit neselectat
0 1 1 X X nici o operaŃie
D0 1 24 +5 V D0 - D7 magistrala de date
D1 2 23 WR RD - citire contor
D2 3 22 RD WR - scriere data sau comanda
D3 4 21 CS CS - selecŃie circuit
D4 5 20 A1 A0, A1 linii de selecŃie contor
D5 6
Intel 19 A0 C0, C1, C2 intrări de tact (Clock)
D6 7 8253 18 C2 O0, O1, O2 ieşirile contorilor (Out)
D7 8 17 O2 G0, G1, G2 intrări de tip poartă
C0 9 16 G2 pentru controlul hard
O0 10 15 C1
G0 11 14 G1
GND 12 13 O1 Fig.16 ConfiguraŃia semnalelor la pini.
SelecŃie contor
0 0 - este selectat contorul 0
0 1 - este selectat contorul 1
1 0 - este selectat contorul 2
1 1 - comandă ilegală
Fig. 17 Structura cuvântului de comandă
Un contor se consideră încărcat (iniŃializat) când s-au înscris în el
16 biŃi; în funcŃie de programarea biŃilor b5, b4 din cuvântul de comandă,
273
dacă se înscrie numai octetul superior (D8 - D15) octetul inferior (D0 -
D7) se iniŃializează automat cu 00 H iar dacă se înscrie numai octetul
inferior, atunci octetul superior se iniŃializează automat cu 00 H. Dacă se
înscriu ambii octeŃi, primul octet încărcat se consideră a fi cel superior.
BiŃii b3, b2, b1 programează modul de operare:
Modul 0: este definit ca întrerupere la terminarea numărării; ieşirea
trece din ''0'' în ''1'' când numărătorul trece în starea 0000 H.
Modul 1: este definit ca monostabil programabil;
Modul 2: este definit ca generator de impulsuri divizate cu N;
Modul 3: este definit ca generator de impulsuri cu factor de umplere
50%;
Modul 4: este definit ca strobe comandat prin software; ieşirea este
''0'' o perioadă de tact, când starea numărătorului este 0000 H.
Modul 5: este definit ca strobe comandat prin hardware.
Decrementarea începe pe frontul crescător al intrării G; ieşirea este
''0'' o perioadă de tact, când starea numărătorului este 0000 H.
Clock 0
Numărător 0 Out 0
Gate 0
Clock 1
Numărător 1 Out 1
Gate 1
Clock 2
Numărător 2 Out 2
Gate 2
Fig. 18
Modul 0
Este definit ca întrerupere la terminarea numărării a N impulsuri de
tact, unde N este numărul încărcat iniŃial; ieşirea trece din ''0'' în ''1'' când
numărătorul trece în starea 0000 H.
După încărcarea cuvântului de comandă şi a contorului cu valoarea
iniŃială, ieşirea contorului trece în ''0'' şi prin decrementare la fiecare
impuls de tact, când valoarea contorului devine 0000 H, ieşirea trece în
''1'' logic. Decrementarea continuă şi după atingerea valorii finale. În
figura 19 sunt prezentate diagramele pentru N=5.
Decrementarea este blocată pe durata aplicării valorii ''0'' logic la
intrarea G.
274
CLK
t
WR
t
OUT
5 4 3 2 1 0
t
cerere de
N=5
întrerupere
Fig. 19 FuncŃionarea unui numărător în modul 0.
Exemplu:
Considerăm adresele de selecŃie:
F4 H pentru N0,
F5 H pentru N1
F6 H pentru N2,
F7 H pentru registrul de comandă.
SecvenŃa de program (8086) următoare, stabileşte Mod 0 pentru N2,
numărare binară şi N=128, deci după 128 perioade de tact ieşirea trece în
''1'' logic.
Cuvântul de comandă este 1 0 0 1 0 0 0 0 = 90 H.
------ ---- ---- ------
MOV AL, 90H ; se încarcă în AL cuvântul de comandă
OUT 0F7H, AL ; transferă cuv. de comandă la 8253
MOV AL, 80H ; se încarcă N =128Z = 80H în registrul A
OUT 0F6H, AL ; transferă N la contor 2, ca octet inferior
; octetul superior = 00H (automat)
---------------------
Modul 1
Este definit ca monostabil programabil declanşat de o tranziŃie
0 → 1 la intrarea G (Gate), când ieşirea OUT trece în ''0''. Durata
menŃinerii în ''0'' a ieşirii OUT este dată de valoarea N încărcată iniŃial în
contor ( N x T).
275
CLK
t
WR
t
OUT
5 4 3 2 1
t
N=5
Fig. 20 FuncŃionarea unui numărător în modul 1.
Dacă la intrarea G apare o tranziŃie pozitivă, indiferent dacă
decrementarea s-a terminat sau nu, contorul este relansat cu valoarea
încărcată iniŃial (monostabil retrigerabil).
Exemplu:
Modul 2
Este definit ca generator de impulsuri cu frecvenŃa de N ori mai mică
decât frecvenŃa impulsurilor de tact (divizor cu N).
Ieşirea trece la nivel coborât pe durata unei perioade de tact, după
numărarea celor N impulsuri (N este numărul încărcat iniŃial în contor).
276
CLK
t
WR
t
OUT
4 3 2 1 0 4 3 2 1 0 4
t
N=5
Fig. 21 FuncŃionarea unui numărător în modul 2 (G=1).
CLK
t
WR
t
OUT
3 2 1 0 3 2 1 0 3 2 1
t
N=4
Fig. 22 FuncŃionarea unui numărător în modul 3 (G=1).
Modul 4
Definit ca strobe comandat prin software, ieşirea trece pe nivel
coborât pentru o perioadă de tact, la terminarea decrementării.
După stabilirea modului de operare şi după încărcarea valorii
iniŃiale, N, ieşirea se menŃine la nivel ridicat cât timp starea contorului
este diferită de 0000 H.
CLK
t
WR
t
OUT
4 3 2 1 0 4 3 2 1 0 4
t
N=4
Fig. 23 FuncŃionarea unui numărător în modul 4.
Modul 5
Este definit ca strobe comandat prin hardware. Decrementarea
contorului începe la primul impuls de tact după frontul crescător al intrării
G. Ieşirea va fi în starea ''0'' pe o durată egală cu perioada impulsurilor de
tact.
278
INTA INT
IR0
rezolvarea priorităŃii
RD
IR1
Logica
Logica pentru
WR IR2
RD / WR IR3
A0 ISR IRR
IR4
IR5
CS
IR6
IR7
CAS0
Tampon
CAS1 comparator Registrul de mascare
CAS2 IMR
SP / EN
Fig. 26 Structura internă a circuitului Intel 8259
CLK
t
WR
t
OUT
3 2 1 0
t
15.4.1. Registrele
1. Registrul cererilor de întrerupere (Interrupt Request Register -
IRR), este conectat cu cele 8 intrări IR0 - IR7 (Interrupt Request) - cereri
de întrerupere, pe care le memorează în momentul apariŃiei unui front
pozitiv. Înregistrarea unei cereri este anulată în momentul în care unitatea
centrală acceptă tratarea acesteia prin semnalul INTA activ.
2. Registrul de servire a întreruperilor (In Service Register - ISR)
specifică întreruperea activă, atunci când sunt înregistrate mai multe
cereri; întreruperea activă este selectată pe baza logicii de tratare a
prioritară, care funcŃionează conform priorităŃilor stabilite prin
programare.
3. Registrul de mascare (Interrupt Mask Register - IMR)
înregistrează acele întreruperi care nu trebuie luate în consideraŃie,
acestea fiind stabilite de program şi transmise controlerului 8259, prin
cuvinte de comandă.
Registrul tampon de date conectează unitatea 8259 la magistrala
de date a sistemului de calcul. Stochează temporar datele de intrare
(D0-D7), la comanda de scriere (WR), pe care le transferă pe magistrala
internă sau datele de ieşire pe care le transferă pe magistrala externă la
comanda de ''citire date'' (RD), iniŃiată de unitatea centrală. Ieşirile sunt
cu trei stări (''0'', ''1'' şi starea SIR, de înaltă impedanŃă).
CS 1 28 +5 V D0 - D7 magistrala de date
WR 2 27 A0 RD - citire stare
RD 3 26 INTA WR - scriere comandă
D7 4 25 IR7 CS - selecŃie circuit
D6 5 24 IR6 A0 - linie de adresă
D5 6
Intel 23 IR5 CAS0 - linii bidirecŃionale
D4 7 8259 22 IR4 CAS1 de selecŃie
D3 8 21 IR3 CAS2 în cascadă
D2 9 20 IR2 INT cerere de întrerupere la UC
D1 10 19 IR1 INTA acceptare întrerupere
D0 11 18 IR0 SP / EN - identifică unitatea ca
CAS0 12 17 INT master / slave
CAS1 13 16 SP/ EN IR0 - IR7 intrări de întrerupere
GND 14 15 CAS2 active pe front
GND
IR7
S0
S1
S2
INT
IR6
CA
CA
CA
INT
INT IR5
IR4
A
INT INT
59
CAS2 IR3
SP/ EN
82
INT
CAS1 IR2
INT
8259A CAS0 IR1
INT INTA
IR0
INT SP/ EN
Master +5V
IR0 IR1 IR2 IR3 IR4 IR5 IR6 IR7
10k
8 x 8259A Slave Fig. 27 Conectarea unităŃilor 8259A în cascadă
ICW2
NU
Există PIC slave ?
(bitul D1 din
ICW1 este 1)
DA (bitul D1 din ICW1 este 0)
ICW3
NU
Trabuie ICW4 ?
(bitul D0 din
ICW1 este 0)
DA (bitul D0 din ICW1 este 1)
ICW4
STOP
Fig. 25 Schema logică a cuvintelor de comandă pentru iniŃializare
ICW1 (A0 = 0)
7 6 5 4 3 2 1 0
A7 A6 A5 1 X IC4 1 - există ICW4
0 - nu există ICW4
1 - o singură unitate 8259
BiŃi ai vectorului
0 - mai multe unităŃi slave şi un master
de întrerupere
1 - între vectorii de adresă, 4 octeŃi
0 - între vectorii de adresă, 8 octeŃi
ICW2 (A0 = 1)
7 6 5 4 3 2 1 0
A15 A14 A13 A12 A11 A10 A9 A8 = BiŃii A15 - A8 ai vectorului de
întrerupere (adresa subrutinelor de
tratare )
Fig. 28 Structura cuvintelor de comandă ICW1 şi ICW2.
IOR 1 40 A7
IOW 2 39 A6
MEMR 3 38 A5
MEMW 4 37 A4
+5V 5 36 EOP
READY 6
Intel 35 A3
HLDA 7 8237 34 A2
ADSTB 8 33 A1
AEN 9 32 A0
HRQ 10 31 +5 V
CS 11 30 DB0
CLK 12 29 DB1
RESET 13 28 DB2
DACK2 14 27 DB3
DACK3 15 26 DB4
DREQ3 16 25 DACK0
DREQ2 17 24 DACK1
DREQ1 18 23 DB5
DREQ0 19 22 DB6
GND 20 21 DB7
IOR
IOW Decrementare Incr. / Decrem.
A0-3
MEMR Bloc de
MEMW
comandã
Adresã de Contor de Adresã Contor Buea
frd.r
bazã bazã curentã curent
CS
AdStb A4-7
AEN Registru scriere Registru citire
RDY
CLK Buefae
rfdr.r
EOP Bue
fr
D0-7
DRQ 0-3 R de comandã R stare
Bloc de
DACK 0-3 arbitrare
cereri Bu
d
efa
ret
HRQ DMA R mascare R temporar
HLDA
R cereri DMA R mod
DREQ
0
8237 ''slave'' 8237 ''master''
HRQ HRQ
HLDA
la microprocesor
Fig. 31 Montarea în cascadă a două circuite 8237. Numărul de intrări devine 7