Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Meseria se fura, ingineria se invata.Telecomunicatii, comunicatiile la distanta, Retele de, telefonie, VOIP, TV, satelit




Aeronautica Comunicatii Constructii Electronica Navigatie Pompieri
Tehnica mecanica

Electronica


Index » inginerie » Electronica
» Microsisteme Digitale - Microsistem cu microprocesorul 8086


Microsisteme Digitale - Microsistem cu microprocesorul 8086


Microsisteme Digitale


Microsistem cu microprocesorul 8086


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






Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate