Sunteți pe pagina 1din 34

Proiectare cu Microprocesoare

Proiectarea unui
Microsistem electronic de
comandă

Coordonator: xxx
Nume student: xxx
An: III
Specializarea: Calculatoare
Grupa: 322
Cuprins
1. Cerințele sistemului......................................................................................................................3
2. Proiectarea hardware...................................................................................................................4
2.1. Microprocesorul Z80............................................................................................................4
2.2. Tehnica afișării multiplexate – 7 segments display.............................................................5
2.3. Proiectarea circuitului de amplificare.................................................................................8
2.4. Proiectarea structurii hardware a tastaturii.....................................................................12
2.5. Circuitul TIMER Z80 CTC...............................................................................................14
2.6. Proiectarea circuitului ROM 27128 16K×8......................................................................17
2.6.1. Prezentarea circuitului cu care se face implementarea............................................18
2.6.2. Prezentarea schemei bloc a structurii ce se dorește a fii implementată..................19
2.6.3. Calculul numărului de circuite necesar si tabelul de adrese....................................19
2.6.4. Proiectarea logicii de decodificare și selecție.............................................................20
2.6.5. Conectarea propriu-zisă.............................................................................................21
2.7. Proiectarea circuitului RAM 8K×8...................................................................................22
2.7.1. Prezentarea circuitului cu care se face implementarea............................................23
2.7.2. Prezentarea schemei bloc a structurii ce se dorește a fii implementată..................23
2.7.3. Calculul numărului de circuite necesar si al tabelului de adrese............................24
2.7.4. Proiectarea logicii de decodificare și selecție.............................................................25
2.7.5. Conectarea propriu-zisă.............................................................................................25
2.8. Conectarea circuitelor I/O..................................................................................................26
3. Proiectarea software...................................................................................................................28
3.1. Afisaj....................................................................................................................................29
3.2. Tastaura...............................................................................................................................30
3.3. Modul de deplasare text la stanga.....................................................................................31
3.4. Start flash............................................................................................................................32
3.5. Tratare flash........................................................................................................................33
3.6. Revenire din flash...............................................................................................................34
3.7. Program principal..............................................................................................................35
3.8. Rutina TIMER....................................................................................................................36
3.9. Tabel de variabile................................................................................................................37
3.10. Cod sursa.........................................................................................................................40

1. Cerințele sistemului

Să se proiecteze un microsistem electronic prin care se permite comanda și controlul unei


tabele cu afișare numerică, de tip text curgator la stanga, folosind celule LED cu șapte segmente.
Microsistemul se va proiecta folosind un MPU/MCU de tip Z80, frecvența semnalului de ceas
aplicat fiind 8,192 MHz.
Microsistemul va conține 12 kocteți memorie ROM, de tip 2732/4Kx8, respectiv 6 kocteți
memorie RAM de tip 6216/2Kx8
Microsistemul va conține circuit(e) port paralel de tip 8255, respectiv circuit timer de tip Z80
CTC.
Microsistemul va gestiona o tastatură cu 20 taste și un afișaj matriceal cu 3x6 celule LED cu 7
segmente, având terminalul comun Anod și culoarea RED. Atât tastatura cât și afișajul vor fi
comandate în tehnica multiplexată. Celulele LED cu 7 segmente vor fi asezate din punct de
vedere mecanic pe o singura linie.
Tabela va dispune de un software realizat în limbaj de asamblare prin care se va permite
programarea informatiei numerice care se va afisa curgator (deplasare la stanga), cu orice valori
numerice, inclusiv spații goale.
Tabela va avea două moduri de lucru: programarea și funcționarea propriu-zisă.
În modul programare, va putea fi accesată orice celulă LED din tabelă care va putea fi
programată cu orice valoare numerică sau spațiu liber. Celula LED cu șapte segmente care
urmează să fie programată va fi iluminată intermitent (ON-OFF) cu o perioada de 0,9 sec și
factor de umplere 1/2.
In modul funcționare propriu-zisă, informatia numerica va fi afisata pe celulele LED, deplasarea
textului la stanga facandu-se cu viteza de 2,4 caractere/secunda.
Se cer:
- Proiectul în format scris care va conține 2 mari capitole: proiectarea hardware și
proiectarea software;
- Proiectarea hardware va conține demersul de proiectare pentru conectarea memoriilor,
circuitelor I/O, precum și o schemă hardware generala, format min A3, cu toate
circuitele utilizate și conexiunile dintre ele; va fi prezentat modul de programare a tabelei
prin folosirea tastelor (manualul de utilizare);
- Proiectarea software va conține organigrame generale, organigrame detaliate, software-
ul în limbaj de asamblare precum și lista (tabelul) variabilelor folosite pe parcursul
proiectului, intr-un format indicat (nr.crt., denumire variabilă, descriere variabilă, mod
reprezentare, valoare de inițializare, adresa de plasare în memoria RAM)
2. Proiectarea hardware

2.1. Microprocesorul Z80


Microprocesorul Z80 este un procesor pe 8 biţi (unitatea logico-aritmetica accepta operanzi
repzentaţi pe 8 biți). Magistrala de date este de 8 biți iar magistrala de adrese de 16 biți (spațiul
de memorie este de 216=64KB). Setul de instrucțiuni conține 158 de instrucțiuni.
Microprocesorul Z80 are următoarele caracteristici:
 generează semnalul de refresh pentru memoria DRAM;
 are un pin pentru primirea unei întreruperi nemascabile;
 implementează un mecanism de tratare a întreruperilor vectorizate;
 conține un set dublu de registre;
 setul de instrucțiuni conține instrucțiuni pentru adresarea indexata a memoriei;
 setul de instrucțiuni conține instrucțiuni pentru prelucrarea unor blocuri de date din locații
adiacente de memorie.
Din familia Z80 fac parte următoarele circuite specializate:
 controler de port paralel Z80-PIO;
 controler de port serial Z80-SIO;
 controler DMA;
 circuit timer Z80-CTC.
Dispune de următorii regiștri de 8/16 biți:
 A - Acumulator

 A' - Acumulator alternativ

 BC, DE, HL - regiștri generali

 B'C', D'E', H'L' - regiștri generali alternativi

 F - registrul indicatorilor de condiție (flaguri)

 F' - registrul indicatorilor de condiție alternativ

 IX, IY - regiștri index

 I - vectorul de întreruperi

 R - registrul de refresh al memoriei

 SP - registrul de stivă

 PC - contorul program
2.2. Tehnica afișării multiplexate – 7 segments display

Tehnica afișării multiplexate eficienta din punct de vedere al consumului de putere si al


numărului circuitelor de comanda. Celulele de afișare se aprind pe rând cu o frecventa de f~50Hz
(frecventa la care senzația de lumina a celulelor care se aprind succesiv este continua).
Microsistemul prezinta un afișaj format din 18 celule de afisaj 7 segmente, ce se vor deplasa
la stanga. programat de la o tastatura cu 20 taste.
…..

Programarea afisajului se face dupa apasarea tastei M. Cu ajutorul sagetilor ← → vom alege
digitul ce se doreste programat, dupa ce se ajunge pe pozitia dorita digitul se poate programa
apasand tasta numerica corespunzatoare sau folosind sagetile ↑↓, acestea vor schimba continutul
digitului prin decrementare sau prin incrementare. Pentru a finaliza programarea se apasa tasta
M.
Exemplu de functionare dupa programare
Daca initial afisajul arata asa:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8

Dupa deplasarea la stanga , va arata asa:


2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 1
Apoi:
3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 1 2

Organizarea celulelor LED este 3x6 adica 3 coloane si 6 randuri, schema de afișare propusa
este într-o matrice de 3x6. Simultan se vor aprinde 3 celule de afișare aflate pe aceeași coloana.
Celulele de afișare sunt de tipul anod comun si vor emite lumina rosie.

Celula LED are urmatoarea forma :


In datele proiectului este specificat tipul terminalului astfel ca in acest proiect voi utiliza
anodul comun pentru celula LED.
De obicei comanda unui LED 7 segmente se face cu convertor digital din binar in 7 segmente
insa in acest proiect conversia se va va fi realizata soft.
Pentru anod comun avem mltiplexarea ca si schema generala:
- Toți anozii celulelor aflate pe aceeași coloana sunt comuni

- Toți cei 7 catozi ai celulelor de pe o linie sunt comuni

Structura de conectare matriceala Funcționare:


Se aprind pe rând coloanele de leduri in conformitate cu coloanele anozilor prezentați in
următoarea digrama:

Pentru ca ochiul uman sa vada continuu imagini discrete acestea trebuie sa se succeada cu
frecventa mai mare de 50 Hz.
Pentru a avea aceeași iluminare durata comenzii trebuie sa fie aceeași :
20 ms
=3,3ms /col
6 col
Avem nevoie de un circuit timer care sa semnalizeze procesorului scurgerea unui timp de 3,3
ms.
Semnalizarea se va face prin cerere de întrerupere. In felul acesta, procesorul va putea sa
execute alte sarcini intre cele 2 cereri de întrerupere.
La o semnalizare a timer-ului (întrerupere), acțiunile pe care procesorul le va executa sunt :
 Se stinge coloana aprinsa anterior prin comanda ‘1’ la anodul respectiv
 Se aplica pentru fiecare linie din matricea de celule combinațiile de tip 7 segmente
corespondente digiților ce se vor ilumina pe noua coloana
 Se aprinde noua coloana prin o comanda ‘0’ pe noul anod
Daca ar fi sa comandam matricea 3x6 cu convertoare binare ar fi necesare doar 3 circuite
(cate unul pe linie).
Comanda multiplexata conduce la o reducere a iluminarii pentru ledurile de pe o coloana fata
de situatia comenzii continue.
Ordinul de micsorare este 6, numarul coloanelor care se multiplexeaza, in acest proiect acesta
scade de 6 ori.
Pentru a preveni o iluminare similara comenzii continue trebuie marit curentul prin led-uri
folosind amplificatoare.
Curentul astfel determinat este unul repetitiv iar acest parametru este indicat din foile de
catalog ale led-urilor.
Curentul repetitiv obtinut trebuie sa se incadreze in valoarea maxima a foii de catalog.
Curentul maxim este :
7 x 6 = 42
42x 40 mA = 1680 mA = 1,7 A deci valoarea maxima trebuie sa fie 1,7A.
Schema bloc a afisajului
LED-ul pe care l-am gasit va fii: LTS-4301JS, rosu (red) si anod comun.
Verificam compatibilitatea
Continuous Forward Current Per Segment = 25
Numar coloane = 6
25 ×6=150
ILED = 50 mA
VLED = 5 V

2.3. Proiectarea circuitului de amplificare

Pentru actionarea liniilor si coloanelor din care este format afisajul multiplexat este nevoie de
utilizarea unor circuite de amplificare in curent.
Afisarea multiplexata ar trebui sa fie conectatala portul de tip paralel Z80 PIO insa din cauza
amplificatoarelor care sunt necesare pentru functionarea corecta a afisajului
Pentru amplificatoarele utilizate se vor folosi tranzstori care vor opera blocat saturat
pentru ca puterea disipata pee le sa fie cat mai mica.
Un transistor care urmeaza sa suporte un Ic de aproximativ 1 A are un β la saturatie foarte
mic de unde ar rezulta un curent de circa 100 mA care nu ar putea fi generat de o iesire de port
paralel de unde este necesar un alt tranzistor.
Structura circuitului de amplificare la anod ( CA* ) :

IPEAK = 50 mA
VLED = 5 V
Calculam rezistentele:
4,2 V −0,3 V 3,9 V
R 2= = =0,39 k Ω
10 mA 10 mA
2,4 V −0,3 V 2,1V
R 1= = =2,1 kΩ
1 mA 1mA

Structure circuitului de amplificare pentru Catozi ( CA ):


2.4. Proiectarea structurii hardware a tastaturii

Voi avea 20 taste organizate in 4 x 5, adica 4 linii si 5 coloane.


Tastele pe care le voi utiliza sunt: numerele de la 1 – 9, A-E pentru programarea digitului in
cauza. Pentru a programa tabela în vederea afișării textului curgător de la dreapta la stânga se vor
respecta următorii pași:

 Se apasă tasta “M” pentru a intra în modul programare.

 Pentru a afișa un numar între 0 și 9, A-E se apasă tasta corespunzătoare.

 Pentru a trece la următoarea cifră în sens crescător se apasă tasta corespunzptoare și


anume “↑”.

 Pentru a trece la următoarea cifră în sens descrescător se apasă tasta corespunzptoare și


anume “↓”.

 Pentru a trece la celula din dreapta se apasă tasta corespunzătoare și anume “→”.

 Pentru a trece la celula din stânga se apasă tasta corespunzătoare și anume “←”.

 Pentru a reveni la starea inițială, de defilare a textului, se apasă tasta “M”


0 1 2 3 4

5 6 7 8 9

A B C D E

M ← → ↑ ↓

Avem la dispozitie doar 20 taste, deci celelalte nu vor avea niciun efect asupra programului.

Schema hardware este urmatoarea:


Circuitul TIMER Z80 CTC

Circuitul Z-80 CTC face parte din familia circuitelor I/O ale microprocesorului Z-80 şi
este destinat implementarii funcţiilor de numărare a impulsurilor şi măsurare a timpului.
Circuitul
Z-80 CTC poate realiza aceste funcţii pe 4 canale de numărare independente a câte 8 biţi fiecare.
Numărarea pe fiecare canal se face prin decrementare. Circuitul se interfaţează direct cu
microprocesorul Z-80, dar poate lucra şi cu alte microprocesoare, în acest caz fiind nevoie de o
logică adiţională la conectare.
Z-80 CTC poate fi programat astfel încât fiecare canal să lucreze independent într-unul
din cele două moduri de funcţionare numărător sau temporizator .
În modul numărător (counter), canalul circuitului Z-80 CTC numără impulsuri aplicate
din exteriorul sistemului, iar dacă a fost programat să lucreze în întreruperi, generează o astfel de
cerere spre UC după un număr prestabilit de impulsuri primite.
În modul temporizator (timer), canalul circuitului Z-80 CTC numără impulsurile
semnalului de ceas ale microsistemului Φ (semnalul de ceas al microprocesorului). Cum
perioada acestui semnal este bine determinată, se asigură măsurarea precisă a intervalelor de
timp. Aceasta măsurare este necesară la prelucrările în timp real şi în acest mod se pot genera
întreruperi la UC, după un număr prestabilit de impulsuri.
În ambele moduri de lucru, după programare, circuitul poate lucra independent fără
intervenţia microprocesorului.
Indiferent de modul de lucru, numărarea pe fiecare canal se derulează către înapoi. Dacă
se lucrează în întreruperi, trecerea prin zero în cadrul procesului de numărare, este
anunţată unităţii centrale printr-o cerere de întrerupere.
Proiectarea circuitului 8255

Circuitul 8255 este un circuit de tip port paralel, care permite generarea de semnale digitale
catre exterior, dar si preluarea de semnale digitale din exterior de catre processor. Contine
trei porturi paralele de cate 8b fiecare, in total 24 de pini de tip port paralel. Porturile sunt
notate A, B, C si sunt organizate in 2 grupe, notate 0 si 1. Astfel, grupul 0 contine porturile A
si C superior (4 linii).Grupul 1 contine porturile B si C inferior (4 linii).
Programarea circuitului se realizeaza pe cale software de catre procesor, ca urmare a unor
cuvinte de comanda, prin care utilizatorul stabileste modul de lucru al circuitului I/O .
Tabel de selectie :

A1 A0 SELECTIE

0 0 PORT A

0 1 PORT B

1 0 PORT C

1 1 REG. CUVANT COMANDA


A0,A1 reprezinta intrarile prin care se identifica blocul logic din cadrul circuitului , cu care
procesorul comunica.
Circuitul 8255 este urmatorul :
Tabelul de Adresare

A A Circui
A15 A14 A13 A12 A11 A10 A7 A6 A5 A4 A3 A2 A1 A0 Adr
9 8 t
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000H
0FFF ROM0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1
H
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000H
1FFF ROM1
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1
H
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000H
2FFF ROM2
0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1
H
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000H
RAM0
0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 3FFFH
0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 4000H
RAM1
0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 4FFFH
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 5000H
RAM2
0 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 5FFFH
0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000H
CTC
0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 3003H
0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 3004H
8255
0 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 3007H
0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 3008H
8255
0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 300BH
TABEL VARIABILE
Nr. Denumire variabila Descriere Reprezentare Adresa Valoare Observații
Crt. memorie inițiala
1÷18 AF1÷AF18 Imagini software Octet 3100h ÷ 00h Conversii 7
ale celulelor de 3111h segmente pentru
afișaj afișaj
19 NRCOL Menține coloana ce Octet 3112h 01h Are 4 valori: 01h
urmează a fii ÷ 04h
acționată
20÷2 A1÷A6 Imaginile Bit 3113h ÷ -
5 comenzilor pentru 3118h
anozii comuni
26 COD_BALEIAJ Gestionează codul Octet 3019h FEh Valorile succesive
de baleiere trimis pe ale variabilei se
liniile matricei obțin prin rotație
tastaturii la stânga în
fiecare pas de
baleiere
27 MEM_COLOANA Reprezintă codul Octet 301Ah - FFh înseamnă
citit pe coloanele nicio tastă apăsată
tastaturii în urma
unei apăsări de taste
28 APAS Este o variabilă Bit 301Bh 0 ‘1’ indică
fanion care începutul apăsării
identifică începutul
apăsării unei taste
29 CONTOR_15MS Contor pentru Octet 301Ch 15 Va fi
numărarea a 15ms decrementată la
fiecare apriție a
rutinei TIMER
(1ms)
30 TASTA_APAS Semafor care indică Bit 301Dh 0 ‘1’ indică
apăsarea corectă a apăsarea corectă a
unei taste unei taste
31 SEM_TASTA Semafor care Bit 301Eh 0 ‘1’ indică detecția
transmite unei alte corectă apăsării
porțiuni de program unei taste;
faptul că s-a resetarea se
identificat o tastă produce de partea
apăsată de program care
exectă efectul
tastei apăsate
32 RELAX Identifică începutul Bit 301Fh 0 ‘1’ indică
relaxării unei taste începutul relaxării
unei taste
33 TL Indica trecerea Bit 3020h 0
1
perioadei
L
34 CONTOR_TL Variabilă care Octet 3021h 0 În rutina TIMER
permite se va seta TL ←
contorizarea ‘1’
timpului după care
se efectuează
deplasarea la stânga
a textului afișat
35 COD_ID_TASTA Reprezinta codul de 2 Octeți 3022h -
identificare al tastei
36 MOD Indica modul de Bit 3023h 0 ‘0’ – programare
operare ‘1’ – regim
normal de
deplasare
37 MEM_FLASH Retine valoarea Octet 3024h -
variabilei pe timpul
stingerii acesteia
38 ON Indica iluminarea Bit 3025h - ‘1’ – aprins
celulei LED in ‘0’ – stins
timpul flash-ului
39 FLASH Indica regimul de Bit 3026h - ‘1’ – flash
flash ‘0’ – fara flash
40 CONTOR_TFLAS Folosit pentru Octet 3027h -
H contorizarea
timpului de flash(K)
41 CEL_PROG Retine celula Octet 3028h 00h
programata relativ
la adresa variabilei
de memorie AF1
42 REGIM_FLASH Este val la Bit 3029h 0
schimbarea modului
de lucru din 1 in 0
SUBRUTINA DE TRATARE A TASTATURII:
TRATARE FLASH:
DEPLASARE:
PROGRAM PRINCIPAL:
IITIALIZARE COD_BALEIAJ EQU LD A, 00h
VARIABILE 3019h
LD (HL), A
ORG 3100h MEM_COLOANA EQU
LD HL, AF3
301Ah
AF1 EQU 3100h
LD A, 00h
APAS EQU 301Bh
AF2 EQU 3101h
LD (HL), A
CONTOR_15MS EQU
AF3 EQU 3102h
301Ch LD HL, AF4
AF4 EQU 3103h
TASTA_APAS EQU LD A, 00h
AF5 EQU 3104h 301Dh
LD (HL), A
AF6 EQU 3105h SEM_TASTA EQU 301Eh
LD HL, AF5
AF7 EQU 3106h RELAX EQU 301Fh
LD A, 00h
AF8 EQU 3107h TL EQU 3020h
LD (HL), A
AF9 EQU 3108h CONTOR_TL EQU 3021h
LD HL, AF6
AF10 EQU 3109h COD_ID_TASTA EQU
3022h LD A, 00h
AF11 EQU 310Ah
MOD EQU 3023h LD (HL), A
AF12 EQU 310Bh
MEM_FLASH EQU LD HL, AF7
AF13 EQU 310Ch 3024h LD A, 00h
AF14 EQU 310Dh ON EQU 3025h LD (HL), A
AF15 EQU 310Eh FLASH EQU 3026h LD HL, AF8
AF16 EQU 310Fh CONTOR_TFLASH EQU LD A, 00h
AF17 EQU 3110h 3027h
LD (HL), A
AF18 EQU 3111h CEL_PROG EQU 3028h
LD HL, AF9
NRCOL EQU 3112Fh REGIM_FLASH EQU
3029h LD A, 00h
A1 EQU 3113h
PROGRAM LD (HL), A
A2 EQU 3114h PRINCIPAL LD HL, AF10
A3 EQU 3115h .ORG 3000h LD A, 00h
A4 EQU 3116h
LD HL, AF1 LD (HL), A
A5 EQU 3117H
LD A, 00h LD HL, AF11
A6 EQU 3118H
LD (HL), A LD A, 00h
LD HL, AF2 LD (HL), A
LD HL, AF12 LD (HL), A LD A, 00h
LD A, 00h LD HL, RELAX LD (HL), A
LD (HL), A LD A, 00h LD HL, COD_ID_TASTA
LD HL, AF13 LD (HL), A LD A, 0EEh
LD A, 00h LD HL, TL LD (HL), A
LD (HL), A LD A, 00h LD HL, COD_ID_TASTA
LD HL, AF14 LD (HL), A LD A, HL
LD A, 00h LD HL, CONTOR_TL CP 0EEh
LD (HL), A LD A, 00h JPNZ ET16
LD HL, AF15 LD (HL), A LD HL, MOD
LD A, 00h LD HL, MOD LD A, 01h
LD (HL), A LD A, 00h LD (HL), A
LD HL, NRCOL LD (HL), A JP 3300h
LD A, 01h LD HL, CEL_PROG JP $
LD (HL), A LD A, 00h ET16: LD HL,
COD_ID_TASTA
LD HL, COD_BALEIAJ LD (HL), A
LD A, 0EBh
LD A, 0FEh LD HL, REGIM_FLASH
LD (HL), A
LD (HL), A LD A, 00h
LD HL, COD_ID_TASTA
LD HL, APAS LD (HL), A
LD A, HL
LD A, 00h $: LD HL, MOD
CP 0EBh
LD (HL), A LD A, (HL)
JPNZ ET17
LD HL, CONTOR_15MS CP 00h
JP 3400h
LD A, 0Eh JPNZ ET15
INC CEL_PROG
LD (HL), A JP 3200h
LD HL, CEL_PROG
LD HL, TASTA_APAS R1: LD HL, SEM_TASTA
LD A, (HL)
LD A, 00h LD A, (HL)
CP 0Fh
LD (HL), A CP 01h
JPNZ ET18
LD HL, SEM_TASTA JPNZ $
LD HL, CEL_PROG
LD A, 00h LD HL, SEM_TASTA
LD A, 00h CP 0CBh ET22: LD HL,
COD_ID_TASTA
LD (HL), A JPNZ ET21
LD A, 0DEh
ET18: JP 3100h INC MEM_FLASH
;0CEh
JP $ LD HL, MEM_FLASH
;0BEh
ET17: LD HL, LD A, (HL)
COD_ID_TASTA ;0EDh
CP 00h
LD A, 0DBh ;0DDh
JPNC $
LD (HL), A ;0CDh
LD HL, MEM_FLASH
LD HL, COD_ID_TASTA ;0BDh
LD A, 00h
LD A, HL ;0ECh
LD (HL), A
CP 0DBh ;0DCh
JP $
JPNZ ET19 ;0CCh
ET21: LD HL,
JP 3400h COD_ID_TASTA LD (HL), A
INC CEL_PROG LD A, 0BBh LD HL, COD_ID_TASTA
LD HL, CEL_PROG LD (HL), A LD A, HL
LD A, (HL) LD HL, COD_ID_TASTA CP 0DEh
CP 00h LD A, HL ;0CEh
JPNZ ET20 CP 0BBh ;0BEh
LD HL, CEL_PROG JPNZ ET22 ;0EDh
LD A, 0Fh INC MEM_FLASH ;0DDh
LD (HL), A LD HL, MEM_FLASH ;0CDh
ET20: JP 3100h LD A, (HL) ;0BDh
JP $ CP 00h ;0ECh
ET19: LD HL, JPC $ ;0DCh
COD_ID_TASTA
LD HL, MEM_FLASH ;0CCh
LD A, 0CBh
LD A, 09h JPNZ ET23
LD (HL), A
LD (HL), A LD HL, MEM_FLASH
LD HL, COD_ID_TASTA
JP $ LD A, 00h
LD A, HL
LD (HL), A
JP $ LD HL, REGIM_FLASH LD (HL), A
ET22: LD HL, LD A, (HL) JP R2
MEM_FLASH
CP 01h ET13: LD HL,
LD A, 00h REGIM_FLASH
JPNZ ET13
LD (HL), A LD A, 01h
LD HL,
JP$ CONTOR_TFLASH LD (HL), A
LD A, (HL) LD HL, ON
CP 00h LD A, 00h

;start flash JPNZ R1 LD (HL), A

ORG 3300h LD HL, ON R2: LD HL, CEL_PROG

LD HL, ON LD A, (ON) LD A, 00h

LD A, 00h CP 00h LD (HL), A

LD (HL), A JPNZ ET14 LD HL, FLASH

LD HL, LD HL, ON LD A, 01h


CONTOR_TFLASH LD A, 01h LD (HL), A
LD A, 01h LD (HL), A LD A, (AF1)
LD (HL), A LD BC, MEM_FLASH LD HL, CEL_PROG
LD A, (AF1) LD A, (AF1) ADD A, (HL)
LD HL, CEL_PROG LD HL, CEL_PROG LD HL, MEM_FLASH
ADD A, (HL) ADD A, (HL) LD BC, A
LD HL, MEM_FLASH LD HL, A LD (HL), (BC)
LD BC, A LD (HL), (BC) LD (BC), 00h
LD (HL), (BC) LD HL, JP R1
LD (BC), 00h CONTOR_TFLASH

JP TASTA_MOD LD A, 01h
LD (HL), A
;revenire din flash 1
JP R1
ORG 3500h
ET14: LD HL, ON
;tratare flash LD HL, REGIM_FLASH
LD A, 00h
ORG 3400h LD A, 00h
LD (HL), A LD (HL), A LD A, 01h
LD HL, FLASH PJ TASTA_MOD LD (HL), A
LD A, 00h LD HL, NRCOL
LD (HL), A ;timer LD A, (HL)
LD HL, ON ORG 3700h CP 01h
LD A, 01h JP 3700h JPNZ ET1
LD (HL), A JP 3600h LD HL, AF1
LD BC, MEM_FLASH JP 3800h LD A, (HL)
LD A, (AF1) LD HL, FLASH OUT(8004),A
LD HL, CEL_PROG LD A, (HL) LD HL, AF6
ADD A, (HL) CP 01h LD A, (HL)
LD HL, A JPNZ RETI OUT(8006),A
LD (HL), (BC) DEC CONTOR_TFLASH LD HL, AF11
JP TASTA_MOD RETI LD A, (HL)
OUT(800B),A
ORG 3800h
;revenire din flash 2 LD HL, A1
LD HL, A1
ORG 3600h LD A, 00h
LD A, 01h
LD HL, ON LD (HL), A
LD (HL), A
LD A, 01h JP ET0
LD HL, A2
LD (HL), A ET1: LD HL, NRCOL
LD A, 01h
LD BC, MEM_FLASH LD A, (HL)
LD (HL), A
LD A, (AF1) CP 02h
LD HL, A3
LD HL, CEL_PROG JPNZ ET2
LD A, 01h
ADD A, (HL) LD HL, AF2
LD (HL), A
LD HL, A LD A, (HL)
LD HL, A4
LD (HL), (BC) OUT(8004),A
LD A, 01h
LD HL, LD HL, AF7
LD (HL), A
CONTOR_TFLASH LD A, (HL)
LD HL, A5
LD A, K OUT(8006),A
LD HL, AF12 LD A, (HL) LD HL, NRCOL
LD A, (HL) OUT(8004),A LD A, 01h
OUT(800B),A LD HL, AF9 LD (HL), A
LD HL, A2 LD A, (HL) ET5: RETI
LD A, 00h OUT(8006),A
LD (HL), A LD HL, AF14 ;tastatura
JP ET0 LD A, (HL) multiplexata
ET2: LD HL, NRCOL OUT(800B),A .ORG 3900h

LD A, (HL) LD HL, A4 LD HL, TASTA_APAS

CP 03h LD A, 00h LD A, (HL)

JPNZ ET3 LD (HL), A CP 01h

LD HL, AF3 JP ET0 JPNZ ET5

LD A, (HL) ET4: LD HL, AF5 LD HL, RELAX

OUT(8004),A LD A, (HL) LD A, (HL)

LD HL, AF8 OUT(8004),A CP 01h

LD A, (HL) LD HL, AF10 JPNZ ET6

OUT(8006),A LD A, (HL) LD HL, CONTOR_15MS

LD HL, AF13 OUT(8006),A LD A, (HL)

LD A, (HL) LD HL, AF15 CP 00h

OUT(800B),A LD A, (HL) JPNZ ET7

LD HL, A3 OUT(800B),A LD HL, 0FFh

LD A, 00h LD HL, A5 LD A, (HL)

LD (HL), A LD A, 00h CP 0FFh

JP ET0 LD (HL), A JPNZ ET8

ET3: LD HL, NRCOL ET0: LD HL, NRCOL LD HL, RELAX

LD A, (HL) INC (HL) LD A, 00h

CP 04h LD A, (HL) LD (HL), A

JPNZ ET4 CP 06h LD HL, TASTA_APAS

LD HL, AF4 JPNZ ET5 LD A, 00h


LD (HL), A CP 00h RLA (HL)
LD HL, APAS JPNZ ET10 RETI
LD A, 00h LD HL, ET12: LD HL, APAS
MEM_COLOANA
LD (HL), A LD A, 01h
LD A,
JP ET LD (HL), A
CP
ET8: LD HL, RELAX LD HL, CONTOR_15MS
JPNZ ET11
LD A, 00h LD A, 0Eh
LD HL, TASTA_APAS
LD (HL), A LD (HL), A
LD A, 01h
RETI RETI
LD (HL), A
ET7:
LD HL, SEM_TASTA
DEC CONTOR_15MS ;deplasare
LD A, 01h
RETI ORG 4000h
LD (HL), A
ET6: LD HL, 0FFh LD HL, TL
ET11: LD HL, APAS
LD A, 0FFh LD A, (HL)
LD A, 00h
CP 0FFh CP 01h
LD (HL), A
JPNZ RETI JPNZ RETI
JP ET
LD HL, RELAX LD A, 00h
ET10: DEC
LD A, 01h LD (HL), A
CONTOR_15MS
LD (HL), A LD HL, CONTOR_TL
RETI
LD HL, CONTOR_15MS LD (HL), A
ET9: LD A,
LD A, 0Eh COD_BALEIAJ LD HL, AUX
LD (HL), A LD (BC), A LD A, AF1
ET5: LD HL, APAS LD HL, LD (HL), A
MEM_COLOANA
LD A, (HL) LD HL, AF1
LD A, (HL)
CP 01h LD A, AF2
CP 0FFh
JPNZ ET9 LD (HL), A
JPNZ ET12
LD HL, CONTOR_15MS LD HL, AF2
ET: LD HL,
LD A, 00h COD_BALEIAJ LD A, AF3
LD (HL), A
LD (HL), A LD A, AF14
LD HL, AF3 LD (HL), A
LD A, AF4 LD HL, AF14
LD (HL), A LD A, AF15
LD HL, AF4 LD (HL), A
LD A, AF5 LD HL, AF15
LD (HL), A LD A, AUX
LD HL, AF5 LD (HL), A
LD A, AF6 RETI
LD (HL), A
LD HL, AF6
LD A, AF7
LD (HL), A
LD HL, AF8
LD A, AF9
LD (HL), A
LD HL, AF9
LD A, AF10
LD (HL), A
LD HL, AF10
LD A, AF11
LD (HL), A
LD HL, AF11
LD A, AF12
LD (HL), A
LD HL, AF12
LD A, AF13
LD (HL), A
LD HL, AF13

S-ar putea să vă placă și