Vissza a főoldalra    Vissza a PIC főoldalra

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

 


11.4.18. 8 bit bináris/2 jegyű BCD átalakítás


Assembly programozás tartalomjegyzék

Értéktúllépés teszt
"A" algoritmus
"B" algoritmus
"C" algoritmus
"D" algoritmus


      A fejezetben bemutatott algoritmusok a következő ábra szerinti 8 bites bináris/kétjegyű BCD átalakítást hajtják végre.

Bináris/BCD átalakítás

11.4.18-1. Ábra

      Az egyes megoldások méret- és sebesség-jellemzői láthatók a következő táblázatban.

11.4.18-1. Táblázat
Algoritmus Programmemória
helyfoglalás
Futási idő [utasításciklus]
Minimum Maximum
A 10 8 79
B 36 33 38
C 77 20 26
D 103 6 6


      Értéktúllépés teszt:

      Egy kétjegyű decimális szám maximális értéke 99 lehet. Ezért célszerű vizsgálni az átalakítani kívánt bináris szám esetleges értékhatár-túllépését. A 8 bites bináris kiindulási értéknek a 0..99 (hexadecimálisan a 0h..63h) tartományban kell lennie.
      A következő példaprogram a bináris kiinduló adatot tartalmazó BIN regiszter értékének ellenőrzését valósítja meg.

... ...    
  movlw 0x64 ;W = 64h = 100d
  subwf BIN,0 ;W = BIN - 100d
  btfsc STATUS,C ;kölcsön tesztelése, ha BIN < 100, akkor átlép
  goto HIBA ;ha BIN > 99, akkor hibakezelés
  ...    

Vissza a lap tetejére


      A algoritmus:

      Ez az algoritmus a kiinduló érték tízesével való fokozatos csökkentésén alapul (Microchip). A megvalósított program nagyon rövid (10 sor), de minél nagyobb a kiinduló érték annál hosszabb a futási idő (maximum 79 utasításciklus).
      A 8 bites bináris kiinduló érték a BIN regiszterben van, de a programfutás során elveszik. Az eredmény, a 8 bites kétjegyű BCD szám, a W munkaregiszterbe kerül. A program felhasznál még egy SZAM azonosítójú általános adatregisztert.

      Az algoritmus folyamatábrája:

Az A algoritmus
11.4.18-2. Ábra

      A folyamatábrát megvalósító programrészlet:

... ...    
  clrf SZAM ;SZAM nullázása
UJRA movlw 0x0A ;W = 10d
  subwf BIN,0 ;W = BIN - 10d
  btfss STATUS,0 ;a kölcsön tesztelése; ha W > 0, átlép
  goto VEGE ;ha W < 0, ugrik
  movwf BIN ;BIN = W (= BIN - 10d)
  incf SZAM,1 ;SZAM = SZAM + 1
  goto UJRA ;visszalép az UJRA címkére
VEGE swapf SZAM,0 ;W = SZAM néggyel balra tolva
  addwf BIN,0 ;W = BIN + SZAM
  ...    

Vissza a lap tetejére


      B algoritmus:

      Ez az algoritmus a bináris helyiértékek egyenkénti feldolgozásán alapul (Tudomány és Technika). A megvalósított program viszonylag rövid (36 sor), a futási idő (31..36 utasításciklus) a bináris számtól kevéssé függ.
      A 8 bites bináris kiinduló érték a BIN regiszterben van és a program lefutása után is megmarad. Az eredmény, a 8 bites kétjegyű BCD szám, a W munkaregiszterbe kerül. Az algoritmus a bináris számban előforduló helyiértékek tízeseit (64, 32, 16) a BCDH azonosítójú, az egyeseit (64, 32, 16, 8, 4, 2, 1) a BCDL azonosítójú általános adatregiszterbe gyűjti.

      Az algoritmus folyamatábrája:

A B algoritmus
11.4.18-3. Ábra

      A folyamatábrát megvalósító programrészlet:

... ...    
  clrf BCDH ;a BCDH segédregiszter nullázása
  clrf BCDL ;a BCDL segédregiszter nullázása
  movlw 0x06 ;W = 6
  btfsc BIN,6 ;BIN 6. bitjének vizsgálata
  addwf BCDH ;ha BIN,6 = 1, akkor BCDH = BCDH + W
  movlw 0x04 ;W = 4
  btfsc BIN,6 ;BIN 6. bitjének vizsgálata
  addwf BCDL ;ha BIN,6 = 1, akkor BCDL = BCDL + W
  movlw 0x03 ;W = 3
  btfsc BIN,5 ;BIN 5. bitjének vizsgálata
  addwf BCDH ;ha BIN,5 = 1, akkor BCDH = BCDH + W
  movlw 0x02 ;W = 2
  btfsc BIN,5 ;BIN 5. bitjének vizsgálata
  addwf BCDL ;ha BIN,5 = 1, akkor BCDL = BCDL + W
  btfsc BIN,4 ;BIN 4. bitjének vizsgálata
  incf BCDH,1 ;ha BIN,4 = 1, akkor BCDH = BCDH + 1
  movlw 0x06 ;W = 6
  btfsc BIN,4 ;BIN 4. bitjének vizsgálata
  addwf BCDL ;ha BIN,4 = 1, akkor BCDL = BCDL + W
  movlw 0x0F ;W = 00001111b
  andwf BIN,0 ;W = BIN alsó négy bitje
  addwf BCDL,1 ;BCDL = BCDL + W
  btfss BCDL,4 ;BCDL > 15 ?
  goto VEG1 ;ugrik, ha BCDL < 16
  incf BCDH,1 ;BCDH = BCDH + 1
  movlw 0x0A ;W = 10d
  subwf BCDL,1 ;BCDL = BCDL - 10d
VEG1 movlw 0x0A ;W = 10d
  subwf BCDL,0 ;W = BCDL - 10d
  btfss STATUS,0 ;BCDL > 9 ?
  goto VEG2 ;ugrik, ha BCDL < 10
  movlw 0x0A ;W = 10d
  subwf BCDL,1 ;BCDL = BCDL - 10d
  incf BCDH,1 ;BCDH = BCDH + 1
VEG2 swapf BCDH,0 ;W = BCDH néggyel balra tolva
  addwf BCDL,0 ;W = BCDH + BCDL
  ...    

Vissza a lap tetejére


      C algoritmus:

      Ez az algoritmus a tízes helyiérték fokozatos közelítésén alapul (Tudomány és Technika). A megvalósított program közepesen hosszú (77 sor), a futási idő (20..26 utasításciklus) a bináris számtól kevéssé függ..
      A 8 bites bináris kiinduló érték a BIN regiszterben van, de a programfutás során elveszik. Az eredmény, a 8 bites kétjegyű BCD szám, a W munkaregiszterbe kerül. A program felhasznál még egy BCD azonosítójú általános adatregisztert.

      Az algoritmus folyamatábrája:

A C algoritmus
11.4.18-4. Ábra

Vissza a lap tetejére

      A folyamatábrát megvalósító programrészlet:

... ...    
  movlw 0x32 ;G50
  subwf BIN,0  
  btfss STATUS,0  
  goto G20  
  movlw 0x46 ;G70
  subwf BIN,0  
  btfss STATUS,0  
  goto G60  
  movlw 0x5A ;G90
  subwf BIN,0  
  btfss STATUS,0  
  goto G80  
  movlw 0x09 ;K9
  movwf BCD  
  movlw 0x5A  
  goto VEGE  
G80 movlw 0x50 ;G80
  subwf BIN,0  
  btfss STATUS,0  
  goto K7  
  movlw 0x08 ;K8
  movwf BCD  
  movlw 0x50  
  goto VEGE  
G60 movlw 0x3C ;G60
  subwf BIN,0  
  btfss STATUS,0  
  goto K5  
  movlw 0x06 ;K6
  movwf BCD  
  movlw 0x3C  
  goto VEGE  
G20 movlw 0x14 ;G20
  subwf BIN,0  
  btfss STATUS,0  
  goto G10  
  movlw 0x28 ;G40
  subwf BIN,0  
  btfss STATUS,0  
  goto G30  
  movlw 0x04 ;K4
  movwf BCD  
  movlw 0x28  
  goto VEGE  
G30 movlw 0x1E ;G30
  subwf BIN,0  
  btfss STATUS,0  
  goto K2  
  movlw 0x03 ;K3
  movwf BCD  
  movlw 0x1E  
  goto VEGE  
G10 movlw 0x0A ;G10
  subwf BIN,0  
  btfss STATUS,0  
  goto K0  
  movlw 0x01 ;K1
  movwf BCD  
  movlw 0x0A  
  goto VEGE  
K7 movlw 0x07 ;K7
  movwf BCD  
  movlw 0x46  
  goto VEGE  
K5 movlw 0x05 ;K5
  movwf BCD  
  movlw 0x32  
  goto VEGE  
K2 movlw 0x02 ;K2
  movwf BCD  
  movlw 0x14  
  goto VEGE  
K0 clrw   ;K0
  clrf BCD  
VEGE subwf BIN,1 ;BIN = BIN - W
  swapf BCD,0 ;W = BCD eltolva néggyel balra
  addwf BIN,0 ;W = BIN + BCD
  ...    

Vissza a lap tetejére


      D algoritmus:

      Ez az algoritmus a szubrutinnal megoldott táblázatkezelésen alapul (Tudomány és Technika). A megvalósított program hosszú (103 sor), de a futási idő a bináris kiinduló értéktől függetlenül extrém alacsony (6 utasításciklus).
      A 8 bites bináris kiinduló érték a BIN regiszterben van, a programfutás során nem változik. Az eredmény, a 8 bites kétjegyű BCD szám, a W munkaregiszterbe kerül.
      A valahol a programmemóriában tárolt száz darab visszatérési érték közül az egyetlen kívánt érték a szubrutinon belül végrehajtott számított ugrással (
számított GOTO) kerül kiválasztásra. Az ugráshoz szükséges címnövekmény maga a bináris kiinduló érték.
      A példaprogramban a visszatérési táblázat minden eleme ugyanabban a 256 szavas részben van elhelyezve, így a PCH értékét nem szükséges változtatni. (A 8 bites PCL értékének változtatásával ugyanis csak 256 memóriahely érhető el.)

      Az algoritmust megvalósító programrészlet:

... ...    
  movf BIN,0 ;W = BIN
  call TABLA ;a TABLA szubrutin hívása
  ...    
  ...    
TABLA addwf PCL,1 ;PCL = W = BIN
  retlw 0x00 ;visszatérés a W = 00h értékkel
  retlw 0x01 ;visszatérés a W = 01h értékkel
  retlw 0x02 ;visszatérés a W = 02h értékkel
  retlw 0x03 ;visszatérés a W = 03h értékkel
  retlw 0x04 ;visszatérés a W = 04h értékkel
  retlw 0x05 ;visszatérés a W = 05h értékkel
  retlw 0x06 ;visszatérés a W = 06h értékkel
  retlw 0x07 ;visszatérés a W = 07h értékkel
  retlw 0x08 ;visszatérés a W = 08h értékkel
  retlw 0x09 ;visszatérés a W = 09h értékkel
  retlw 0x10 ;visszatérés a W = 10h értékkel
  retlw 0x11 ;visszatérés a W = 11h értékkel
  ...    
  ...    
  retlw 0x97 ;visszatérés a W = 97h értékkel
  retlw 0x98 ;visszatérés a W = 98h értékkel
  retlw 0x99 ;visszatérés a W = 99h értékkel
  ...    

  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