Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


15.3.3. A Timer 1 olvasása és írása


      A Timer 1 16-bites számláló regisztere két 8-bites regiszterfélből (TMR1H és TMR1L) áll össze, amelyek logikailag az adatmemória-területen vannak elhelyezve és az általános regiszterekhez hasonlóan, tetszőleges időpontban írhatóak és olvashatóak.
      Az írást és az olvasást két lépcsőben kell megvalósítani, először az egyik, majd a másik regiszterfélre vonatkozóan kell kiadni a parancsokat. Az, hogy az alsó vagy a felső regiszterfél kezelése történik meg először, teljesen mindegy, viszont a két adatmozgatás közötti idő alatt történő események (megszakítások, az alsó vagy a felső regiszterfél túlcsordulása) hibás működéshez vezethetnek.
      A hibamentes adatátvitelhez:
     ˇ az olvasás, illetve írás előtt le kell tiltani a megszakításokat, majd meg kell állítani a Timer 1 léptetését, vagy
     ˇ le kell tiltani a megszakításokat és a Timer 1 folyamatos működése mellett valamilyen különleges programozási megoldással kell elkerülni az átviteli hibákat.

      A következő táblázat a két regiszterfél kiolvasása között fellépő túlcsordulás hatására bekövetkező hibát mutatja be.

15.3.3-1. Táblázat
TMR1 1. változat 2. változat
Programműködés Kiolvasott érték Programműködés Kiolvasott érték
04FFh TMR1L olvasása xxxxh TMR1H olvasása xxxxh
0500h TMR1L tárolása xxFFh TMR1H tárolása 04xxh
0501h TMR1H olvasása xxFFh TMR1L olvasása 04xxh
0502h TMR1H tárolása 05FFh TMR1L tárolása 0401h

Vissza a lap tetejére

      A következő táblázat a két regiszterfél értékadása között fellépő túlcsordulás hatására bekövetkező hibára mutat példát.

15.3.3-2. Táblázat
TMR1 kívánt érték Programműködés TMR1 valós érték
01A5h TMR1H adat előkészítése 07FEh
01A5h TMR1H beírása 01FFh
01A5h TMR1L adat előkészítése 0200h
01A5h TMR1L tárolása 02A5h

Vissza a lap tetejére

      Ha a kiolvasás, illetve értékadás időtartamára nem megoldható a Timer 1 leállítása, a következő programozási megoldásokkal elkerülhető a hibás adatátvitel.
      A Timer 1 működés közbeni hibamentes kiolvasása a TIMEH és TIMEL általános adatregiszterekbe:

... ...    
  ...   ;a megszakítások tiltása
  movf TMR1H,0 ;W = TMR1H; a felső bájt olvasása
  movwf TIMEH ;TIMEH = TMR1H; a felső bájt tárolása
  movf TMR1L,0 ;W = TMR1L; az alsó bájt olvasása
  movwf TIMEL ;TIMEL = TMR1L; az alsó bájt tárolása
  movf TMR1H,0 ;W = TMR1H; a felső bájt újraolvasása
  subwf TIMEH,0 ;W = TIMEH - TMR1H; ellenőrző kivonás
  btfsc STATUS,0 ;a zérusjelző bit tesztelése
  goto GOOD ;ugrik, ha az értékek megegyeznek
      ;ÚJRAOLVASÁS, ha az értékek különböznek
  movf TMR1H,0 ;W = TMR1H
  movwf TIMEH ;TIMEH = TMR1H
  movf TMR1L,0 ;W = TMR1L
  movwf TIMEL ;TIMEL = TMR1L
GOOD ...   ;a megszakítások engedélyezése
  ...    

      A program ellenőrzi, hogy a két beolvasás között történt-e túlcsordulás, és ha igen, akkor újraolvassa az értékeket.

Vissza a lap tetejére

      A Timer 1 működés közbeni hibamentes értékadása (A512h):

... ...    
  ...   ;a megszakítások tiltása
  clrf TMR1L ;TMR1L = 0; az alsó bájt nullázása
  movlw H'A5' ;W = A5h; a felső bájt értékének előkészítése
  movwf TMR1H,1 ;TMR1H = A5h; a felső bájt értékadása
  movlw H'12' ;W = 12h; az alsó bájt értékének előkészítése
  movwf TMR1L,1 ;TMR1L = 12h; az alsó bájt értékadása
  ...   ;a megszakítások engedélyezése
  ...    

      A program az alsó regiszterfél nullázásával kezdődik, amivel kizárja annak a lehetőségét, hogy a két regiszterfél írása között túlcsordulás lépjen fel.

 

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra