Ik ben opzoek naar een stuk asm code, die een 2 bytes getal omzet in 4 BCD getallen.
Eenheden, Tientallen, Honderdtallen en Duizendtallen.
Wie kan mij hieraan helpen ?
Ik was al bezig met: http://www.piclist.com/techref/microchip/math/radix/b2bu-16b5d.htm
Maar daar krijg ik vreemde waardes uit...
In de code heb ik 'RLF' vervangen door 'RLCF', omdat de 18F instruktie 'RLF' niet kent.
MOVLW B'00110110'
MOVWF DATA_HI
MOVLW B'11100101'
MOVWF DATA_LO
CALL Omzet routine oproepen
Geeft als uitkomst:
196 (wisseld)
122 (wisseld)
210
192
7
MMsoft,
Moet je applicatie erg snel zijn? Anders kun je de volgende braindead methode ook gebruiken:
- Loopje maken dat net zo vaak loopt als je getal (zijn dus twee loops 'om elkaar heen', voor elke byte een).
- In de loop tel je gewoon elke keer 1 tje op bij de laatste digit en kijkt of hij overflowt naar de volgende.
Zo wordt de code supersimpel, maar wel braindead (soms geeft dat niet) Nadeel is dat bij hoge getallen je erg veel cycles nodig hebt (stel max getal is 9999 decimaal met plm 20 instructies per loop, dan 200000 instructies voor uitkomst, bij 1us instruction time (4MHz PIC) is dat 0.2 seconden)
Fripster
<<Engineers make things work, Scientists wonder how they work >>
0,2 sec. is te traag.
Waarom zou de code: http://www.piclist.com/techref/microchip/math/radix/b2bu-16b5d.htm van die vreemde waardes geven ?
Ik mag toch aannemen dat die getest is...
Omdat er 'RLF' wordt gebruikt, is deze gemaakt voor een PIC16, maar waarom werkt deze niet op een PIC18 ?
[Bericht gewijzigd door MMSoft op ]
ik weet niet precies wat RLF met de carry doet. Probeer eens voor jouw RLCF een BCF STATUS, C te doen. Dan schuif je altijd nullen in.
En wat anders een oplossing is, pak gewoon een ander voorbeeld, staan er zoveel op. Ik zou geen tijd gaan verspillen aan iets wat niet direct werkt.
Op 16 september 2006 23:00:54 schreef MMSoft:
Waarom zou de code: http://www.piclist.com/techref/microchip/math/radix/b2bu-16b5d.htm van die vreemde waardes geven ?
Omdat je de code aan moet passen voor de PIC18, er zitten wat verschillen tussen de instructiesets (en het bank mechanisme)
Ik ben natuurlijk al druk aan het zoeken geweest...
Heb je tips, een duwtje in de juiste richting (of de oplossing) ?
Op 17 september 2006 12:54:43 schreef MMSoft:
Heb je tips, een duwtje in de juiste richting (of de oplossing) ?
Ik heb gewoon de code geknipt en geplakt van de webpagina en de aanpassing onderin van die pagina gemaakt en het werkt gewoon. Zit je niet met de banken te klooien ??
Waar staan de variabelen en waarheen wijst BSR ??
... en de aanpassing onderin van die pagina gemaakt...
Ik had dat stukje niet gezien.
...Waar staan de variabelen en waarheen wijst BSR ??...
De variable staan onderin bank 0.
Waar BSR heen wijst weet ik niet, dat moet ik testen.
Ik ga met die PIC18 wijzigingen aan de slag...
Op 18 september 2006 17:11:46 schreef MMSoft:
[...]Ik had dat stukje niet gezien.
[...]De variable staan onderin bank 0.
Gewoon BSR clearen, dan maakt het niet uit of je via de access bank of BSR werkt.
Het omdraaien van die instructies (add en dec) was noodzakelijk omdat bij de 18F reeks het carry bit gewijzigd kan worden, bij de 16F reeks is dat niet zo (alleen het zero bit)
