[Device] Pins=40 Ports=5 ADCPins=9 ADCBits=10 MaxClock=40000000 PrescalerBits=3 ClockDivider=4 TimerOverflow=256 ConfigAddress=0x300000 ConfigCount=14 PWMCount=2 EepromSize=256 HasAltPWM=0 Pwm2IsD4=0 FlowcodeProduct=PIC DefaultPackageType=0 [Pins] Pin1 = "MCLR/VPP/RE3" Pin2 = "RA0/AN0" Pin3 = "RA1/AN1" Pin4 = "RA2/AN2/VREF-/CAP1/INDX" Pin5 = "RA3/AN3/VREF+/CAP2/QEA" Pin6 = "RA4/AN4/CAP3/QEB" Pin7 = "RA5/AN5/LVDIN" Pin8 = "RE0/AN6" Pin9 = "RE1/AN7" Pin10 = "RE2/AN8" Pin11 = "AVDD" Pin12 = "AVSS" Pin13 = "OSC1/CLKI/RA7" Pin14 = "OSC2/CLKO/RA6" Pin15 = "RC0/T1OSO/T1CKI" Pin16 = "RC1/T1OSI/CCP2/FLTA" Pin17 = "RC2/CCP1/FLTB" Pin18 = "RC3/T0CKI/T5CKI/INT0" Pin19 = "RD0/T0CKI/T5CKI" Pin20 = "RD1/SDO" Pin21 = "RD2/SDI/SDA" Pin22 = "RD3/SCK/SCL" Pin23 = "RC4/INT1/SDI/SDA" Pin24 = "RC5/INT2/SCK/SC" Pin25 = "RC6/TX/CK/SS" Pin26 = "RC7/RX/DT/SDO" Pin27 = "RD4/FLTA" Pin28 = "RD5/PWM4" Pin29 = "RD6/PWM6" Pin30 = "RD7/PWM7" Pin31 = "VSS" Pin32 = "VDD" Pin33 = "RB0/PWM0" Pin34 = "RB1/PWM1" Pin35 = "RB2/PWM2" Pin36 = "RB3/PWM3" Pin37 = "RB4/KBI0/PWM5" Pin38 = "RB5/KBI1/PWM4/PGM" Pin39 = "RB6/KBI2/PGC" Pin40 = "RB7/KBI3/PGD" [Ports] PortPin1=0x0403 PortPin2=0x0000 PortPin3=0x0001 PortPin4=0x0002 PortPin5=0x0003 PortPin6=0x0004 PortPin7=0x0005 PortPin8=0x0400 PortPin9=0x0401 PortPin10=0x0402 PortPin13=0x0007 PortPin14=0x0006 PortPin15=0x0200 PortPin16=0x0201 PortPin17=0x0202 PortPin18=0x0203 PortPin19=0x0300 PortPin20=0x0301 PortPin21=0x0302 PortPin22=0x0303 PortPin23=0x0204 PortPin24=0x0205 PortPin25=0x0206 PortPin26=0x0207 PortPin27=0x0304 PortPin28=0x0305 PortPin29=0x0306 PortPin30=0x0307 PortPin33=0x0100 PortPin34=0x0101 PortPin35=0x0102 PortPin36=0x0103 PortPin37=0x0104 PortPin38=0x0105 PortPin39=0x0106 PortPin40=0x0107 [PortMasks] PortMask0=0xFF PortMask1=0xFF PortMask2=0xFF PortMask3=0xFF PortMask4=0x0F [ADCPins] ADC0=2 ADC1=3 ADC2=4 ADC3=5 ADC4=6 ADC5=7 ADC6=8 ADC7=9 ADC8=10 [Code] ;Substitute macros ;%c Clock Speed ;%o Operand ;%s Prescaler ;%p PortID ;%m MaskBits ;%i Inverse Mask ;%a ADC channel ;%a Config Address ;%v Config Value ;%r Interrupt Flag Register ;%b Interrupt Flag Bit ;%n Interrupt Macro Name Directives="#include \n#pragma CLOCK_FREQ %c\n" MainStart="void main()\n{\n" MainEnd="\tmainendloop: goto mainendloop;\n}\n\n" IntStart="void interrupt(void)\n{\n" IntEnd="}\n\n" Initialise="ansel0 = 0x00;\nansel1 = 0x00;\n" IntInit="\n\n" InputCmdFull="tris%p = tris%p | %m;\n%o = port%p;\n" InputCmdOneBit="tris%p = tris%p | %m;\n%o = ((port%p & %m) == %m);\n" InputCmdMask="tris%p = tris%p | %m;\n%o = port%p & %m;\n" OutputCmdFull="tris%p = 0x00;\nport%p = %o;\n" OutputCmdOneBit="tris%p = tris%p & %i;\nif (%o)\n\tport%p = (port%p & %i) | %m;\nelse\n\tport%p = port%p & %i;\n" OutputCmdMask="tris%p = tris%p & %i;\nport%p = (port%p & %i) | (%o & %m);\n" DelayCmdS="delay_s(%o);\n" DelayCmdMs="delay_ms(%o);\n" ADCCapture="//set up ADC conversion\nchar old_tris, cnt;\n#define MX_ADC_SAMP_TIME 40\nadcon2 = 0x07;\nadchs = 0x00;\n\n//find appropriate bit\n#if (%a == 0)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x01\n adcon0 = 0x00;\n ansel0 = 0x01;\n#endif\n#if (%a == 1)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x02\n adcon0 = 0x04;\n ansel0 = 0x02;\n#endif\n#if (%a == 2)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x04\n adcon0 = 0x08;\n ansel0 = 0x04;\n#endif\n#if (%a == 3)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x08\n adcon0 = 0x0C;\n ansel0 = 0x08;\n#endif\n#if (%a == 4)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x10\n adcon0 = 0x00;\n adchs = 0x01;\n ansel0 = 0x10;\n#endif\n#if (%a == 5)\n #define MX_ADC_TRIS_REG trisa\n #define MX_ADC_TRIS_MSK 0x20\n adcon0 = 0x04;\n adchs = 0x10;\n ansel0 = 0x20;\n#endif\n#if (%a == 6)\n #define MX_ADC_TRIS_REG trise\n #define MX_ADC_TRIS_MSK 0x01\n adcon0 = 0x08;\n adchs = 0x04;\n ansel0 = 0x40;\n#endif\n#if (%a == 7)\n #define MX_ADC_TRIS_REG trise\n #define MX_ADC_TRIS_MSK 0x02\n adcon0 = 0x0C;\n adchs = 0x40;\n ansel0 = 0x80;\n#endif\n#if (%a == 8)\n #define MX_ADC_TRIS_REG trisb\n #define MX_ADC_TRIS_MSK 0x04\n adcon0 = 0x00;\n adchs = 0x02;\n ansel1 = 0x01;\n#endif\n\n//sanity check\n#ifndef MX_ADC_TRIS_REG\n #pragma error ADC conversion code error - please contact technical support\n#endif\n \n//store old tris value, and set the i/o pin as an input\nold_tris = MX_ADC_TRIS_REG;\nMX_ADC_TRIS_REG = MX_ADC_TRIS_REG | MX_ADC_TRIS_MSK;\n \n//turn ADC on\nadcon0 = adcon0 | 0x01;\n \n//wait the acquisition time\ncnt = 0;\nwhile (cnt < MX_ADC_SAMP_TIME) cnt++;\n \n//begin conversion and wait until it has finished\nadcon0 = adcon0 | 0x02;\nwhile (adcon0 & 0x02);\n \n//restore old tris value, and reset adc registers\nMX_ADC_TRIS_REG = old_tris;\nadcon0 = 0x00;\nansel0 = 0x00;\nansel1 = 0x00;\n \n#undef MX_ADC_TRIS_REG\n#undef MX_ADC_TRIS_MSK\n#undef MX_ADC_SAMP_TIME\n" ADCHigh="return adresh;\n" ADCLow="char adclow;\nadclow = adresl;\nreturn adclow;\n" ADCFull="short iRetVal;\niRetVal = (adresh << 2);\niRetVal += (adresl >> 6);\nreturn (iRetVal);\n" InitialPortLetter="a" ConfigData="#pragma DATA %a, %v\n" IntHandler="if (%r & (1 << %b))\n{\n\tFCM_%n();\n\tclear_bit(%r, %b);\n}\n" [Defines] Define1=#define P18F4331 Define2=#define MX_EE Define3=#define MX_EE_TYPE3 Define4=#define MX_EE_SIZE 256 Define5=#define MX_SPI Define6=#define MX_SPI_D Define7=#define MX_SPI_SDI 2 Define8=#define MX_SPI_SDO 1 Define9=#define MX_SPI_SCK 3 Define10=#define MX_UART Define11=#define MX_UART_C Define12=#define MX_UART_TX 6 Define13=#define MX_UART_RX 7 Define14=#define MX_I2C Define15=#define MX_I2C_D Define16=#define MX_I2C_SDA 2 Define17=#define MX_I2C_SCL 3 Define18=#define MX_PWM Define19=#define MX_PWM_CNT 2 Define20=#define MX_PWM_TRIS1 trisc Define21=#define MX_PWM_1 2 Define22=#define MX_PWM_TRIS2 trisc Define23=#define MX_PWM_2 1 [Interrupts] ;first 3 should always be 1=TMR0, 2=RB0INT, 3=PORTB ;any other interrupts need to also have this set: "intcon.PEIE=1;\n"5 GeneralInit="intcon.GIE=1;\n" Count=6 1=TMR0 2=RB0INT 3=PORTB 4=RB1INT 5=RB2INT 6=USART_RX [TMR0] ;it is vital that this section remains exactly as-is (for all chips?) Name=(this is retrieved from the resource file) FlagReg=intcon FlagBit=TMR0IF EnReg=intcon EnBit=TMR0IE OptCnt=3 TmrOpt=3 Opt1="Clock Source Select" Opt1Cnt=2 Opt1_1="Transition on T0CKI pin" Opt1_1Val="t0con.T0CS=1;\n" Opt1_2="Internal clock (CLKO)" Opt1_2Val="t0con.T0CS=0;\n" Opt2="Source Edge Select" Opt2Cnt=2 Opt2_1="high-to-low transition on T0CKI" Opt2_1Val="t0con.T0SE=1;\n" Opt2_2="low-to-high transition on T0CKI" Opt2_2Val="t0con.T0SE=0;\n" Opt3="Prescaler Rate" Opt3Cnt=9 Opt3_1="1:1" Opt3_1Val="t0con = (t0con & 0xF0) | 0x08;\n" Opt3_2="1:2" Opt3_2Val="t0con = (t0con & 0xF0) | 0x00;\n" Opt3_3="1:4" Opt3_3Val="t0con = (t0con & 0xF0) | 0x01;\n" Opt3_4="1:8" Opt3_4Val="t0con = (t0con & 0xF0) | 0x02;\n" Opt3_5="1:16" Opt3_5Val="t0con = (t0con & 0xF0) | 0x03;\n" Opt3_6="1:32" Opt3_6Val="t0con = (t0con & 0xF0) | 0x04;\n" Opt3_7="1:64" Opt3_7Val="t0con = (t0con & 0xF0) | 0x05;\n" Opt3_8="1:128" Opt3_8Val="t0con = (t0con & 0xF0) | 0x06;\n" Opt3_9="1:256" Opt3_9Val="t0con = (t0con & 0xF0) | 0x07;\n" [RB0INT] Name=(this is retrieved from the resource file) FlagReg=intcon FlagBit=INT0IF EnReg=intcon EnBit=INT0IE OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of RB0/INT0" Opt1_1Val="intcon2.INTEDG0=1;\n" Opt1_2="falling edge of RB0/INT0" Opt1_2Val="intcon2.INTEDG0=0;\n" [PORTB] Name=(this is retrieved from the resource file) FlagReg=intcon FlagBit=RBIF EnReg=intcon EnBit=RBIE OptCnt=0 TmrOpt=0 [RB1INT] Name=RB1/INT1 FlagReg=intcon3 FlagBit=INT1IF EnReg=intcon3 EnBit=INT1IE OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of RB1/INT1" Opt1_1Val="intcon2.INTEDG1=1;\n" Opt1_2="falling edge of RB1/INT1" Opt1_2Val="intcon2.INTEDG1=0;\n" [RB2INT] Name=RB2/INT2 FlagReg=intcon3 FlagBit=INT2IF EnReg=intcon3 EnBit=INT2IE OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of RB2/INT2" Opt1_1Val="intcon2.INTEDG2=1;\n" Opt1_2="falling edge of RB2/INT2" Opt1_2Val="intcon2.INTEDG2=0;\n" [USART_RX] Name="Réception USART" UseExplicitHandlerCode=1 FlagReg= FlagBit= HandlerCode="if (pir1 & (1 << RCIF))\n{\n FCM_%n(); // call selected macro\n}\n" UseExplicitEnableCode=1 EnReg= EnBit= EnableCode="intcon.PEIE = 1; // Enable peripheral interrupts\nintcon.GIE = 1; // Enable global interrupts\npie1.RCIE = 1; // Enable USART receive interrupts\nrcsta.CREN=1; // Enable reception\n" DisableCode="pie1.RCIE = 0; // Disable USART receive interrupts\n" OptCnt=0 TmrOpt=0