[AVR] AtMega8: Dlaczego mnożnik 0.019V/unię na ADC nie daje 5V?

[AVR]AtMega8 i ADC, dlaczego tak?





Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 14:18:10 +0100


Witam
Jakis czas temu zaczalem zabawe z AVR.
Napisalem prosty programik w asemblerze i pojawil sie dziwny problem,
ktorego nie potrafie sobie wytlumaczyc.
Jest tak:
ADC dziala sobie, wynik przesuwany do lewej, czyli w w mlodszej czesci
rejestru wynikowego dostaje wynik pomiaru. Napiecie referencyjne to 5V.
Wszystko dziala Ok, na wyswietlacz segmentowy wypisuje wynik, dla 5V mam
255.
Teraz chcialem zamienic to na napiecie w V.
5V/255 daje ~0.019 V/jednostke.
Mnozac wynik pomiaru przez 0.019 powinienem miec wynik w V
jest tak:
w r16 mam wynik pomiaru
dalej mam tak:
ldi r17,q7(0.019)
fmul r16,r17

w r0 bede mial czesc po przecinku
w r1 czesc calkowita

Problem w tym, ze dla 5V napiecia mierzonego po mnozeniu dostaje w
wynikach r1 = 3 r0 = 32 (czy cos kolo tego)
Dlaczego?

Mozna to obejsc, wpisujac mnoznik 0.029 (podaje z pamieci) i wtedy dla
5V dostane 5V na wyswietlaczu.
Dzieki za jakies sugestie
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 6 Mar 2006 14:26:19 +0100


w r16 mam wynik pomiaru
dalej mam tak:
ldi r17,q7(0.019)
fmul r16,r17

-)

Od kiedy AVR operują na floatach??

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: Krzysztof Piecuch <kris_gor_at_nospam_poczta.onet.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 14:46:56 +0100


TomaszB napisał(a):

w r16 mam wynik pomiaru
dalej mam tak:
ldi r17,q7(0.019)
fmul r16,r17

Tak z ciekawości zapytam ;-) jak Ci się udaje wpisać 0.019 do 1-go bajtu
pomijając kwestię, że jest to liczba zmiennoprzecinkowa ? ;-))))

Pozdrawiam

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 14:59:23 +0100


Krzysztof Piecuch napisał(a):
Tak z ciekawości zapytam ;-) jak Ci się udaje wpisać 0.019 do 1-go bajtu
pomijając kwestię, że jest to liczba zmiennoprzecinkowa ? ;-))))

Z tego co wyczytalem z ksiazki, to funkcja q7() mowi dla kompilatora, ze
jest to liczba zmiennoprzecinowa i odpowienio ja zamienia i miesci na
jednym bajcie.

Skoro w asm dla AVR sa przewidziane funkcje do operacji na liczbach
zmiennoprzecinkowych (np fmul - mnozenie bez znaku liczb
zmiennprzecinkowych) to chyba jest to mozliwe jak tez mozliwe jest
wpisanie do jednego bajtu liczby zmiennoprzecinkowej z pewnego zakresu.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: "T.M.F." <tfrancuz_at_nospam_nospam.mp.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 15:27:20 +0100


Skoro w asm dla AVR sa przewidziane funkcje do operacji na liczbach
zmiennoprzecinkowych (np fmul - mnozenie bez znaku liczb
zmiennprzecinkowych) to chyba jest to mozliwe jak tez mozliwe jest
wpisanie do jednego bajtu liczby zmiennoprzecinkowej z pewnego zakresu.

Skad ty wziales ta informacje? FMUL to mnozenie dwoch 8 bitowych liczb
bez znaku. AVR NIE POSIADA operacji na liczbach zmiennoprzecinkowych.
Prostym trickiem jest wykorzystanie liczb stalopozycyjnych. Mozesz je
normalnie mnozyc za pomoca MUL, pamietajac o odpowiednim przesunieciu
pozycji dziesietnej.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 15:41:26 +0100


T.M.F. napisał(a):
Skoro w asm dla AVR sa przewidziane funkcje do operacji na liczbach
zmiennoprzecinkowych (np fmul - mnozenie bez znaku liczb
zmiennprzecinkowych) to chyba jest to mozliwe jak tez mozliwe jest
wpisanie do jednego bajtu liczby zmiennoprzecinkowej z pewnego zakresu.

Skad ty wziales ta informacje? FMUL to mnozenie dwoch 8 bitowych liczb
bez znaku. AVR NIE POSIADA operacji na liczbach zmiennoprzecinkowych.
Prostym trickiem jest wykorzystanie liczb stalopozycyjnych. Mozesz je
normalnie mnozyc za pomoca MUL, pamietajac o odpowiednim przesunieciu
pozycji dziesietnej.

Jak tylko wroce do domu, to przeczytam jeszcze raz i zweryfikuje swoj
poglad na ta sprawe.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 15:45:04 +0100


T.M.F. napisał(a):
Skad ty wziales ta informacje? FMUL to mnozenie dwoch 8 bitowych liczb
bez znaku. AVR NIE POSIADA operacji na liczbach zmiennoprzecinkowych.
Prostym trickiem jest wykorzystanie liczb stalopozycyjnych. Mozesz je
normalnie mnozyc za pomoca MUL, pamietajac o odpowiednim przesunieciu
pozycji dziesietnej.

informacja pobrana ze strony http://www.elektronika.priv.pl/ w dziale
mikrokontrolery -> jezyk asembler AVR -> Lista rozkazĂłw mikrokontrolerĂłw AVR

w tabelce z rozkazami mamy:
MUL Rd,Rs Mnożenie bez znaku zawartości rejestrów R1:R0 ¬ Rd · Rs Z,C 2
MULS Rhd,Rhs Mnożenie ze znakiem zawartości rejestrów R1:R0 ¬ Rhd
¡ Rhs Z,C 2
MULSU Rhd,Rhs Mnożenie zawartości rejestrów (jeden ze znakiem, drugi
bez znaku) R1:R0  Rhd ¡ Rhs Z,C 2
FMUL Rd,Rs Mnożenie liczb ułamkowych bez znaku R1:R0 ¬ (Rd · Rs) << 1 Z,C 2
FMULS Rd,Rs Mnożenie liczb ułamkowych ze znakiem R1:R0 ¬ (Rd · Rs)
<< 1 Z,C 2
FMULSU Rd,Rs Mnożenie liczby ułamkowej ze znakiem z liczbą ułamkową
bez znaku R1:R0  (Rd ¡ Rs) << 1 Z,C 2

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 6 Mar 2006 15:52:24 +0100



informacja pobrana ze strony http://www.elektronika.priv.pl/ w dziale
mikrokontrolery -> jezyk asembler AVR -> Lista rozkazów mikrokontrolerów
AVR

Zawsze sprawdzaj u źródeł: www.atmel.com
Liczby zmienno-przecinkowe zazwyczaj są kodowane na czterech bajtach, do
sprzętowego działania na nich wymagany jest koprocesor, którego w 8 bitowych
procesorach raczej się nie stosuje.

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_spam_won_at_nospam_gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 16:41:30 +0100


Mister napisał(a):
Zawsze sprawdzaj u źródeł: www.atmel.com
Liczby zmienno-przecinkowe zazwyczaj są kodowane na czterech bajtach, do
sprzętowego działania na nich wymagany jest koprocesor, którego w 8 bitowych
procesorach raczej się nie stosuje.

TAk, pomylilem formaty, do czego przyznalem sie w poscie nizej. Chodzilo
o liczby ulamkowe, stalopozycyjne.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 15:48:16 +0100


T.M.F. napisał(a):
> Skad ty wziales ta informacje? FMUL to mnozenie dwoch 8 bitowych liczb
bez znaku. AVR NIE POSIADA operacji na liczbach zmiennoprzecinkowych.
Prostym trickiem jest wykorzystanie liczb stalopozycyjnych. Mozesz je
normalnie mnozyc za pomoca MUL, pamietajac o odpowiednim przesunieciu
pozycji dziesietnej.

Pomylilem pojecie, zamiast zmiennoprzecinkowa mialo byc stalopozycyjna
(zmiennoprzecinkowe to mam w C++ :/)

Tak czy inaczej, moj problem z pierwszego posta dalej jest nierozwiazany.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 6 Mar 2006 17:37:46 +0100


Dnia Mon, 06 Mar 2006 14:18:10 +0100, TomaszB napisał(a):
<ciach>
w r0 bede mial czesc po przecinku
w r1 czesc calkowita

Strona 71 dokumentu "Instruction set". FMUL operuje na nietypowym formacie
(1.7), a wynik jest w formacie (1.15), przy czym numery oznaczają liczbę
bitów na część całkowitą i ułamkową.

Dokładną interpretację wyniku doczytaj, ja za bardzo nie zrozumiałem ;)

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_spam_won_at_nospam_gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 21:29:29 +0100


Marcin Stanisz napisał(a):
Strona 71 dokumentu "Instruction set". FMUL operuje na nietypowym formacie
(1.7), a wynik jest w formacie (1.15), przy czym numery oznaczają liczbę
bitów na część całkowitą i ułamkową.

Dokładną interpretację wyniku doczytaj, ja za bardzo nie zrozumiałem ;)

W ksiazce o AtMegach jest troszke jasniej.
Wychodzi na to, ze jak sie mnozy liczbe calkowita (8n.0q) przez liczbe
ulamkowa w formacie 1.7 (1n.7q) to w wyniku operacji fmul otrzymamy
liczbe w formacie 8n.8q czyli w dwoch rejestrach r0 i r1 beda
odpowiednio: r1-czesc calkowita, r0-czesc ulamkowa.
Dla liczb 8 bitowych jest dosc prosto, gozej z liczbami 16 bitowymi:(
ale to chyba tez da sie jakos zrozumiec;)
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Piotr Chmiel <piotr_at_nospam_topaz.zsel.lublin.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 6 Mar 2006 22:25:43 +0100


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--0-529033954-1141680343=:50214
Content-Type: TEXT/PLAIN; charset=iso-8859-2; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 6 Mar 2006, TomaszB wrote:

Marcin Stanisz napisał(a):
Strona 71 dokumentu "Instruction set". FMUL operuje na nietypowym formacie
(1.7), a wynik jest w formacie (1.15), przy czym numery oznaczają liczbę
bitów na część całkowitą i ułamkową.

Dokładną interpretację wyniku doczytaj, ja za bardzo nie zrozumiałem ;)

W ksiazce o AtMegach jest troszke jasniej.
Wychodzi na to, ze jak sie mnozy liczbe calkowita (8n.0q) przez liczbe
ulamkowa w formacie 1.7 (1n.7q) to w wyniku operacji fmul otrzymamy liczbe w
formacie 8n.8q czyli w dwoch rejestrach r0 i r1 beda odpowiednio: r1-czesc
calkowita, r0-czesc ulamkowa.
Dla liczb 8 bitowych jest dosc prosto, gozej z liczbami 16 bitowymi:( ale to
chyba tez da sie jakos zrozumiec;)

Może jakiś przykład jest w tej książce?

--
Piotr Chmiel
gg: 3440801
--0-529033954-1141680343=:50214--

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_spam_won_at_nospam_gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 22:35:23 +0100


Piotr Chmiel napisał(a):
Może jakiś przykład jest w tej książce?

Jest, mnozenie bez znaku liczby calkowitej, 8 bit przez liczbe ulamkowa <1.
ldi r16,100
ldi r17,q7(0.25)
fmul r16,r17

Wwyniku dostaniemy wartosc 0x1900 (r1:r0) czyli r1=25 (czesc calkowita)
r0=0 (czesc ulamkowa)

dla mnozenia prze liczbe wieksza od 1 trzeba zrobic tak:
ldi r17, (1<<7)+q7(0.25)
co da mnozenie przez 1.25

Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Piotr Chmiel <piotr_at_nospam_topaz.zsel.lublin.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 6 Mar 2006 22:05:28 +0100


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--0-273991404-1141679128=:50214
Content-Type: TEXT/PLAIN; charset=iso-8859-2; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 6 Mar 2006, TomaszB wrote:

dalej mam tak:
ldi r17,q7(0.019)

A co zwraca funcja q7(0.019)?

fmul r16,r17

Wynik działania funkcji FMUL to R1:R0 <- (Rd x Rr) << 1

--
Piotr Chmiel
gg: 3440801
--0-273991404-1141679128=:50214--

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_spam_won_at_nospam_gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Mon, 06 Mar 2006 22:46:44 +0100


Piotr Chmiel napisał(a):
On Mon, 6 Mar 2006, TomaszB wrote:

dalej mam tak:
ldi r17,q7(0.019)

A co zwraca funcja q7(0.019)?

Zwraca 0x02 co daje 0,015625

fmul r16,r17

Wynik działania funkcji FMUL to R1:R0 <- (Rd x Rr) << 1


Juz widze, gdzie jest blad:(
Trzeba bedzie dowiedziec sie, jak mnozyc liczbe 16 bitowa przez liczbe
1N.Q15.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Piotr Chmiel <piotr_at_nospam_topaz.zsel.lublin.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 7 Mar 2006 11:19:24 +0100


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--0-1105404812-1141726764=:61391
Content-Type: TEXT/PLAIN; charset=iso-8859-2; format=flowed
Content-Transfer-Encoding: 8BIT

On Mon, 6 Mar 2006, TomaszB wrote:

Piotr Chmiel napisał(a):
On Mon, 6 Mar 2006, TomaszB wrote:

dalej mam tak:
ldi r17,q7(0.019)

A co zwraca funcja q7(0.019)?

Zwraca 0x02 co daje 0,015625

Czyli wychodzi na to, że obliczenie jest poprawne:
0.015625 * 255 = 3.984375 czyli to co koledze wyszło (3 całkowie FC ułamek)

Funkcja q7(0.019) zwraca 0.015625 (0x02)

Trzeba bedzie dowiedziec sie, jak mnozyc liczbe 16 bitowa przez liczbe
1N.Q15.

Zgadzam się, aby obliczenie było dokładniejsze trzeba się przesiąść na
liczby 16 bitowe.

--
Piotr Chmiel
gg: 3440801
--0-1105404812-1141726764=:61391--

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 07 Mar 2006 11:43:22 +0100


Piotr Chmiel napisał(a):
Zgadzam się, aby obliczenie było dokładniejsze trzeba się przesiąść na
liczby 16 bitowe.

A moze kolega juz to przerabial i moglby podpowiedziec jak przeprowadzic
mnozenie liczby 16 bitowej przez liczbe 1n.q15?
Dziekuje
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: "T.M.F." <tfrancuz_at_nospam_nospam.mp.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 07 Mar 2006 12:41:21 +0100


A moze kolega juz to przerabial i moglby podpowiedziec jak przeprowadzic
mnozenie liczby 16 bitowej przez liczbe 1n.q15?

A nie prosciej zamiast tak kombinowac wykorzystac normalny zapis
stalopozycyjny. Mnozysz wartosc ADC*19 i dla 255 masz 4845, przyjmujesz,
ze trzy ostatnie cyfry to cyfry po przecinku i juz. Potrzebujesz wieksza
precyzje to mnozysz nie *19 a razy 196 i wtedy przyjmujesz 4 ostatnie
cyfry, ze sa po przecinku. Co wazne ciagle miescisz sie na 16 bitach.


--
Inteligentny dom - http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_spam_won_at_nospam_gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 07 Mar 2006 22:27:41 +0100


T.M.F. napisał(a):
A moze kolega juz to przerabial i moglby podpowiedziec jak
przeprowadzic mnozenie liczby 16 bitowej przez liczbe 1n.q15?

A nie prosciej zamiast tak kombinowac wykorzystac normalny zapis
stalopozycyjny. Mnozysz wartosc ADC*19 i dla 255 masz 4845, przyjmujesz,
ze trzy ostatnie cyfry to cyfry po przecinku i juz. Potrzebujesz wieksza
precyzje to mnozysz nie *19 a razy 196 i wtedy przyjmujesz 4 ostatnie
cyfry, ze sa po przecinku. Co wazne ciagle miescisz sie na 16 bitach.



Zrobilem to inaczej i w moim przekonaniu duzo prosciej.
Ustawiam ADC na wartosc referencyjna 2,56V co daje 0,01V na jednostke.
Mnoze wartosc razy 2 i mam w wyniku r1:r0 wartosc napiecia.
Teraz tylko konwersja pesudo BCD i ustawienie kropki po pierwszej cyfrze .
Cos tylko z dokladnoscia nie za bardzo, tylko nie wiem co lepiej
pokazuje stary elektroniczny multimetr czy moj uklad.
Blad moze pojawiac sie z tego, ze dla wyniku 255 napiecie jest 2,56 a
nie jak zakladam 2,55.
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Marcin Stanisz <mstanisz_at_nospam_poczta.bzdury.onet.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 7 Mar 2006 23:11:38 +0100


Dnia Tue, 07 Mar 2006 22:27:41 +0100, TomaszB napisał(a):
Cos tylko z dokladnoscia nie za bardzo, tylko nie wiem co lepiej
pokazuje stary elektroniczny multimetr czy moj uklad.
Blad moze pojawiac sie z tego, ze dla wyniku 255 napiecie jest 2,56 a
nie jak zakladam 2,55.

Spójrz sobie w dokumentacji, jaką "dokładność" ma wewnętrzne źródło
napięcia. Tylko się nie przestrasz ;)

Pozdrawiam
Marcin Stanisz
--

"A lie will go round the world before the truth has got its boots on"
Terry Pratchett, "Truth"

Poprzedni Następny
Wiadomość
Spis treści
From: TomaszB <bresio_at_nospam_spam_won.gazeta.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Wed, 08 Mar 2006 08:25:33 +0100


Marcin Stanisz napisał(a):
Spójrz sobie w dokumentacji, jaką "dokładność" ma wewnętrzne źródło
napięcia. Tylko się nie przestrasz ;)

Czyli lepiej bedzie podlaczyc swoje napiecie odniesienia i wysterowac ja
na najbardziej pasujaca wartosc. moze 2,55V albo 5,1 ;)
Pozdrawiam
TomaszB

Poprzedni Następny
Wiadomość
Spis treści
From: Piotr Chmiel <piotr_at_nospam_topaz.zsel.lublin.pl>
Subject: Re: [AVR]AtMega8 i ADC, dlaczego tak?
Date: Tue, 7 Mar 2006 12:43:28 +0100


This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.

--0-1252768139-1141731808=:61391
Content-Type: TEXT/PLAIN; charset=iso-8859-2; format=flowed
Content-Transfer-Encoding: 8BIT

On Tue, 7 Mar 2006, TomaszB wrote:

Piotr Chmiel napisał(a):
Zgadzam się, aby obliczenie było dokładniejsze trzeba się przesiąść na
liczby 16 bitowe.

A moze kolega juz to przerabial i moglby podpowiedziec jak przeprowadzic
mnozenie liczby 16 bitowej przez liczbe 1n.q15?

Przerabiam to razem z Wami. Nie bawiłem się rozkazami mnożenia w AVR.
Zato mam chyba to czego ci potrzeba:)

; ****************************************************************************
;* DESCRIPTION
;* Signed fractional multiply of two 16-bit numbers with 32-bit result.
;* USAGE
;* r19:r18:r17:r16 = ( r23:r22 * r21:r20 ) << 1
; ****************************************************************************
fmuls16x16_32:
clrr2
fmulsr23, r21;((signed)ah * (signed)bh) << 1
movwr19:r18, r1:r0
fmulr22, r20;(al * bl) << 1
adcr18, r2
movwr17:r16, r1:r0
fmulsur23, r20;((signed)ah * bl) << 1
sbcr19, r2
addr17, r0
adcr18, r1
adcr19, r2
fmulsur21, r22;((signed)bh * al) << 1
sbcr19, r2
addr17, r0
adcr18, r1
adcr19, r2

ps. kod trzeba doprowadzić do ładu - w sensie wywalić komentarze i
powstawiać gdzieniegdzie spacje :)

--
Piotr Chmiel
gg: 3440801
--0-1252768139-1141731808=:61391--