Software projekti

Autor: Alen Rusin

 

MNOŽENJE CELOG I REALNOG BROJA

Nije redak slučaj u programiranju mikrokontrolera da se ceo broj množi realnim. Na primer, treba da se pomnoži 182 i 0.632, tačan rezultat je 115.024. Međutim, u mikrokontroleru je ovo moguće predstaviti samo ako postoje dodatne rutine koje podržavaju realnu aritmetiku. Ovakve rutine su vrlo složene i za njihovo izvršavanje je potrebno prilično vremena. Mislimo da ovde nije potrebno dokazivati njihovu složenost. U programiranju se često može primeniti jedan mali trik. Neka je prvi broj ceo (0<a<256), i neka je drugi broj realan (0<b<1), tada se b može predstaviti kao b=x/256 gde je 0<x<256. Tada se množenje a*b svodi na a*x/256 odnosno prvo se množi a*x pa se rezultat “šiftuje” u desno za 8 mesta što odgovara delenju sa 256. Zbog čega se ovo radi? Zato što šiftova-nje “troši” manje taktova od klasičnog delenja (IDIV). U gornjem primeru se izračunavanje može svesti na 182*162/256 a to je priblizno 115.172. Vidi se da su celobrojni delovi isti - 115. Ako se ne zahteva velika tačnost, a bitno je što brze odraditi “posao” tada predloženo rešenje može biti vrlo korisno. Dakle, ideja je u tome da se realni deo predstavi kao razlomak sa imeniocem 256. Pošto je 0<a, x <256 pa je proizvod a*x<65536, odnosno ne izlazi iz dvobajtnog opsega. Šiftovanjem se ovaj broj smanjuje odnosno rezultat je manji od 256. Pomeranje akumulatora DX u desno za 8 mesta nije ni potrebno jer je tačan rezultat u registru BX! Sledi kod koji ilustruje gornju ideju

ldaa #182 ; AX=182
ldab #162 ; BX=162
mul ; rezultat 115 je u BX, ;sadrzaj akumulatora AX ;nije važan!!!


Pročitajte više o ovoj temi
Bit po bit
Povezivanje ADC-a sa 68HC11
Serijski EEPROM, šta i kako
Kako upaliti sijalicu?
Konverzija
Pokrenimo štampač
Povezivanje male tastature 
AD konverzija

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji