Page 19 - Microcontrolere - Indrumator de laborator
P. 19

MOVLW         0
                        MOVWF         PORTA
                        BANKSEL(TRISA)
                        MOVLW         0FH
                        MOVWF         TRISA  ; pinii RA4-RA7 sunt pini de ieșire
                        BANKSEL(ANSEL)
                        CLRF          ANSEL  ; se anulează celelalte funcții analogice

                 Configurarea portului A în conformitate cu instrucțiunile de mai sus permite
          acum generarea unor nivele de tensiune la pinii folosiți, RA4-RA7. Astfel, dacă setăm
          bitul RA7 (bitul 7) din registrul PORTA, la pinul RA7 (pinul 30 la o capsulă de tip
          TQFT44)  vom  avea  o  tensiune  aproximativ  egală  cu  tensiunea  de  alimentare  a
          microcontrolerului. În cazul în care resetăm bitul RA7 din registrul PORTA, tensiunea
          la pinul RA7 al microcontrolerului va fi aproximativ egală cu 0V.
                 Întrucât registrele cu funcții speciale folosite se găsesc plasate în memoria de
          date,  în  bancuri  diferite,  se  folosește  directiva  BANKSEL  pentru  a  preciza  bancul
          curent  care  este  folosit  la  un  moment  dat.  Registrul  STATUS  care  a  fost  folosit  în
          cadrul laboratorului anterior, are particularitatea că se regăsește în toate cele 4 bancuri
          de  memorie  ale  microcontrolerului.  O  astfel  de  poziționare  este  necesară  întrucât
          registrul STATUS conține cei doi biți care trebuie setați în așa fel încât să avem la un
          moment  dat  activ  unul  din  cele  patru  bancuri.  Directiva  BANKSEL  nu  face  nimic
          altceva decât că generează instrucțiuni care activează bancul de memorie de date în
          care se află registrul indicat. Acest mod de lucru degrevează utilizatorul de a reține
          poziționarea unui număr mare de registre cu funcții speciale încadrate în bancuri de
          memorie diferite.

               2.2. Rutină de temporizare software
                 Generarea unor semnale de temporizare la pinii microcontrolerului se poate
          realiza  prin  mai  multe  modalități,  de  exemplu  folosind  circuitele  de  temporizare  cu
          sistemul  lor  de  întreruperi,  sau  folosind  un  modul  de  generare  de  impulsuri  cu
          modulare în durată (lb. engl. pulse width modulation - PWM), sau folosind alte resurse
          interne. O altă posibilitate de a genera impulsuri digitale folosită des este aceea de a
          implementa rutine de temporizare. Se pleacă de la faptul că durata de execuție a unei
          instrucțiuni, un ciclu mașină, sau durata de execuție a unei secvențe de instrucțiuni este
          un  submultiplu  al  perioadei  și  duratei  semnalului  dorit.  Aceste  instrucțiuni  sau
          secvențe de instrucțiuni se execută apoi repetat, de un număr exact de ori, astfel încât
          să se obțină timpii doriți la care nivelul semnalelor să fie apoi controlat. Este acum
          evident  faptul  că  pentru  această  lucrare  de  laborator  s-a  ales  un  semnal  de  tact  cu
          frecvența de 4 MHz, pentru a calcula mai ușor timpii necesari de comandă, pe baza
          duratei unui ciclu mașină de 1µs. De exemplu, execuția unei instrucțiuni NOP (abrev.
          lb. engl. no operation) nu va realiza nicio altă acțiune decât faptul că vom constata că
          pentru execuția ei a fost nevoie de un interval de timp de 1µs. Dacă dorim să generăm


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