<< 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.
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 |
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.
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 |
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.
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 >>