Tema proiect
Sa se proiecteze un microsistem electronic prin intermediul caruia se va comanda o masina de facut paine.
Proiectarea presupune :
proiectarea hardware a masinii ;
proiectarea aplicatiei software in limbaj de asamblare.
Masina respectiva gestioneaza urmatoarele periferice:
- afisaj cu afisoare LED avand 7 segmente comandate multiplexat;
- tastatura comandata multiplexat ;
- senzor de temperatura ;
- motor malaxor;
- rezistenta incalzire (cuptor).
Operatiile pe care masina le face sunt urmatoarele:
framantare (F);
dospire(D);
coacere(C);
tinere la cald(T);s
functia de timer(H).
Elemente legate de opratiile efectuate:
OPERATIE |
TIMP(minute) |
TEMPERATURA(0C) |
MOTOR |
F |
ON |
||
D |
OFF |
||
C |
OFF |
||
T |
OFF |
Date individuale
Tipul procesorului 8051
Frecventa de lucru a procesorului - 16MHz
Tipul si organizarea memoriei ROM - externa 2764 - 8K x 8
Tipul si organizarea memoriei RAM - externa 6264 - 8K x 8
Tipul circuitului timer - extern 82C53
Tipul circuitului port-paralel - extern 82C55
TF1 = 30min
TF2 = 40min
TF3 = 55min
TD1 = 40min
TD2 = 50min
TD3 = 70min
TC1 = 45min
TC2 = 65min
TT = 55min
Numarul celulelor de afisare 6
Tipul afisajului - catod comun
Culoarea afisajului - verde
I .Proiectarea hardware
Microsistemul se constituie in jurul unui microcontroller 80C51, care are rolul de a prelua informatiile de la tastatura si de la senzorul de temperatura, de a procesa aceste informatii, de gestionare a sistemului de afisare si de control asupra motorului malaxorului si a rezistentelor de incalzire a cuptorului.
1 .Proiectarea unitatii de afisare
Se foloseste tehnica afisarii multiplexate.Tehnica se bazeaza pe efectul de integrare al ochiului la stimuli luminosi cu frecventa ridicata.
Afisajul este constituit din 6 celule de afisare; acestea vor fi organizate intr-un singur rand, asa cum se poate observa in figura de mai jos:
A10A16 reprezinta comanda pentru fiecare anod al unui digit, iar pentru selectarea unui digit din cei 6 se foloseste semnalul KC (KC0KC5).
Frecventa de aprindere a digitilor, pentru a creea impresia de continuitate trebuie sa fie de aproximativ 47 Hz.
Pentru cei 6 digiti timpul cat trebuie sa stea aprins un digit este de aproximativ 3.2ms.
Asa cum reiese si din figura de mai jos nu trebuie ca la un moment dat sa existe doi digiti aprinsi.
Momentele de timp " * " sunt momentele in care unitatea centrala primeste semnalizarea de trecere a 3.2 ms dupa care trebuie sa aibe loc aprinderea urmatorului digit.
Principalele caracteristici ale celulelor de afisare sunt:
- curent prin segment in regim continuu: 25mA
- curent prin segment in regim de impulsuri: 160mA
- caderea de tensiune pe segment: 3.6V
Schema de comanda a unui segment este urmatoarea:
In cazul acesta curentul printr-un segment trebuie sa fie .
aleg tranzistorul Q1 de tipul BC 517 cu
Iar valori limita absolute:
Trebuie ca
Aleg
aleg tranzistorul Q1 de tipul BC 107
Aleg
Aleg
Prin Q3 avem un curent de .
aleg tranzistorul Q3 de tipul BD 433
Aleg
Aleg tranzistorul Q4 de tipul BC 171:
Aleg
2. Tastatura
Tastatura este formata din 3 taste:
FC - prin intermediul acestei taste se selecteaza functiile ;
TM - selecteaza timpul dorit ;
START - porneste rularea celor patru functii.
Tastatura este gestionata prin intermediul portului PC de la circuitul 82C55:
Functionare :
se genereaza '0L' pe PC0 dupa care se citeste starea pinilor PC4, PC5 si PC6, daca unul dintre acesti pini este gasit in '0L', atunci tasta corespunzatoare este posibil sa fie apasata si se incepe tratarea secventei de debouncing.
TASTA |
PC6 PC5 PC4 PC3 PC2 PC1 PC0 |
FC TM START |
1 1 0 x x x 0 1 0 1 x x x 0 0 1 1 x x x 0 |
3. Conectarea memoriilor si a circuitelor periferice
Memoria ROM in care se va inscrie programul ce va fi rulat se va plasa in zona externa a memoriei de program a microcontrolerului 80C51 de la adresa 0000h.
Memoria RAM se va plasa in zona externa a memoriei de date a microcontrolerului 80C51 de la adresa 0000h. Deasemenea circuitele 82C53 si 82C55 se vor plasa in zona externa a memoriei de date a microcontrolerului 80C51.
Harta adreselor de conectare a circuitului de memorie RAM si a circuitelor periferice 82C55 si 82C53:
A15A14A13A12 A11A10A9A8 A7A6A5A4 A3A2A1A0 |
ADRESA HEXA |
Semnificatie |
Zona |
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 |
0000h 1FFFh |
Circuit SRAM |
Zona externa a memoriei de date |
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 |
2000h 2003h |
Circuit 82C55 |
|
0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 |
2010h 2013h |
Circuit 82C53 |
|
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 |
0000h 1FFFh |
Circuit ROM |
Zona externa a memoriei de program |
Circuitul de decodare si selectie pentru circuitul de memorie si cele 2 periferice este urmatorul:
5. Comanda rezistentelor si a malaxorului
Comenzile START/STOP pentru cele 2 rezistente si pentru motorul malaxorului se dau pe portul PA al circuitului 82C55 (PA0, PA1, PA2), iar validarea circuitelor se realizeaza prin intermediul celor 3 pini nefolositi ai portului PC: PC1, PC2 si PC3. Dar portul A poate fi folosit pentru a genera aceste comenzi doar in timpul unei intreruperi cand afisajul este stins.
4. Circuit de RESET
La punerea in functie a microcontrolerului circuitul de RESET trebuie sa actioneze cel putin un timp de 24 perioade de ceas. Inaintea conectarii tensiunii de alimentare condensatorul este descarcat, tensiunea la borne fiind 0. In momentul alimentarii condensatorul scurtcircuiteaza intrarea RESET la tensiunea de alimentare. Timpul de scurtcircuitare este dat de constanta .
constanta trebuie sa fie cel putin
Aleg => .
II .Proiectarea software
Din punct de vedere software programul va avea doua componente: programul principal si subrutina timer.
Necesitatea existentei subrutinei pentru tratarea intreruperii de la circuitul timer se justifica si prin activitatea de gestionare a tastaturii, dar si prin realizarea temporizarilor necesare functiilor si pentru controlul temperaturii in cuptor.
Activitatile pe care aceste doua componente software trebuie sa le rezolve sunt urmatoarele:
- initializarea si programarea circuitelor de tip I/O;
- initializare memorie RAM si pozitionare variabile;
- gestionarea afisajului multiplexat;
- gestionarea tastaturii;
- peluarea timpilor de la tastatura pentru fiecare functie;
- reglarea temperaturii in cuptor;
- afisarea functiei si a timpului corespunzator.
Repartizarea acestor activitati catre componentele software se poate face astfel: gestionarea afisajului, a tastaturii si cronometrarea timpilor pentru fiecare functie in parte vor fi rezolvate de catre subrutina timer datorita periodicizarii acesteia si a necesitatilor de rezolvare a respectivelor activitati de tip periodic, iar celelalte operatii vor fi rezolvate de catre programul principal.
Organigramele celor doua componente software
Programarea circuitelor periferice
Programarea circuitului 82C55
Porturile A si B trebuie programate ca iesire, iar liniile PC0, PC1, PC2, PC3 ale portului C vor fi programate ca iesire, iar liniile PC4, PC5, PC6 se vor programa ca intrare, practic prin citirea acestor linii se va observa apasarea vreunei taste.
Circuitul 82C55 se afla plasat in microsistem la adresa de baza 2000h.
2000h - adresa port A;
2001h - adresa port B;
2002h - adresa port C;
2003h - adresa registru cuvant de comanda.
Cuvantul de comanda: 1000 0001=81h - se trimite pe adresa registrului cuvantului de comanda 2003h.
Programarea circuitului 82C53
Cu ajutorul circuitului 82C53 trebuie sa realizam o temporizare de 1,6ms.
Semnalul de ceas al microcontrolerului se aplica si circuitului 82C53 pe canalul 0 de numarare pentru realizarea temporizarii.
Circuitul 82C53 este plasat in microsistem la adresa de baza 2010h.
2010h - adresa canal 0;
2011h - adresa canal 1;
2012h - adresa canal 2;
2013h - adresa registru cuvant de comanda.
Temporizarea se va realiza cu ajutorul canalului 0, programat in modul 2 (divizor de frecventa).
Constanta de timp cu care se face divizarea este:
.
Cuvantul de comanda: 0011 0100=34h - se trimite pe adresa registrului cuvantului de comanda - 2013h. Dupa aceasta se trimite constanta de divizare (se trimite prima data octetul cel mai putin semnificativ si dupa aceea octetul mai semnificativ) pe adresa registrului cuvantului de comanda - 2013h.
Programarea microcontrolerului sa lucreze in intreruperi
Circuitul temporizator 82C53 la fiecare 1,6ms genereaza un semnal de intrerupere catre microcontrolerul 80C51 pe intrarea . Astfel microcontrolerul trebuie programat sa lucreze in intreruperi; pentru acest lucru trebuie sa scriem corespunzator registrii IE si TCON.
IE: 1000 0001=81h
TCON: 0000 0001=01h
Organigrama blocului gestiune afisaj multiplexat
Algoritmul de implementare: se testeaza la fiecare 3.2ms care digit este aprins si se aprinde urmatorul. Pentru identificarea digitului aprins se foloseste o variabila DIGIT cu urmatoarele valori: 00h - digit 0, 01h - digit 1, 02h - digit 2, 03h - digit 3, 04h - digit 4, 05h - digit 5. Temporizarea este de 1.6ms de aceea este necesara realizarea a doua intreruperi pentru a realiza temporizarea de 3.2ms (aceasta este implementata prin variabila CONTOR_TIMER).
La pornirea sistemului se va afisa prima functie (F - framantare) impreuna cu primul timp corespunzator acestei functii (20minute):
Standardul de afisare va fi tipul functiei urmata de o liniuta si apoi timpul. Codurile pentru cele patru tipuri de functii sunt urmatoarele:
F - framantare:
- D - dospire:
C - coacere:
Tinere la cald:
Codul BCD 7 segmente al cifrelor de la 0 pana la 9 este:
'0' - 3Fh,
'1' - 06h,
'2' - 5Bh,
'3' - 4Fh,
'4' - 66h,
'5' - 6Dh,
'6' - 7Dh,
'7' - 07h,
'8' - 7Fh,
'9' - 6Fh.
iar pentru cele patru functii:
- F - framantare: 71h
- D - dospire: 3Fh
C - coacere: 39h
Tinere la cald: 31h
Se vor folosi variabilele DIGIT0, DIGIT1, DIGIT2, DIGIT3, DIGIT4 si DIGIT5 pentru a stoca codul binar corespunzator informatiei ce trebuie afisate.
Pentru controlul temperaturii din cuptor si pentru decrementarea timpului afisat se va realiza o temporizare de 1minut; astfel la trecerea unui minut se va citi temperatura de la senzor si se verifica daca se incadreaza in intervalul corespunzator functiei care se afla in curs de realizare. Pentru a contoriza 1 minut sunt necesare 37.500 (927Ch) de intreruperi (1,6 x 37500 = 60.000ms = 60s = 1minut). Se vor utiliza doua variabile pe cate un octet pentru a realiza temporizarea de 1 minut: CONTOR_TEMPO_H (initializare 92h) si CONTOR_TEMPO_L (initializare 7Ch).
Organigrama blocului gestiune tastatura
La fiecare 1.6ms se verifica daca s-a apasat vreo tasta. Daca se identifica o tasta apasata se verifica fenomenul de debouncing: se asteapta 10ms si daca se gaseste aceeasi tasta apasata inseamna ca este apasata si se face citirea. Dupa citire se asteapta relaxarea tastei cu verificarea fenomenului de debouncing si la relaxare.
Se folosesc urmatoarele variabile:
TASTA_PRES care este '1L' daca este apasata o tasta si '0L' daca nu;
PRES este folosita la verificarea fenomenului de debouncing cand este incert daca s-a apasat sau nu o tasta;
CONTOR_PRES este variabila folosita pentru contorizarea timpului de debouncing (10ms ceea ce inseamna o valoare de 05h pentru variabila CONTOR_PRES la initializare);
COD_ID_TASTA este variabila in care se stocheaza codul tastei apasate;
SEMAFOR_TASTA este variabila de semnalizare in programul principal a faptului ca a fost apasata o tasta;
TASTA_REL este folosita in verificarea fenomenului de debouncing la relaxarea tastei.
Organigrama pentru temporizarea de 1 minut
Pentru a indica in programul principal trecerea timpului de 1 minut se activeaza variabila SEMAFOR_TEMPO (0FFh). In programul principal se asteapta activarea acestei variabile pentru a decrementa timpul afisat cu 1 minut si a testa domeniul de temperatura.
Organigrama programului principal
Programul principal va trebui sa gestioneze urmatoarele secvente:
gestiunea informatiei ce trebuie afisata;
selectarea timpului de executie pentru fiecare functie;
controlul temperaturii in cuptor prin activarea sau dezactivarea uneia dintre rezistente;
pornirea si oprirea malaxorului in timpul functiei de framantare.
Pentru cele patru functii se foloseste variabila FUNCTION pentru identificarea acestora in program; astfel variabila FUNCTION poate lua 4 valori: 1 - F, 2 - D, 3 - C, 4 - T.
Pentru valoarea timpilor in cadrul celor 4 functii se folosesc urmatoarele variabile: TF - framantare, TD - dospire, TC - coacere, TT - tinere la cald. La pornire cele patru variabile vor fi initializate cu primul timp corespunzator fiecarei functii ( TF=30h, TD=40h, TC=45h si TT=55h ). Se poate observa ca in cazul timpului valorile in hexa corespund cu cele din zecimal; practic se foloseste aceasta metoda pentru ca in cazul afisajului se evita conversia din hexa in zecimal (cei patru biti mai putin semnificativi reprezinta cifra unitatilor ce trebuie afisata, iar cei patru biti mai semnificativi reprezinta cifra zecilor ce trebuie afisata). In cazul decrementarii trebuie sa se aibe grija ca aceasta sa fie o operatie echivalenta cu cea din zecimal, realizandu-se corectia atunci cand este necesar (ex.: 30 - 1 in hexa este 2Fh, dar in cazul acesta va trebui sa se realizeze corectia si va fi 29.).
Pentru a semnala in cadrul intreruperii faptul ca trebuie schimbata starea unei rezistente sau a motorului malaxorului se foloseste variabila SEM_CHANGE care va fi testata de fiecare data cand se intra in subrutina de intrerupere si cand va fi gasita ,1L' se va trece la tratarea starii respective. Starea in care se afla sistemul va fi transferata subrutinei de intrerupere prin intermediul variabilei STARE; aceasta va putea sa ia urmatoarele valori:
00h - sistemul se afla la pornire (urmeaza) functia de framantare si conform cu aceasta functie vor trebui pornite rezistenta 1 si malaxorul;
01h - va reprezenta sfarsitul functiei 1 si inceputul functiei 2 (dospire), moment in care trebuie oprit motorul malaxorului si pastrata rezistenta 1 (in functie de reglajul temperaturii);
02h - sfarsitul functiei 2 si inceputul functiei de coacere - se opreste rezistenta 1 si se porneste rezistenta 2;
03h - trecerea de la functia 2 la functia 3 - se opreste rezistenta 2 si se porneste rezistenta 1;
04h - sfarsitul functiei 4 si respectiv al procesului - se va reinitializa sistemul;
05h - schimba stare rezistenta - in urma testelor de temperatura rezistentele vor trebui oprite sau pornite.
Pentru a cunoaste starea in care se afla rezistentele respectiv motorul (ON/OFF) se vor folosi urmatoarele variabile: ST_REZ1, ST_REZ2 si ST_MOT (valoarea 0 pentru OFF si 1 pentru ON).
Pentru stocarea informatiei citite de la senzorul de temperatura se foloseste variabila TEMP, iar pentru temperatura minima si maxima admisa in cuptor pentru fiecare functie in parte se vor folosi urmatoarele variabile: TEMP_LOW1 - TEMPHIGH1 (temperatura minima respectiv temperatura maxima pentru functia 1), TEMP_LOW2 - TEMPHIGH2, TEMP_LOW3 - TEMPHIGH2, TEMP_LOW4 - TEMPHIGH4.
Sistemul de masurare a temperaturii ne furnizeaza informatia pe 8 biti. Considerand domeniul de temperature pentru senzor 00C - 1000C, rezulta variatia de temperatura:
Se observa ca valoarea citita de la senzorul de temperatura va trebui multiplicata cu 0.4, dar pentru a ne folosi de inmultirea cu 4 in binar (2 deplasari la stanga) se va multiplica cu 4 valoarea citita de la senzor, rezultatul obtinut reprezentand valoarea reala a temperaturii multiplicata cu 10, iar comparatia se va face cu pragurile de temperatura multiplicate cu 10.
FC |
TEMP_LOW |
TEMP_HIGH |
||
ZECIMAL |
HEXA |
ZECIMAL |
HEXA |
|
F - framantare |
12Ch |
190h |
||
D - dospire |
190h |
258h |
||
C - coacere |
2BCh |
384h |
||
T - tinere la cald |
12Ch |
190h |
Variabilele TEMP_LOW si TEMP_HIGH sunt reprezentate pe 2 octeti astfel: temperatura minima pentru functia 1 (TEMP_LOW1) va fi formata din TEMP_LOW11=2Ch si TEMP_LOW12 = 01h, iar temperatura maxima de TEMP_HIGH11=90h si TEMP_HIGH12=01h; asemanator si pentru urmatoarele functii.
Tabelul variabilelor folosite in program:
Nr. crt |
Nume var. |
Descriere |
Val. de init. |
Tip var. |
Adr. RAM |
1 |
CONTOR_TIMER |
Contorizeaza trecerea intervalelor de 4ms, necesar controlului afisajului multiplexat (2 val.) |
00h |
OCTET |
0000h |
2 |
DIGIT |
Indica digitul asupra caruia actioneaza afisajul multiplexat: 0-DIGIT04-DIGIT4 |
00h |
OCTET |
0001h |
3 |
SEMAFOR_TASTA |
Variabila prin care este semnalizata apasarea unei taste: 00h -val. inactiva FFh -val. activa |
00h |
OCTET |
0002h |
4 |
COD_ID_TASTA |
Variabila in care se citeste codul tastei apasate |
XX |
OCTET |
0003h |
5 |
MEM_TASTA |
Memoreaza prima valoare citita |
XX |
OCTET |
0004h |
6 |
PRES |
Variabila ce indica eventuala apasare a unei taste si se asteapta trecerea timpului de debouncing: 00h -val. inactiva 01h -val. activa |
00h |
OCTET |
0005h |
7 |
TASTA_PRES |
Indica faptul ca s-a apasat o tasta : 00h -val. inactiva 01h -val. activa |
00h |
OCTET |
0006h |
8 |
CONTOR_PRES |
Variabila pentru contorizarea timpului de debouncing |
XX |
OCTET |
0007h |
9 |
TASTA_REL |
Semafor pentru inceperea fenomenului de debouncing la relaxare: 00h -val. inactiva 01h -val. activa |
XX |
OCTET |
0008h |
10 |
SEMAFOR_TEMPO |
Indica momentul in care s-a realizat o temporizare de 1minut: 00h -val. inactiva FFh -val. activa |
00h |
OCTET |
0009h |
11 |
FUNCTION |
Variabila de identificare a functiei: 01h - F, 02h - D, 03h - C, 04h - T |
01h |
OCTET |
0010h |
12 |
TF |
Timpul pentru functia de framantare. |
20h |
OCTET |
0011h |
TD |
Timpul pentru functia de dospire |
30h |
OCTET |
0012h |
|
TC |
Timpul pentru functia de coacere |
45h |
OCTET |
0013h |
|
TT |
Timpul pentru functia de tinere la cald |
30h |
OCTET |
0014h |
|
SEM_CHANGE |
Semafor care indica faptul ca una dintre rezistente sau motorul trebuie sa fie pornite sau oprite : 00h -val. inactiva 01h -val. activa |
00h |
OCTET |
0015h |
|
CONTOR_TEMPO_H CONTOR_TEMPO_L |
Variabila pe 2 octeti folosita pentru realizarea temporizarii de 1min. |
92h 7Ch |
OCTET |
0016h 0017h |
|
STARE |
Indica starea in care se afla sistemul. |
XX |
OCTET |
0018h |
|
20 |
ST_REZ1 |
Indica starea rezistentei 1: 00h - OFF 01h - ON |
00h |
OCTET |
0019h |
21 |
ST_REZ2 |
Indica starea rezistentei 2: 00h - OFF 01h - ON |
00h |
OCTET |
0020h |
22 |
ST_MOT |
Indica starea motoeului: 00h - OFF 01h - ON |
00h |
OCTET |
0021h |
23 24 |
TEMP_LOW11 TEMP_LOW12 |
Temperatura minima (x10) a functiei 1 - framantare . |
2Ch 01h |
OCTET |
0022h 0023h |
25 26 |
TEMP_HIGH11 TEMP_HIGH12 |
Temperatura maxima (x10) a functiei 1 - framantare. |
90h 01h |
OCTET |
0024h 0025h |
27 28 |
TEMP_LOW21 TEMP_LOW22 |
Temperatura minima (x10) a functiei 2 - dospire |
90h 01h |
OCTET |
0026h 0027h |
29 30 |
TEMP_HIGH21 TEMP_HIGH22 |
Temperatura maxima (x10) a functiei 2 - dospire |
58h 02h |
OCTET |
0028h 0029h |
31 32 |
TEMP_LOW31 TEMP_LOW32 |
Temperatura minima (x10) a functiei 3 - coacere |
BCh 02h |
OCTET |
0030h 0031h |
33 34 |
TEMP_HIGH31 TEMP_HIGH32 |
Temperatura maxima (x10) a functiei 3 - coacere |
84h 03h |
OCTET |
0032h 0033h |
35 36 |
TEMP_LOW41 TEMP_LOW42 |
Temperatura minima (x10) a functiei 4 - tinere la cald |
2Ch 01h |
OCTET |
0034h 0035h |
37 38 |
TEMP_HIGH41 TEMP_HIGH42 |
Temperatura maxima (x10) a functiei 4 - tinere la cald |
90h 01h |
OCTET |
0036h 0037h |
39 |
TEMP |
Codul temperaturii citit de la senzorul de temperatura pe 8 biti. |
XX |
OCTET |
0038h |
TEMP11 TEMP12 |
TEMP multiplicat cu 4 |
XX XX |
OCTET |
0039h 0040h |
|
TEMP_LOW1 TEMP_LOW2 |
Variabile generice pentru temperatura minima. |
XX XX |
OCTET |
0041h 0042h |
|
TEMP_HIGH1 TEMP_HIGH2 |
Variabile generice pentru temperatura maxima. |
XX XX |
OCTET |
0043h 0044h |
|
DIGIT0 DIGIT1 DIGIT2 DIGIT3 DIGIT4 DIGIT5 |
Contin codul BCD 7 segmente al informatiei de afisat |
XX XX XX XX XX XX |
OCTET |
0045h 0046h 0047h 0048h 0049h 0050h |
Codul ASM al programului
ORG 0000h
JMP START
ORG 0003h
PUSH 0E0h
PUSH 0D0h
PUSH 0A0h
PUSH 82h
PUSH 83h
PUSH 00h
PUSH 01h
PUSH 02h
PUSH 03h
PUSH 04h
PUSH 05h
PUSH 06h
PUSH 07h
LCALL TEMPORIZARE
POP 07h
POP 06h
POP 05h
POP 04h
POP 03h
POP 02h
POP 01h
POP 00h
POP 83h
POP 82h
POP 0A0h
POP 0D0h
POP 0E0h
RETI
ORG 0100h
START:
;definirea variabilelor
CONTOR_TIMER EQU 0000h
DIGIT EQU 0001h
SEMAFOR_TASTA EQU 0002h
COD_ID_TASTA EQU 0003h
MEM_TASTA EQU 0004h
PRES EQU 0005h
TASTA_PRES EQU 0006h
CONTOR_PRES EQU 0007h
TASTA_REL EQU 0008h
SEMAFOR_TEMPO EQU 0009h
FUNCTION EQU 0010h
TF EQU 0011h
TD EQU 0012h
TC EQU 0013h
TT EQU 0014h
SEM_CHANGE EQU 0015h
CONTOR_TEMPO_H EQU 0016h
CONTOR_TEMPO_L EQU 0017h
STARE EQU 0018h
ST_REZ1 EQU 0019h
ST_REZ2 EQU 0020h
ST_MOT EQU 0021h
TEMP_LOW11 EQU 0022h
TEMP_LOW12 EQU 0023h
TEMP_HIGH11 EQU 0024h
TEMP_HIGH12 EQU 0025h
TEMP_LOW21 EQU 0026h
TEMP_LOW22 EQU 0027h
TEMP_HIGH21 EQU 0028h
TEMP_HIGH22 EQU 0029h
TEMP_LOW31 EQU 0030h
TEMP_LOW32 EQU 0031h
TEMP_HIGH31 EQU 0032h
TEMP_HIGH32 EQU 0033h
TEMP_LOW41 EQU 0034h
TEMP_LOW42 EQU 0035h
TEMP_HIGH41 EQU 0036h
TEMP_HIGH42 EQU 0037h
TEMP EQU 0038h
TEMP11 EQU 0039h
TEMP12 EQU 0040h
TEMP_LOW1 EQU 0041h
TEMP_LOW2 EQU 0042h
TEMP_HIGH1 EQU 0043h
TEMP_HIGH2 EQU 0044h
DIGIT0 EQU 0045h
DIGIT1 EQU 0046h
DIGIT2 EQU 0047h
DIGIT3 EQU 0048h
DIGIT4 EQU 0049h
DIGIT5 EQU 0050h
;PROGRAMARE CIRCUIT 82C55
MOV DPTR,#2003h
MOV A,#81h
MOVX @DPTR,A
;PROGRAMARE CIRCUIT 82C53
MOV DPTR,#2013h
MOV A,#34h
MOVX @DPTR,A
MOV A,#00h
MOVX @DPTR,A
MOV A,#76h
MOVX @DPTR,A
;PROGRAMARE MICROCONTROLER
;SA LUCREZE IN INTRERUPERI
MOV IE,#81h
MOV TCON,#01h
;INITIALIZARE VARIABILE
CLR A
MOV DPTR,#CONTOR_TIMER
MOVX @DPTR,A
MOV DPTR,#DIGIT
MOVX @DPTR,A
MOV DPTR,#SEMAFOR_TASTA
MOVX @DPTR,A
MOV DPTR,#PRES
MOVX @DPTR,A
MOV DPTR,#TASTA_PRES
MOVX @DPTR,A
MOV DPTR,#SEMAFOR_TEMPO
MOVX @DPTR,A
MOV DPTR,#SEMAFOR_CHANGE
MOVX @DPTR,A
MOV DPTR,#ST_REZ1
MOVX @DPTR,A
MOV DPTR,#ST_REZ2
MOVX @DPTR,A
MOV DPTR,#ST_MOT
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#FUNCTION
MOVX @DPTR,A
MOV A,#20h
MOV DPTR,#TF
MOVX @DPTR,A
MOV A,#30h
MOV DPTR,#TD
MOVX @DPTR,A
MOV A,#45h
MOV DPTR,#TC
MOVX @DPTR,A
MOV A,#30h
MOV DPTR,#TT
MOVX @DPTR,A
MOV A,#92h
MOV DPTR,#CONTOR_TEMPO_H
MOVX @DPTR,A
MOV A,#7Ch
MOV DPTR,#CONTOR_TEMPO_L
MOVX @DPTR,A
MOV A,#2Ch
MOV DPTR,#TEMP_LOW11
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#TEMP_LOW12
MOVX @DPTR,A
MOV A,#90h
MOV DPTR,#TEMP_HIGH11
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#TEMP_HIGH12
MOVX @DPTR,A
MOV A,#90h
MOV DPTR,#TEMP_LOW21
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#TEMP_LOW22
MOVX @DPTR,A
MOV A,#58h
MOV DPTR,#TEMP_HIGH21
MOVX @DPTR,A
MOV A,#02h
MOV DPTR,#TEMP_HIGH22
MOVX @DPTR,A
MOV A,#0BCh
MOV DPTR,#TEMP_LOW31
MOVX @DPTR,A
MOV A,#02h
MOV DPTR,#TEMP_LOW32
MOVX @DPTR,A
MOV A,#84h
MOV DPTR,#TEMP_HIGH31
MOVX @DPTR,A
MOV A,#03h
MOV DPTR,#TEMP_HIGH32
MOVX @DPTR,A
MOV A,#2Ch
MOV DPTR,#TEMP_LOW41
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#TEMP_LOW42
MOVX @DPTR,A
MOV A,#90h
MOV DPTR,#TEMP_HIGH41
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#TEMP_HIGH42
MOVX @DPTR,A
;PROGRAMUL PRINCIPAL
PROG_PRINCIPAL: LCALL MODIFICA_AFISAJUL
et10: MOV DPTR,#SEMAFOR_TASTA
MOVX A,@DPTR
CJNE A,#0FFh,et10
CLR A
MOVX @DPTR,A
MOV DPTR,#COD_ID_TASTA
MOVX A,@DPTR
ANL A,#70h
MOV R1,A
;verificam daca s-a apasat tasta 'FC'
CJNE A,#60h,et11
MOV DPTR,#FUNCTION
MOVX A,@DPTR
CJNE A,#04h,et12
MOV A,#01h
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
JMP et10
et12: MOV DPTR,#FUNCTION
MOVX A,@DPTR
INC A
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
JMP et10
;verificam daca s-a apasat tasta 'TM
et11: CJNE A,#50h,DERULARE_PROCES
MOV DPTR,#FUNCTION
MOVX A,@DPTR
CJNE A,#01h,et17
LCALL SETARE_TIMP_FC1
LCALL MODIFICA_AFISAJUL
JMP et10
et17: CJNE A,#02h,et18
LCALL SETARE_TIMP_FC2
LCALL MODIFICA_AFISAJUL
JMP et10
et18: CJNE A,#03h,et10
LCALL SETARE_TIMP_FC3
LCALL MODIFICA_AFISAJUL
JMP et10
DERULARE_PROCES:
; functia de framantare
MOV A,#01h
MOV DPTR,#FUNCTION
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
MOV DPTR,#TEMP_LOW11
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW1
MOVX @DPTR,A
MOV DPTR,#TEMP_LOW12
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW2
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH11
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH1
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH12
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH2
MOVX @DPTR,A
CLR A
MOV DPTR,#STARE
MOVX @DPTR,A
INC A
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
et24: MOV DPTR,#SEMAFOR_TEMPO
MOVX @DPTR,A
CJNE A,#0FFh,et24
CLR A
MOVX @DPTR,A
;micsoram timpul cu o unitate
MOV DPTR,#TF
MOVX A,@DPTR
LCALL MODIFICA_TIMPUL
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
LCALL TEST_TEMPERATURA
MOV DPTR,#TF
MOVX A,@DPTR
CJNE A,#00h,et24
; functia de dospire
MOV A,#02h
MOV DPTR,#FUNCTION
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
MOV DPTR,#TEMP_LOW21
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW1
MOVX @DPTR,A
MOV DPTR,#TEMP_LOW22
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW2
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH21
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH1
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH22
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH2
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#STARE
MOVX @DPTR,A
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
et26: MOV DPTR,#SEMAFOR_TEMPO
MOVX @DPTR,A
CJNE A,#0FFh,et26
CLR A
MOVX @DPTR,A
;micsoram timpul cu o unitate
MOV DPTR,#TD
MOVX A,@DPTR
LCALL MODIFICA_TIMPUL
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
LCALL TEST_TEMPERATURA
MOV DPTR,#TD
MOVX A,@DPTR
CJNE A,#00h,et26
; functia de coacere
MOV A,#03h
MOV DPTR,#FUNCTION
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
MOV DPTR,#TEMP_LOW31
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW1
MOVX @DPTR,A
MOV DPTR,#TEMP_LOW32
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW2
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH31
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH1
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH32
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH2
MOVX @DPTR,A
MOV A,#02h
MOV DPTR,#STARE
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
et27: MOV DPTR,#SEMAFOR_TEMPO
MOVX @DPTR,A
CJNE A,#0FFh,et27
CLR A
MOVX @DPTR,A
;micsoram timpul cu o unitate
MOV DPTR,#TC
MOVX A,@DPTR
LCALL MODIFICA_TIMPUL
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
LCALL TEST_TEMPERATURA
MOV DPTR,#TC
MOVX A,@DPTR
CJNE A,#00h,et27
; functia de tinere la cald
MOV A,#03h
MOV DPTR,#FUNCTION
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
MOV DPTR,#TEMP_LOW41
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW1
MOVX @DPTR,A
MOV DPTR,#TEMP_LOW42
MOVX A,@DPTR
MOV DPTR,#TEMP_LOW2
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH41
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH1
MOVX @DPTR,A
MOV DPTR,#TEMP_HIGH42
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH2
MOVX @DPTR,A
MOV A,#03h
MOV DPTR,#STARE
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
et28: MOV DPTR,#SEMAFOR_TEMPO
MOVX @DPTR,A
CJNE A,#0FFh,et28
CLR A
MOVX @DPTR,A
;micsoram timpul cu o unitate
MOV DPTR,#TT
MOVX A,@DPTR
LCALL MODIFICA_TIMPUL
MOVX @DPTR,A
LCALL MODIFICA_AFISAJUL
LCALL TEST_TEMPERATURA
MOV DPTR,#TT
MOVX A,@DPTR
CJNE A,#00h,et28
MOV A,#04h
MOV DPTR,#STARE
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
JMP PROG_PRINCIPAL
MODIFICA_AFISAJUL:
;digitul pt. liniuta
MOV A,#40h
MOV DPTR,#DIGIT2
MOVX @DPTR,A
;verificam care functie este activa
MOV DPTR,#FUNCTION
MOVX A,@DPTR
CJNE A,#01h,et14
MOV A,#71h ;codul pt. 'F'
MOV DPTR,#DIGIT3
MOVX @DPTR,A
MOV DPTR,#TF
MOVX @DPTR,A
JMP et13
et14: CJNE A,#02h,et15
MOV A,#3Fh ; codul pt. 'D'
MOV DPTR,#DIGIT3
MOVX @DPTR,A
MOV DPTR,#TD
MOVX @DPTR,A
JMP et13
et15: CJNE A,#03h,et16
MOV A,#39h ; codul pt. 'C'
MOV DPTR,#DIGIT3
MOVX @DPTR,A
MOV DPTR,#TC
MOVX @DPTR,A
JMP et13
et16: MOV A,#31h ; codul pt. 'T'
MOV DPTR,#DIGIT3
MOVX @DPTR,A
MOV DPTR,#TT
MOVX @DPTR,A
;afiseaza temperatura
et13: MOV R1,A
ANL A,#0Fh
LCALL BCD_7_SEGMENTE
MOV DPTR,#DIGIT0
MOVX @DPTR,A
LD A,R1
SWAP A
LCALL BCD_7_SEGMENTE
MOV DPTR,#DIGIT1
MOVX @DPTR,A
;ultimii 2 digiti sunt stinsi
CLR A
MOV DPTR,#DIGIT4
MOVX @DPTR,A
MOV DPTR,#DIGIT5
MOVX @DPTR,A
RET
BCD_7_SEGMENTE:
CJNE A,#00h,et1
MOV A,#3Fh
RET
et1: CJNE A,#01h,et2
MOV A,#06h
RET
et2: CJNE A,#02h,et3
MOV A,#5Bh
RET
et3: CJNE A,#03h,et4
MOV A,#4Fh
RET
et4: CJNE A,#04h,et5
MOV A,#66h
RET
et5: CJNE A,#05h,et6
MOV A,#6Dh
RET
et6: CJNE A,#06h,et7
MOV A,#7Dh
RET
et7: CJNE A,#07h,et8
MOV A,#07h
RET
et8: CJNE A,#08h,et9
MOV A,#7Fh
RET
et9: MOV A,#6Fh
RET
SETARE_TIMP_FC1:MOV DPTR,#TF
MOVX A,@DPTR
CJNE A,#30h,et19
MOV A,#40h
MOVX @DPTR,A
RET
et19: CJNE A,#40h,et20
MOV A,#55h
MOVX @DPTR,A
RET
et20: MOV A,#30h
MOVX @DPTR,A
RET
SETARE_TIMP_FC2:MOV DPTR,#TD
MOVX A,@DPTR
CJNE A,#40h,et21
MOV A,#50h
MOVX @DPTR,A
RET
et21: CJNE A,#50h,et22
MOV A,#70h
MOVX @DPTR,A
RET
et22: MOV A,#40h
MOVX @DPTR,A
RET
SETARE_TIMP_FC3:MOV DPTR,#TC
MOVX A,@DPTR
CJNE A,#45h,et23
MOV A,#65h
MOVX @DPTR,A
RET
et23: MOV A,#450h
MOVX @DPTR,A
RET
MODIFICA_TIMPUL:
DEC A
DA A
RET
TEST_TEMPERATURA:
MOV A,P1
MOV DPTR,#TEMP11
MOVX @DPTR,A
CLR A
MOV DPTR,#TEMP12
MOVX @DPTR,A
MOV DPTR,#TEMP11
MOVX A,@DPTR
CLR C
RLC A
MOV R1,A
CLR A
RLC A
MOV R2,A
MOV A,R1
RLC A
MOVX @DPTR,A
MOV A,R2
RLC A
MOV DPTR,#TEMP12
MOVX @DPTR,A
MOV DPTR,#FUNCTION
MOVX A,@DPTR
CJNE A,#03h,et30
MOV DPTR,#ST_REZ2
MOVX A,@DPTR
CJNE A,#01h,et31
MOV DPTR,#TEMP12
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH2
MOV R1,A
MOVX A,@DPTR
MOV 00h,A
MOV A,R1
CJNE A,00h,et34
JC et34
JMP et35
et34: MOV DPTR,#TEMP11
MOVX A,@DPTR
MOV DPTR,#TEMP_HIGH1
MOV R1,A
MOVX A,@DPTR
MOV 00h,A
MOV A,R1
CJNE A,00h,et35
JC et36
JMP et35
et35: MOV A,#05h
MOV DPTR,#STARE
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#SEM_CHANGE
MOVX @DPTR,A
et36: RET
; GESTIUNE AFISAJ MULTIPLEXAT
; TEST CONTOR_AFISAJ
MOV DPTR,#CONTOR_TIMER
MOVX @DPTR,A
CJNE A,00h,et50
MOV A,#01h
MOV DPTR,#CONTOR_TIMER
MOVX @DPTR,A
CLR A
MOV DPTR,#2001h
MOVX @DPTR,A
MOV DPTR,#SEM_CHANGE
MOVX A,@DPTR
CJNE A,00h,et51
CALL INTERPRETARE_STARE
et51: MOV DPTR,#DIGIT
MOVX A,@DPTR
CJNE A,00h,et52
MOV A,#04h
MOVX @DPTR,A
MOV DPTR,#DIGIT0
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#01h
MOV DPTR,#2001h
MOVX @DPTR,A
JMP TASTATURA
et52: CJNE A,01h,et53
MOV DPTR,#DIGIT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
MOV DPTR,#DIGIT1
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#02h
MOV DPTR,#2001h
MOVX @DPTR,A
JMP TASTATURA
et53: CJNE A,02h,et54
MOV DPTR,#DIGIT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
MOV DPTR,#DIGIT2
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#04h
MOV DPTR,#2001h
MOVX @DPTR,A
JMP TASTATURA
et54: CJNE A,03h,et55
MOV DPTR,#DIGIT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
MOV DPTR,#DIGIT3
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#08h
MOV DPTR,#2001h
MOVX @DPTR,A
JMP TASTATURA
et55: CJNE A,04h,et56
MOV DPTR,#DIGIT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
MOV DPTR,#DIGIT4
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#10h
MOV DPTR,#2001h
MOVX @DPTR,A
JMP TASTATURA
et56: MOV DPTR,#DIGIT
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
MOV DPTR,#DIGIT5
MOVX A,@DPTR
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#20h
MOV DPTR,#2001h
MOVX @DPTR,A
TASTATURA: MOV DPTR,#PRES
MOVX A,@DPTR
MOV R1,#22h
CJNE A,#00h,et69
MOV DPTR,#TASTA_PRES
MOVX A,@DPTR
CJNE A,#00h,et70
MOV DPTR,#00h
MOVX A,@DPTR
MOVX @R1,A
MOVX A,@R1
ANL A,#7Fh
MOV R3,A
ANL A,#70h
CJNE A,#70h,et71
MOVX A,@DPTR
SETB C
RLC A
MOVX @DPTR,A
CJNE A,#0EFh,et72
MOV A,#0FEh
MOVX @DPTR,A
RET
et71: MOV A,R3
MOV DPTR,#MEM_TASTA
MOVX @DPTR,A
MOV DPTR,#CONTOR_PRES
MOV A,#08h
MOVX @DPTR,A
MOV DPTR,#TASTA_PRES
MOV A,#01h
MOVX @DPTR,A
RET
et70: MOV DPTR,#CONTOR_PRES
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
CJNE A,#00h,et72
MOVX A,@R1
ANL A,#7Fh
MOV R2,A
MOV DPTR,#MEM_TASTA
MOVX A,@DPTR
CJNE A,02h,et73
MOV DPTR,#COD_ID_TASTA
MOVX @DPTR,A
MOV DPTR,#SEMAFOR_TASTA
MOV A,#01h
MOVX @DPTR,A
MOV DPTR,#PRES
MOVX @DPTR,A
MOV DPTR,#TASTA_PRES
CLR A
MOVX @DPTR,A
RET
et73: MOV DPTR,#TASTA_PRES
CLR A
MOVX @DPTR,A
RET
et69: MOV DPTR,#TASTA_REL
MOVX A,@DPTR
CJNE A,#00h,et74
MOVX A,@R1
ANL A,7Fh
CJNE A,#7Fh,et72
MOV DPTR,#CONTOR_PRES
MOV A,#08h
MOVX @DPTR,A
MOV DPTR,#TASTA_REL
MOV A,#01h
MOVX @DPTR,A
RET
et74: MOV DPTR,#CONTOR_PRES
MOVX A,@DPTR
DEC A
MOVX @DPTR,A
CJNE A,#00h,et72
MOVX A,@R1
ANL A,7FH
CJNE A,#7Fh,et75
MOV DPTR,#PRES
CLR A
MOVX @DPTR,A
MOV DPTR,#TASTA_REL
MOVX @DPTR,A
RET
et75: MOV DPTR,#TASTA_REL
CLR A
MOVX @DPTR,A
et72: RET
END
INTERPRETARE_STARE:
MOV DPTR,#STARE
MOVX A,@DPTR
CJNE A,#00h,et60
MOV A,#0Ah
MOV DPTR,#2003h
MOVX @DPTR,A
MOV A,#05h
MOV DPTR,#2000h
MOVX @DPTR,A
MOV A,#00h
MOV DPTR,#2003h
MOVX @DPTR,A
RET
et60: CJNE A,#01h,et61
MOV A,#08h
MOV DPTR,#2003h
MOVX @DPTR,A
MOV A,#00h
MOV DPTR,#2000h
MOVX @DPTR,A
MOV DPTR,#2003h
MOVX @DPTR,A
RET
et61: CJNE A,#02h,et62
MOV A,#04h
MOV DPTR,#2003h
MOVX @DPTR,A
MOV A,#02h
MOV DPTR,#2000h
MOVX @DPTR,A
CLR A
MOV DPTR,#2003h
MOVX @DPTR,A
RET
et62: CJNE A,#03h,et63
MOV A,#04h
MOV DPTR,#2003h
MOVX @DPTR,A
MOV A,#00h
MOV DPTR,#2000h
MOVX @DPTR,A
MOV DPTR,#2003h
MOVX @DPTR,A
RET
et63: CJNE A,#04h,et64
MOV A,#02h
MOV DPTR,#2003h
MOVX @DPTR,A
MOV A,#00h
MOV DPTR,#2000h
MOVX @DPTR,A
MOV DPTR,#2003h
MOVX @DPTR,A
RET
et64: MOV DPTR,#FUNCTION
MOVX A,@DPTR
CJNE A,#03h,et65
MOV DPTR,#ST_REZ2
MOVX A,@DPTR
CJNE A,#01h,et66
CLR A
MOVX @DPTR,A
et66: MOV A,#01h
MOVX @DPTR,A
RET
et65: MOV DPTR,#ST_REZ1
MOVX A,@DPTR
CJNE A,#01h,et67
CLR A
MOVX @DPTR,A
et67: MOV A,#01h
MOVX @DPTR,A
RET
Politica de confidentialitate |
.com | Copyright ©
2024 - Toate drepturile rezervate. Toate documentele au caracter informativ cu scop educational. |
Personaje din literatura |
Baltagul – caracterizarea personajelor |
Caracterizare Alexandru Lapusneanul |
Caracterizarea lui Gavilescu |
Caracterizarea personajelor negative din basmul |
Tehnica si mecanica |
Cuplaje - definitii. notatii. exemple. repere istorice. |
Actionare macara |
Reprezentarea si cotarea filetelor |
Geografie |
Turismul pe terra |
Vulcanii Și mediul |
Padurile pe terra si industrializarea lemnului |
Termeni si conditii |
Contact |
Creeaza si tu |