Hallo,

Ik moet een programma voor de PIC16F870 dat een 16 bits deling kan uitvoeren. Omdat er maar 8 bits in een variabele passen, en het getal dat gedeelt moet worden hoger is als 255, moeten er dus 2 variabelen gebruikt worden. Stel dat het getal waardoor ik wil delen ook hoger is als 255 en dus ook in 2 variabelen gezet moet worden, hoe kan ik deze deling dan uitvoeren?

bijvoorbeeld voor de deling: 30.000 / 350.

Ik hoop dat iemand mij hiermee kan helpen want ik kom er zelf niet uit.(ben namelijk nog een leek hierin)

Mvg,

Daan

check ff dit topic

http://www.circuitsonline.net/forum/view/9368

Zie application note 617 van microchip

PDF bestand:

http://www.microchip.com/download/appnote/library/00617.pdf

Zip file met code (lekker knippen en plakken)

http://www.microchip.com/download/appnote/library/00617.zip

[Bericht gewijzigd door Xenobinol op ]

Bedankt voor je link!

Voor mij is dit alleen maar een hele kleine stap in de goede richting. Omdat ik deze code nu om moet zetten naar een code voor de PIC16F870.

Ik heb nu de volgende vragen:

1. Wat is "ALUSTA"? Dit kom je namelijk niet tegen bij de PIC16F870.

2. #if SIGNED
CALL S_SIGN
#endif

Hoe zou dit eruit zien in code voor de PIC16F870?
En waar staat die S_SIGN die aangeroepen moet worden?

3. Kan ik voor ACCbHi en ACCbLo gewoon 2 variabelen nemen of moet dit op een andere manier?

Mvg,

Daan(die baalt dat hij hier zo weinig van af weet)

Ik zal ff voor je kijken hoor..

ALUSTA --> waar kwam je dit tegen? klinkt als een constante

#if SIGNED
CALL S_SIGN
#endif

Dit zijn "directives" en deze commando's worden dus niet vertaald in object code maar worden gebruikt om de assembler instructies te geven.
In dit geval: als SIGNED de waarde "true" heeft (= 1) dan wordt de routine S_SIGN aangeroepen.
Dit noemt men voorwaardelijk assembleren.

Tja je wilt 16 bits berekeningen doen dus je hebt inderdaad twee registers nodig voor 16 bits data
"ACCbHi en ACCbLo" bijvoorbeeld.

Gebruik een high level taal ipv van asm, dan doet de compiler dit voor jou, dan kan je ook float gebruiken anders heb je geen decimalen.

3GL en hogere talen hebben ook zo weer hun beperkingen, en euh zo'n deling stelt niks voor hoor

Bedankt voor de reacties!

Ik ben nu een heel eind op weg geholpen. Ik heb nog iemand gevonden die me kan helpen met het omzetten van een 16bits deler.

Mvg,

Daan