proiect

32
Tema de proiect Să se proiecteze o consolă de comunicaţie serială către un panou de afişaj (tabelă electronică), astfel încat la consolă, local, să se stabilească un text numeric care urmează să fie transmis către panoul de afişaj (tabelă electronică), după validarea acestuia. Date de proiectare Unitatea centrală a consolei va fi realizată cu 8051. Consola va fi dotată cu un afişaj local format dintr-o matrice de celule led cu 7 segmente cu organizarea 7x4. Celulele led cu 7 segmente utilizate vor avea culoarea green(verde). Şi vor fi de tip anod comun. Consola va dispune de o zonă de memorie ROM, cu dimensiunea 8k formată din circuite de tip 2764 având organizarea 8k x 8 respectiv dintr-o zonă de memorie RAM, cu dimensiunea 4k formată din circuite de tip 6216 având organizarea 2k x 8 Consola va dispune de circuit timer de tip 8253. Consola va dispunde circuit port paralel de tip 8255. Consola va dispunde circuit USART intern. Consola va dispune de o tastatură locală cu un numar suficient de taste pentru operare. Prin intermediul tastaturii se vor putea efectua operaţiile: - se va putea alege regimul de programare/validare a conţinutului afişat al consolei; - se va putea naviga către o celula led cu 7 segmente din matrice care se va programa; celula led ce se programeaza va flasha, adica se va aprinde cu intermitenta 0,5 sec off – 0,5 sec on; - programarea celulei led se va putea face prin incrementare sau decrementare sau prin acţionarea tastei cu cifră directă ce se doreşte a fi afisată; pe celulele led ale matricii se vor putea afisa doar cifre; 1

Upload: ceban-vladislav

Post on 31-Jul-2015

112 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: proiect

Tema de proiect

Să se proiecteze o consolă de comunicaţie serială către un panou de afişaj (tabelă electronică), astfel încat la consolă, local, să se stabilească un text numeric care urmează să fie transmis către panoul de afişaj (tabelă electronică), după validarea acestuia.

Date de proiectareUnitatea centrală a consolei va fi realizată cu 8051.Consola va fi dotată cu un afişaj local format dintr-o matrice de celule led cu 7

segmente cu organizarea 7x4. Celulele led cu 7 segmente utilizate vor avea culoarea green(verde). Şi vor fi de tip

anod comun.Consola va dispune de o zonă de memorie ROM, cu dimensiunea 8k formată din

circuite de tip 2764 având organizarea 8k x 8 respectiv dintr-o zonă de memorie RAM, cu dimensiunea 4k formată din circuite de tip 6216 având organizarea 2k x 8

Consola va dispune de circuit timer de tip 8253.Consola va dispunde circuit port paralel de tip 8255.Consola va dispunde circuit USART intern.Consola va dispune de o tastatură locală cu un numar suficient de taste pentru operare.

Prin intermediul tastaturii se vor putea efectua operaţiile:- se va putea alege regimul de programare/validare a conţinutului afişat al consolei;- se va putea naviga către o celula led cu 7 segmente din matrice care se va programa; celula led ce se programeaza va flasha, adica se va aprinde cu intermitenta 0,5 sec off – 0,5 sec on;- programarea celulei led se va putea face prin incrementare sau decrementare sau prin acţionarea tastei cu cifră directă ce se doreşte a fi afisată; pe celulele led ale matricii se vor putea afisa doar cifre;- se va putea realiza stergerea afisajului; dupa stergere, celula led din stanga sus va flasha;- dupa ce toate celulele led vor fi programate, consola va fi validata prin apasarea unei taste specifice, efectul de flash va dispare si continutul va fi transmis in format ASCII prin circuitul USART (SIO) catre tabela de afisaj.

Procesorul primeste un semnal de ceas cu frecventa 14MHz.

1

Page 2: proiect

Proiectarea părţii hardware

Pentru realizarea consolei de comunicaţie serială către un panou de afişaj(tabelă electronic) cu posibilitatea de a stabili un text numeric ce va fi transmis după validare consolei de afişare, unitatea centrală este constituită din microcontrolerul 8051 căruia îi sunt ataşate următoarele circuite periferice: matrice de LED-uri rosii cu organizarea 7x4; tastatură formată din 19 taste; 8k memorie ROM format din circuite 2764; 4k memorie RAM format din circuite 6216; Circuit port-paralel 8255, circuit timer 8255.

Toate versiunile microcontrolerului 8051 prezintă procesorul propriu-zis, 4 porturi paralele de câte 8 biţi (3 având un caracter opţional), un canal pentru comunicaţii seriale, 2 canale timer, logică de întreruperi ce gestionează 2 întreruperi externe şi 3 întreruperi interne (2 de la canalul timer şi una de la canalul serial).

În capitotul prezent vor fii detaliată atât interconectarea microcontrolerului cu memoria și cu circuitele periferice cât și atașarea echipamentelor externe.

Conectarea circuitelor de memorie

Este de menţionat ca memoria RAM internă va fi pastrata, ea ocupând adresele 00h÷7Fh, memoria RAM externa urmand sa fie plasată în spaţiul de adrese 0000h÷FFFFh. Nu apare nici o interferenţă între cele două zone de memorie, deoarece fiecare este accesată din punct de vedere hardware prin semnale diferite, iar software se utilizează instrucţiuni specifice pentru adresare. Astfel, la adresarea memoriei de date externe se utilizează instrucţiunea MOVX, în timp ce pentru a extrage date din memoria de programe se foloseşte instrucţiunea MOVC.

Înainte de conectarea propriu-zisă a modulelor de memorie este necesar efectuarea unui calcul pentru stabilirea numărului exact de circuite necesare. Rezultatul determinat va semnifica numărul de circuite folosite în funcţie de orgenizarea fiecădui circuit şi de lungimea memoriei.

8 k∗88 k∗8

=1∗1=1circuite ROM

4 k∗82 k∗8

=2∗1=2circuite RAM

Cele 3 circuite vor fii conectate în aşa fel încât spaţiul de memorie extern să fie continuu. Pentru acest lucru este necesară completarea următorului tabelului de adrese.

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Adr.hex.Nr.

Circ.

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000hROM

0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFFh

0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h RAM1

2

Page 3: proiect

0 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 27FFh

0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 2800hRAM2

0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 2FFFh

În continuarea zonei de adrese vor fi plasate circuitele externe ce vor fi ataşate microcontrolerului 8051, adresarea lor fiind similara cu cea a unei locatii de memorie. Modul lor de conectare va fi prezentat intr-un capitolul ulterior.

Modul general de conectare al memoriilor ROM

3

Page 4: proiect

Modul general de conectare al memoriilor ROM

Din informaţia de adresă emisă se vor extrage un număr de semnale necesarea pentru controlarea logicii de selecţie a circuitelor de memorie. Aceasta va fii asigurată de UN DMUX1:8 care vor primii pe intrări biţii A11÷A13, iar pe ieşirile acestuia se vor afla semnalele de activare a celor 3 circuite de memorie.

Magistrala de date externa formată de microcontroler (D7÷D0) este conectată la fiecare modul de memorie în parte, este posibilă conectarea în acest fel deoarece la un moment dat în timp doar un singur circuit va fi activ. Magistrala este bidirecţională, în sensul că microcontrolerul poate trimite datele la modulele de memorie (numai la RAM), şi poate efectua şi operaţii de citire din acestea.

Magistrala de adrese este conectată în comun la toate modulele de memorie, fiecare din acestea folosind un număr fix de biţi, potrivit dimensiunii cipului de memorie.

Semnalul RD(activ 0 logic) se activează atunci când procesorul va executa o operaţie de citire din memorie (semnalul WR fiind în 1 logic). El este conectat în comun la toate circuitele de memorie. Semnalul WR(activ 0 logic) atunci când se va executa o scriere acest semnal se va activa (semnalul RD fiind în 1 logic), acesta este conectat doar la circuitele de tip RAM unde este posibilă scrierea.

Asa cum se observă din figura 2 si 3 pentru a forma magistrala de adrese externa este utilizat semnalul ALE. Semnalul este folosit pentru demultiplexarea externă a informaţiilor emise pe portul P0. Astfel, semnalul este folosit în vederea memorării în latch-ul extern 74573, a părţii mai puţin semnificative a adresei A0-A7 emisă pe liniile acestuia. Semnaluleste activ ,,1”logic.

Modul efectiv de conectare a memoriilor este prezentat în figura urmatoare:

4

Page 5: proiect

Modul de conectare a memoriilor ROM si RAM

5

Page 6: proiect

Conectarea circuitelor periferice

Modul de conectare al circuitelor este asemănător cu modul de conectare al modulelor de memorie, în sensul că fiecare circuit este plasat la o adresă unică în spaţiul de adrese al microsistemului.

După cum am menţionat anterior circuitul 8255 şi cei 7 RPP vor fii conectaţi în spaţiul de adrese al microsistemului, în acest sens se va realiza tabelul de adrese. Trebuie realizată de asemenea şi o logică de selecţie pentru a putea face distincţia între circuitele ce se doresc a fii utilizate.

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 Adr.hex.Nr.

Circ.

0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000h8253

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 RPP1

0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 3009h RPP2

0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 0 300Ah RPP3

0 0 1 1 0 0 0 0 0 0 0 0 1 0 1 1 300Bh RPP4

0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 0 300Ch RPP5

0 0 1 1 0 0 0 0 0 0 0 0 1 1 0 1 300Dh RPP6

0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 300Eh RPP7

Selecţia între cele 3 circuite(regiştrii paralel-paralel sunt consideraţi ca fiind o singură componentă, distincţia între ei realizându-se cu ajutorul liniilor A0÷A3) se va face prin A3A2 din magistrala de adrese.

Magistrala de date este conectată în comun la toate circuitele, este o magistrală bidirecţională, în sensul că procesorul va transmite date pe această magistrală către circuitele periferice atât pentru etapa de programare cât şi pentru prelucrarea datelor ulterioare.

6

Page 7: proiect

Implementarea tastaturii

Tastatura reprezintă mijlocul prin care utilizatorul extern introduce date sau navighează prin meniu. Similar afişajului şi tastatura este proiectată folosind tehnica multiplexării în timp. În acest caz tehnica presupune verificarea pe rând a stării fiecărei taste(apăsată sau nu) .

Soluţia implementata este organizarea tastaturii sub forma unei matrici cu 5 linii şi 4 coloane, în acest fel sunt necesare doar 9 linii de tip port paralel(5+4). Modul de legare al tastelor la liniile de port paralel este prezentat în figura următoare:

Modul de conectare al tastelor la porturile paralele

În această organizare fiecare tastă este recunoscută după un cod unic format din numărul de linie şi numărul de coloană. La intersecţia unei linii cu o coloană se află poziţionat un buton, când acesta este apăsat se realizează contactul fizic dintre o linie şi coloană. Când nicio tastă nu este apăsată legătura la VCC a liniilor de intrare în portul paralel vor semnaniza microprocesorului nu a fost apăsată nici o tastă. Pe ieşirile portului paralel la un moment dat pe una din linii se va propaga o valoare de 0 logic restul fiind în 1 logic, atunci când se apasă o tastă coloana respectivă va trece în 0 logic, informaţia primită la intrrările portului va semnaliza microprocesorului că o tastă a fost apăsată, această informaţie împreună cu codul liniei formează codul unic de identificare a fiecărei taste.

7

Page 8: proiect

Afişare multiplexată

Din punct de vedere vizual un afişaj multiplexat are aceleaşi caracteristici cu un afişaj normal cu celule led 7 segmente, adică au o luminozitate suficient de mare pentru a fii percepută de către un observator extern şi în acelaşi moment toate celulele sunt aprinse.

Din punct de vedere hardware, avantajul folosirii tehnicii de afişare multiplexată este adeea de reducere a numărul de linii de date necesare pentru a comanda un set de celule BCD 7 segmente prin legarea în comun a catozilor corespunzători fiecărui segment. Această tehnică presupune că la un moment dat doar un singu afişor este aprins şi stind, celelalte fiind aprinse şi stinse succesiv. Pentru ca ochiul uman să nu sesizeze efectul de „pâlâire” este nevoie ca fiecare led să aibe o frecvenţă de 50Hz, un număr mai mare de afişoare va însemna multiplicarea frecvenţei menţionate cu numărul acestora.

Matricea de celule LED cu oraganizarea 7x4 va fi multiplexată pe linii, rezultând astfel un inel de multiplexare de 4 elemente(n=4). Considerând frecvenţa minimă de aprindere a unui LED ca fiind de 50Hz deducem foarte simplu că timpul în care acesta va sta aprins este de:

T= 150

=20 ms

T LED=Tn=20 ms

4=5 ms

O altă problemă, o reprezintă faptul că afişajul ca fii comandat un circuit de tip port paralel, iar fan-out-ul acestui circuit nu este decât de o sarcină TTL. În concluzie trebuie amplificat atât curentul ce va comanda liniile catozii cât şi liniile ce vor comanda anozii comuni. Schema de amplificare este cea din figura urmatoare:

Schema amplificare

8

Page 9: proiect

Proiectarea părţii software

Pornind de la schema hardware prezentată în capitolele anterioare observăm că apare necesitatea contorizării timpului şi a semnalizării către processor a trecerii anumitor intervale de timp. Această necesitate provine atât din structura hardware a afisajului multiplexat cât şi din modul în care se doreşte gestionarea tastaturii.

Tastatura necesară realizării proiectului cuprinde 19 taste ce se doresc a fi utilizate cu o viteza minimă de 10 taste/s. Deducem aşadar că ca vor fi necesare 10 cicluri complecte de baleiere(cuprinzând cele 19 taste) pe secundă. Rezultă un total de 19*10=190 de stări existente într-o secundă, ce reprezintă o frecvenţă minimă de baleiere de 190Hz. Timpul alocat unei taste fiind:

T tastă=1

190≅ 5.2 ms

Matricea de celule LED cu oraganizarea 7x4 va fi multiplexată pe linii, rezultând astfel un inel de multiplexare de 4 elemente(n=4). Considerând frecvenţa minimă de aprindere a unui LED ca fiind de 50Hz deducem foarte simplu că timpul în care acesta va sta aprins este de:

T= 150

=20 ms

T LED=Tn=20 ms

4=5 ms

Date fiind cele două valori destul de apropiate obţinute pentru gestionarea unei taste(5.2ms) respectiv pentru aprinderea unei celule LED(5ms) vom alege utilizarea unei singure valori şi anume pe cea de 5ms.

Putem acoperi necesităţile de contorizare a timpului într-un sistem de calcul prin utilizarea unui circuit timer intern programat să lucreze corescupunzător, acesta urmând să genereze întreruperi către microcontroler.

Preconizăm că se vor efectua numărări ale timpului pentru 3 activităţi principale:- Afişarea multiplexată ce se tratează impreună cu baleierea tastaturii(5ms);- Timpul necesar înlăturării efectului de debouncing(15ms);- Timplul de clipire al celulei ce se programează(500ms).

Este evident că activităţile amintite mai sus nu pot fi gestionate utilizând doar programul principal, fiind evidentă necesitatea lucrului cu întreruperi. Se evită astfel inactivitatea inutilă a procesorului din timpul temporizărilor, care ar duce la efecte nedorite la nivelul afişajului multiplexat

În subrutina de tratare a întreruperilor com încerca să tratăm toate categoriile de activităţi ce necesită măsurarea timpului(gestionarea tastaturii, afişajul multiplexat, efectul de clipirea al celulei LED ce se programează). Prin această tehnică se dă prioritate în procesarea făcută de către U.C. acelor acţiuni care ar produce o senzaţie de proastă funcţionare dacă nu s-ar executa(în special afişarea multiplexată şi apăsarea tastelor).

9

Page 10: proiect

Tratare afişaj multiplexat

La fiecare apariţie a acestei rutine vom identifica linia ce urmează a fi aprinsă, de aici deducem necesitatea unei variabile ce va cantoriza rândul ce trebuie aprins(NR_LIN). Fiecare celulă va avea o imagine virtuală în memoria ROM(octet), variabilă denumită AFIS[i,j].

Informaţia corespunzătoare unei celule este transmisă către regiştrii RPP prin intermediul liniilor de date şi este însoţită de un semnal ce determină preluarea datelor în regiştrii. Modul de lucru al subrutinei este unul simplu.

Orgranigrama subrutinei de tratare a afisajului multiplexat este prezentata in figura urmatoare:

Orgranigrama subrutinei de tratare a afisajului multiplexat

10

Page 11: proiect

Tratarea tastaturii

Subrutina de tratare a tastaturii este apelată, la fel ca şi cea destinată afişajului multiplexat, la fiecare 5ms. Aceasta işi propune să rezolve următoarele probleme: baleierea tastaturii; identificarea apăsării unei taste; validarea tastei apăsate; înlăturarea efectului de deboucing; identificarea relaxării tastei ce a fost apăsate anterior; validarea relaxării; semnalizarea unei taste apăsate şi validate; transmiterea codului unei taste apăsate şi validate.

Implementarea software se bazează pe schema hard prezentată în schema de mai jos:

Schema hardware a tastaturii

Din analiza schemei hard anterioare observam că atunci când nu este apăsată nici o tastă pe pinii PA.0÷PA.3 se citeste valoare 0Fh.

Este cunoscut faptul că la apăsarea tastelor la care contactul de face prin lamele(mecanic) apare un fenomen parazit denumit deboucing, care daca nu este înlăturat poate duce la semnalarea de apăsări/relaxări de taste inexistente în realitate, fapt care va perturba simţitor performanţele sistemului.

Fenomenul poate fi înlaturat atât în variantă hardware(ceea ce implică adăugarea de perechi RC), fie cu mult mai facil prin metode software ce se reduc la introducerea unui delay(10-15ms) şi a reverificării tastei.

Pornind de la aceste observaţii construim organigrama subrutinei de tratare a tastaturii, organigramă prezentată în figura de mai jos.

11

Page 12: proiect

Organigramă Tratare Tastatura 5ms

Funcţionarea organigramei: Prin testarea variabilei RELAX verificăm începutul relaxării tastei(RELAX=1); dacă ne

aflăm în această situaţie contorizăm un delay de 15ms(am ales această valoare pentru că este un multiplu de 5), dacă după scurgerea celor 15ms tasta este văzută în continuare ca fiind relaxată atunci variabilele utilizate in restul subrutinei pentru a trata tasta sunt reiniţializate;

Prin testarea variabilei APAS verificăm dacă este validă apăsarea tastei; SEMN_TA semnalizează momentul iniţial în care s-a apăsat o tastă; în momentul în care

aceasta devine „1” logic se implementează un delay de 15ms şi se reciteşte valoarea corespunzătoare tastei apăsate: dacă acestea este identică cu valoarea din variabila MEM1 se setează variabilele APAS şi TASTA_APAS ce semnalizează apăsarea validă a unei taste; în mod contrar dacă cele două valori comparate nu sunt identice variabila SEM_TA este resetată(adusă în „0”) iar subrutina începe din nou baleierea tastaturii;

Dacă nici una din variabilele de mai sus nu a avut valoare „1” atunci se continuuă procesul de baleiere şi de testare a valorii portului A(PA.0÷PA.3), în momentul în care se găseşte o valoare diferită de 0Fh se memorează valoare citită în variabila MEM1 şi se semnalizează apăsarea tastei prin setarea variabilei SEM_TA şi încărcarea variabilei CONTOR15ms cu valoarea 03h;

Baleierea se realizează prin şiftarea la stânga a variabilei BALEIAJ; în momentul în care aceasta devine 0DFh îi este alocată valoarea 0Feh.

12

Page 13: proiect

Realizarea efectului de clipire a celulei LED programate

Se doreşte ca celule LED programată să aibă un efect de clipire cu o frecvenţă 2HZ(TimpOn/Off=500ms).

Efectul va fi tratat doar în modul de programare, corespunzător cazului în care variabila REGIM are valoarea „0”. Blocul de tratare al operaţiei de clipire se va face în rutina TIMER şi va fi structurată conform organigramei din figura următoare:

Blocul de tratare al efectului de clipire

Variabila esenţială realizării acestui efect este denumită STANT(reprezentând un semafor ce memorează starea anterioară).

STANT={1 pentru o stare anterioară când celulaLED a fost aprinsă ;0 pentru o stareanterioară când celula LED a fost stinsă .

Funcţionarea organigramei:Prin testarea variabilei STANT se stabileşte dacă în starea anterioară celula LED

programată afost aprinsă sau nu. Aşadar avem două cazuri posibile: Celula LED programată a fost aprinsă: în acest caz se resetează(se aduce în starea „0”)

variabila STANT, în variabila MEMAFIS se stochează informaţia afişată în celula programată, iar acesteia i se alocă o combinaţie neafişabilă(de exemplu 0FFh pentru celulele LED cu anod comun);

Celula LED programată a fost stinsă: în acest se setează(se aduce in starea „1”) variabila STANT şi ulterior se alocă în imagiea virtuală a celulei LED valoarea amterioară pastrată în variabila MEMAFIS.

13

Page 14: proiect

Rutina de tratare a întreruperilor Timer5ms

Rutina de tratare a întreruperilor a fost introdusă pentru a evita apariţia temporizărilor în programul principal, evitându-se astfel momentele prelungite de de inactivitate a microprocesorului, momente ce ar avea avea efecte vizibile nedorite atât la nivelul afişajului multiplexat cât şi la tratarea tastaturii.

În cadrul rutinei sunt apelate în mod constant(la fiecare 5ms) subrutinele de tratare a tastaturii şi a afişajului multiplexat cât şi periodic pe cea responsabilă cu realizarea efectului de clipire pentru celula LED ce se programează. Această ultimă subrutină este apelată o data la 500ms, perioadă ce corespunde la 100 de apelari a rutinei de tratare a întreruperilor provenite de la circuitul timer(5ms).

14

Page 15: proiect

Programul principal

Programul principal este responsabil cu toate celelalte operaţii ce trebuiesc executate şi care nu sunt cuprinse în rutina de tratare a întreruperilor provenite de la timer. Aşadar acesta este responsabil cu următoarele operaţii: Programarea circuitelor I/O; Iniţializarea variabilelor; Transmiterea zonei IMAG prin USART; Tratarea fiecărei taste; Gestionarea celor două regimuri de lucru: cel de programare şi cel de validare;

O prezentare sumară se regăseşte în organigrama din figura următoare:

Organigramă de principiu a programului principal.

În momentul pornirii programului se execută instrucţiunile de programare a circuitelor I/O şi de iniţializare a variabilelor, în continuare urmând ca în funcţie de valoarea variabilei REGIM să intre în una din cele două bucle de program existente: de verificare şi de programare.

În bucla de verificare, atunci când variabila REGIM are valoare „1” se realizează transmiterea zonei IMAG prin USART iar apoi se asteaptă apăsarea tastei P/V pentru reintrarea în regimul de programare.

Dacă bucla de verificare este relativ simplă în cazul buclei de programare sunt necesare numeroase ramificaţii corespunzătoare fiecărei taste.

15

Page 16: proiect

Pentru înlăturarea efectelor nedorite ce pot apărea datorită efectului de clipire al celulei LED ce se programează, şi anume acela de rămânere în starea de stins a celulei când

se trece la programarea unei alte celule, se va introduce inainte de tratarea tastelor: ← → ↓ ↑ şi P/V se va introduce un bloc de instrucţiuni ce are menirea de a reaprinde celula

stinsă în momentul avansului către o altă celulă. Funcţionarea blocului de instrucţiuni se bazează pe testarea variabilei STANT ce

memoreaza în cazul de faţă starea curentă a celulei:

STANT={1 pentru o st are anterioară când celula LEDa fost aprinsă ;0 pentru ostare anterioară când celulaLED a fost stinsă .

In cazul în care celula este stinsă(in zona corespondentă din imaginea virtuală se afla o combinaţie neafişabilă) aceasta este reaprinsă prin transferul valorii aflate in MEMAFIS în zona din IMAG corespondentă.

16

Page 17: proiect

ANEXA ITabel variabile:

Nr.crt

Numevariabila

AdresaRAM

T ipReprez.

ValInit.

Explicatii/Observatii

1 IMAG 1÷40 30÷4Ch OCTET 00h Imaginile virtuale ale celulelor 2 NR_LIN 4Dh OCTET 01h 1÷73

BALEIAJ 4Eh OCTET FEhVariabila mentine codul binar aplicatportului 3 in procesul de baleiere. Se roteste la sfarsit dupa fiecare pas

4MEM1 4Fh OCTET *

Variabila care memoreaza codul citit la port–coloana pe care se afla tasta apasata

5 SEM_TA 00h BIT 0 Semnalizeaa momentul apasarii unei taste

6 CONTOR15 MS

50h OCTET 04h Utilizat pentru contorizarea a 15 ms

7 APAS 01h BIT 0 Semnalizeaza apasarea valida a unei taste

8 TASTA_APAS 02h BIT 0 Semnalizeaza catre catre alte portiuni ale softului apasarea valida a unei taste

0- Nu a fost apasata nici o tasta1- A fost a pasata o tasta

9 RELAX 03h BIT 0 Indica inceputul relaxarii unei taste10 REGIM 04h BIT 0 Identifica regimul de lucru al tabelei

0- Regim programare11 ROW 51h OCTET * 0÷6 identifica pozitia curenta a

cursorului pentru consola12 COLUMN 52h OCTET * 0÷3 identifica pozitia curenta a

cursorului pentru consola13 STANT 05h BIT 1 Semafor ce memoreaza starea

anterioara(in clipire)1-Aprins 0-Stins

14 MEM AFIS 53h OCTET * Memorie a afisajuluice va clipi15 CONTOR

500 MS 54h OCTET 64h 0÷64h Utilizat pt contorizarea celor

500 ms16 VAL_TASTA 55h OCTET * Memorează valoarea citita pe PA0÷PA317 CALCUL 56h OCTET * In ea se calculează valoarea

IMAG+4*ROW+COLUMN

17

Page 18: proiect

ANEXA II

NUME TASTA BALEIAJ VAL_TASTA

0 FEh 0Eh1 FDh 0Eh2 FBh 0Eh3 F7h 0Eh4 EFh 0Eh5 FEh 0Dh6 FDh 0Dh7 FBh 0Dh8 F7h 0Dh9 EFh 0Dh← FEh 0Bh→ FDh 0BhINC FBh 0BhCLEAR F7h 0BhP/V EFh 0Bh↑ FEh 07h↓ FDh 07hDEC FBh 07hSPACE F7h 07h

18

Page 19: proiect

ANEXA III

POGRAM PRINCIPAL --Programare circ i/o--8253-- programare canal 0 ca divisor de frecventa cu constanta de divizare 3E8h

MOV REG_CUV_COM_8253 ,#34hMOV REG_CUV_COM_8253 ,#E8hMOV REG_CUV_COM_8253 ,#03h

-- programare canal 1 ca divisor de frecventa cu constanta de divizare 46hMOV REG_CUV_COM_8253 ,#54hMOV REG_CUV_COM_8253 ,#46h

--8255--programam ambele grupuri de porturi sa functioneze in modul 0, portul A este setat ca intrare portul B ca iesire iar portul C inferior ca iesire;

MOV REG_CUV_COM_8255 ,#90h

--Initializare variabileMOV R0,#30hMOV R1,#1Ch

et1 :MOV R0_,#00h INC R0 DEC R1

CJNE R1, #00h, et1NR_LIN 01hBALEIAJ EEhSEM_TA 0CONTOR_15 ms 03hCONTOR_500 ms 64h

CLR SEM_TACLR SEM_TACLR APASCLR TASTA_APASCLR RELAXSET REGIM CLR STANT

--VERIFICARE REGIM EtSTART JNB REGIM ,---TRANSMISIE ZONA IMAG---prin USART---testare tasta PIVEt3 MOV A ,VAL_TASTA

CJNE A, #OBh, et3MOV A, BALEIAJ

19

Page 20: proiect

CJNE A, 3EFh, et3CLR REGIM LJMP etSTART

Et4 –verificare daca este o tasta apasataJNB TASTA_APAS,et4

-verifica tasta {0,1,2,3,4}MOV A,VAL_TASTACJNE A, #0Eh, et9

--tratare tasta {1,2,3,4}--verif tasta 0

MOV A ,BALEIAJCJNE A,#FEH,et5LCALL CALCUL MOV @R7,#01hLJNP et out

Et6---verif tasta 2 MOV A ,BALEIAJ CJNE A ,#FBH,et7LCALL CALCUL MOV @R7, #02hLJMP et OUT

Et7--- verif tasta 3MOV A,BALEIAJ CJNE A, #F7h,et8LCALL CALCUL MOV @R7,#03h

Et8---- tratare tasta 4LCALL CALCUL MOV @R7,#04h

Et9--- verif tasta {5,6,7,8,9}MOV A , VAL_TASTACJNE A,#0DH, et14

--- tratare tasta{5,6,7,8,9}--- veif tasta 5

MOV A,BALEIAJ CJNE A,#FEh,ET 10 LCALL CALCUL MOV @R7,#05hLJMP etOUT

Et10 ---verifi tasta 6MOV A , BALEIAJCJNE A,#FDh,ET 11 LCALL CALCUL MOV @R7,#06h

20

Page 21: proiect

LJMP etOUT Et11—veriv tasta 7

MOV A , BALEIAJCJNE A,#FBh,ET 12 LCALL CALCUL MOV @R7,#07hLJMP etOUT

Et12—verificare tasta 8MOV A , BALEIAJCJNE A,#F7h,ET 13 LCALL CALCUL MOV @R7,#08hLJMP etOUT

Et13--- verificare tasta 9LCALL CALCUL MOV @R7,#09h

---verificare tasta din ---{ ←;→;inc ;clear---p/v}Et14 MOV A, VAL_TASTA

CJNE A,0Bh,et21--tratare tasta din {←;→;inc ;clear; p/v}--verificare tasta

MOV A, BALEIAJ CJNE A,#FEh,16LCALL T_BUGMOV A,#00HCJNE A,COLUMN ET 15MOV COLUMN,#07HLJMP OUT

Et17 INC COLUMN LJMP etOUT

Et18—verify tasta CLEARMOV A, BALEIAJ CJNE A,#FBh,ET20MOV R0,#30h

Et 19 MOV (R0),#FFHINC R0CJNE R0,#58h et19LJMP etOUT

ET20—tartare tasta P/VLCALL T_BUGSET REGIM LJMP etOUT

21

Page 22: proiect

--tratare tasta{↓↑;DEC ; SPACE}Et 21MOV A ,BALEIAJ

CJNE A, #FEh , et 23LCALL T_BUGMOV A, 300hCJNE A ,ROW, et22MOV ROW, #04hLJMP ET OUT

Et22 DEC ROW LJMP etOUT

ET 23--- tasta ↓ MOV A, BALEIAJ

CJNE A, #FEh, et25LCALL T_BUGMOV A, #05hCJNE A, ROW , et24MOV ROW, #00hLJMP et OUT

Et24 INC ROWLJMP et OUT

Et25---tasta SPACELCALL CALCUL MOV @R7,#FFh

EtOUT CLP APAS LJMP etSTART

T_BUG JNB STANT, etOUT1LCALL CALCUL MOV @R7, MEM _ATISSET STANT

Et OUT 1 RET

CALCUL MOV R2,#08h---8*row+column +30h

MOV A,ROWMUL AB ALB A,COLUMNADD A,#30hMOV R7,ARET

22

Page 23: proiect

TIMER 4msMOV A,CONTOR_500msCYNE A.7Dh, etTALCALL TRATARE_CLIPIREMOV CONTOR 500ms

EtTA LCALL TRATARE_AFISLCALL TRATATRE_TASTATURA 4msIN C CONTOR 500msRETI

TRATARE_ TASTATURA 4msJB RELAX, et_T6JNB AFIS,et_T1MOV A,PAAND A, #0FhCYNE A,# 0Fh, te OUT_TTMOV CONTOR 16ms, #04hSET RELAX LJMP et OUT_TT

Et_T1 JNB SEM_TA,et_T3MOV PB, BALEIAJMOV A,PAAND A,#0FhCJNE A,#0Fh, et_T2MOV A, BALEIAJRL AMOV BALEIAJ,ACJNE A,#DFh, et OUT_TTMOV BALEIAJ,#FEhLJMP et OUT_TT

Et_T2 MOV MEM1,PASET SEM_TAMOV CONTOR 16 ms, #04hLJMP etOUT_TT

Et_T3 MOV A, CONTOR 16msCJNE A,#00h, et T5MOV A,MEM1CJNE A,PA, et_T4SET APASSET TASTA APASLJMP etOUT_TT

Et_T4 CLR SEM_TALJMP etOUT_TT

Et_T5 DEC CONTOR 16 ms

23

Page 24: proiect

LJMP etout_TTEt_T6 MOV A,CONTOR 16ms

CJNE A,#00h, et_T8MOV A,PAAND A,#0FhCJNE A, #0Fh, et_T7CLR RELAXCLR APASCLR SEM_TALJMP etOUT_TT

Et_T7 SET RELAXLJMP etOUT_TT

Et_T8 DEC CONTOR 16msEtOUT_TT RET

--variabileNR_LIN 4DhBALEIAJ 4EhMEM1 4FhSEM_TA 00hCONTOR_15 MS 50hAPAS 01hTASTA-APAS 02hRELAX 03hREGIM 04hROW 51hCOLUMN 52hSTANT 05hMEM AFIS 53hCONTOR_500 MS 54hVAL_TASTA 55hCALCUL 56h

REG_CUV_COM_8253 (3000H) REG_CUV_COM_8255 (3007h)

END

24