Vissza a főoldalra    Vissza a PIC főoldalra

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

 


11.4.11. Feltételes elágazás


Assembly programozás tartalomjegyzék

Bit állapottól függő elágazás
Léptetett regiszter állapotától függő elágazás
Elágazás regiszter túlcsordulásra
Elágazás félbájtos túlcsordulásra
Elágazás regiszter nulla értékénél
Regiszter értékétől függő elágazás
Értéktől függő többszörös elágazás
Megszakítások


      Bit állapottól függő elágazás:

      A tetszőleges adatmemória-regiszter tetszőleges bitjének állapotától függő programelágazásokat a PIC mikrovezérlők külön utasításokkal támogatják. A BTFSC és BTFSS bit tesztelő utasítások egy vagy kettő utasításciklus alatt végrehajtják az elágazást.
      A BTFSC (Bit Test, Skip if Clear) utasítás teszteli a megjelölt regiszter kiválasztott bitjét és ha az "0", akkor átugorja a következő utasítást.
      A BTFSS (Bit Test, Skip if Set) utasítás teszteli a megjelölt regiszter kiválasztott bitjét és ha az "1", akkor átugorja a következő utasítást.

      Példaprogram az ADAT azonosítójú regiszter 7. bitjének állapotától függő elágazásra:

... ...    
  btfsc ADAT,7 ;ADAT,7 vizsgálata
  goto EGY ;ugrik, ha ADAT,7="1"
NULLA ...   ;itt folytatódik, ha ADAT,7="0"
  ...    
  ...    
EGY ...   ;itt folytatódik, ha ADAT,7="1"
  ...    

      Ha az ADAT regiszter 7. bitje "0", a BTFSC ADAT,7 utasítás az utána következő GOTO EGY utasítást átugorja, illetve egy NOP utasítást hajt végre helyette.

      A BTFSC és BTFSS utasítások arra is felhasználhatóak, hogy az utánuk következő utasítás végrehajtását feltételtől függően tiltsák vagy engedélyezzék. Ezt szemlélteti a következő programrészlet:

... ...    
  btfsc ADAT,7 ;ADAT,7 vizsgálata
  clrf REG ;ha ADAT,7="1", akkor REG nullázása
  ...   ;ha ADAT,7="0", akkor itt folytatódik
  ...    

      Ha az ADAT regiszter 7. bitje "0", a BTFSC ADAT,7 utasítás az utána következő CLRF REG utasítást átugorja, illetve egy NOP utasítást hajt végre helyette.

Vissza a lap tetejére


      Léptetett regiszter állapotától függő elágazás:

      A PIC mikrovezérlők egyetlen utasítással megoldják egy tetszőleges adatregiszter 1-esével való csökkentését/növelését majd az eredmény tesztelését. A DECFSZ és INCFSZ utasítások léptetik a kiválasztott regiszter értékét, majd tesztelik az eredményt, amelynek nulla értéke esetén átlépik a következő utasítást.
      A DECFSZ (Decrement File Register, Skip if Zero) utasítás csökkenti a megjelölt regiszter értékét és ha az nulla, akkor átugorja a következő utasítást, illetve egy NOP utasítást hajt végre helyette.
      A INCFSZ (Increment File Register, Skip if Zero) utasítás növeli a megjelölt regiszter értékét és ha az nulla, akkor átugorja a következő utasítást, illetve egy NOP utasítást hajt végre helyette.

      Példaprogram az ADAT azonosítójú regiszter csökkentésére és állapotától függő elágazásra:

... ...    
  decfsz ADAT,1 ;ADAT = ADAT - 1; ADAT=0?
  call SZUB ;szubrutinhívás, ha ADAT>0
  ...   ;itt folytatódik, ha ADAT=0
  ...    

Vissza a lap tetejére


      Elágazás regiszter túlcsordulásra:

      A STATUS regiszter C túlcsordulás jelzőbitjének értéke "1"-re változik, ha bizonyos regiszter-műveletek a 8 bites tartomány túlcsordulását okozzák. (Ez azt jelenti, hogy a művelet eredményének tárolásához kevés a 8 bit, így 9 bitre van szükség. Ilyen esetekben a 9. bit szerepét a C jelzőbit tölti be.)
      A megelőző művelet eredményének túlcsordulása a BTFSC és BTFSS bit tesztelő utasításokkal lekérdezhető.

      Példaprogram az ADAT azonosítójú regiszter növelésére és túlcsordulása esetén végrehajtott elágazásra:

... ...    
  movlw 0x01 ;W = 1
  addwf ADAT,1 ;ADAT = ADAT + 1
  btfsc STATUS,0 ;a túlcsordulás jelzőbit vizsgálata
  goto IGEN ;itt folytatódik, ha az ADAT regiszter túlcsordult
  ...   ;itt folytatódik, ha nincs túlcsordulás
  ...    

Vissza a lap tetejére


      Elágazás félbájtos túlcsordulásra:

      A STATUS regiszter DC félbájt-túlcsordulás jelzőbitjének értéke "1"-re változik, ha bizonyos regiszter-műveletek az alsó 4 bites tartomány túlcsordulását okozzák. (Ez azt jelenti, hogy a művelet eredményének tárolásához kevés az alsó 4 bit, így 5 bitre van szükség.)
      A megelőző művelet eredményének túlcsordulása a BTFSC és BTFSS bit tesztelő utasításokkal lekérdezhető.

      Példaprogram az ADAT azonosítójú regiszter növelésére és az alsó félbájt túlcsordulása esetén végrehajtott elágazásra:

... ...    
  movlw 0x01 ;W = 1
  addwf ADAT,1 ;ADAT = ADAT + 1
  btfsc STATUS,1 ;a félbájt-túlcsordulás jelzőbit vizsgálata
  goto IGEN ;itt folytatódik, ha az ADAT regiszter alsó fele túlcsordult
  ...   ;itt folytatódik, ha nincs túlcsordulás
  ...    

Vissza a lap tetejére


      Elágazás regiszter nulla értékénél:

      A STATUS regiszter Z zérusjelző-bitjének értéke "1"-re változik, ha bizonyos regiszter-műveletek hatására a regiszter értéke nulla lesz.
      Az, hogy az eredmény nulla-e a BTFSC és BTFSS bit tesztelő utasításokkal lekérdezhető.

      Példaprogram az ADAT azonosítójú regiszter nulla értéke esetén végrehajtott elágazásra:

... ...    
  movlw 0x0F ;W = B'0000 1111'
  andwf ADAT,0 ;W = ADAT "és" B'0000 1111'
  btfsc STATUS,2 ;a zérusbit vizsgálata
  goto IGEN ;itt folytatódik, ha az ADAT regiszter nulla
  ...   ;itt folytatódik, ha ADAT nem nulla
  ...    

Vissza a lap tetejére


      Regiszter értékétől függő elágazás:

Elágazás regiszter és konstans egyezése esetén
Hármas elágazás regiszter és konstans viszonyától függően

Vissza a lap tetejére


      Értéktől függő többszörös elágazás:

      Az általános adatregiszter értéke által vezérelt többszörös elágazás közvetett programmemória-címzéssel oldható meg a leghatékonyabban.
      A legegyszerűbb esetben az elágazást vezérlő regiszter által felvett lehetséges értékek a 0, 1, 2, 3... egyesével növekvő sorozatnak felelnek meg, amelynek maximális értéke egyel kisebb, mint a lehetséges elágazások száma. (Minden egyes számjegyhez tartozik egy elágazás.)
      A fent leírt legegyszerűbb esetet szemlélteti a következő programrészlet, amelyben egy, az ADAT regiszter értékétől függő elágazás látható.

... ...    
  movf ADAT,0 ;W = ADAT
  addwf PCL,1 ;közvetett programmemória-címzés
  goto NULLA ;itt folytatódik, ha ADAT = 0
  goto EGY ;itt folytatódik, ha ADAT = 1
  goto KETTO ;itt folytatódik, ha ADAT = 2
  goto HAROM ;itt folytatódik, ha ADAT = 3
  goto NEGY ;itt folytatódik, ha ADAT = 4
  ...    

      A fenti programrészletben a GOTO utasítások száma tetszőlegesen növelhető egészen 255-ig, de ügyelni kell arra, hogy az összes GOTO utasítás ugyan azon a 256 szavas memórialapon legyen. Ha ez nem megoldható, akkor a közvetett címzés szabályainak megfelelően a PC programszámláló felső bájtját is be kell állítani.

Vissza a lap tetejére

      Egy bonyolultabb esetet szemléltet a következő programrészlet, amelyben egy, az ADAT regiszter értékének páros vagy páratlan voltától függő elágazás látható.

... ...    
  movf ADAT,0 ;W = ADAT
  addwf PCL,1 ;közvetett programmemória-címzés
  goto IGEN ;ha ADAT = 0
  goto NEM ;ha ADAT = 1
  goto IGEN ;ha ADAT = 2
  goto NEM ;ha ADAT = 3
  goto IGEN ;ha ADAT = 4
  goto NEM ;ha ADAT = 5
  goto IGEN ;ha ADAT = 6
  goto NEM ;ha ADAT = 7
  goto IGEN ;ha ADAT = 8
  goto NEM ;ha ADAT = 9
  ...    

      A következő programrészlet egy, az ADAT regiszter értékének a 3-mal való osztása utáni maradéktól függő elágazást mutat be.

... ...    
  movf ADAT,0 ;W = ADAT
  addwf PCL,1 ;közvetett programmemória-címzés
  goto NULLA ;ha ADAT = 0
  goto EGY ;ha ADAT = 1
  goto KETTO ;ha ADAT = 2
  goto NULLA ;ha ADAT = 3
  goto EGY ;ha ADAT = 4
  goto KETTO ;ha ADAT = 5
  goto NULLA ;ha ADAT = 6
  goto EGY ;ha ADAT = 7
  goto KETTO ;ha ADAT = 8
  goto NULLA ;ha ADAT = 9
  ...    

  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