JAL 16f628 8bits registerwaarde ontleden in factoren

Wellicht een beetje cryptische omschrijving, ik weet even geen betere..

Wat ik nodig heb is een zet in de juiste richting, met JAL en een 16F628 ben ik een propeller-clock achtig display aan het maken. (POV display, een draaiende kolom van 8 rijen leds die in 5 perioden per karakter wordt aangestuurd, door traagheid van het oog wordt een zichtbaar karakter gevormd) --> http://www.bobblick.com/techref/projects/propclock/propclock.html

Dus op een van de poorten (16f628, portB in dit geval) wordt een bitmap kolom voor kolom als karakter weergegeven.
Hierop moet naast text (dat lukt allemaal wel) een waarde worden weergegeven vanuit een 8-bits register. Dat kan dus zijn een waarde van 0 - 255.
Ik kan voorgedefinieerde getallen wel weergeven (dat is hetzelfde als text), maar vanuit een registerwaarde (integer) omzetten naar drie karakters kom ik even niet uit.

Een waarde omzetten naar ascii ( chr() functie ) is geen oplossing, want dan krijg ik vanuit de registerwaarde een corresponderend ascii karakter. Wat ik wil is een omzetting van registerwaarde naar 3 getallen, drie karakters, 0-2 voor de honderdtallen, 0-5 voor de tientallen, en 0-9 voor de eenheden.
Wie helpt me op weg..

Zacht kickje,
Zijn er eventueel nog JAL gebruikers online die zich willen verdiepen in mijn ietwat onduidelijke vraagstelling?

mischien kan dit je wat verder helpen.
http://members.upc.nl/w.akker80/william.htm
het is volgens mij met assmbler gamaakt maar een beetje denk werk en je kan zelf een .jal maken.

Eerst delen door 100, het aantal maal is de honderdtallen.
Dit aantal * 100 aftrekken van het begin getal.
Met de rest delen door 10, het aantal maal is de tientallen.
Dit aantal * 10 aftrekken van de vorige uitkomst.
De rest is het aantal eenheden.

Voorbeeld: 123

123/100 = 1x <- dit zijn de honderdtallen
1x100 = 100
123-100 = 23
23/10 = 2x <- dit zijn de tientallen
2x10 = 20
23-20 = 3 <- dit zijn de eenheden

Deze manier is echter behoorlijk 'duur' qua processor cycli en geheugen aangezien delen en vermenigvuldigen in code nogal veel code kost.
Ik weet zeker dat er veel efficiëntere manieren zijn, maar bovenstaande zou wel moeten werken.

Ik kan daar even geen .asm files vinden die met die magic-ball te maken hebben..
Overigens wel een project waar je U tegen zegt, RGB, graphics, scrollende text... de mijne is ff wat simpeler..

alle hulp welkom...

@mbbneon

ik had zoiets ook wel zitten uitknobbelen, maar wat doet JAL met de waarde achter de komma?

dus als je 123 deelt door honderd, dan heb je 1,23 waar blijft die .23?

Hier is het linkje op de site van william.
Linkje

Ik ga dit gewoon eens proberen,
de decimalen zullen wel verdwijnen na deling.

Ook al kost het veel proc tijd en code ruimte, als het werkt ben ik al blij.

nettere oplossingen iemand?

je kan er ook hardware tegenaan gooien.

Max is 255, dus je hebt 10 bits nodig.
2 voor honderdtallen
4 voor tientallen en
4 voor getallen onder de tien.

Da's dus 255x2 geheugenplaatsen, b.v. een i2c eeprom (of twee)
Stel 1 voor de honderdtallen en 1 voor tientallen en getallen <10

Stel getal=199
Dan geheugenplaats 199 van 1e vullen met 00000001 (1e zes bits altijd 0). Resultaat hier kan zijn 00000000, 00000010 of 00000011
Inhoud plaats 199 van 2e: 10011001

Decoderen van een getal kan dan door het uitlezen van de geheugenplaatsen en wat masken/schuiven met bits.

Ik heb inmiddels de delen door 100 : 10 : 1 functie uitgewerkt, en dit werkt prima..
het zal best inefficiënt zijn, maar voor de toepassing uitstekend functioneel.


in JAL:

procedure DisplayText is
    var byte digit1,digit2,digit3
    port_b = 0x_00                    
    delay_100us ( wacht * 10 )
    
    digit1 =  rpm / 100
    rpm = rpm - ( digit1 * 100 )
    digit2 =  rpm / 10
    rpm = rpm - ( digit2 * 10 )
    digit3 = rpm
    ..
    ..
    en nog wat code..

end procedure

bedankt voor het meedenken!