hola amigo a ver si me puedes ayudar con mi proyecto de un sensor de temperatura con pic16f688
y un lcd de 2x16 bueno ala hora de compilar el codigo fuente en mikroc me sale error ahi te paso el codigo gracias y espero tu ayuda:
   /*
    Digital Room Thermometer using PIC16F688
    Copyright@Rajendra Bhatt
    July 13, 2010
  */
   // LCD module connections
  sbit LCD_RS at RC4_bit;
  sbit LCD_EN at RC5_bit;
  sbit LCD_D4 at RC0_bit;
  sbit LCD_D5 at RC1_bit;
  sbit LCD_D6 at RC2_bit;
  sbit LCD_D7 at RC3_bit;
  sbit LCD_RS_Direction at TRISC4_bit;
  sbit LCD_EN_Direction at TRISC5_bit;
  sbit LCD_D4_Direction at TRISC0_bit;
  sbit LCD_D5_Direction at TRISC1_bit;
  sbit LCD_D6_Direction at TRISC2_bit;
  sbit LCD_D7_Direction at TRISC3_bit;
  // End LCD module connections
   
  // Back Light Switch connected to RA1
  sbit BackLight at RA1_bit;
  // Define Messages
  char message0[] = "LCD Initialized";
  char message1[] = "Room Temperature";
   
  // String array to store temperature value to display
  char *tempC = "000.0";
  char *tempF = "000.0";
   
  // Variables to store temperature register values
  unsigned int temp_whole, temp_fraction, temp_value;
  signed int tempinF, tempinC;
  unsigned short C_Neg=0, F_Neg=0, TempH, TempL;
   
  void Display_Temperature() {
    // convert Temp to characters
   if (!C_Neg) {
       if (tempinC/1000)
     // 48 is the decimal character code value for displaying 0 on LCD
       tempC[0] = tempinC/1000  + 48;
       else tempC[0] = ' ';
    }
    tempC[1] = (tempinC/100)%10 + 48;             // Extract tens digit
    tempC[2] =  (tempinC/10)%10 + 48;             // Extract ones digit
   
    // convert temp_fraction to characters
    tempC[4] =  tempinC%10  + 48;         // Extract tens digit
   
    // print temperature on LCD
    Lcd_Out(2, 1, tempC);
   
    if (!F_Neg) {
       if (tempinF/1000)
        tempF[0] = tempinF/1000  + 48;
       else tempF[0] = ' ';
    }
   
    tempF[1] = (tempinF/100)%10 + 48;             // Extract tens digit
    tempF[2] =  (tempinF/10)%10 + 48;
    tempF[4] =  tempinF%10  + 48;
    // print temperature on LCD
    Lcd_Out(2, 10, tempF);
  }
   
  // ISR for LCD Backlight
  void interrupt(void){
    if (INTCON.INTF == 1)          // Check if INTF flag is set
       {
       BackLight =~BackLight;  // Toggle Backlight
       Delay_ms(300) ;
       INTCON.INTF = 0;       // Clear interrupt flag before exiting ISR
       }
  }
   
  void main() {
    TRISC = 0x00 ;
    TRISA = 0b00001100; //  RA2, RA3 Inputs, Rest O/P's
    ANSEL =   0b00000000;
    PORTA =   0b00000000;            //  Start with Everything Low
    PORTC =   0b00000000;            //  Start with Everything Low
    CMCON0 =  0b00000111;
    Lcd_Init();                        // Initialize LCD
    Lcd_Cmd(_LCD_CLEAR);               // CLEAR display
    Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
    BackLight = 1;
    Lcd_Out(1,1,message0);
    Delay_ms(1000);
    Lcd_Out(1,1,message1);             // Write message1 in 1st row
    // Print degree character
    Lcd_Chr(2,6,223);
    Lcd_Chr(2,15,223);
   // different LCD displays have different char code for degree
   // if you see greek alpha letter try typing 178 instead of 223
   
    Lcd_Chr(2,7,'C');
    Lcd_Chr(2,16,'F');
   
    // Interrupt Setup
      OPTION_REG = 0x00;   // Clear INTEDG, External Interrupt on falling edge
      INTCON.INTF = 0;     // Clear interrupt flag prior to enable
      INTCON.INTE = 1;     // enable INT interrupt
      INTCON.GIE  = 1;     // enable Global interrupts
   
    do {
    //--- perform temperature reading
      Ow_Reset(&PORTA, 5);      // Onewire reset signal
      Ow_Write(&PORTA, 5, 0xCC);   // Issue command SKIP_ROM
      Ow_Write(&PORTA, 5, 0x44);   // Issue command CONVERT_T
      INTCON.GIE  = 1;     // 1-wire library disables interrpts
      Delay_ms(600);
      Ow_Reset(&PORTA, 5);
      Ow_Write(&PORTA, 5, 0xCC);    // Issue command SKIP_ROM
      Ow_Write(&PORTA, 5, 0xBE);    // Issue command READ_SCRATCHPAD
   
      // Read Byte 0 from Scratchpad
      TempL =  Ow_Read(&PORTA, 5);
      // Then read Byte 1 from Scratchpad
      TempH = Ow_Read(&PORTA, 5);
      temp_value = (TempH << 8)+ TempL ;
      // check if temperature is negative
      if (temp_value & 0x8000) {
        C_Neg = 1;
        tempC[0] = '-';
        // Negative temp values are stored in 2's complement form
        temp_value = ~temp_value + 1;
        }
      else C_Neg = 0;
      // Get temp_whole by dividing by 2
      temp_whole = temp_value >> 1 ;
      if (temp_value & 0x0001){  // LSB is 0.5C
         temp_fraction = 5;
         }
      else temp_fraction = 0;
      tempinC = temp_whole*10+temp_fraction;
   
      if(C_Neg)  {
       tempinF = 320-9*tempinC/5;
       if (tempinF < 0) {
        F_Neg = 1;
        tempF[0] = '-';
        tempinF = abs(tempinF);
        }
       else F_Neg = 0;
       }
      else tempinF = 9*tempinC/5 + 320;
      //--- Format and display result on Lcd
      Display_Temperature();
   
    } while(1);
  
  [FONT="]}
 
 [/FONT]