ENUNŢUL PROBLEMEI:
Sa se proiecteze un microsistem cu urmatoarele resurse:
- memoria SRAM, 8 Ko
Proiectul trebue sa contina:
schemele la nivel de detaliu
rutinele de programare pentru circuitele specializate
rutinele pentru transmisia si receptia unui caracter pe interfata seriala
rutina pentru transmisia unui caracter pe interfata paralela
un program care afiseaza cate un caracter diferit pe fiecare rang al afisajului
DESCRIEREA PROIECTULUI
In componenta acestui microsistem se gasesc urmatoarele circuite:
- Z80 cu rol de unitate centrala de procesare
- circuit 28C64 memorie fixa EPROM de 8 Ko
- circuit 6264 memorie SRAM de 8 Ko
- circuite 74LS138 decodificator adrese pentru porturi si memorii
- circuit 74LS04 porti inversoare
- circuite 74LS08 porti SI
- circuit CD4093 porti SI-NU Trigger Schmitt
- circuit 74LS74 bistabil de tip D folosit ca divizor in generatorul de tact
- circuite 74LS574 pentru comanda afisajului
- circuit programabil 8253
- circuit specializat interfata seriala 8251
- circuit specializat interfata paralela 8255
- circuit MAX232 care asigura translatarea nivelelor de tensiune TTL si EIA
- cristal de quartz 4.9152 MHz
- afisaj cu 7 segmente cu anod comun
- cateva componente pasive rezistori si condensatoare
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
Circuit
EPROM
SRAM
Camp de adrese liber
Se observa ca pentru spatiul ocupat de EPROM A15 = A14 = A13 = 0 si pentru spatiu ocupat de SRAM A15 = A14 = 0, A13 = 1.
Ecuatiile semnalelor de selectie sunt:
CSEPROM = /A15 * /A14 * /A13
CSSRAM = /A15 * /A14 * A13
Dar avand in vedere ca la circuitele de memorie folosite semnalul /CS este activ la 0 logic rezultatul ecuatiilor de mai sus va trebui negat, problema aceasta am rezolvato folosind un circuit decodificator 74LS138 care are iesirile active la 0 logic.
segmentul a la rangul 0
segmentul b la rangul 1
segmentul c la rangul 2
segmentul d la rangul 3
segmentul e la rangul 4
segmentul f la rangul 5
segmentul g la rangul 6
punctul zecimal pz la rangul 7
Rezulta ca pentru aprinderea unui segment va trebui generat un 0 logic pe rangul magistralei de date conectat cu segmentul care se doreste aprins.
Conectarea si descrierea interfetelor seriala si paralela
Interfata seriala este realizata cu circuitul specializat programabil 8251. Acesta preia datele pe linii paralele de la procesor si le transmite serial catre periferic si viceversa. Datele initiale pentru transferul serial sunt: comunicare asincrona, cu 1 bit de stop, 8 biti de date, fara paritate, factor de multiplicare 16 si rata de transfer 9600 bps. Aceste cerinte se pot realiza programand circuitul prin cuvintele de mod si comanda. Pentru a asigura o rata de transfer de 9600 bps cu un factor de multiplicare 16 aven nevoie de un clock pe care il vom aplica pinilor RXC si TXC cu frecventa de 16 * 9600 = 153600 Hz = 153,6KHz. Pentru a obtine acest clock am folosit un circuit specializat contor temporizator 8253 programat in mod divizor (modul 2), caruia i-am aplicat tactul microsistemului care are valoarea 2,4576MHz. Constanta de divizare cu care am programat circuitul 8253 se calculeaza in felul urmator:
Primele instructiuni ale programului sunt pentru initializarea indicatorului de stiva SP, deoarece la adresa FFFF care se initializeaza automat dupa RESET dublu registru SP nu este conectata memorie, cea mai mare adresa la care se sfarseste memoria SRAM de 8 Ko este 3FFFH, ca urmare SP va trebui initializat cu aceasta adresa. Daca aceasta initializare nu se face, dupa prima instructiune de chemare (CALL) a unei rutine intreg microsistemul se va bloca, deoarece nu isi mai poate recupera adresa de intoarcere in programul principal care o salveaza automat in stiva in timpul unei instructiuni CALL sau la acceptarea unei cereri de intrerupere, in proectul de fata nu este cazul, deoarece nu am folosit sistemul de intreruperi.
LD HL,3FFFH ;initializeaza indicatoru de stiva
LD SP,HL ;cu cea mai mare adresa din SRAM
Programul intreg al microsistemului este urmatorul:
Programul pentru microsistemul cu Z80 *
ORG 0
INIT_MICROSISTEM:
LD HL,3FFFH ;initializeaza indicatoru de stiva
LD SP,HL ;cu cea mai mare adresa din SRAM
CALL PROG_8253 ;programeaza divizorul pentru serial
CALL PROG_8251 ;programeaza interfata seriala
CALL PROG_8255 ;programeaza interfata paralela
LD A,80H ; afiseaza cifra 8
OUT (80H),A ; pe DS1
LD A,0F8H ; afiseaza cifra 7
OUT (90H),A ; pe DS2
LD A,82H ; afiseaza cifra 6
OUT (0A0H),A ; pe DS3
LD A,92H ; afiseaza cifra 5
OUT (0B0H),A ; pe DS4
LD A,99H ; afiseaza cifra 4
OUT (0C0H),A ; pe DS5
LD A,0B0H ; afiseaza cifra 3
OUT (0D0H),A ; pe DS6
LD A,0A4H ; afiseaza cifra 2
OUT (0E0H),A ; pe DS7
LD A,0F9H ; afiseaza cifra 1
OUT (0F0H),A ; pe DS8
CALL RECEPT_SERIAL ;receptioneaza un caracter de pe serial
CALL TRANS_SERIAL ;transmite caracterul receptionat "efect echo"
CALL TRANS_PARALEL ;transmite caracterul pe paralel (conversie serial-paralel)
END_PROG:
JP END_PROG ;sfarsit program, bucla infinita
Rutinele programului *
PROG_8253: ;programarea 8253 in mod divizor cu 10h
LD A,14H ;incarca cuvantul de comanda pentru 8253
OUT (03H),A
LD A,10H ;incarca constanta de divizare
OUT (0),A
RET
PROG_8251: ;programarea interfetei seriale
LD A,4EH ;incarca cuvantul de mod
OUT (11H),A
LD A,15H ;incarca cuvantul de comanda
OUT (11H),A
RET
PROG_8255: ;programarea interfetei paralele
LD A,81H ;incarca cuvantul de comanda
OUT (23H),A ;transmite pe portul cuvantului de comanda
RET
TRANS_SERIAL: ;transmite un caracter pe serial
IN A,(11H) ;citirea octetului de stare
BIT 0,A ;se testeaza daca circuitul este disponibil
JP Z,TRANS_SERIAL
LD A,C ;se preia data din registrul C
OUT (10),A
RET
RECEPT_SERIAL: ;receptioneaza un caracter pe serial
IN A,(11H) ;citeste octetul de stare
BIT 1,A ;testeaza daca 8251 are un caracter disponibil
JP Z,RECEPT_SERIAL
IN A,(10H) ;citeste caracterul de la 8251
LD C,A ;depune caracterul citit in registrul C
RET
TRANS_PARALEL: ;transmite un caracter respectand dialogul de tip CENTRONIX
IN A,(22H) ;citeste si testeaza BUSY
BIT 0,A
JP NZ,TRANS_PARALEL
LD A,C ;citeste caracterul din registrul C
OUT (20H),A ;transnite caracterul la 8255
SET 0,A ;/STB = 1
OUT (21H),A
RES 0,A ;/STB = 0
OUT (21H),A
SET 0,A ;/STB = 1
OUT (21H),A
RET
END
Mai departe sunt schemele microsystemului:
|