OSDN Git Service

[POWER] Wait correct time on idle(), idle_time_ms().
authorK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 25 Jul 2013 04:13:00 +0000 (13:13 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Thu, 25 Jul 2013 04:13:00 +0000 (13:13 +0900)
[WIP] Try to work with Microchip's XC8, still I2C is not running :-(

12 files changed:
adc_int.c
akc6955.c
helps.c
helps.h
i2c_io.c
idle.c
iodef.h
ioports.c
main.c
menu.c
nbproject/Makefile-genesis.properties
nbproject/configurations.xml

index 223031e..8bdc38a 100644 (file)
--- a/adc_int.c
+++ b/adc_int.c
 #include "adc_int.h"
 void intadc_init(void)
 {
-#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
+#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22) || \
+     defined(_18F23K22)  || defined(_18F24K22)  || defined(_18F25K22)  || defined(_18F26K22)
+
     ANSELA = AN_A_VAL;
     ANSELB = AN_B_VAL;
     ANSELC = AN_C_VAL;
 #endif
-#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
+#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) || \
+      defined(_18F23K20)  || defined(_18F24K20)  || defined(_18F25K20)  || defined(_18F26K20)
+
     ANSEL=  _ADC_INITF;
     ANSELH = _ADCH_INITF;
 #endif
-#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
+#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \
+    defined(_18F43K20)  || defined(_18F44K20)  || defined(_18F45K20)  || defined(_18F46K20)
     ANSEL = 0x00;
     ANSELH = 0x00;
     ANSELbits._ADC_INITF = 1;
index 170027b..15eba7b 100644 (file)
--- a/akc6955.c
+++ b/akc6955.c
@@ -53,7 +53,9 @@ void akc6955_writecmd(unsigned char reg, unsigned char data)
     i2c_close();
     delay100tcy(2);
 #else
-    OpenI2C(MASTER, SLEW_OFF);
+    OpenI2C(MASTER, SLEW_ON);
+    SSPADD = 0x5;
+//    IdleI2C();
     StartI2C();
     WriteI2C(0x20);
     //delay1ktcy(8);
@@ -64,7 +66,6 @@ void akc6955_writecmd(unsigned char reg, unsigned char data)
     StopI2C();
  //   delay1ktcy(8);
     CloseI2C();
-//    CLOSEASMASTER();
 #endif  //    i2c_idle();
 }
 
@@ -74,10 +75,6 @@ unsigned char akc6955_readcmd(unsigned char reg)
     //    OPENASMASTER();
 #ifdef __SDCC
     i2c_open(I2C_MASTER, I2C_SLEW_ON, 5);
-#else
-    OpenI2C(MASTER, SLEW_OFF);
-#endif
-#ifdef __SDCC
     I2C_START();
     i2c_writechar(0x20);
     i2c_writechar(reg);
@@ -90,6 +87,9 @@ unsigned char akc6955_readcmd(unsigned char reg)
     I2C_STOP();
     i2c_close();
 #else
+    OpenI2C(MASTER, SLEW_ON);
+    SSPADD = 0x5;
+//    IdleI2C();
     StartI2C();
     WriteI2C(0x20);
   //  delay1ktcy(8);
diff --git a/helps.c b/helps.c
index 657078a..8992965 100644 (file)
--- a/helps.c
+++ b/helps.c
@@ -94,7 +94,7 @@ void setup_help(void)
 
 }
 
-unsigned char printhelp_2lines(char *l1, char *l2)
+unsigned char printhelp_2lines(const char *l1, const char *l2)
 {
     _CLS();
     _LOCATE(0,0);
diff --git a/helps.h b/helps.h
index ef94a95..bbb866d 100644 (file)
--- a/helps.h
+++ b/helps.h
@@ -37,7 +37,8 @@
 extern "C" {
 #endif
 
-    extern unsigned char printhelp_2lines(char *l1, char *l2);
+    extern unsigned char printhelp_2lines(const char *l1, const char *l2);
+    extern unsigned char numeric_help(void);
     extern void updown_help(void);
     extern void mainmenu_help(void);
     extern void  setup_help(void);
index b79909e..253c400 100644 (file)
--- a/i2c_io.c
+++ b/i2c_io.c
@@ -28,7 +28,9 @@
 
 #include <stdarg.h>
 #include <stdio.h>
+#ifdef __SDCC
 #include <pic18fregs.h>
+#endif
 
 #include "i2c_io.h"
 
diff --git a/idle.c b/idle.c
index 289e99c..ba69a49 100644 (file)
--- a/idle.c
+++ b/idle.c
@@ -61,23 +61,26 @@ void stop_idle(void)
 void idle(unsigned int initial)
 {
 
+    unsigned int i;
    WDTCONbits.SWDTEN = 0; // Lame WDT OFF.
    /* Enable IDLE */
-   OSCCONbits.IDLEN = 1;
-   INTCONbits.TMR0IF = 0;
-   INTCONbits.TMR0IE = 1; // Enable tmr0 as interrupt and clear interrupt flags.
    /* Set TMR0 for interrupt*/
    /* Pre-scaler: 1/2, PSA=1(ON), TOSE=0, T0CS=0(INTERNAL), T08BIT=0(16bit), TMR0ON=1(START) */
    /* 1Tick = 1/1000 ms*/
    T0CON = 0b00001000; // 1/2
+   OSCCONbits.IDLEN = 1;
+   INTCON2bits.TMR0IP = 0;
+   INTCONbits.TMR0IF = 0;
+   INTCONbits.TMR0IE = 1; // Enable tmr0 as interrupt and clear interrupt flags.
 //   TMR0H = initial >> 8; // Write order : L->H
+   TMR0H = initial >> 8; // Write order : H->L
    TMR0L = initial & 0xff;
-   TMR0H = initial >> 8; // Write order : L->H
    T0CONbits.TMR0ON = 1; // Start
-//   do {
+  do {
        Sleep();
 //       i = TMR0H << 8 + TMR0L; // Check if IDLE-Timer was elapsed.
-//   } while(i < 3); // Dead area : 0-2.
+   } while(INTCONbits.TMR0IF == 0); // Dead area : 0-2.
+   INTCONbits.TMR0IF = 0;
    WDTCONbits.SWDTEN = 1; // WDT ON.
 }
 
@@ -88,7 +91,7 @@ void idle_time_ms(unsigned int ms)
     unsigned int upper;
 
     if(ms == 0) return;
-    upper = (ms & 0xffc0) >> 10;
+    upper = (ms & 0xffc0) >> 6;
 //    tim = ms * 8 - ms / 16 - ms / 8;
     tim = (ms   & 0x3f) * 1000; //
     tim = (65535 - tim) + 1; // tim = 65536 - tim;
diff --git a/iodef.h b/iodef.h
index 5942793..879d297 100644 (file)
--- a/iodef.h
+++ b/iodef.h
@@ -63,17 +63,18 @@ extern "C" {
 #define _PIO_HAS_FIVE
 #endif
 #else // __XC
-#if defined(__18F23K22) || defined(__18F24k22) || defined(__18F25K22) || defined(__18F26K22)
+
+#if defined(_18F23K22) || defined(_18F24K22) || defined(_18F25K22) || defined(_18F26K22)
 #define _I2C_IO_TWO_MSSPS
 #define _PIO_HAS_THREE
 #endif
 
-#if defined(__18F23K20) || defined(__18F24K20) || defined(__18F25K20) || defined(__18F26K20)
+#if defined(_18F23K20) || defined(_18F24K20) || defined(_18F25K20) || defined(_18F26K20)
 #define _I2C_IO_ONE_MSSP
 #define _PIO_HAS_THREE
 #endif
 
-#if defined(__18F43K20) || defined(__18F44K20) || defined(__18F45K20) || defined(__18F46K20)
+#if defined(_18F43K20) || defined(_18F44K20) || defined(_18F45K20) || defined(_18F46K20)
 #define _I2C_IO_ONE_MSSP
 #define _PIO_HAS_FIVE
 #endif
@@ -249,16 +250,16 @@ enum {
  *        RD2 : EN
  *        RD4-RD7: DATA(4-7).
  */
- #ifndef _LCDPORT_DATA
+#ifndef _LCDPORT_DATA
 #define _LCDPORT_DATA PORTD
 #define _LCDPORT_TRIS_DATA TRISD
 #define _LCDPORT_LATCH_DATA LATD
 #define _LCDPORT_BUSYMASK 0b10000000
 #define _LCDPORT_READMASK TRIS_D_RVAL
 #define _LCDPORT_DATA_SHIFT 4
- #endif
+#endif
 
- #ifndef _LCDPORT_CONT
+#ifndef _LCDPORT_CONT
 #define _LCDPORT_CONT PORTD
 #define _LCDPORT_TRIS_CONT TRISD
 #define _LCDPORT_CONT_LATCH LATD
@@ -266,15 +267,9 @@ enum {
 #define _LCDPORT_CONT_RWbit b1
 #define _LCDPORT_CONT_ENbit b2
 #define _LCDPORT_CONT_BLbit b3
-#ifdef __SDCC
 #define _LCDPORT_CONT_RS LATDbits.LATD0
 #define _LCDPORT_CONT_RW LATDbits.LATD1
 #define _LCDPORT_CONT_EN LATDbits.LATD2
-#else
-#define _LCDPORT_CONT_RS _PORTD_RD0_MASK
-#define _LCDPORT_CONT_RW _PORTD_RD1_MASK
-#define _LCDPORT_CONT_EN _PORTD_RD2_MASK
-#endif
 #endif
 
 #else
index 77a9eab..ddf1876 100644 (file)
--- a/ioports.c
+++ b/ioports.c
@@ -172,7 +172,9 @@ void lcd_backlightinit(void)
 }
 
 
-#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22)
+#if defined(pic18f23k22) || defined(pic18f24k22) || defined(pic18f25k22) || defined(pic18f26k22) || \
+    defined(_18F23K22)  || defined(_18F24K22)  || defined(_18F25K22)  || defined(_18F26K22)
+
 /*
  * For 28Pin PIC(18F2xK22), I2C lcd using.
  */
@@ -199,7 +201,9 @@ void keyin_ioinit(void)
 }
 #endif
 
-#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
+#if defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) || \
+    defined(_18F23K20)  || defined(_18F24K20)  || defined(_18F25K20)  || defined(_18F26K20)
+
 /*
  * For 28Pin PIC(18F2xK20), I2C lcd using.
  */
@@ -225,7 +229,9 @@ void keyin_ioinit(void)
 }
 #endif
 
-#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20)
+#if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \
+    defined(_18F43K20)  || defined(_18F44K20)  || defined(_18F45K20)  || defined(_18F46K20)
+
 /*
  * For 40Pin PIC(18F4xK20), paralell or I2C lcd using.
  */
diff --git a/main.c b/main.c
index af5cd39..2e8eb47 100644 (file)
--- a/main.c
+++ b/main.c
 #pragma config EBTR0=OFF,EBTR1=OFF,EBTRB=OFF
 #endif
 // For 4xK20 or 2xK20 Series
-#if defined(__SDCC)
 #if defined(pic18f43k20) || defined(pic18f44k20) || defined(pic18f45k20) || defined(pic18f46k20) || \
-    defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20)
+    defined(pic18f23k20) || defined(pic18f24k20) || defined(pic18f25k20) || defined(pic18f26k20) || \
+    defined(_18F43K20)  || defined(_18F44K20)  || defined(_18F45K20)  || defined(_18F46K20)  || \
+    defined(_18F23K20)  || defined(_18F24K20)  || defined(_18F25K20)  || defined(_18F26K20) 
 
+#ifdef __SDCC
 #pragma stack 0x200 256
+#endif
+
 #pragma config FOSC=HS,FCMEN=ON,PWRT=ON,BOREN=NOSLP,BORV=27, \
                WDTEN=ON,WDTPS=32768,PBADEN=OFF,HFOFST=OFF,LPT1OSC=OFF, \
                MCLRE=ON,STVREN=ON,DEBUG=ON, \
                XINST=OFF
-//#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF
-//#pragma config CPB=OFF,CPD=OFF
-//#pragma config WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF
-//#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF
-//#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF
-#endif
-#elif defined(__XC8)
-
 #endif
 /*
  * Statuses
@@ -112,7 +108,7 @@ SIGHANDLER(TMR0_handler)
    T0CONbits.TMR0ON = 0;
 
    // Clear interrupt flag
-   INTCONbits.TMR0IF = 0;
+//   INTCONbits.TMR0IF = 0;
    INTCONbits.TMR0IE = 0;;
 
    return;
@@ -157,7 +153,7 @@ SIGHANDLER(RBIF_handler)
 //    }
 }
 #ifdef __XC
-void EEPROM_handler(void)
+void  EEPROM_handler(void)
 #else
 SIGHANDLER(EEPROM_handler)
 #endif
@@ -180,6 +176,7 @@ SIGHANDLER(INADC_handler)
 //    if(a != 0xffff) {
 //        battlevel = adc_rawtobatt(a);
 //    }
+    PIR1bits.ADIF = 0;
 }
 #ifdef __XC
 void I2C_handler(void)
@@ -211,7 +208,6 @@ DEF_INTHIGH(inthigh_handler)
   DEF_HANDLER(SIG_RBIF, RBIF_handler)
   DEF_HANDLER(SIG_EEIF, EEPROM_handler)
   DEF_HANDLER(SIG_TMR3, TMR3_Handler)
-  DEF_HANDLER(SIG_TMR0, TMR0_handler)
   DEF_HANDLER(SIG_INT1, EXINT_Handler)
   DEF_HANDLER(SIG_INT2, EXINT_Handler)
   DEF_HANDLER(SIG_AD, INADC_handler)
@@ -219,20 +215,29 @@ DEF_INTHIGH(inthigh_handler)
   //DEF_HANDLER(SIG_BCOL, I2CBus_handler)
 END_DEF
 #else
-void interrupt low_priority isr(void)
+void interrupt high_priority intlow_handler(void)
 {
-  if(INTCONbits.T0IF)  TMR0_handler();
-  if(INTCONbits.INT0F) EXINT_Handler();
+    if(INTCONbits.TMR0IF) TMR0_handler();
+    if(INTCONbits.INT0IF) EXINT_Handler();
 }
-void interrupt isr_high(void)
+
+void interrupt high_priority inthigh_handler(void)
 {
-    if(INTCONbits.RBIF)   RBIF_handler();
-    if(PIR2bits.EEIF)     EEPROM_handler();
-    if(PIR2bits.TMR3IF)   TMR3_Handler();
+    if(INTCONbits.RBIF) RBIF_handler();
+    if(PIR2bits.EEIF)   EEPROM_handler();
+    if(PIR2bits.TMR3IF) TMR3_Handler();
     if(INTCONbits.TMR0IF) TMR0_handler();
-    if(INTCON3bits.INT1F || INTCON3bits.INT2IF) EXINT_Handler();
+    if(INTCON3bits.INT1IF) EXINT_Handler();
+    if(INTCON3bits.INT2IF) EXINT_Handler();
     if(PIR1bits.ADIF) INADC_handler();
+
+//    if(PIR1bits.SSPIF)    I2C_handler();
 }
+
+#ifdef __XC
+
+
+#endif
 #endif
 
 
@@ -252,20 +257,14 @@ int main(void)
     unsigned char reset_status;
     unsigned char p;
     
-#ifdef __SDCC
     OSCCON =  (0x80 & 0b11111100) | 0b00111000;
 //    OSCCON =  (0x80 & 0b11111100) | 0b00110010; // 8MHz 
-#else
-    OSCCON = (_OSCCON_IDLEN_MASK & 0b11111100 ) | 0b00111000;
-#endif
     idle_init();
     keyin_init();
     keyin_ioinit();
-
     WDTCONbits.SWDTEN = 0; // WDT OFF.
     reset_status = chk_reset();
     idle_time_ms(300); // Wait for setup.
-#if 1
     switch(reset_status){
         case RESET_MCLR:
             power_off(0); // When press reset, state to power_off.
@@ -286,7 +285,6 @@ int main(void)
         default:
             break;
     }
-#endif
     WDTCONbits.SWDTEN = 1; // WDT ON.
     i2c1_init();
     power_on(1);
@@ -303,50 +301,51 @@ int main(void)
     printstr("Hello;-)");
     lcd_setbacklight(0xff, 255);
     idle_time_ms(1000);
-    check_eeprom();
-    // Init AKC6955
     /* Check EEPROM */
-    /* Push default parameters to AKC6955*/
+    check_eeprom();
+  /* Push default parameters to AKC6955*/
     setup_akc6955();
     _CLS();
     _LOCATE(0,0);
     _PUTCHAR(' ');
- //   batlevel_6955 = 330;
-   update_status();
-   update_display();
+//   battlevel = 350;
+    update_status();
+    update_display();
     ClrWdt();
-//    _LOCATE(0,0);
-//    printstr("OK");
-   lcd_setbacklight(0xff, 255);
+    lcd_setbacklight(0xff, 255);
     do {
-//        set_powerlamp(0);
             if(battlevel <= 340) { // 3.4V
                lowbatt();
             }
         /* Main routine*/
-       c = pollkeys(pollkeybuf, 10, 1); // 23*10=230ms
-       p = 0;
-       while(c > 0) {
-           ClrWdt();
-           setfreq_updown(pollkeybuf[p]);
-           c--;
-           p++;
-       }
-//       set_powerlamp(1);
+           c = pollkeys(pollkeybuf, 5, 1); // 23*10=135ms
+           p = 0;
+            while(c > 0) {
+                ClrWdt();
+                setfreq_updown(pollkeybuf[p]);
+                c--;
+                 p++;
+            }
 //       idle_time_ms(ui_idlecount);
-        // Putstring to LCD.
-        _LOCATE(0,0);
-        pbutton = chk_powerbutton();
-        if(pbutton != 0) shutdown(1); // Button pressed.
+            _LOCATE(0,0);
+            pbutton = chk_powerbutton();
+            if(pbutton != 0) shutdown(1); // Button pressed.
 
-        if(backlight_counter > 0) {
-            backlight_counter--;
-            lcd_setbacklight(0xff, backlight_level); // Turn ON
-        } else {
-            lcd_setbacklight(0x00, 0); // Turn OFF
-       }
-        update_status();
+            if(backlight_counter > 0) {
+                backlight_counter--;
+                lcd_setbacklight(0xff, backlight_level); // Turn ON
+            } else {
+                lcd_setbacklight(0x00, 0); // Turn OFF
+        }
 //        ClrWdt();
+        // Debug routines
+#if 0
+        set_powerlamp(0);
+        idle_time_ms(1000);
+        set_powerlamp(1);
+        idle_time_ms(1000);
+#endif
+        update_status();
         update_display();
         ClrWdt();
     } while(1);
diff --git a/menu.c b/menu.c
index aeb3211..720e9c9 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -107,7 +107,7 @@ void set_volume(void)
          printstr("LOW");
      }
      _HOME();
-     c = pollkeys(pollkeybuf, 60, 1);
+     c = pollkeys(pollkeybuf, 5, 1);
      p = 0;
      while(c > 0) {
          switch(pollkeybuf[p]) {
@@ -161,6 +161,7 @@ void set_volume(void)
 void scan_start(void)
 {
     unsigned char c;
+    unsigned char cp;
     _CLS();
     _PUTCHAR(' ');
     do {
@@ -170,21 +171,22 @@ void scan_start(void)
 //            _LOCATE(0,0);
             printstr("Scan F/A/4/6");
             print_freq(1);
-            c = pollkeys(pollkeybuf, 20, 0); // 23*20 = 460ms
+            c = pollkeys(pollkeybuf, 10, 0); // 23*20 = 460ms
 //            idle_time_ms(2000);
         } while(c == 0);
       // New Scan
-       if(pollkeybuf[0] == charcode_6){
+        cp = pollkeybuf[0];
+       if(cp == charcode_6){
            scanflag = 0xff;
            akc6955_do_scan(0xff);
-       } else if(pollkeybuf[0] == charcode_4){
+       } else if(cp == charcode_4){
            scanflag = 0xff;
            akc6955_do_scan(0);
-       } else if(pollkeybuf[0] == charcode_a){
+       } else if(cp == charcode_a){
            scanflag = 0;
            akc6955_abort_scan();
            break;
-       } else if(pollkeybuf[0] == charcode_f){
+       } else if(cp  == charcode_f){
            break;
        }// else {
 //           if((scanflag != 0) && (akc6955_chk_donescan() != 0)) {
@@ -619,7 +621,7 @@ void main_menu(void)
     _LOCATE(0,1);
     printstr("B=CANCEL");
        do {
-           n = pollkeys(pollkeybuf, 60, 1);
+           n = pollkeys(pollkeybuf, 5, 1);
        } while(n == 0);
        p = 0;
        c = pollkeybuf[0];
index df58989..0db24ac 100644 (file)
@@ -1,5 +1,5 @@
 #
-#Wed Jul 24 21:47:50 JST 2013
+#Thu Jul 25 12:56:17 JST 2013
 default.languagetoolchain.dir=/usr/local/bin
 default.br-unifei-rmaalmeida-toolchainSDCC-SDCCtoolchain.md5=b67cce1ad75b450308d7806e430931b3
 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=1c49f19f6a43b876c317e0d8d41c0854
index acc3d48..798a7c9 100644 (file)
         <makeCustomizationEnableLongLines>false</makeCustomizationEnableLongLines>
         <makeCustomizationNormalizeHexFile>true</makeCustomizationNormalizeHexFile>
       </makeCustomizationType>
+      <HI-TECH-COMP>
+        <property key="asmlist" value="true"/>
+        <property key="define-macros" value=""/>
+        <property key="extra-include-directories" value=""/>
+        <property key="identifier-length" value="255"/>
+        <property key="operation-mode" value="free"/>
+        <property key="opt-xc8-compiler-strict_ansi" value="false"/>
+        <property key="optimization-assembler" value="true"/>
+        <property key="optimization-assembler-files" value="true"/>
+        <property key="optimization-debug" value="true"/>
+        <property key="optimization-global" value="true"/>
+        <property key="optimization-level" value="9"/>
+        <property key="optimization-set" value="default"/>
+        <property key="optimization-speed" value="false"/>
+        <property key="preprocess-assembler" value="true"/>
+        <property key="undefine-macros" value=""/>
+        <property key="use-cci" value="false"/>
+        <property key="verbose" value="false"/>
+        <property key="warning-level" value="0"/>
+        <property key="what-to-do" value="ignore"/>
+      </HI-TECH-COMP>
+      <HI-TECH-LINK>
+        <property key="additional-options-checksum" value=""/>
+        <property key="additional-options-code-offset" value=""/>
+        <property key="additional-options-command-line" value=""/>
+        <property key="additional-options-errata" value=""/>
+        <property key="additional-options-extend-address" value="false"/>
+        <property key="additional-options-trace-type" value=""/>
+        <property key="additional-options-use-response-files" value="false"/>
+        <property key="backup-reset-condition-flags" value="false"/>
+        <property key="calibrate-oscillator" value="true"/>
+        <property key="calibrate-oscillator-value" value=""/>
+        <property key="clear-bss" value="true"/>
+        <property key="code-model-external" value="wordwrite"/>
+        <property key="code-model-rom" value=""/>
+        <property key="create-html-files" value="false"/>
+        <property key="data-model-ram" value=""/>
+        <property key="data-model-size-of-double" value="24"/>
+        <property key="data-model-size-of-float" value="24"/>
+        <property key="display-class-usage" value="false"/>
+        <property key="display-hex-usage" value="false"/>
+        <property key="display-overall-usage" value="true"/>
+        <property key="display-psect-usage" value="false"/>
+        <property key="fill-flash-options-addr" value=""/>
+        <property key="fill-flash-options-const" value=""/>
+        <property key="fill-flash-options-how" value="0"/>
+        <property key="fill-flash-options-inc-const" value="1"/>
+        <property key="fill-flash-options-increment" value=""/>
+        <property key="fill-flash-options-seq" value=""/>
+        <property key="fill-flash-options-what" value="0"/>
+        <property key="format-hex-file-for-download" value="false"/>
+        <property key="initialize-data" value="true"/>
+        <property key="keep-generated-startup.as" value="true"/>
+        <property key="link-in-c-library" value="true"/>
+        <property key="link-in-peripheral-library" value="true"/>
+        <property key="managed-stack" value="false"/>
+        <property key="opt-xc8-linker-file" value="false"/>
+        <property key="opt-xc8-linker-link_startup" value="false"/>
+        <property key="opt-xc8-linker-serial" value=""/>
+        <property key="program-the-device-with-default-config-words" value="true"/>
+      </HI-TECH-LINK>
       <PICkit3PlatformTool>
         <property key="AutoSelectMemRanges" value="auto"/>
         <property key="Freeze Peripherals" value="true"/>
         <property key="programoptions.uselvpprogramming" value="false"/>
         <property key="voltagevalue" value="3.25"/>
       </PICkit3PlatformTool>
-      <SDCCToolchain>
-      </SDCCToolchain>
+      <XC8-config-global>
+        <property key="output-file-format" value="+mcof,-elf"/>
+      </XC8-config-global>
       <sdcc>
         <property key="V-show-commands-compiler" value="true"/>
         <property key="Werror" value="false"/>