Page 21 - Microcontrolere - Indrumator de laborator
P. 21

etichetă,  iar  dacă  în  urma  operației  de  decrementare  conținutul  locației  de  memorie
          este zero, are loc o incrementare a registrului numărător de program PC cu doi, altfel,
          conținutul  numărătorului  de  program  PC  este  incrementat  cu  o  unitate.  Având  în
          vedere cele precizate mai sus, secvența de program următoare va fi repetată atât timp
          cât COUNT1 este mai mare decât zero.
                 adr_3:  NOP
                  DECFSZ              COUNT1, 1
                  GOTO                $-1
                  GOTO                adr_2
                 Durata executării secvenței de program este echivalentă cu durata a 4 cicluri
          mașină, adică cu un interval de timp de 4 µs. Astfel, pentru executarea instrucțiunii
          NOP  este  necesară  o  microsecundă,  pentru  executarea  instrucțiunii  DECFSZ  este
          necesară încă o microsecundă (deoarece nu este îndeplinită condiția de conținut nul a
          locației de memorie cu eticheta COUNT1), iar pentru executarea instrucțiunii GOTO
          $-1 sunt necesare alte două microsecunde. Această secvență va fi executată de 250 de
          ori, întrucât conținutul variabilei COUNT1 a fost setat inițial prin program la 250. În
          consecință,  până  la  apariția  condiției  de  salt  peste  instrucțiunea  GOTO  $-1,  se  va
          scurge un interval de timp de 250 µs.
                 În momentul în care, în urma decrementărilor repetate, conținutul locației de
          memorie cu eticheta COUNT1 este nul, numărătorul de program PC este incrementat
          cu două unități, situație în care se execută instrucțiunea GOTO adr_2. În urma acestei
          instrucțiuni  COUNT1  ia  din  nou  valoarea  250,  se  decrementează  cu  o  unitate
          COUNT2 și se trece din nou la executarea repetată a secvenței de instrucțiuni de la
          adresa  adr_3.  Se  constată  din  nou  că  se  va  iniția  un  nou  proces  de  temporizare  cu
          durata  de  250  µs.  Acest  mod  de  funcționare  se  va  încheia  în  momentul  în  care
          COUNT2 devine egal cu zero și are apoi loc saltul la adr_4. Rezultatul acestui mod de
          lucru este obținerea unei temporizări  cu durata dată de relația următoare:
                 (COUNT2)*(COUNT1) = (COUNT2)*250 µs, sau cu alte cuvinte se obține o
          durată  de  temporizare  egală  cu  un  multiplu  de  250  de  µs.  La  acest  rezultat  se  mai
          adaugă câteva µs (nesemnificative ca și durată față de cele 250 µs) datorate salturilor
          realizate la adresele adr_2, adr_3 și adr_4.
                 Observație. Valorile cu care se realizează inițializarea COUNT1 și COUNT2
          pot fi diferite față de cele folosite în rutina de mai sus, în funcție de întârzierea pe care
          dorim să o obținem.
                 Dacă  dorim  să  obținem  intervale  de  timp  mai  mari,  secvența  de  program
          poate fi concepută ca o subrutină de program care poate să fie apelată de mai multe ori
          cu ajutorul instrucțiunii CALL.
                 Programul indicat mai sus scris în limbaj de asamblare este convertit în cod
          mașină  executabil  cu  ajutorul  unui  program  de  asamblare,  numit  și  asamblor,  sau
          folosind funcția BUILD din cadrul unui mediu integrat de dezvoltare MPLAB X IDE,
          oferit de către compania Microchip.




                                              18
   16   17   18   19   20   21   22   23   24   25   26