UNIVERSITATEA POLITEHNICA DIN TIMIOARA
FACULTATEA DE AUTOMATIC I CALCULATOARE
PROIECTAREA MICROSISTEMELOR DIGITALE
Microsistem cu microprocesorul Intel 8086
............................................ ...
Tema proiectului:
S se proiecteze un microsistem cu urmtoarea structur:
- unitate central cu microprocesorul 8086;
- 32 Ko memorie EPROM, utiliznd circuite 27C128;
- 16 Ko memorie SRAM, utiliznd circuite 6264;
- interfa serial, cu circuitul 8251, plasat n zona 0430H 0432H
- interfa paralel, cu circuitul 8255, plasat n zona 0810H 0816H
- o minitastatur cu 16 contacte;
- 16 led-uri;
- un modul de afiare cu segmente, cu 4 ranguri.
Toate programele vor fi concepute sub form de subrutine. Programele necesare sunt:
- rutinele de programare ale circuitelor 8251 i 8255;
- rutinele de emisie/ recepie caracter pe interfaa serial;
- rutina de emisie caracter pe interfa paralel;
- rutina de scanare a minitastaturii;
- rutina de aprindere/ stingere a unui led;
- rutina de afiare a unui caracter hexa pe un rang cu segmente.
Structura rutinelor (intrri, secvene, ieiri) va fi stabilit de fiecare student.
Descrierea hardware-ului
Microsistemul conine microprocesorul 8086 produs de firma Intel mpreun cu
32Ko de memorie EPROM i 16Ko de memorie [Link] partea de periferice se asigur
comunicaie cu exteriorul prin intermediul porturilor serial i paralel,de asemenea
microsistemul dispune de un afiaj cu segmente pe 4 ranguri,16 leduri si o minitastatura
cu 16 contacte.
Unitatea central i memoria
Microprocesorul 8086
Este produs de firma Intel;
Capacitate de adresare direct a memoriei pn la 1 Mo;
Operaii cu numere cu/fr semn pe 16 i 8 biti;
magistral multiplexat de adrese/date;
Operaii la nivel de bit, octet sau cuvnt;
Generator/divizor de tact 8284A
Produs de firma Intel;
genereaz tactul ctre microprocesor i pentru circuitele specializate pentru
interfee;
genereaz semnalul READY ctre microprocesor, sincronizndu-l cu tactul;
genereaz semnalul de iniializare RESET ctre microprocessor, sincronizndu-l
cu tactul;
Folosete ca i intrare o sursa de semnal un cristal de cuart pentru a putea genera
semnlul de clock necesar [Link] va fi 1/3 din valoarea frecventei
[Link] de o iesire PCLK pentru periferice care functioneaz la 1/2 din
frecventa CLK;
Registru 74LS373
Este un circuit registru cu 8 ranguri, folosit pentru demultiplexarea magistralelor
microprocesorului 8086;
Circuitul este alctuit din 8 bistabile cu 3 stri;
Amplificator/separator bidirectional 74LS245
Este folosit pentru amplificarea/separarea magistralelor bidirecionale ale
microprocesorului;
Memorie EPROM 27C128 (2*128Kb =32Ko)
Este un circuit de memorie, avnd capacitatea de 16 Ko i timpul de acces ntre
90-200 ns. Circuitul are 14 intrri de adrese, A13-A0, 8 linii de date, D7-D0, o linie
de selecie i programare, /CE, o linie de validare a ieirilor, /OE, o intrare pentru
tensiunea de programare Vpp i alimentrile Vcc i GND. Dac se execut citire
din circuit, atunci liniile D7-D0 sunt ieiri, iar la intrarea Vpp trebuie sa fie o
tensiune egal cu cea de la Vcc.
Poate fi stersa prin expunere la UV;
Memorie SRAM 6264 (2*64Kb = 16Ko)
Este un circuit de memorie SRAM, avnd capacitatea de 8 Ko i timpul de acces
n funcie de varianta sub care se prezint, de 45-85 ns. Circuitul are 13 linii de
adrese, A12-A0, 8 linii de date D7-D0, o intrare de selecie, /CE, o intrare de
validare a ieirilor, /OE, i o intrare de comanda a scrierii, /WE.
Permite scrierea i citirea unui octet de pe magistrala de date.
Memoria EPROM a fost plasat n zona 10000H-1FFFFH, iar cea SRAM n zona
20000H-2FFFFH;n urma decodificrii liniilor de adres a celor dou zone de memorie,
liniile de adres A19,A18 si A17 au fost folosite pentru generarea semnalelor de selecie
pentru cele 3 circuite, acest lucru realizndu-se cu ajutorul circuitului [Link]
/BHE a fost folosit pentru a indica dac are loc sau nu transfer pe jumtatea superioar,
respectiv inferioar, a magistralei;
A
19
A
18
A
17
A
16
A
15
A
14
A
13
A
12
A
11
A
10
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0
1000
0H
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1FF
FFH
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
2000
0H
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2FF
FFH
0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Decodificator/demultiplexor 74LS138
E folosit pentru decodificare i selecia cipului de memorie i de asemena pentru
decodificarea adreselor de porturi.
Dispune de 3 intrari de selectie i 3 intrari de activare dintre care 2 active pe 0 i
una activa pe 1.
I nterfaa serial i paralel (Anexa 2)
Interfaa serial 8251A
Intrrile i ieirile sunt de tip TTL;
Pentru a putea fi realizat transmiterea pe portul serial se utilizeaz conversia din
semnlele TTL n EIA cu ajutorul cip-ului MAX232;
Transmisie full-duplex cu buffer dublu;
Capabil de operaii sincrone i asincrone;
Terminale:
D7-D0 -Conexiuni la magistrala de date a microsistemului;
RESET -Aducere n conditii initiale;
CLK - Ceasul dispozitivului;
C/ /D - Selectie comanda-data;
/RD - Citete data sau starea;
/WR - Scrie comanda sau data;
/CS - Selectie circuit;
TXC - Clock pentru transmisia serial;
RXD - Intrarea serial;
RXC - Clock pentru receptia serial;
TXD - Ieire serial de date;
CTS - Acceptare transmisie de la modem
la pini RXD i TXD ai circuitului 8251 a fost conectat un circuit MAX 232. Intrrile
de ceas penrtru interfaa serial respective RXC si TXC sunt conectate la o ieire a
timerului 8253.
circuitul MAX232 asigur translatarea nivelelor TTL specifice circuitului specializat
8251 n nivele EIA, necesare pe liniile seriale i invers.
Circuitul 8253
Circuit contor temporizator, folosit pentru a comanda intrrile /RxC i /TxC ale
circuitului 8251A
Convertor TTL-EIA MAX232
Circuit de conversie al tensiunilor TTL > EIA i EIA > TTL.
Pentru decodificatorul de porturi s-au folosit pori logice OR AND i NOT cat i 2
ciruite decodificatoare 74LS138. s-au folosit liniile A11,A10,A7 pentru generarea
semnalelor din primul decodificator i liniile A10,A5,A4 pentru generarea semnalelor
din cel de-al doilea decodificator:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0040H 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0
00C0H 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0
0440H 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0
04C0H 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0
0840H 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0
08C0H 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0
0C40H 0 0 0 0 1 1 0 0 0 1 0 0 0 0 0 0
0CC0H 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0
0330H 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0
0332H 0 0 0 0 0 0 1 1 0 0 1 1 0 0 1 0
0730H 0 0 0 0 0 1 1 1 0 0 1 1 0 0 0 0
0732H 0 0 0 0 0 1 1 1 0 0 1 1 0 0 1 0
0310H 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 0
0316H 0 0 0 0 0 0 1 1 0 0 0 1 0 1 1 0
0710H 0 0 0 0 0 1 1 1 0 0 0 1 0 0 0 0
0716H 0 0 0 0 0 1 1 1 0 0 0 1 0 1 1 0
Intefata paralel 8255A
Compatibil TTL;
3 porturi A,B,C pentru transmisia datelor i un port de comand pentru
programarea i selectarea modului de funcionare a circuitului;
Se poate programa n 3 moduri de funcionare;
Tastatura, afisajul cu LED-uri si afisajul cu segmente
LED-uri
S-au folosit 16 leduri, comandate pe 0 logic.
LED-urile au fost conectate la 2 circuite 74LS373
Selectia circuitelor 74LS373 se face cu iesirea de la LED1 si LED2.
Alimentarea lor se face la 5V.
Afiajul cu Segmente
S-a folosit un set de 4 circuite 74LS373 legate la cele 4 afisaje cu segmete, comandate pe 0 logic.
Semnalele de selectie pentru cele 4 afisaje sunt AFIS1, AFIS2,AFIS3 i AFIS4.
Tastatura
Tastatura este mecanica, cu 16 contacte.
Pentru conectare am folosit un circuit registru 74LS373 comandat de intrarea TAST1, acesta
fiind un port de iesire.
Pentru portul de intrare a tastaturii, am folosit un circuit 74LS244.
Pentru identificarea tastei acionate este necesar citirea tastaturii. n portul de ieire se va scrie
succesiv cte o combinaie cu un singur 0 logic, n rangul 0, apoi n rangul 1, n rangul 2 i apoi
n rangul 3, dup care ciclu se reia. n acest fel se va scrie cte un 0 pe coloanele minitastaturii.
Fiecare scriere este urmat de citirea liniilor minitastaturii. Dac n combinaia citit exist un 0
logic, nseamn c a fost acionat o tast i ea va fi identificat din poziia pe care o ocupa 0
logic generat pe coloane i 0 logic citit pe linii.
Rutinele de programare
Rutina de programare a lui 8251A
8 bii de date, fr paritate, factor de multiplicare 16, rata de transfer 9600 bps
INT 20H
MOV AL,0CEH ; cuvnt de mod / sincron
MOV DX,0432H
OUT DX,AL ; scrie la un port
MOV AL,15H ; cuvnt de comand
MOV DX,0430H
OUT DX,AL
RET
Rutina de programare a lui 8255A
INT 23H
MOV DX, 0810H ;adrese port comanda
MOV AL,81H ;setare cuvant comanda
OUT DX,AL ;trimitere cuvant de comanda
RET
Rutinele de emisie-recepie caracter pe interfaa serial
Rutina de emisie caracter pe interfaa serial
INT 21H
ROUTINE:
MOV DX, 0432H
IN AL,DX ; citire si testare rang TxRDY din cuvantul de stare ; citeste din port;
RCR AL,1 ;shiftare biti la dreapta
JNC ROUTINE ; jump
MOV AL,CL ; se preia data din registrul CL ; aici in CL e stocat caracterul ce va fi transmis
MOV DX, 0430H ; se pune in DX 0430
OUT DX,AL
IRET ; interrupt return
Rutina de recepie caracter pe interfaa serial
INT 22H
ROUTINE:
MOV DX, 0432H
IN AL,DX ; citire si testare rang RxRDY din cuvntul de stare
RCR AL,2
JNC ROUTINE ; jump
MOV DX,0430H
IN AL,DX ; se preia data de la 8251
IRET ; interrupt return
Rutinele de emisie-receptie caracter pe interfaa paralel
Rutina de emisie caracter pe interfaa paralel (portul A)
INT 24H
MOV AL , CL ;se preia caracterul din registrul CL
MOV DX, 0810H ; si se pune pe portul A care este cu memorare
OUT DX,AL ; se transmie caracterul in portul A
;se transmite un semnal de strobe
OR AL , 01H;
OUT DX , AL ; /STB = 1
AND AL , 00H;
OUT DX , AL ; /STB = 0
OR AL , 01H;
OUT DX , AL ; /STB = 1
RET
Rutina de recepie caracter pe interfaa paralel (portul A)
INT 24H
MOV DX, 0810H ; si se pune pe portul A care este cu memorare
IN DX,AL ; se citeste de pe portul A caracterul
RET
Rutina de scanare a tastaturii
INT 25H
MOV AL,0FEH ; se pune 0 pe prima coloana si se verifica daca s-au actionat tastele 7,4,1,C
MOV DX,0840H
OUT DX,AL
MOV DX,08C0H
IN AL, DX ;citeste prima coloana
AND AL, 80H ;verifica daca tasta activa e 7
JZ TASTA 7 ;daca e se sare la instructia de memorare, daca nu se scaneaza
tastele urmatoare
AND AL, 40H ;verifica daca tasta activa e 4
JZ TASTA 4 ; daca e se sare la instructia de memorare, daca nu se scaneaza
tastele urmatoare
AND AL, 20H ;verifica daca tasta activa e 1
JZ TASTA 1 ; daca e se sare la instructia de memorare, daca nu se scaneaza
tastele urmatoare
AND AL, 10H ;verifica daca tasta activa e C
JZ TASTA C ; daca e se sare la instructia de memorare, daca nu se scaneaza tastele
urmatoare
TASTA4:
IN AL,DX
MOV CL,00H
RET
TASTA4:
IN AL,DX
MOV CL,01H
RET
TASTA1:
IN AL,DX
MOV CL,02H
RET
TASTAC:
IN AL,DX
MOV CL,03H
RET
MOV AL, 0FDH ; se pune 0 a doua coloana si se verifica daca s-au actionat tastele 8 5 2 0
MOV DX,0840H
OUT DX,AL
MOV DX, 08C0H
IN AL, DX
AND AL, 80H ;tasta 8
JZ TASTA8
AND AL, 40H ;tasta 5
JNZ TASTA5
AND AL, 20H ;tasta 2
JZ TASTA2
AND AL, 10H ;tasta 0
JZ TASTA0
MOV AL, 0FBH ; se pune 0 pe a 3a coloana si se verifica daca s-au actionat tastele 9 6 3 =
MOV DX,0840H
OUT DX,AL
MOV DX, 08C0H
IN AL, DX
AND AL, 80H ;tasta 0
JZ TASTA9
AND AL, 40H ;tasta 6
JZ TASTA6
AND AL, 20H ;tasta 3
JZ TASTA3
AND AL, 10H ;tasta =
JZ TASTAEGAL
MOV AL,0F7H ; se pune 0 pe a 4a coloana si se verifica daca s-au actionat tastele / x - +
MOV DX,0840H
OUT DX,AL
MOV DX, 08C0H
IN AL, DX
AND AL, 80H ;tasta /
JZ TASTASLASH
AND AL, 40H ;tasta x
JZ TASTAX
AND AL, 20H ;tasta -
JZ TASTAMINUS
AND AL, 10H ;tasta +
JZ TASTAPLUS
JMP INT_25
Rutina de aprindere stingere a unui LED (LED 1)
INT 27H ; AH rangul pe care va fi afisat caracterul
; AL caracterul ce va fi afisat
vedem pe ce rang se va face afisarea
CMP AH,0
JE RANG0
CMP AH,1
JE RANG1
CMP AH,2
JE RANG2
CMP AH,3
JE RANG3
RANG0: ; mutam in DX adresa corespunzatoare rangului
MOV DX,0040H
JMP AFIS1
RANG1:
MOV DX,00C0H
JMP AFIS2
RANG2:
MOV DX,0440H
JMP AFIS3
RANG3:
MOV DX,04C0H
AFIS: ;testam caracterul din AL
CMP AL,00H
JE CAR0
CMP AL,01H
JE CAR1
CMP AL,02H
JE CAR2
CMP AL,03H
JE CAR3
CMP AL,04H
JE CAR4
CMP AL,05H
JE CAR5
CMP AL,06H
JE CAR6
CMP AL,07H
JE CAR7
CMP AL,08H
JE CAR8
CMP AL,09H
JE CAR9
CMP AL,0AH
JE CARA
CMP AL,0BH
JE CARB
CMP AL,0CH
JE CARC
CMP AL,0DH
JE CARD
CMP AL,0EH
JE CARE
CMP AL,0FH
JE CARF
CAR0:
MOV AL,0C0H ;combinatia de segmente , 11000000 pt 0 in cazul acesta
OUT AL,DX
RET
CAR1:
MOV AL,0F9H
OUT AL,DX
RET
CAR2:
MOV AL,0A4H
OUT AL,DX
RET
CAR3:
MOV AL,0B0H
OUT AL,DX
RET
CAR4:
MOV AL,9BH
OUT AL,DX
RET
CAR5:
MOV AL,92H
OUT AL,DX
RET
CAR6:
MOV AL,82H
OUT AL,DX
RET
CAR7:
MOV AL,F8
OUT AL,DX
RET
CAR8:
MOV AL,80H
OUT AL,DX
RET
CAR9:
MOV AL,90H
OUT AL,DX
RET
CARA:
MOV AL,88H
OUT AL,DX
RET
CARB:
MOV AL,83H
OUT AL,DX
RET
CARC:
MOV AL,0C6H
OUT AL,DX
RET
CARD:
MOV AL,0A1H
OUT AL,DX
RET
CARE:
MOV AL,86H
OUT AL,DX
RET
CARF:
MOV AL,8EH
OUT AL,DX
RET
BIBLIOGRAFIE:
1.)Mircea POPA, Proiectarea microsistemelor digitale , Editura Orizonturi
Universitare, Timioara 2003
2.) [Link]
3.) [Link]
4) [Link]