Sunteți pe pagina 1din 19

SISTEM ANTI-EFRACTIE

1. Descrierea proiectului
Sistemul anti-efractie prezentat in aceasta lucrare functioneaza pe baza unui microcontroller din famlia 8051. Acesta se adreseaza protectiei impotriva furtului automobilelor sau patrunderii neautorizate in zone interzise. Sistemul este construit cu urmatoarele componente: un microcontroller din familia 8051 (MCS8051 8 senzori de miscare de tip !rollin" ball# o tastatura cu 1$ taste (contine cifrele 0..% si tastele &'( si &)( un difuzor sau sirena (buzzer care va emite un semnal sonor la alarmarea senzorilor 8 diode luminiscente (*+,-uri 8 rezistoare de --0-./0 si $ rezisotare de 1M $ surse de tensiune de %01 respectiv 50

2. Modul de functionare
Sistemul de alarma are - stari: Starea inactiva in care se citesc intrarile si se asteapta apasarea tastelor &)( sau &'(2 daca se apasa tasta &)( se verifica autenticitatea parolei iar daca se apasa &'( parola poate fi sc3imbata prin introducerea parolei vec3i o data la inceput urmata de cea noua1 care va fi introdusa de $ ori. ,upa sc3imbarea parolei sistemul ramane in starea inactiva. *a apasarea fiecarei taste se va aprinde cate un *+, pentru fiecare cifra din parola. Starea activa in care se intra dupa apasarea tastei &)( si introducerea corecta a parolei. 4n aceasta stare se activeaza senzorii si se aprind toate cele 8 *+,-uri. ,aca senzorii sunt alarmati atunci se intra in starea alarmata. Se asteapta $0 de secunde pentru o eventuala dezactivare a sistemului2 daca se introduce parola sistemul trece in stare inactiva iar daca nu se introduce parola sistemul trece in starea alarmata. Starea alar!ata in care se a5un"e datorita alarmarii unuia sau mai multor senzori. Are loc activarea sirenei si emiterea semnalului sonor. *+,-ul corespunzator senzorului alarmat clipeste. (e6: daca s-a alarmat senzorul - va clipi al treilea *+, . Se asteapta apasarea tastei &)( si introducerea parolei. ,aca aceasta este valida sistemul trece in starea activa1 altfel va trece in starea alarmata.

". Dia#ra!a starilor


Stare Inactiva$ Citeste 4ntrarile: S-a apasat )7 ,A: Citeste 4ntrarile (81 9tastatura S-au apasat 8 taste7 ,A: +ste parola corecta7 ,A: Stare Activa :;: Stare Inactiva S-a apasat '7 ,A: Citeste 4ntrarile (81 9tastatura S-au apasat 8 taste7 2 parola vec3e ,A: +ste parola corecta7 ,A: Citeste 4ntrarile S-au apasat 8 taste72 parola noua ,A: memoreaza primul set S-au apasat 8 taste72 parola noua ,A: memoreaza al doilea set Compara seturile: Sunt identice7 ,A: Sc3imba parola :;: Stare Inactiva :;: <ump Stare 4nactiva Stare Activa$ %ar!ata& Activeaza Senzorii (80 Aprinde 8 *eduri Citeste 4ntrarile: S-au alarmat senzorii7 ,A: Stare Alar!ata S-a apasat )7 ,A: Citeste 4ntrarile (81 9tastatura S-au apasat 8 taste7 ,A: +ste parola corecta7 ,A: Stare Inactiva :;: Stare Alar!ata Stare Alar!ata$ Activeaza Sirena =lin> *ed Alarmat Citeste 4ntrarile (81 9 tastatura S-a apasat )7 ,A: Citeste 4ntrarile (81 9tastatura S-au apasat 8 taste7 ,A: +ste parola corecta7

,A: Stare Inactiva :;: Stare Alar!ata

". Descrierea !icrocontrollerului MCS'()1


8rintre caracteristicile microcontrolllerului MCS8051 se numara: . porturi de cate 8 biti posibilitati de procesare pe un bit ?.@ spatiu de memorie pentru pro"rame ?.@ spatiu de memorie de date .@ octeti de memorie de pro"ram on-c3ip 1$8 octeti de AAM on-c3ip -$ de linii de intrare-iesire1 bidirectionale si adresabile individual $ numaratoare pe 1? biti sistem de intreruperi vectorial1 cu doua nivele de prioritati oscillator cu cuart on-c3ip Boate ec3ipamentele CCMDS sunt complet compatibile cu microcontrollerul 8051 si pentru a beneficia din plin de prioritatile de conservare a ener"iei ale circuitelor CMDS1 procesoarele 8051 dispun de coua moduri de consum redus de ener"ie: modul !4dle# in care ;C8 este oprita1 in timp ce AAM-ul si alte perifierice on-c3ip continua sa functioneze. Astfel consumul de current este redus cu 15E fata de modul de operare in care toate componentele sunt active. Modul !8oFer ,oFn# in care toate activitatile on-c3ip sunt suspendate. Memoria AAM on-c3ip isi pastreaza continutul. 4n acest mod1 curentul absorbit la intrare este de obicei mai mic de 10A. Organizarea memoriei in produsele din familia MCS51 Boate dispozitivele din familia MCS51 au spatii de adrese separate pentru memoria de date sic ea de pro"ram. Acest fapt permite ca memoria de date sa fie accesata prin adrese de 8 biti si din acest motiv datele pot fi mai usor stocate si manipulate de procesorul pe 8 biti. Cu toate acestea1 adrese de 8 biti pot fi "enerate prin intermediul re"istrului ,8BA (!data pointer# re"ister . Memoria de pro"ram poate fid oar citita. 8ot e6ista pana la 1?@ octeti de memorie1 iar variantele constructive cu memorii ADM sau +8ADM1 cei mai putin semnificativ .@1 8@ sau 1? @octeti se "asesc on-c3ip. 4n variantele constructive fara ADM1 toata memoria de pro"ram este e6terna. Memoria de date ocupa un spatiu de adrese complet diferit fata de memoria de pro"ram. 8ot fi adresati pana la ?.@ octeti de memorie AAM e6terna. ;C8 "enereaza semnalele AG (read si GA (Frite necesare pentru a accesa memoria e6terna. Setul de instructiuni MCS51

Boate componentele familiei MCS51 pot e6ecuta acelasi set de instructiuni. Setul de instructiuni a fost optimizat pentru aplicatii de automatizare. A fost prevazuta o varietate de moduri de adresare rapida a memoriei AAM interne pentru a usura operatiile pe un octet ale structurilor mici de date. Setul de instructiuni usureaza lucrul cu variabilele pe un bit1 considerate un tip de date separate1 lucru foarte util pentru operatiile lo"ice.

Program Status Word 8ro"ram Staus Gord este o colectie de bit care arata starea curenta a procesorului. +ste localizat in memorie1 in spatiul destinat pentru SHA (special Hunction Ae"isters 9 Ae"istrii cu finctii speciale . Acest re"istru contine bitii de CarrI1 Au6uliarI CarrI (folosit in operatiile cu =C, 1 DverfloF1 8aritI1 doi biti pentru selectarea unuia dintru cele . blocuri de cate 8 re"istri folositi precum si doi bit a caror functionalitate poate fi stabilita de catre utilizator. =itul CarrI1 pe lan"a functia de memorare a transportului in operatiilr aritmetice1 indeplinestre si rolul de !accumulator# pentru cateva operatii booleene. =itii AS0 si AS1 sunt folositi pentru a selecta unul din cele patru "rupuri de cate 8 re"istri. Selectia unuia dintre aceste blocuri de re"istri este facuta in momentul e6ecutiei1 pe baza acestor biti. =itul de paritate (paritI arata numarul de biti avand valoarea 1 din Acumulator. Cand bitul de paritae este 1 inseamna ca in Acumulator se "aseste un numar impar de biti avand valoarea 1 lo"ic. Modurile de adresare Adresarea indirecta 9 in acest mod operandul este specificat intrun camp de8 bit din cidul instructiunii. :umai memoria AAM interna si SHA-urile pot fi adresate astfel. Adresarea indirecta 9 in instructiune este specificat un re"istru care centime adresa la care se "aseste operandul. Atat memoria AAM interna cat si cea e6terna pot fi adresate astfel. Ae"istrul care contine adresa operandului (pe 8 biti trebuie sa fie A0 sau A1 sau Stac> 8ointer. 8entru adresa pe 1? biti nu se poate folosi decat ,8BA (,ata 8ointer Ae"ister Ae"istrii 9 microcontrellerele din familia MCS51 au 8 re"istrii de lucru A0JA/ care pot fi accesati prin anumite instructiuni care au - biti special prevazuti pentru aceasta in codu oiperatiei. 0alorile imediate 9 o valoare constanta poate sa urmeze imediat dupa coduloperatiei in memoria de pro"ram. +6emplu: MD0 A1'100 incarca acumulatorul cu valoarea zecimala 100. Acelasi lucru poate fi specificat si prin valoarea 3e6a ?.C. Adresarea inde6ata 9 numai memoria pro"ram poate fi accesata astfel1 si numai pentru citire. ;n re"istru pe 1?biti (fie ,8BA1 fie 8ro"ram Counter reprezinta baza1 iar Acumulatorul reprezinta indicele. ;n alt tip de adresare inde6ata este folosit in cazul instructiunilor da salt conditionat. 4n acest caz adresa este calculata insumand =ase 8ointer-ul cu continutul Acumulatorului. Microcontrolerrele din familia MCS51 dispun de o "ama variata de instructiuni. Aceste instructiuni pot fi impartite in clase1 dupa cum urmeaza:

instructiuni aritmetice: A,,1 A,,C1 S;==1 4:C1 ,+C1 M;*1 ,40 si ,A (,ecimal Ad5ust instructiuni lo"ice: A:*1 DA*1 KA*1 CA*1 C8*1 A*1 A*C1 AAC1 SGA8 instructiuni de transfer de date: MD01 8;SC1 8D81 KCC1 KCC,1 MD0K1 MD0C instructiuni booleene: A:*1 DA*1 MD01 C*A1 S+B=1 <C1 <=1 <:=1 <=C instructiuni de salt: <M81 CA**1 A+B1 A+B41 :D8 instructiuni de salt conditionat: <L1 <:L1 ,<:L1 C<:+. Baza de timp pentru procesor Boate procesoarele din familia MCS51 sunt prevazute cu un oscillator on-c3ip care poate fi folosit pentru a furniza semnalul de ceas necear ;C81 insa se poate folosi si un oscilator e6tern1 prin utilizarea pinilor KBA*1 si KBA*$. Sistemul de intreruperi 8rocesoarele din familia MCS51 ofera 5 surse de intreruperi: $ intreruperi esterne1 $ intreruperi de ceas si una pentru portul serial. ACB40AA+A S4SB+M;*;4 ,+ 4:BA+A;8+A4 Hiecare din sursele de intreruperi poate fi activate sau dezactivata setand sau resetand un bit din SHA1 numit 4+ (4nterrupt +nable . Acest re"istru maio contine si un bit are dezactiveaza toate intreruperile simultan. CMS= CM8S= +A +S +B1 +K1 +B0 +K0 +A 4+./ dezactiveaza toate intreruperile (daca +AM0 nici o intrerupere nu va fi luata in considerare +S 4+.. bitul pentru intreruperea "enerate de portul serial +BN 4+.- intreruperea "enerate de Bimer1 DverfloF +KN 4+.$ intreruperea e6terna 1 :40+*+ ,+ 8A4DA4BAB+ Hiecarei din sursele de intrerupere 4 se poate atribui1 in mod individual1 unul dintre cele doua nivele de prioritate prin setarea sau resetarea unui bit din SHA numit 48 (4nterrupt 8rioritI CMS= CM8S= 8S 8B1 8K1 8B0 8K0 =it de prioritateM1 atribuie prioritate mai mare =it de prioritateM0 atribuie prioritate mai mica

D intrerupere cu prioritate mai mica poate fi intrerupta de o alta cu prioritate mai mare1 darn u si de una cu acelasi nuvel de prioritate. D intrerupere cu un nivel de prioritate mare nu poate fi intrerupta de nici un alt eveniment. ,aca doua intreruperi cu nivele diferite de prioritate se produc simultan1 este tratata mai intai intreruperea cu un nivel de prioritate mai mare. ,aca ambele interuperi au acelasi nivel de prioritate1 un mec3anism intern determina care dintre cele doua va fi servitama inatai. ;n alt treilea nivel de prioritati poate fi simulate prin softFare astfel: Mai intai1 intreruperile care vor avea un nivel de prioritate mai mare ca 1 li se seteaza nivelul de prioritate la 1 in re"istrul 48 (4nterrupt 8rioritI . Autinele de tratare a intreruperilor de nivel 1 care vor putea fi intrerupte de intreruperi cu prioritatea $ vor contine urmatorul cod: 8;SC 4+ MD0 4+1 'MAS@ CA** *A=+* ))))))))))))))) (rutina de tratare a erorii ))))))))))))))) 8D8 ie A+B *A=+*: A+B4 4mediat ce o intrerupere de nivel 1 a fost declansata1 re"istrul 4+ (4nterrupt +nable este redefinit estfel incat sa fie dezactivate toate intreruperile1 cu e6ceptia celor de !nivel $#. Apoi1 prin apelul procedurii *A=+* se e6ecuta instructiunea A+B4 care reseteaza bistabilul care indica faptul ca o intrerupere este in curs de srvire. 4n acest moment1 toate intreruperile 8D8 se reface continutul initial al re"istrului 4+. A8oi instructiunea A+B este folosita in locul instructiunii A+B4 pentru a inc3eia rutina de tratare a intreruparii. :oul cod mai adua"a numai 10 s (la 1$M3z la timpul necesar pentru tratarea unei intreruperi de nivel 1. SCD:: A+O4SBA;* 8+:BA; CD:BAD*;* 8DAB;*;4 S+A4A* CMS= CM8S= SM, SM1 SM$ A+: B== A== B1 A4

SM0 SCD:./ specifica modul de lucru SM1 SCD:.? specifica modul de lucru SMP SCD:.5 activeaza functia de comunicatie multiprocessor in modurile de lucru $QA+: SCD:.. SetatQAesetat prin softFare pentru a activeQdezactiva receptia B=8 SCD:.- un al %-lea bit va fi transmis in modul de lucru $ sau A=8 SCD:.$ in modurile de lucru $ sau - va avea valoarea celui de-al %-lea bit primit

B4 SCD:.$ bitul este setat la aparitia unei intreruperi datorate transmiterii unui caracter A4 SCD:.0 bitul e setat la aparitia unei 5ntreruperi datorate receptionarii unui caracter. SM0 0 0 1 1 SM1 0 1 0 1 MD, ,+ *;CA; 0 1 $ ,+SCA4+A+ S3ift Ae"ister 8-bit ;AAB %-bit ;AAB %-bit ;AAB =aud Aate H.oscQ1$ 0ariabila f.oscQ? sau Q -$ 0ariabila

*. Structura fi+ica
Am vazut ca micricontrollerul MCS51 are . porturi a cate 8 biti. Astfel1 facem urmatoarele le"aturi: cei 8 senzori se lea"a la portul 0 (80.0 - 80./ tastatura se lea"a la / biti de la portul 1 (81.0 9 81.? la cel de-al 8-lea bit al portului 1 (81./ se lea"a sirena (buzzer la portul $ (8$.0 9 8$./ le"am cele 8 leduri la portul - sunt le"ate cele $ intreruperi 4:B0 si 4:B11 corespunzatoare senzorilor1 respectiv tastaturii1 prin intermediul unor diode. Conectarea LED-urilor Cele 8 *+,-uri sunt alimentate la 50 si se conecteaza la bitii portului $ prin intermediul unor rezistente de valoare --0-./0 deoarece un *+, straluceste atunci cand este strabatut de un curent de intensitate de 10$0mA. Conectarea tastaturii 4mplementarea unei tastaturi cu 1$ taste la uni procesor 8051 se face prin asezarea pe patru randuri si trei coloane a tastelor in felul urmator:

Aandurile sunt iesiri1 iar coloanele intrari. ,aca este apasata o tasta si randul este activat (loF atunci si coloana este pe nivel inferior. Rn "eneral tastele "enereaza multe pulsuri Sn timp ce este apasata. ,e aceea este nevoie de a scana de doua sau mai multe ori cu pauza Sntre fiecare scanare1 si numai daca rezultatul scanarii este identic tasta va fi acceptata. Oraficul pentru comportarea pro"ramului la apasarea tastelor este:

Codul de mai sus poate fi e6tins pentru orice numar de taste necesar prin implementarea de noi randuri si coloane. ,aca se doreste detectare a doua taste care au fost apasate simultan1 numai cate un sin"ur rand se poate trece pe nivel 5os odata1 nefolosindu-se instrucTiunea !5bc#1 ea fiind Snlocuita cu urmatorul cod: MD0 a1p1 A* a MD0 p11a reTinandu-se astfel numarul primei taste1 dupa care se continua cautarea urmatoarei taste. ,ro#ra!ul ur!ator returnea+a tasta care a fost apasata$ :AM+ roF1 roF$ roFcol0 col1 col$ tastatura bit p1.0 bit p1.1 bit p1.$ bit p1.bit p1.. bit p1.5 2 variabila roF1 este asi"nata pinului p1.0

2intrari

dse" at -03 scan1: ds 1 old>eI: ds 1 cse"

2reTine prima scanare 2reTine tasta vec3e

2 2este apelata cu decala5 (de e6emplu la fiecare 1Q?.sec 2Rntoarce : A0 M 0: nici o sc3imbare 2 A0 M 1: toate tastele sunt libere 2 A0 M $ .. 1-: numarul tastei care a fost apasata 2 >eIscan: orl p11 '00111111b2 Seteaza liniile de taste pe nivel 2Snalt mov A01 '1>s1: 5nb col0 >s$ 2cauta daca o tasta a fost apasata 2(MloF dec A0 5nb col1 >s$ dec A0 5nb col$ >s$ dec A0 5bc roF1 >s1 2repeat

5bc roF$ >s1 5bc roF- >s1 >s$: 6c3 A01 scan1 c5ne A01 scan1 >sc5ne A01 old>eI >s. clr A0 ret mov old>eI1 A0 ret end

2until 2toate randurile sunt loF 2A0: 1Mnici o tasta1 $ .. 1- numarul tastei 2comparare 2compara daca a fost apasata o tasta noua 2nici o sc3imbare 2reTine vec3ea tasta 2A0 M numarul tastei apasate

>s-: >s.:

Conectarea senzorilor Cei 8 senzori sunt alimentati la o tensiune de %0 prin intermediul unor rezistente de 1M si se conecteaza direct la bitii portului 801 ca in fi"ura urmatoare:

8ro"ramul care returneaza numarul senzorului alarmat este urmatorul: :AM+ SBAC@ interna senzori S+OM+:B 4,ABA2 stiva nu se poate "asi decat in memoria

AS+O SBAC@ ,S 152 spatiu pentru stiva 2 rezervam spatiu in AAM pentru se"ementul de date ,ABAUS+O S+OM+:B ,ABA AS+O ,ABAUS+O Start: MD0 A.180 <M8 Start

). ,ro#ra!area !icrocontrollerului
:AM+ SBAC@ interna antiefractie 2 numele pro"ramului S+OM+:B 4,ABA2 stiva nu se poate "asi decat in memoria

AS+O SBAC@ ,S 152 spatiu pentru stiva 2 rezervam spatiu in AAM pentru se"ementul de date ,ABAUS+O S+OM+:B ,ABA AS+O ,ABAUS+O tastastar: ,S .2 are valoarea tastei ) tastadiez: ,S .2 are valoarea tastei ' tasta1: ,S .2 adresa la care se afla prima tasta DAO 03: <M8 Aeset

DAO 0-32 Call Senzori DAO 1-3 Call Bastatura

Reset$ MD0 A1032 MD0 513V.)A1A <M8 StareU4nactiva

2incar parola de fabrica 1$-.5?/8

Stare-Inactiva$ MD0 tastastar1'1$ 2 incarc variabila tastastar cu valoare tastei ) MD0 tastadiez1'10 2 valoare tastei ' MD0 tasta11513 2adresa la care se afla parola 2 atata timp cat nu a fost apasata tasta )1 microcontrollerul intra in bucla de asteptare .oopStar$ MD0 A11 A0 C<:+ A11 tastastar1*oop,iez 2 incarc re"istrul accumulator cu valoare 0 2 re"istrul A va fi folosit pentru a verifica daca au fost apasate 8 taste MD0 A1'02

2re"istrul A$ va fi folosit pentru verificare corectitudinii parolei (1 9corect1 0 9 "resit 2 in re"istrul A1 este pusa valoare tastei apasate 2"enerata de inreruperea e6t.1 .oopS2$ MD0 MD0 C<:+ o tasta <M8 A$1'1 A11 A0 A11'01*oopS*oopS$

2daca A1 este diferit de 0 s-a mai apasat 2daca nu a fost apasata o tasta1 revin

.oopS": C<:+ Ptasta1V.)A1A11"resit 2daca tasta este "resita sar la etic3eta "resit 4:C A2 MD0 8$1A 2aprind cate un *+, la fiecare tasta apasata C<:+ A1'/1*oopS$ 2daca nu au fost apasate 8 taste repet bucla loopS$ C<:+ A$1'11StareU4nactiva 2daca parola nu e buna1 revin la inceput <M8 StareUActiva2 .oopDie+$ C<:+ A11 tastadiez1 *oopStar MD0 A1'02 2re"istrul A$ va fi folosit pentru verificare corectitudinii parolei (1 9corect1 0 9 "resit .oopD2$ MD0 MD0 C<:+ <M8 A$1'1 A11 A0 A11'01*oop,*oop,$

2daca A1 este diferit de 0 s-a mai apasat o tasta 2daca nu a fost apasata o tasta1 revin

.oopD": C<:+ Ptasta1V.)A1A11Oresit 2daca tasta este "resita sar la etic3eta "resit 4:C A2 MD0 8$1A 2aprind cate un *+, la fiecare tasta apasata C<:+ A1'/1*oop,$ 2daca nu au fost apasate 8 taste repet bucla *oop,$ C<:+ A$1'11StareU4nactiva 2daca parola nu e buna1 revin la inceput .oop,assN$ C*A A2 MD0 A11A02

C<:+ A11'01*tasta1 tasta <M8 .tasta1$ 4:C MD0 MD0 C<:+ *oop8ass:

2daca nu sunt e"ale a fost apasata o noua 2daca nu a fost apasate 8 taste1 revin

A 2incrementez A 9contor taste apasate $13V.)A1A1 2salvez prima tasta 8$1A 2aprind ledurile pe rand A1'/1*oop8ass: 2daca nu a fost apasate 8 taste1 revin /introduc parola din nou 2daca nu sunt e"ale a fost apasata o noua 2daca nu a fost apasate 8 taste1 revin

.oop,assN2$ C*A A2 MD0 A11A02 C<:+ A11'01*tasta$ tasta <M8 *oop8ass: .tasta2$ 4:C MD0 MD0 C<:+ C*A A MD0 A-11

A 2incrementez A 9contor taste apasate .13V.)A1A1 2salvez prima tasta 8$1A 2aprind ledurile pe rand A1'/1*oop8ass: 2daca nu a fost apasate 8 taste1 revin 2A- va fi 0 daca parola nu este corecta

Co!par$ C<:+ $13V.)A1.13V.)A1Oresit$ 2daca difera-"resit 4:C A2 C<:+ A1'/1Compar 2buclez pana compar toata parola C<:+ A-1'01StareU4nactiva inactiva C*A A 2daca parola a fost introdusa "resit-stare 2memorez noua parola

Me!orare$ MD0 513V.)A1$13V.)A 2copiez noua parola la 513 4:C A C<:+ A1'/1Memorare 2bucla pana copiez noua parola <M8 StareU4nactiva 2revin StareaU4nactiva 2daca o tasta este "resita A$M02

0resit$ MD0 A$1'0 A+B

0resit2$ MD0 A-102 A+B 2in re"istrul A. semnalez alarmarea unui senzor prin intrerupearea e6terna 0 2in re"istrul A0 semnalez o tasta apasata Stare-Activa$ MD0 8$111111111b 2aprind *+,-urile MD0 81./1'0 2opresc sirena daca era pornita la tranzitia din stareA 1ucla$ C<:+ A.1'01StareaUAlarmata C<:+ A01tastastar1,ezactivare <M8 =ucla De+activare$ MD0 A1'0 MD0 A$1'1 .oopD2$ MD0 A11 A0 C<:+ A11'01*oop,<M8 *oop,$

2daca A1 este diferit de 0 s-a mai apasat o tasta 2daca nu a fost apasata o tasta1 revin

.oopD": C<:+ Ptasta1V.)A1A11"resit 2daca tasta este "resita sar la etic3eta "resit 4:C A2 MD0 8$1A 2aprind cate un *+, la fiecare tasta apasata C<:+ A1'/1*oop,$ 2daca nu au fost apasate 8 taste repet bucla loop,$ C<:+ A$1'11StareUAlarmata 2daca parola nu e buna1 pornesc alarma <M8 StareU4nactiva Starea-Alar!ata$ MD0 81./1'1 MD0 8$1A. MD0 A1'0 MD0 A$1'1 2activez alarma 2aprind ledul alarmat 2pre"atesc sa numar tastele apasate

1uclaA$ C<:+ A01tastastar1*oopA dezact. <M8 =uclaA2

2daca a fost apasat ) -incep procedura de

.oopA$ MD0 MD0 C<:+ <M8 .oopA": C<:+ "resit 4:C MD0 C<:+ loopA C<:+ <M8

8$103 A11 A0 A11'01*oopA*oopA

2stin" ledurile pt a le aprinde pt fiecare tasta ap 2daca A1 este diferit de 0 s-a mai apasat o tasta 2daca nu a fost apasata o tasta1 revin

Ptasta1V.)A1A11"resit 2daca tasta este "resita sar la etic3eta A2 8$1A A1'/1*oopA 2aprind cate un *+, la fiecare tasta apasata 2daca nu au fost apasate 8 taste repet bucla

A$1'11StareUAlarmata 2daca parola nu e buna1 pornesc alarma StareUActiva

2. Consideratii si Detalii de I!ple!entare


De3ouncin#$ *a trecere dintr-o stare in alta a unui sFitc31 tranzitia nu are loc intotdeauna direct1 fluent. Adesea au loc o serie de sc3imbari care au loc inainte ca dispozitivul sa-si termine tranzitia. 4n acest caz1 comutatorul (sFitc3 intra in starea de !bouncin"#. Botusi1 un asemenea comportament poate fi observat. ;neori salutul nere"ulat poate fi filtrat cu a5utorul unor filtre analo"ice si a unui comparator cu ciclu de 3isterezis. ,in pacate1 aceasta metoda nu functioneaza intotdeauna si in plus costul 3ardFare nu se 5ustifica1 de aceea se apeleaza la o alta metoda1 softFare1 de control al evenimentului. Soft4are De3ounce$ Cand este detectata o sc3imbare a starii1 rutina va numara de la 1 la . sau 8 ori starea sFitc3ului pentru a verifica daca sc3imbarea de stare e valida si nu a fost un z"omot. ,aca sunt multe intrari care sunt de verificat1 rutina va fi in"reunata. ;rmatorul model de pro"ram va realiza debounce pt 8 intrari (poate fi folosita pt cei 8 senzori sau / intrari de la taste la o rata de . ori. Cei 8 contori de stare au dimensiunea de $ biti si sunt decrementati. 2 debounce 2 2 D intrare este considerata stabila daca nu si-a sc3imbat stare de . 2 ori la rand 2 2 Cei 8 contori de cate $-biti numara . samplerul. Atata timp cat nu este nici o

2modificare1 contorii sunt in starea de reset 00b. Cand o sc3imbare este 2detectata in sampleul curent si cel filtrat1 contorii sunt incrementati. Secventa de 2numarare este in 00101110111100... Cand contorii trec de la 11b la 00b1 stare 2este modificata si consideram ca avem o tranzitie. ,aca intre timp intrarea se 2sc3imba1 contorii sunt resetati. 2csa 9 samplerul curent MD0H S=1G 2G M = KDAGH SA1H 2AV M A W = CDMH S=1H 2=V M X= ,ebounce: MD0H KDAGH CDMH MD0H KDAGH A:,GH A:,GH MD0H 4DAGH A:,GH KDA*G A:,GH 4DAGH A+B;A: Diode la intreruperea e5terna$ 4n implementarea pro"ramului principal1 pentru detectarea apasarii unei taste sau declansarea unui senzor1 se folosesc intreruperile e6terne. 8entru a declansa intreruperea e6terna (1 si 0 s-au le"at senzoriiQ tastele direct atat la intrarea Micro Controllerului cat si pe 4nt 0 si 4nt 1. ,iodele au fost folosite pentru a limita directia de circulatie a semnalului. Astfel declansarea unui senzor nu initializezaQsimuleza pe portul de intrare a Micro 9 Controllerului si declansarea celorlalti senzori. countU=1G countUA1H countU=1H csa1G cva1G countU=1H countUA1H countU=1G countUA1G cva1H 06ff csa1G cva1H 24ncrementam contorii 2comparam daca au aparut modificari1 2resetam daca nu au aparut modificari 2determinam starea contorului 2salvam starea bitilor filtrati 2rescriem bitii care nu s-au sc3imbat

6. .ista co!pleta de co!ponente '. Sc7e!a 3loc

Sc3ema bloc a sistemului anti-efractie este urmatoarea:

8. 1i3lio#rafie 80C51 HamilI Arc3itecture 9 83ilips Semiconductors 80C51 familI 8ro"rammer(s Ouide and 4nstruction Set 9 83ilips Semiconductors 80C51 familI ,ardFare ,escription 9 83ilips Semiconductors FFF. 83ilipsSemiconductors.com +mbedded Controller CardFare ,esi"n 9 bI @en Arnold FFF.+mbeddedControllerCardFare,esi"n.com

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