<< 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.
Az egyes megoldások méret- és sebesség-jellemzői láthatók a következő táblázatban.
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 ...
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:
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 ...
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 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 ...
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 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 ...
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 >>