<?xml version="1.0" encoding="UTF-8"?>
<pic_def id='16F88'>
	<part_number>16F88</part_number>
	<datasheet></datasheet>
	<image filename='16f88.png'></image>
	<file_info>		
		<author display_name='Author'>B. Dring</author>
		<email display_name='Email'>bdring@eng-serve.com</email>
		<revision display_name='Revision'>0.1</revision>
		<date display_name='Date'>2007:08:07</date>
		<copyright display_name='Copyright'>(2007) B. Dring</copyright>
		<comments display_name='Comments'>Prelimianry version...use with caution</comments>
	</file_info>
	<oscillators>
		<oscillator type='external' freq='2000000' register='OSCON' value='0x00' selected='true'>External</oscillator>		
		<oscillator type='internal'  freq='31250' register='OSCON' value='0x02' selected='false'>Internal RC 31.25 kHZ</oscillator>
		<oscillator type='internal'  freq='125000' register='OSCON' value='0x12' selected='false'>Internal RC 125 kHZ</oscillator>
		<oscillator type='internal'  freq='250000' register='OSCON' value='0x22' selected='false'>Internal RC 250 kHZ</oscillator>
		<oscillator type='internal'  freq='500000' register='OSCON' value='0x32' selected='false'>Internal RC 500 kHZ</oscillator>
		<oscillator type='internal'  freq='1000000' register='OSCON' value='0x42' selected='false'>Internal RC 1 MHZ</oscillator>
		<oscillator type='internal'  freq='2000000' register='OSCON' value='0x52' selected='false'>Internal RC 2 MHZ</oscillator>
		<oscillator type='internal'  freq='4000000' register='OSCON' value='0x62' selected='false'>Internal RC 4 MHZ</oscillator>
		<oscillator type='internal'  freq='8000000' register='OSCON' value='0x72' selected='false'>Internal RC 8 MHZ</oscillator>
		
	</oscillators>
	<digital_io>
		<port value='PORTA' register='TRISA' availability='11111111' selected='0xFF'>PORTA</port>
		<port value='PORTB' register='TRISB' availability='11111111' selected='0xFF'>PORTB</port>
	</digital_io>
	<adc type='new'>
                <adc_channel_select>Select A/D Channel (checked=AD)
                    <port register='ANSEL' value='SETA' availability='01111111' selected='0x00'>AN0-AN6</port>
                </adc_channel_select>
		<adc_vrefs>
			<adc_vref  vrefH='Vdd' vrefL='Vss' register='ADCON1' value='0x00' selected='true'></adc_vref>
			<adc_vref  vrefH='Vdd' vrefL='Vref-' register='ADCON1' value='0x10'></adc_vref>
			<adc_vref  vrefH='Vref+' vrefL='Vss' register='ADCON1' value='0x20'></adc_vref>
			<adc_vref  vrefH='Vref+' vrefL='Vref-' register='ADCON1' value='0x30'></adc_vref>
		</adc_vrefs>
		<adc_conversion_clocks>
			<adc_conversion_clock value='0x00,0x00' register='ADCON0,ADCON1' selected='true'>Fosc/2</adc_conversion_clock>
			<adc_conversion_clock value='0x40,0x00' register='ADCON0,ADCON1'>Fosc/8</adc_conversion_clock>
			<adc_conversion_clock value='0x80,0x00' register='ADCON0,ADCON1'>Fosc/32</adc_conversion_clock>
			<adc_conversion_clock value='0xC0,0x00' register='ADCON0,ADCON1'>FRC (clock derived from the internal A/D RC oscillator)</adc_conversion_clock>
			<adc_conversion_clock value='0x00,0x40' register='ADCON0,ADCON1'>Fosc/4</adc_conversion_clock>
			<adc_conversion_clock value='0x40,0x40' register='ADCON0,ADCON1'>Fosc/16</adc_conversion_clock>
			<adc_conversion_clock value='0x80,0x40' register='ADCON0,ADCON1'>Fosc/64</adc_conversion_clock>
			<adc_conversion_clock value='0xC0,0x40' register='ADCON0,ADCON1'>FRC (clock derived from the internal A/D RC oscillator)</adc_conversion_clock>
		</adc_conversion_clocks>
		<adc_formats>
			<adc_format register='ADCON1' value='0x80' selected='true'>Right justified. Six (6) Most Significant bits of ADRESH are read as 0</adc_format>
			<adc_format register='ADCON1' value='0x00' selected='false'>Left justified. Six (6) Least Significant bits of ADRESL are read as 0</adc_format>
		</adc_formats>
		<adc_enable value ='0x01' register='ADCON0' selected='false'>Enable ADC</adc_enable>
	</adc>
	
	<interrupts>
		<interrupt value='TMR0IF' enable='TRM0IE' register='INTCON' selected='false'>TMR0IF: Timer 0 Overflow<int_code><![CDATA[  if (INTCON.TMR0IF) // Timer 0\n  {\n    INTCON.TMR0IE=1;\n    INTCON.TMR0IF=0;\n  }\n\n]]></int_code></interrupt>
		<interrupt value='INT0IF' enable='INT0IE' register='INTCON' selected='false'>INT0IF: External interrupt<int_code><![CDATA[  if(PIR1.INTF) // RB0/INT External\n  {\n    PIR1.INTF=0;\n  }\n\n]]></int_code></interrupt>
		<interrupt value='RBIF' enable='RBIE' register='INTCON' selected='false'>RBIF: PORTB Change Interrupt<int_code><![CDATA[  if(PIR1.RBIF) // PortB Change\n  {\n    x=PORTB; // Read to clear\n    PIR1.RBIF =0;\n  }\n\n]]></int_code></interrupt>
		<interrupt value='EEIF' enable='EEIE' register='PIE2' selected='false'>EEIF: EEPROM Write Operation Interrupt<int_code><![CDATA[  if (PIR2.EEIF) // EEPROM Write\n  {\n    PIR2.EEIF=0;\n  }\n\n]]></int_code></interrupt>
		<interrupt value='OSFIF' enable='OSFIE' register='PIE2' selected='false'>OSFIF Oscillator Fail Interrupt<int_code><![CDATA[  if(PIR2.OSFIF) // Oscillator Failure\n  {\n    PIR2.OSFIF =0;\n  }\n]]></int_code></interrupt>
		<interrupt value='ADIF' enable='ADIE' register='PIE1' selected='false'>ADIF: A/D Converter Interrupt<int_code><![CDATA[  if(PIR1.ADIF)  // ADC Complete\n  {\n    PIR1.ADIF = 0;\n  }\n]]></int_code></interrupt>
		<interrupt value='RCIF' enable='RCIE' register='PIE1' selected='false'>RCIF: USART Receive Interrupt<int_code><![CDATA[  if (PIR1.RCIF) //UART Receive\n  {\n    rxChar = RCREG; //reading clears the flag\n  }\n]]></int_code></interrupt>
		<interrupt value='TXIF' enable='TXIE' register='PIE1' selected='false'>TXIF: USART Transmit Interrupt<int_code><![CDATA[  if(PIR1.TXIF) // USART Transmit\n  {\n    PIR1.TXIF =0;\n  }\n]]></int_code></interrupt>
		<interrupt value='SSPIF' enable='SSPIE' register='PIE1' selected='false'>SSPIF: Synchronous Serial Port (SSP) Interrupt<int_code><![CDATA[  if(PIR1.SSPIF) // Synchronous Serial Port\n  {\n    PIR1.SSPIF =0;\n  }\n]]></int_code></interrupt>
		<interrupt value='CCP1IF' enable='CCP1IE' register='PIE1' selected='false'>CCP1IF: CCP1 Interrupt<int_code><![CDATA[  if(PIR1.CCP1IF) // CCP1\n  {\n    PIR2.CCP1IF=0;\n  }\n]]></int_code></interrupt>
		<interrupt value='TMR2IF' enable='TMR2IE' register='PIE1' selected='false'>TMR2IF: TMR2 to PR2 Match Interrupt<int_code><![CDATA[  if (PIR1.TMR2IF) // Timer 2\n  {\n    PIR1.TMR2IF=0;\n    PIE1.TMR2IE=1;   // reenable interrupt\n  }\n]]></int_code></interrupt>
		<interrupt value='TMR1IF' enable='TMR1IE' register='PIE1' selected='false'>TMR1IF: TMR1 Overflow Interrupt<int_code><![CDATA[  if (PIR1.TMR1IF) // Timer 1\n  {\n    PIR1.TMR1IF=0;\n    PIE1.TMR1IE=1;  // reenable interrupt\n  }\n]]></int_code></interrupt>
		<interrupt value='CMIF' enable='CMIE' register='PIE2' selected='false'>CMIF: Comparator Interrupt<int_code><![CDATA[  if (PIR2.CMIF) // Comparator Interrupt\n  {\n    PIR2.CMIF=0;\n  }\n]]></int_code></interrupt>				
	</interrupts>
	<ccp>
		<ccp1>
			<modes>
				<mode register='CCP1CON' value='0x00' selected='true'>Capture/Compare/PWM disabled</mode>
				<mode register='CCP1CON' value='0x04' selected='false'>Capture mode, every falling edge</mode>
				<mode register='CCP1CON' value='0x05' selected='false'>Capture mode, every rising edge</mode>
				<mode register='CCP1CON' value='0x06' selected='false'>Capture mode, every 4th rising edge</mode>
				<mode register='CCP1CON' value='0x07' selected='false'>Capture mode, every 16th rising edge</mode>
				<mode register='CCP1CON' value='0x08' selected='false'>Compare mode, set output on match (CCP1IF bit is set)</mode>
				<mode register='CCP1CON' value='0x09' selected='false'>Compare mode, clear output on match (CCP1IF bit is set)</mode>
				<mode register='CCP1CON' value='0x0A' selected='false'>Compare mode, generate software interrupt on match (CCP1IF bit is set, CCP1 pin is unaffected)</mode>
				<mode register='CCP1CON' value='0x0B' selected='false'>Compare mode, trigger special event (CCP1IF bit is set, CCP1 pin is unaffected); CCP1 resets TMR1 and starts an A/D conversion (if A/D module is enabled)</mode>
				<mode register='CCP1CON' value='0x0C' selected='false'>PWM mode</mode>
			</modes>
		</ccp1>
		<vref_output_enable register='CVRCON' value='0x40' selected='false'>CVREF voltage level is output on the RA2/AN2/CVREF/VREF- pin</vref_output_enable>
		<vref_ranges>
			<range>0.00 CVRSRC to 0.625 CVRSRC with CVRSRC/24 step size</range>
			<range>0.25 CVRSRC to 0.72 CVRSRC with CVRSRC/32 step size</range>
		</vref_ranges>
		<vref_values>
			<vref_value></vref_value>
		</vref_values>
	</ccp>
</pic_def>
