Aeronautica | Comunicatii | Constructii | Electronica | Navigatie | Pompieri | |
Tehnica mecanica |
Microsisteme Digitale
Microsistem cu Microprocesorul 8086
Sa se proiecteze un microsistem cu urmatoarea structura:
- unitate centrala cu microprocesorul 8086;
- 64 Ko memorie EPROM, utilizind circuite 27C256;
- 64 Ko memorie SRAM, utilizind circuite 62256
- interfata seriala, cu circuitul 8251, plasata in zona 0330H - 0332H sau 0730H - 0732H, in functie de pozitia microcomutatorului S1;
- interfata paralela, cu circuitul 8255, plasata in zona 0310H- 0316H sau 0710H - 0716H, in functie de pozitia microcomutatorului S2;
- o minitastatura cu 16 contacte;
- 16 led-uri;
- un modul de afisare cu segmente, cu 4 ranguri.
Toate programele vor fi concepute sub forma de subrutine. Programele necesare sunt:
- rutinele de programare ale circuitelor 8251 si 8255;
- rutinele de emisie/ receptie caracter pe interfata seriala;
- rutina de emisie caracter pe interfata paralela;
- rutina de scanare a minitastaturii;
- rutina de aprindere/ stingere a unui led;
- rutina de afisare a unui caracter hexa pe un rang cu segmente.
Structura rutinelor (intrari, secvente, iesiri) va fi stabilita de fiecare student.
Descrierea Hardware
Schema hardware a microsistemului cu microprocesorul 8086 cuprinde:
unitatea centrala
decodificatorul de memorii
circuitele de memorie
decodificatorul de porturi
interfata seriala, cu circuitul 8251
interfata paralela, cu circuitul 8255
o minitastatura cu 16 contacte
16 led-uri
un modul de afisare cu segmente, cu 4 ranguri
Unitatea centrala
Unitatea centrala a mirosistemului digital este alcatuita din:
microprocesorul 8086
generator de tact 8284A
circuite pentru amplificarea liniilor bidirectionale, 74x245
registre 74x373
Microprocesorul 8086 se caracterizeaza prin faptul ca registrele interne si magistrala de date externa sunt pe 16 biti, avand posibilitatea de a adresa direct 1Mo de memorie. Magistrala de date si cea de adrese sunt multiplexate, iar o parte din terminalele de comanda au rol dublu ceea ce a permis incapsularea circuitului intr-o capsula cu doar 40 terminale. O alta caracteristica a microprocesorului este faptul ca asigura o viteza marita de lucru atat datorita frecventei tactului, cat si unei structuri interne bazata pe conceptul de suprapunere care permite aducerea din memorie, in avans, a instructiunilor, in timpul unor cicluri fara accese la magistrala. Pentru aceasta aplicatie se foloseste microprocesorul 8086 in modul minim, in care microprocesorul genereaza el insusi semnalele necesare transferurilor cu memoria si cu porturile de intrare/iesire.
Generatorul de tact 8284A are 3 roluri intr-o unitate centrala cu microprocesorul 8086:
genereaza tactul catre microprocesor si pentru circuitele specializate pentru interfete. Tactul CLK catre microprocesor este generat de catre un divizor la 3 care are ca intrare un oscilator cu cuart, deci va avea frecventa egala cu 1/3 din frecventa intrarii si factor de umplere 1/3.
genereaza semnalul READY, cerere catre microprocesor pentru stari de asteptare, sincronizandu-l cu tactul CLK. Exista 2 surse externe pentru cereri de stari de asteptare (/RDY1, /RDY2), acestea fiind validate de intrarile /AEN1, /AEN2.
genereaza semnalul de initializare, RESET, catre microprocesor sincronizandu-l cu tactul. La intrarea /RES care indica o cerere de initializare pentru intregul sistem se conecteaza un grup RC si un comutator.
Pentru amplificarea magistralei de date se folosesc 2 circuite 74x245 activate de semnalul /DEN. Acest circuit asigura facilitatile de bidirectionalitate si de cedare a magistralei prin utilizarea portilor cu 3 stari bidirectionale.
Demultiplexarea magistralelor este necesara datorita particularitatii unor microprocesoare si microcontrolere de a folosi aceleasi terminale si pentru magistrala de date si pentru cea de adrese. Pentru realizarea demultiplexarii magistralei de adrese/date sunt necesare 3 circuite registru 74x373 activate de semnalul ALE, cu posibilitatea de a memora informatia de adrese pe toate durata ciclului.
Conectarea memoriei
Pentru conectarea a 64Ko memorie EPROM, utilizind circuite 27C256 cu capacitatea de 32Ko sunt necesare 2 astfel de circuite, primul pentru adresele pare si cel de-al doilea pentru adresele impare si sunt comandate impreuna, iar pentru a conecta 64Ko memorie SRAM avem nevoie de 2 circuite 62256 cu capacitatea de 32Ko.
Harta memoriei este urmatoarea:
62256- 1: 10000h, 10002h, 1FFFEh
62256 - 2: 10001h, 10003h, 1FFFFh
27c256- 1: E0000h, E0002h, EFFFEh
27c256 - 2: E0001h, E0003h, EFFFFh
Circuitul |
A19 |
A18 |
A17 |
A16 |
A15 |
A14 |
A13 |
A12 |
A11 |
A10 |
A9 |
A8 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
C1=62256- 1,2 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
C2=27c256-1,2 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Utilizand decodificarea incompleta vom observa ca pentru a alege primul tip de circuit avem A19=A18=A17=0 iar pentru a alege al doilea tip de circuit avem A19=A18=A17=1. Asadar A16 este ignorat, poate lua atat valoarea 0 cat si 1.
SEL c1=/A19 * /A18 * /A17;
SLE c2= A19 * A18 * A17;
Prin urmare decodificatorul de memorie (circuitul 74x138) va avea ca intrari de date semnalele A19, A18, A17 iar iesirea /Y0 va selecta circuitele 62256 si iesirea /Y7 va selecta circuitele 27c256.
Decodificatorul de porturi
Pentru conectarea porturilor este necesara obtinerea decodificatorului de adrese de porturi. Decodificatorul de porturi este alcatuit din 2 circuite 74x138 si genereaza semnalele de selectie pentru porturile microsistemului pe baza liniilor de adresa A5‑A15. Decodificatorul este activat de semnalele A6, A12-A15 si M/ /IO.
In cazul celor doua interfete (seriala si paralela) comandate impreuna selectia unuia se realizeaza cu ajutorul decodificatorului respectand urmatoarele specificatii:
Interfata seriala: circuitul 8251 in zona 0330h-0332h sau 0730h-0732h
Interfata paralela: circuitul 8255 in zona 0310h-0316h sau 0710h-0716h
Circuitul |
A15 |
A14 |
A13 |
A12 |
A11 |
A10 |
A9 |
A8 |
A7 |
A6 |
A5 |
A4 |
A3 |
A2 |
A1 |
A0 |
||
C1=8251 |
0330h-0332h |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
|||
0730h-0732h |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
||
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
|||
C2=8255 |
0310h-0316h |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
|||
0710h-07316h |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
||
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
Obtinerea semnalelor de selectie pentru porturi
Vom utiliza decodificarea incompleta si din tabel vor rezulta relatiile:
SEL 0330h-0332h =/A10 * A5 * A4
SEL 0730h-0732h = A10 * A5 * A4
SEL 0310h-0316h =/A10 * /A5 * A4
SEL 0710h-0716h = A10 * /A5 * A4
Vom ignora ultimii patru biti deoarece acestea nu afecteaza selectarea interfetei chiar daca adresele selectate vor putaea avea ultima cifra pana la valoarea F.
Astfel circuitul 74x138 va avea ca intrari de date semnalele A10, A5 si A4 iar intrarile de validare vor fi:
E3=/(A6 + A7) * (A8 * A9)
/E2=A11+ ( (A12+A13) + (A14 + A15))
/E1=M//IO
Iesirile /Y1 si /Y5 vor si legate printr-un comutator pentru selectarea circuitului 8255 iar iesirile /Y3 si /Y7 se vor lega printr-un alt comutator pentru selectarea circuitului 8251.
Vom folosi un singur decodificator de porturi pentru selectarea:
Afisarii cu segmente cu 4 ranguri (4 iesiri ale decodificatorului)
Minitastaturii (are nevoie de 2 iesiri ale decodificatorului)
Led-urilor (are nevoie de 2 iesiri ale decodificatorului)
Adresele de port utilizate sunt:
0040H pentru SA1,
00C0H pentru SA2,
0440H pentru SA3,
04C0H pentru SA4,
0840H pentru ST1,
08C0H pentru /ST2,
0C40H pentru SL1,
0CC0H pentru SL2
Interfata seriala
Interfata seriala este realizata cu ajutorul circuitului specializat 8251. Datele initiale ale transferului sunt
8 biti de date,
fara paritate,
2 biti de STOP,
factor de multiplicare 16,
rata de transfer: 9600 bps.
Din modul de comanda a intrarilor /CS si C/ /D rezulta ca adresele de port ale circuitului sunt:
0332H sau 0732H pentru comenzi/stari
0330H sau 0730H pentru date
Circuitul 8251 primeste tactul de emisie / receptie de la un circuit contor - temporizator 8253 prin intermediul canalului 0 al acestuia. Modul de lucru ales pentru contorul 0 este modul 3 intrucat acesta trebuie sa genereze un semnal dreptunghiular cu o anumita frecventa, iar constanta trimisa acestuia este 16D = 10H (frecventa PCLK/ (9600 x 16) ). Tinand cont de datele initiale ale transferului serial, circuitul 8253 trebuie sa genereze tactul de emisie / receptie cu o frecventa f=9600*16=153600Hz. Circuitul MAX232 asigura translatarea nivelelor TTL, specifice circuitului specializat 8251 in nivele EIA, necesare pe liniile seriale, si invers.
Interfata paralela
Interfata paralela este realizata cu ajutorul circuitului specializat 8255. Aceasta primeste pe magistrala de date un octet pe care il trimite la dispozitivul paralel. Transferul paralel se face in conformitate cu dialogul de tip CENTRONIX. Pentru transmiterea semnalului se utilizeaza rangul 0 din portul B, iar pentru receptia semnalului BUSY se utilizeaza rangul 0 din portul C. Portul A este folosit pentru transmitere date.
Adresele de port sunt:
0310H sau 0710H pentru portul A
0312H sau 0712H pentru portul B
0314H sau 0712H pentru portul C
0316H sau 0716H pentru RCC.
Modurile de lucru alese sunt urmatoarele:
0 iesire pentru portul A
0 iesire pentru portul B
0 intrare pentru portul C inferior.
Conectarea minitastaturii
Pentru conectarea unei minitastaturi mecanice la o unitate centrala cu microprocesorul 8086, este necesar un port de iesire cu posibilitate de memorare (registru) si un port de intrare (porti cu 3 stari).
Pentru identificarea tastei actionate este necesara citirea tastaturii. In portul de iesire se va scrie succesiv cate o combinatie cu un singur 0 logic, in rangul 0, apoi in rangul 1, in rangul 2 si apoi in rangul 3, dupa care ciclu se reia. In acest fel se va scrie cate un 0 pe coloanele minitastaturii. Fiecare scriere este urmata de citirea liniilor minitastaturii. Daca in combinatia citita exista un 0 logic, inseamna ca a fost actionata o tasta si ea va fi identificata din pozitia pe care o ocupa 0 logic generat pe coloane si 0 logic citit pe linii.
Pentru protectia iesirilor portului de iesire, au fost conectate diode intre acestea si coloanele minitastaturii.
Conectarea led-urilor
Pentru conectarea led-urilor la o unitate centrala cu microprocesorul 8086 sune necesare porturi de iesire cu posibilitati de memorare (poate fi bistabil sau registru). Schema de conectare depinde de caracteristicile led-urilor si anume curentul necesar pentru ca led-ul sa lumineze si caderea de tensiune pe el. Daca bistabilul folosit este in tehnologie TTL, pentru ca led-ul sa lumineze se va incarca 0 logic in bistabil. La un circuit TTL, IOH = 0,8 mA si IOL = 16 mA ca urmare poate absorbi cei 10mA necesari pentru ca led-ul sa lumineze (in cazul unui led cu diametrul de 5mm).
Pentru conectarea a 16 led-uri la o unitate centrala cu microprocesorul 8086 se utilizeaza 2 circuite registru 74x373.
Conectarea modului de afisare cu segmente, cu 4 ranguri
Un circuit afisaj cu segmente, cu un rang, poate fi asemuit cu 8 led-uri, cate unul pentru fiecare segment plus un punct. S-au considerat segmentele afisajului cu anod comun, ceea ce inseamna ca valoarea de 1 logic pe o iesire a circuitelor 74x373 implica segment stins, iar valoarea de 0 logic implica segment aprins. La aceste circuite, toti anozii segmentelor sunt legati impreuna la un terminal la care se conecteaza alimentarea circuitului, iar catozii sunt accesibili la terminale ale circuitului.
Cei 8 biti de date de iesire sunt asociati celor 8 segmente ale unei cifre, in conformitate cu structura urmatoare:
Din punctul de vedere al comandarii modului de afisare cu segmente, pe 4 ranguri, de catre o unitate centrala cu microprocesorul 8086, se foloseste solutia nemultiplexata. Aceasta implica cate un registru pentru fiecare rang care vor fi comandate ca porturi de iesire, de catre microprocesor, si vor memora configuratia care se va afisa. Pentru fiecare cifra sau caracter afisabil se creeaza configuratia corespunzatoare care se incarca in registrul care corespunde circuitului pe care se va realiza afisarea.
Programele, cu delimitari si comentarii
Interfata seriala
Rutina de programare a circuitului 8251:
PRG_8251: MOV AL, 0CEH ; cuvant de mod
OUT DX, AL
MOV AL, 15H ; cuvant de comanda
OUT DX, AL
RET
cuvant de mod : 11(2 biti de STOP)
00(fara control de paritate)
11(8 biti de date)
10(factor de multiplicare x16)
cuvant de comanda : 00(sincronizare si reinitializare - operare normala)
0 (comanda /RTS=1)
1 (anulare indicatori eroare)
0 (break - operare normala)
1 (activare comanda receptie)
0 (comanda /DTR=1)
1 (activare comanda transmisie )
Rutina de transmisie caracter:
TR: IN AL, DX ;citire si testare rang TxRDY din cuvantul de stare
RCR AL, 1 ; se roteste la dreapta cu carry
JNC TR
MOV AL, CL ; se preia data din registrul CL
MOV DX, 0330H
OUT DX, AL
RET
Rutina de receptie caracter:
REC: IN AL, DX ; citire si testare rang RxRDY din cuvantul de stare
RCR AL, 2
JNC REC
MOV DX, 0330H
IN AL, DX ; se preia data de la 8251
MOV CL, AL ; se depune data in registrul CL
RET
Interfata paralela
Rutina de programare a circuitul 8255:
Modurile de lucru 0: iesire pentru porturile A si B, o intrare pentru portul C inferior;
Adresele de port:
0310H (0710H) - portul A,
0312H (0712H) - portul B,
0314H (0714H) - portul C
0316H (0716H) - RCC;
PRG_8255 MOV AL, 81H ; cuvantul de comanda
OUT DX, AL
RET
Rutina de emisie caracter:
PAR: MOVDX, 0314H
IN AL, DX ; citire si testare BUSY
RCR AL, 1
JC PAR
MOV AL, CL ; se preia caracterul din registrul CL
MOV DX, 0310H
OUT DX, AL
OR AL, 01H
MOV DX, 0312H
OUT DX, AL ; /STB = 1
AND AL, 00H
OUT DX, AL ; /STB = 0
OR AL, 01H
OUT DX, AL ; /STB = 1
RET
Rutina incepe prin citirea si testarea liniei BUSY pentru a vedea daca receptorul este liber. Microprocesorul asteapta pana cand receptorul este liber si apoi trimite data, activand si dezactivand semnalul /STB.
Rutina de scanare a minitastaturii:
; se pune 0 pe prima coloana si se verifica daca s-au actionat tastele 0, 4, 8, C
REIA: MOV AL, 07FH ;prima coloana corespunde iesirii 8Q
OUT 0840H, AL
MOVDX, 08C0H
IN AL, DX
AND AL, 80H
JZ TASTA0
IN AL, DX
AND AL, 40H
JZ TASTA4
IN AL, DX
AND AL, 20H
JZ TASTA8
IN AL, DX
AND AL, 10H
JZ TASTAC
; se pune 0 pe a doua coloana si se verifica daca s-au actionat tastele 1, 5, 9, D
MOV AL, 0BFH
OUT 0840H, AL
MOVDX, 08C0H
IN AL, DX
AND AL, 80H
JZ TASTA1
IN AL, DX
AND AL, 40H
JZ TASTA5
IN AL, DX
AND AL, 20H
JZ TASTA9
IN AL, DX
AND AL, 10H
JZ TASTAD
; se pune 0 pe a 3-a coloana si se verifica daca s-au actionat tastele 2, 6, A, E
MOV AL, 0DFH
OUT 0840H, AL
MOVDX, 08C0H
IN AL, DX
AND AL, 80H
JZ TASTA2
IN AL, DX
AND AL, 40H
JZ TASTA6
IN AL, DX
AND AL, 20H
JZ TASTAA
IN AL, DX
AND AL, 10H
JZ TASTAE
; se pune 0 pe a 4-a coloana si se verifica daca s-au actionat tastele 3, 7, B, F
MOV AL, 0EFH
OUT 0840H, AL
MOVDX, 08C0H
IN AL, DX
AND AL, 80H
JZ TASTA3
IN AL, DX
AND AL, 40H
JZ TASTA7
IN AL, DX
AND AL, 20H
JZ TASTAB
IN AL, DX
AND AL, 10H
JZ TASTAF
; se reia baleierea
JMP REIA
; tratarea actionarii tastei 0
TASTA0:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
AST0: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 80H
JZ AST0
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei 0
RET
; tratarea actionarii tastei 1
TASTA1:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
AST1: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 80H
JZ AST1
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei 1
RET
; tratarea actionarii tastei 4
TASTA4:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
AST4: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 40H
JZ AST4
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei 4
RET
; tratarea actionarii tastei 5
TASTA5:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
AST5: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 40H
JZ AST5
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei 5
RET
; tratarea actionarii tastei 8
TASTA8:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
AST8: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 20H
JZ AST8
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei 8
RET
; tratarea actionarii tastei C
TASTAC:CALL DELAY ; se asteapta stabilizarea contactelor
MOV DX, 08C0H
ASTC: IN AL, DX ; se citeste din nou linia si se asteapta dezactivarea tastei
AND AL, 10H
JZ ASTC
CALL DELAY ; se asteapta stabilizarea contactelor la incheierea actionarii
; operatia corespunzatoare actionarii tastei C
RET
Rutina de aprindere/stingere a unui led :
Ledurile sunt active la 0 logic, de aceea daca se doreste aprinderea ultimului led pe magistrala de date se introduce 11111110 adica FEh.
MOV AL, FEh
OUT 0C40h, AL
MOV AL, FFh
OUT 0CC0h, AL
Rutina aprinde ultimul led din primul set de 8 led-uri si le stinge pe toate celelalte din al doilea set.
Rutina de afisare a unui caracter hexa pe un rang cu segmente:
Circuitul afisaj cu segmente este alcatuit din 8 led-uri (7 segmente si un punct) si poate afisa cifre si litere. Solutia nemultiplexata necesita cate un registru pentru fiecare rang. Registrele vor fi comandate ca porturi de iesire de catre microprocesor si vor memora configuratia care se va afisa. Aprinderea unui segment se va comanda cu 0 logic.
AFIS: MOV AL, 49H
OUT DX, AL
RET
Rutina de mai sus afiseaza cifra 5 pe rangul DX (0040H - rangul1, 00C0H - rangul2, 0440H - rangul3, 04C0H - rangul4)
Bibliografie
Mircea POPA, Proiectarea microsistemelor digitale, Editura Orizonturi Universitare, Timisoara, 2003
Mircea POPA, Sisteme cu microprocesoare, Editura Orizonturi Universitare, Timisoara, 2003
Mircea POPA, Proiectarea microsistemelor digitale - notite din curs si proiect
http://www.google.ro
Copyright © 2024 - Toate drepturile rezervate