[Device] Pins=8 Ports=1 ADCPins=4 ADCBits=10 MaxClock=20000000 PrescalerBits=3 ClockDivider=4 TimerOverflow=256 ConfigAddress=0x2007 ConfigCount=1 PWMCount=1 EepromSize=0 HasAltPWM=0 Pwm2IsD4=0 FlowcodeProduct=PIC UsesGpio=1 DefaultPackageType=0 [Pins] Pin1 = "VDD" Pin2 = "GP5/OSC1" Pin3 = "GP4/AN3/OSC2" Pin4 = "GP3/MCLR" Pin5 = "GP2/AN2/INT" Pin6 = "GP1/AN1" Pin7 = "GP0/AN0" Pin8 = "VSS" [Ports] PortPin7=0x0000 PortPin6=0x0001 PortPin5=0x0002 PortPin4=0x0003 PortPin3=0x0004 PortPin2=0x0005 [PortMasks] ;Only bits 0-5 available on port A PortMask0=0x3F [ADCPins] ADC0=7 ADC1=6 ADC2=5 ADC3=3 [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="ansel = 0;\n" IntInit="option_reg = 0xC0;\n\n" InputCmdFull="trisio = trisio | %m;\n%o = gpio;\n" InputCmdOneBit="trisio = trisio | %m;\n%o = ((gpio & %m) == %m);\n" InputCmdMask="trisio = trisio | %m;\n%o = gpio & %m;\n" OutputCmdFull="trisio = 0x00;\ngpio = %o;\n" OutputCmdOneBit="trisio = trisio & %i;\nif (%o)\n\tgpio = (gpio & %i) | %m;\nelse\n\tgpio = gpio & %i;\n" OutputCmdMask="trisio = trisio & %i;\ngpio = (gpio & %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\n#define MX_ADC_TRIS_REG trisio\n\n//find appropriate bit\n#if (%a == 0)\n #define MX_ADC_TRIS_MSK 0x01\n #define MX_ADC_ANS_MSK 0x01\n#endif\n#if (%a == 1)\n #define MX_ADC_TRIS_MSK 0x02\n #define MX_ADC_ANS_MSK 0x02\n#endif\n#if (%a == 2)\n #define MX_ADC_TRIS_MSK 0x04\n #define MX_ADC_ANS_MSK 0x04\n#endif\n#if (%a == 3)\n #define MX_ADC_TRIS_MSK 0x10\n #define MX_ADC_ANS_MSK 0x08\n#endif\n\n//sanity check\n#ifndef MX_ADC_TRIS_MSK\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;\nansel = 0x20 | MX_ADC_ANS_MSK;\n\n//turn ADC on\nadcon0 = 0x01 | (%a << 2);\n\n//wait the acquisition time\ncnt =0;\nwhile (cnt <40) 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\ntrisio = old_tris;\nansel = 0x20;\nadcon0 = 0x00;\n#undef MX_ADC_TRIS_REG\n#undef MX_ADC_TRIS_MSK\n#undef MX_ADC_SAMP_TIME\n#undef MX_ADC_ANS_MSK\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 P12F615 Define2=#define MX_PWM Define3=#define MX_PWM_CNT 1 Define4=#define MX_PWM_TRIS1 trisio Define5=#define MX_PWM_1 2 [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" GeneralInit="intcon.GIE=1;\n" Count=4 1=TMR0 2=RB0INT 3=PORTB 4=TMR1 [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=T0IF EnReg=intcon EnBit=T0IE OptCnt=3 TmrOpt=3 Opt1="Clock Source Select" Opt1Cnt=2 Opt1_1="Transition on T0CKI pin" Opt1_1Val="option_reg.T0CS=1;\n" Opt1_2="Internal clock (CLKO)" Opt1_2Val="option_reg.T0CS=0;\n" Opt2="Source Edge Select" Opt2Cnt=2 Opt2_1="high-to-low transition on T0CKI" Opt2_1Val="option_reg.T0SE=1;\n" Opt2_2="low-to-high transition on T0CKI" Opt2_2Val="option_reg.T0SE=0;\n" Opt3="Prescaler Rate" Opt3Cnt=9 Opt3_1="1:1" Opt3_1Val="option_reg = (option_reg & 0xF0) | 0x08;\n" Opt3_2="1:2" Opt3_2Val="option_reg = (option_reg & 0xF0) | 0x00;\n" Opt3_3="1:4" Opt3_3Val="option_reg = (option_reg & 0xF0) | 0x01;\n" Opt3_4="1:8" Opt3_4Val="option_reg = (option_reg & 0xF0) | 0x02;\n" Opt3_5="1:16" Opt3_5Val="option_reg = (option_reg & 0xF0) | 0x03;\n" Opt3_6="1:32" Opt3_6Val="option_reg = (option_reg & 0xF0) | 0x04;\n" Opt3_7="1:64" Opt3_7Val="option_reg = (option_reg & 0xF0) | 0x05;\n" Opt3_8="1:128" Opt3_8Val="option_reg = (option_reg & 0xF0) | 0x06;\n" Opt3_9="1:256" Opt3_9Val="option_reg = (option_reg & 0xF0) | 0x07;\n" [RB0INT] Name=(this is retrieved from the resource file) FlagReg=intcon FlagBit=INTF EnReg=intcon EnBit=INTE OptCnt=1 TmrOpt=0 Opt1="Interrupt Edge Select" Opt1Cnt=2 Opt1_1="rising edge of RB0/INT" Opt1_1Val="option_reg.INTEDG=1;\n" Opt1_2="falling edge of RB0/INT" Opt1_2Val="option_reg.INTEDG=0;\n" [PORTB] Name=(this is retrieved from the resource file) FlagReg=intcon FlagBit=GPIF EnReg=intcon EnBit=GPIE OptCnt=3 TmrOpt=0 Opt1="IOC Enable GP0:GP1" Opt1Cnt=4 Opt1_1="GPIO 0 Int On / GPIO 1 Int On" Opt1_1Val="ioc = ioc | 0x03;\n" Opt1_2="GPIO 0 Int On / GPIO 1 Int Off" Opt1_2Val="ioc = (ioc | 0x01) & 0xFD;\n" Opt1_3="GPIO 0 Int Off / GPIO 1 Int On" Opt1_3Val="ioc = (ioc | 0x02) & 0xFE;\n" Opt1_4="GPIO 0 Int Off / GPIO 1 Int Off" Opt1_4Val="ioc = ioc & 0xFC;\n" Opt2="IOC Enable GP2:GP3" Opt2Cnt=4 Opt2_1="GPIO 2 Int On / GPIO 3 Int On" Opt2_1Val="ioc = ioc | 0x0C;\n" Opt2_2="GPIO 2 Int On / GPIO 3 Int Off" Opt2_2Val="ioc = (ioc | 0x04) & 0xFB;\n" Opt2_3="GPIO 2 Int Off / GPIO 3 Int On" Opt2_3Val="ioc = (ioc | 0x08) & 0xF7;\n" Opt2_4="GPIO 2 Int Off / GPIO 3 Int Off" Opt2_4Val="ioc = ioc & 0xF3;\n" Opt3="IOC Enable GP4:GP5" Opt3Cnt=4 Opt3_1="GPIO 4 Int On / GPIO 5 Int On" Opt3_1Val="ioc = ioc | 0x30;\n" Opt3_2="GPIO 4 Int On / GPIO 5 Int Off" Opt3_2Val="ioc = (ioc | 0x10) & 0xDF;\n" Opt3_3="GPIO 4 Int Off / GPIO 5 Int On" Opt3_3Val="ioc = (ioc | 0x20) & 0xEF;\n" Opt3_4="GPIO 4 Int Off / GPIO 5 Int Off" Opt3_4Val="ioc = ioc & 0xCF;\n" [TMR1] ;NOTE: this osc is enabled and turned on as part of the Opt1 code Name="TMR1 Overflow" FlagReg=pir1 FlagBit=TMR1IF EnReg=pie1 EnBit=TMR1IE OptCnt=2 TmrOpt=2 Opt1="Clock Source Select" Opt1Cnt=2 Opt1_1="Transition on T1CKI pin" Opt1_1Val="intcon.PEIE=1;\nt1con.T1OSCEN=1;\nt1con.TMR1ON=1;\nt1con.TMR1CS=1;\n" Opt1_2="Internal clock (Fosc/4)" Opt1_2Val="intcon.PEIE=1;\nt1con.T1OSCEN=1;\nt1con.TMR1ON=1;\nt1con.TMR1CS=0;\n" Opt2="Prescaler Rate" Opt2Cnt=4 Opt2_1="1:1" Opt2_1Val="t1con = t1con & 0x0F;\n" Opt2_2="1:2" Opt2_2Val="t1con = (t1con & 0x0F) | 0x10;\n" Opt2_3="1:4" Opt2_3Val="t1con = (t1con & 0x0F) | 0x20;\n" Opt2_4="1:8" Opt2_4Val="t1con = (t1con & 0x0F) | 0x30;\n"