Hi,
here is code with I test the MHC5883L chip.
I can get some raw readings but I dont now are they correct.Range of readings are from 64000 to 1000.when I turn the module reading are change.

Code:
' HMC5883L_Demo.bs2 - This is a Demo program for the HMC5883L Compass
' Module (PN: 29133). It displays the compass heading north, east, south and west
' clockwise from north.
'
' Author.... (C) John A. Williams
'
' {$STAMP BS2p}
' {$PBASIC 2.5}
' ============================================================================
     define OSC 4

'KONFIGURACIJA LCD DISPLEJA 2X16

        DEFINE  LCD_DREG PORTB
       	DEFINE  LCD_DBIT 0
    	DEFINE  LCD_BITS 4
    	DEFINE  LCD_RSREG PORTB
    	DEFINE  LCD_RSBIT 4
    	DEFINE  LCD_EREG PORTB
    	DEFINE  LCD_EBIT  5
    	DEFINE  LCD_LINES 2
      	DEFINE  LCD_COMMANDUS 2000
    	DEFINE  LCD_DATAUS 40
 'SET UP PORTS
TRISA = %00111111    'port a je cijeli ulazni
TRISB = %00000000
TRISC = %11111111
TRISD = %00000000
TRISE = %1111
ADCON1 = 7	   ' PORTA i PORTE su digitalni  ISKLJUCI KOMPARATORE I ANALOGNE ULAZE
' -----[ Pins/Constants/Variables ]-------------------------------------------
SDA            var      PORTC.4                   
SCL            VAR      PORTC.3                   

WRITE_DATA     CON     $3C  'Used to perform a Write operation
READ_DATA      CON     $3D  'Used to perform a Read operation

MODE           CON     $02  'Read/Write Register, Selects the operating mode. Default = Single measurement
                             'Send $3C $02 $00 on power up to change to continuous measurement mode.
X_MSB          CON     $03  'Read Register, Output of X MSB 8-bit value.
X_LSB          CON     $04  'Read Register, Output of X LSB 8-bit value.
Z_MSB          CON     $05  'Read Register, Output of Z MSB 8-bit value.
Z_LSB          CON     $06  'Read Register, Output of Z LSB 8-bit value.
Y_MSB          CON     $07  'Read Register, Output of Y MSB 8-bit value.
Y_LSB          CON     $08  'Read Register, Output of Y LSB 8-bit value.
Cont_Mode      CON     $0
SCALEFACTOR    CON     4081 'SCALEFACTOR = 65536 * (255/4095) = 4081
SCALEOFFSET    CON     2048 'The output range of the HMC5883L is -2048 to 2047; therefore to get a 0 (LOWRANGE)to 4095 range
                            'to 4095 (HIGHRANGE) range 2048 must be added to the sensor value.
ATNFACTOR      CON     127  'the ATN function input range is -127 TO 127. In order to get the positive scaled range of
                            '0 to 255 into the range of -127 to 127, 127 must be subtracted.
LOWRANGE       CON     0    'see SCALEOFFSET
HIGHRANGE      CON     4095 'see SCALEOFFSET

X              VAR      Word 'x sensor measured value
Y              VAR      Word 'y sensor measured value
Z              VAR      Word 'z sensor measured value
brads          VAR      Word 'angle in brads
degr           VAR      Word 'angle in degrees
azimuth        VAR      Word 'value calculated using X ATN -Y
  degr=0
  
  
  
  
  
 PAUSE 500
  LCDOUT $FE,$01'clear DISPLAY
  LCDOUT $FE,$01,"test "
  PAUSE 500
  LCDOUT $FE,$01'clear DISPLAY
 
 
  
  
' -----[ Main Routine ]-------------------------------------------------------

PAUSE 10
   I2Cwrite SDA,SCL, $3c, $00, [$70]  '(8-average, 15 Hz default, normal measurement)                                   
   I2Cwrite SDA,SCL, $3c, $01, [$A0] ; $00 hoogste gain setting
   I2CWRITE SDA,SCL,WRITE_DATA,MODE, [cont_Mode]  ' Send continuous output command

main:
    LCDOUT $FE,$01'BRISI DISPLAY
   GOSUB GetRawReading                       ' Get RAW Compass reading

  'RAW X,Y,Z data...
 
  lCDOUT $FE,$80,   "X= " , sdec x
  LCDOUT $FE,$80+8, "Y= ",   sdec y
  LCDOUT $FE,$C0,   "Z= ",  sdec z        


  'Calculate Azimuth

  GOSUB GetAzimuth

  brads = azimuth     'get angle
  degr = brads */ 361 'convert to degrees
 
  LCDOUT $FE,$80,"Degree " , sdec degr
 
  pause 500
goto main

' -----[ Subroutines ]--------------------------------------------------------

GetRawReading:                                 'Compass module subroutine


    PAUSE 400                                  'Wait for new data to become available


    I2CREAD SDA,SCL, READ_DATA, X_MSB, [X.HIGHBYTE]  'Read the data starting at x_msb 3
    I2CREAD  SDA,SCL, READ_DATA ,X_LSB, [X.LOWBYTE]

   I2CREAD  SDA,SCL, READ_DATA, Z_MSB, [Z.HIGHBYTE]
   I2CREAD SDA,SCL, READ_DATA ,Z_LSB, [Z.LOWBYTE]
   
    I2CREAD SDA,SCL, READ_DATA, Y_MSB, [Y.HIGHBYTE]
    I2CREAD  SDA,SCL, READ_DATA ,Y_LSB, [Y.LOWBYTE]

RETURN

GetAzimuth:
'The output range of the HMC5883L is -2048 to 2047 and the input range of the ATN function
'is -127 to 127.  I used the method to scale the output to the input discribed in Parallax's Smart
'Sensors Student Guide v1 starting on page 76.
'SCALEFACTOR = 65536 * (255/4095) = 4081
'SCALEOFFSET = 2048
'ATNFACTOR = 127
'LOWRANGE = 0
'HIGRANGE = 4095 (2048 + 2047 = 4095)

    x = x + SCALEOFFSET
    x = (x MIN LOWRANGE  MAX HIGHRANGE) ** SCALEFACTOR - ATNFACTOR

    y = y + SCALEOFFSET
    y = (y MIN LOWRANGE MAX HIGHRANGE) ** SCALEFACTOR - ATNFACTOR


    azimuth = x ATN -y
   LCDOUT $FE,$c0,"azimuth " ,  DEC azimuth
 
RETURN