Electronic Projects, forums and more.

Go Back   Electronic Circuits Projects Diagrams Free > Electronics Categories > Micro Controllers


Micro Controllers Discuss all aspects of micro controllers - building them, coding them, etc. All controllers are welcome - PIC, BASIC, Z8 Encore!, etc.

Reply
 
LinkBack Thread Tools Display Modes
Old 14th June 2007, 04:30 AM   (permalink)
Default division include floating point...

i m using PIC16F877, Assembly language..

if i want to do math division, how should i do to make sure the LCD will also show floating point like 1/4=0.25(two decimal point)...

i had a division program, but the LCD didn't show result in two decimal point..1/4=0..

thanks..
meera83 is offline  
Old 14th June 2007, 07:47 AM   (permalink)
Default

hi meera,
Are you using the microchip.com floating point subroutines?

Can you post the code that you are using, maths and LCD driver/conversion subr?
__________________
Eric
"Good enough is Perfect"

PIC tutorials:
Gramo's: www.digital-diy.net/
Bill's: www.blueroomelectronics.com/
ericgibbs is offline  
Old 14th June 2007, 03:36 PM   (permalink)
Default

You also need to consider if you really need floating point?, most applications work fine with integers - much faster, much smaller, and more accurate - simply insert the decimal point in the display routines.

For example - don't use dollars and cents ($4.23), use just cents instead (423 cents) - this is how spreadsheets do maths for money, and for the same reasons.
__________________
PIC programmer software, and PIC Tutorials at:
http://www.winpicprog.co.uk
Nigel Goodwin is offline  
Old 15th June 2007, 09:07 PM   (permalink)
Default

I agree with Nigel. Scale your values and stick with Integer arithmetic. It's simpler. Then insert the decimal point manually.

Take 12-bit two's compliment sign extended Dallas 18B20 Temperature Sensor data, for example. The 12-bit binary data represents °Celcius in 0.0625° increments, or put another way, °Celcius*16. By scaling the formulas you can get away with a simple 8x16 multiply routine, a simple divide-by-16 routine, and a simple binary-to-bcd routine to provide decimal output to 1 decimal place (you still have to insert the decimal point manually).
Code:
;******************************************************************
;
;  BC2DC - convert binary °C*16 to decimal °C*10 in D3:D0 vars
;
;  formula is: °C*10 = (10*(Celsius*16))/16
;                    = (10*(TempH:TempL))/16
;
;  D3:D0 result '-250' to '1250' (°C*10)
;
BC2DC
        movlw   d'10'           ; multiplier 10                   |B0
        call    Multiply        ; do 10 x TempH:TempL             |B0
        goto    Div16           ;                                 |B0

;******************************************************************
;
;  BC2DF - convert binary °C*16 to decimal °F*10 in D3:D0 vars
;
;  formula is: °F*10 = (18*(Celsius*16)+(320*16))/16
;                    = (18*(TempH:TempL)+( 5120))/16
;
;  D3:D0 result '-670' to '2570' (°F*10)
;
BC2DF
        movlw   d'18'           ; multiplier 18 (9/5*10)          |B0
        call    Multiply        ; do 18 x TempH:TempL             |B0
;
;  add (32 * 10 * 16) to result
;
        movlw   low (.320*.16)  ; add (320 * 16) to Product       |B0
        addwf   ProdL,F         ;                                 |B0
        skpnc                   ;                                 |B0
        incf    ProdH,F         ;                                 |B0
        movlw   high (.320*.16) ;                                 |B0
        addwf   ProdH,F         ;                                 |B0
        skpnc                   ;                                 |B0
        incf    ProdU,F         ;                                 |B0
;
;  divide result by 16
;
Div16
        movlw   d'4'            ;                                 |B0
        movwf   Count           ;                                 |B0
DivNext
        clrc                    ; clear C                         |B0
        rrf     ProdH,F         ;                                 |B0
        rrf     ProdL,F         ;                                 |B0
        decfsz  Count,F         ; all done?                       |B0
        goto    DivNext         ; no, branch, else                |B0
;
;  check for negative number result
;
        bcf     TempH,7         ; clear "negative" flag           |B0
        btfss   ProdH,3         ; negative result?                |B0
        goto    Bin2Dec         ; no, branch, else                |B0
;
;  convert it to a postive number
;
        bsf     TempH,7         ; set "negative" flag             |B0
        movf    ProdL,W         ; temperature low                 |B0
        sublw   h'00'           ; two's complement it             |B0
        movwf   ProdL           ; ^ is that a verb (grin)?        |B0
        movf    ProdH,W         ; temperature high in W           |B0
        skpc                    ; borrow?  no, skip, else         |B0
        incf    ProdH,W         ; temperature high + 1 in W       |B0
        sublw   h'00'           ; two's complement it             |B0
        movwf   ProdH           ;                                 |B0
;
;  Peter Hemsley's 12-bit Bin_to_BCD (ProdH:ProdL binary input
;  and D3:D0 unpacked BCD output)
;
Mike, K8LH is offline  
Old 17th June 2007, 05:21 PM   (permalink)
Default

Used fixed point binary numbers, look it up on Wikipedia!
__________________
I also post at the following sites:
http://www.stop-microsoft.org http://www.heated-debates.com
Screen name: Aloone_Jonez
And http://www.silicontronics.com, same screen name as here.
Hero999 is online now  
Reply

Bookmarks

Thread Tools
Display Modes



Similar Threads
Title Starter Forum Replies Latest
Looks simple enough. But..... hjl4 Micro Controllers 3 29th January 2007 12:17 PM
SIMPLE ADC PROBLEM neelam29 Micro Controllers 2 9th March 2006 09:46 AM
Can PIC16F877 do floating point math? stevenlkz Micro Controllers 5 12th June 2005 06:00 PM
ya mari_69 Micro Controllers 4 7th June 2004 02:29 PM



All times are GMT. The time now is 11:18 PM.


Electronic Circuits  |  Learning Electronics
Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.

eXTReMe Tracker