Page 20 - Microcontrolere - Indrumator de laborator
P. 20

un  interval  de  timp  de  10µs,  executăm  instrucțiunea  NOP  sau  alte  instrucțiuni
          executate într-un ciclu mașină, de 10 ori.
                 Circuitul  prezentat  are  două utilizări  majore  care depind direct  de  perioada
          semnalului de comandă al sistemului de iluminat. Astfel, dacă perioada semnalului de
          tact este mare, de ordinul zecilor, sutelor de milisecunde sau secunde, ochiul uman va
          percepe  semnalizarea  luminoasă  ca  atare,  semnal  luminos  activ,  respectiv  semnal
          luminos inactiv. În cazul în care perioada semnalului de tact este de ordinul zecilor de
          milisecunde sau mai mică, ochiul uman nu va mai percepe semnalizarea luminoasă ca
          atare, acesta va percepe oarecum o valoare medie a semnalului de semnalizare luminos
          generat. În consecință, dacă durata impulsurilor va fi mică, ochiul uman va percepe o
          iluminare continuă de slabă intensitate, iar dacă durata impulsurilor va fi mare, ochiul
          uman va sesiza o iluminare continuă de intensitate ridicată. Se poate obține printr-o
          comandă de tip PWM efectul unui control al nivelului de iluminare, prin modificarea
          duratei impulsurilor de comandă. Semnalele generate cu o perioadă scurtă de timp pot
          fi vizualizate ușor cu ajutorul osciloscopului.
                 În continuare este prezentată o secvență de program care poate fi folosită la
          generarea fie a unui impuls de comandă, fie a unui semnal digital periodic cu durata
          impulsului constantă, sau cu puține modificări, a unui semnal digital periodic cu durata
          impulsului variabilă / reglabilă. Presupunem că avem invalidat sistemul de întreruperi
          al  microcontrolerului  și  sunt  declarate  deja  în  memoria  de  date  două  locații  de
          memorie cu etichetele COUNT1 și COUNT2, de preferat în același bank de memorie
          de mate.
                 ...
                  BANKSEL(COUNT2)
                 adr_1:   MOVLW               7H     ; la alegere în funcție de
                                                     ; temporizarea dorită
                  MOVWF               COUNT2
                  BANKSEL(COUNT1)     ; poate lipsi dacă COUNT1 și
                                      ; COUNT2 se găsesc în același bank
                                      ; de memorie de date
                  MOVLW               0FAH  ; 250 în zecimal
                 adr_2:  MOVWF                COUNT1
                 ; din acest loc se calculează temporizarea realizată
                  DECFSZ              COUNT2, 1
                  GOTO                adr_3
                  GOTO                adr_4   ; sau după caz la adr_1
                 adr_3:  NOP
                  DECFSZ              COUNT1, 1
                  GOTO                $-1
                  GOTO                adr_2
                 adr_4:  ...

                 În secvența de program prezentată sunt folosite două instrucțiuni DECFSZ,
          care decrementează cu o unitate conținutul unei locații de memorie identificată printr-o

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