Code:
	'PIC 18F1220 port/pin allocations
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'PortA.0/Pin 1 = Serial TX
'PortA.1/Pin 2 = LED
'PortB.0/Pin 8 = I2C SCL clock
'PortB.1/Pin 9 = I2C SDA data
 
' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
'Config Directive settings for MPASM (fuses)
 
@    __CONFIG  _CONFIG1H, _IESO_OFF_1H & _FSCM_OFF_1H & _INTIO2_OSC_1H
@    __CONFIG  _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_27_2L
@    __CONFIG  _CONFIG2H, _WDT_ON_2H & _WDTPS_32K_2H
@    __CONFIG  _CONFIG3H, _MCLRE_OFF_3H
@    __CONFIG  _CONFIG4L, _DEBUG_OFF_4L & _LVP_OFF_4L & _STVR_OFF_4L
@    __CONFIG  _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L
@    __CONFIG  _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
@    __CONFIG  _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L
@    __CONFIG  _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
@    __CONFIG  _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L
@    __CONFIG  _CONFIG7H, _EBTRB_OFF_7H   
 
    DEFINE OSC 8 '8Mhz clock used.
     
' Define some constants if needed
        
' Software Defines (variables and pins)
    Cal_table   var word[11]         '11 word array to store calibration data
    lUpres      var long             'Long variable for Uncompensated Pressure
    lTemp_Var   var Long             'Long temporary variable
    Temp_Var    var byte             'Byte temp variable 
    Temp_Var2   var Word	         'Word temp variable
    Temp_Var3   var word             'Word temp variable
    UTemp       var word             'uncompensated temp reading
'    UPres       var word             'uncompensated pressure reading
    i2c_Reg     var Byte             'variable for target i2c register address
    CPIN        var     PortB.0       ' I2C clock pin 
    DPIN        var     PortB.1       ' I2C data pin
    SO          Var     PortA.0        'Serial out pin
    LED         var     PortA.1        'Indicator LED, via 500ohm to +3.3V
    
'Alias's for calibration data in the sensor to match the Bosch parameter list names
    AC1     var     Cal_table[0]      '
    AC2     var     Cal_table[1]     'BMP085 has 11 16bit values stored in EEPROM
    AC3     var     Cal_table[2]     'First byte is at $AA last at $BF, two bytes per cal value
    AC4     var     Cal_table[3]     'Lowbyte is MSB (e.g $AA), Highbyte is LSB (e.g. $AB)
    AC5     var     Cal_table[4]     'some values are signed (not AC4, AC5, AC6)
    AC6     var     Cal_table[5]    
    B1      var     Cal_table[6]
    B2      var     Cal_table[7]
    MB      var     Cal_table[8]
    MC      var     Cal_table[9]    
    MD      var     Cal_table[10]    
    
' Initialize Processor - check for each PIC type 
' -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    ADCON1 = %11111111              'Turn off all AD's     
'    OSCCON =  %01100111     'set INTRC to 4 MHZ    
    OSCCON = %01110111     'set INTRC to 8 MHZ
'    OSCTUNE = 0                      'OSC trim set to Null 
'    Include "modedefs.bas"          ' Include serial modes    
' Set initial state of port pins as Input or Output
    TRISA = %11111100    'Input(0 = output, 1 = Input)
    TRISB = %11111100    '
    
' PIC initialization code
        Low So      'Must start low, or you get rubbish on the LCD at PIC boot up.
        Low LED     'LED on
        pause 5000  'led on for x seconds
        High LED    'LED off
        
        Serout2 SO,16780,[$FE,$01]               ' Clear LCD & home LCD cursor.
        pause 10                                ' wait for LCD to catch up
        Serout2 SO,16780,["   FrSky Vario    "]  ' Serial print 
        Serout2 SO,16780,[$FE,$C0]               ' Shift cursor to line2
        Serout2 SO,16780,[" Development Jig  "]  ' Serial print 
        Pause 3000                               'wait three seconds
        
        i2c_Reg =$AA                            'Start address of the BMP085 calibration data
        I2CREAD DPIN,CPIN,$EF,I2C_REG,[STR Cal_table\11],cal_error  'Read 11 reversed words out of sensor
        AC1 = (AC1.lowbyte<<8) + AC1.highbyte   'swap MSB and LSB of each to use in PBP (un-reverse then)    
        AC2 = (AC2.lowbyte<<8) + AC2.highbyte   'device stores the MSB in the Low byte, LSB in the High byte
        AC3 = (AC3.lowbyte<<8) + AC3.highbyte   
        AC4 = (AC4.lowbyte<<8) + AC4.highbyte          
        AC5 = (AC5.lowbyte<<8) + AC5.highbyte
        AC6 = (AC6.lowbyte<<8) + AC6.highbyte
        B1 = (B1.lowbyte<<8) + B1.highbyte
        B2 = (B2.lowbyte<<8) + B2.highbyte
        MB = (MB.lowbyte<<8) + MB.highbyte
        MC = (MC.lowbyte<<8) + MC.highbyte
        MD = (MD.lowbyte<<8) + MD.highbyte 
                               
        Serout2 SO,16780,[$FE,$01]             ' Clear LCD & home LCD cursor. 
        Pause 10                              ' wait for LCD to catch up
'Main loop -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Main:  
        Serout2 SO,16780,[$FE,$02]             'home LCD cursor, not cleared.                           
         
        Gosub Read_temp                        'get Temp via I2C
        lTemp_var = 0                          'Clear the last pressure reading
        For Temp_var = 0 to 9                  'start of 10x averaging routine
        Gosub Read_pres                        'get Long uncompensated pressure via I2C
        lTemp_var = ltemp_var + lUpres
        Next Temp_var
        lUpres = lTemp_Var / 10               'finish of 10x Averaging routine
        
        Serout2 SO,16780,["UT=",DEC utemp," "]       'Send Word size number to LCD
        Serout2 SO,16780,["UP=",DEC luPres," "]      'Send Word size number to LCD
                
'lets see whats in the cal data array for a checking math in Excel - Rem out Utemp and lUpres above 
'        Serout2 SO,16780,[$FE,$2]               ' Shift cursor to line_1 (128+addr) Note-Rem out Utemp and lUpres above
'        Serout2 SO,16780,[SDEC AC1," ",SDEC AC2," ",SDEC AC3]   'display three signed cal values
        Serout2 SO,16780,[$FE,$C0]               ' Shift cursor to line_2
        Serout2 SO,16780,[DEC AC4," ",DEC AC5," ",DEC AC6]   'display three unsigned cal values
        Serout2 SO,16780,[$FE,$94]               ' Shift cursor to line_3  
        Serout2 SO,16780,[SDEC B1," ",SDEC B2]   'display two signed cal values
        Serout2 SO,16780,[$FE,$D4]               ' Shift cursor to line_4          
        Serout2 SO,16780,[SDEC MB," ",SDEC MC," ",SDEC MD]  'display three signed cal values
 '        pause 100
        Toggle LED                                'flash the 'im alive' LED
        Goto main
        
'SUBROUTINES -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-      
Read_pres: 
        i2c_Reg = $F4                         '$F4 is the control register address
        I2CWRITE DPIN,CPIN,$EE,I2C_REG,[$F4]  ' Write $34+(oss << 6) to set pressure conversion 
        Pause 30                              ' Delay 10ms after each write (30mS for HiRes results (oss=3))
        i2c_Reg = $F6                         '$F6 is the result register MSB
        I2CREAD DPIN,CPIN,$EF,I2C_REG,[lUpres],I2C_error  'Read pressure MSB, LSB, XLSB, $F9(not needed).
        lUpres = lUpres >> 13                 'remove result from $F9 (>>8) + left shift result back to 19bits (>>5)
                                              'it's because PBP reads four bytes if [Var] is a long...
        return                                'we only want top 19bits of the result.
              
Read_temp:
        i2c_Reg = $F4                         '$F4 is the control register address
        I2CWRITE DPIN,CPIN,$EE,I2C_REG,[$2E]  ' Write $2E to set temperature conversion 
        Pause 10                              ' Delay 10ms after each write
        i2c_Reg = $F6                         '$F6 is the result register MSB
        I2CREAD DPIN,CPIN,$EF,I2C_REG,[Utemp],I2C_error  'Read temperature MSB, LSB.
        return
'trap and display I2C problems        
I2C_error:     
        Serout2 SO,16780,[$FE,$01]             ' Clear LCD & home LCD cursor. 
        Pause 10                              ' wait for LCD to catch up
        Serout2 SO,16780,["i2c bus read error"]       'no ACK from I2C device        
        pause 2000        
        Toggle LED
        Goto main
         
Cal_error:
        Serout2 SO,16780,[$FE,$01]             ' Clear LCD & home LCD cursor. 
        Pause 10 
        Serout2 SO,16780,["i2c cal read error "]       '        
        
End
 Now I have to convert this code below to PBPL and get a 'compensated' reading of the temperature and pressure....  Quite a few intermediate variables are needed.
Bookmarks