//************************************************************************************
//**  
//**  File name:     D:\Data\Hobbies\Electronica\E-blocks\Eigen ontwerpen\Treinbesturing\test.c
//**  Generated by:  Flowcode v4.5.18.74
//**  Date:          Tuesday, December 13, 2011 11:20:03
//**  Licence:       Professional
//**  Registered to: Jan Lichtenbelt
//**  
//**  
//**  http://www.matrixmultimedia.com
//************************************************************************************


#define MX_PIC

//Defines voor de microcontroller
#define P16F88
#define MX_EE
#define MX_EE_TYPE2
#define MX_EE_SIZE 256
#define MX_SPI
#define MX_SPI_B
#define MX_SPI_SDI 1
#define MX_SPI_SDO 2
#define MX_SPI_SCK 4
#define MX_UART
#define MX_UART_B
#define MX_UART_TX 5
#define MX_UART_RX 2
#define MX_I2C
#define MX_I2C_B
#define MX_I2C_SDA 1
#define MX_I2C_SCL 4
#define MX_PWM
#define MX_PWM_CNT 1
#define MX_PWM_TRIS1 trisb
#define MX_PWM_1 0
#define MX_PWM_TRIS1a trisb
#define MX_PWM_1a 3

//Functies
#define MX_CLK_SPEED 19660800
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic.h>
#endif

//Configuratiegegevens
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3f6e
#endif
#ifdef HI_TECH_C
__CONFIG(0x3f6e);
#endif
#ifdef _BOOSTC
#pragma DATA 0x2008, 0x3ffc
#endif
#ifdef HI_TECH_C
__CONFIG(0x3ffc);
#endif

//Interne functies
#include "C:\Program Files (x86)\Matrix Multimedia\Flowcode V4\FCD\internals.h"

//Macro functie declaraties


//Variable declaraties
char FCV_A;




//EEPROM(0): //Defines:

/**** Macro Substitutions ****
******************************/




//EEPROM(0): //Macro functie declaraties

char FCD_EEPROM0_EEPROMRead(short addr);
void FCD_EEPROM0_WriteEEPROM(short addr, char data);



//EEPROM(0): //Macro implementaties


char FCD_EEPROM0_EEPROMRead(short addr)
{
		char data = 0;

		#ifdef MX_EE
			#ifdef _BOOSTC

				#ifndef MX_EEADR
					#ifdef EEADR
						#define MX_EEADR eeadr
					#endif
					#ifdef EEADRL
						#define MX_EEADR eeadrl
					#endif
				#endif
				#ifndef MX_EEDATA
					#ifdef EEDATA
						#define MX_EEDATA eedata
					#endif
					#ifdef EEDATAL
						#define MX_EEDATA eedatal
					#endif
					#ifdef EEDATL
						#define MX_EEDATA eedatl
					#endif
				#endif

				#ifndef MX_EEADR	//Catch Error
					#error "EEPROM error - MX_EEADR not set"
				#endif

				#ifndef MX_EEDATA
					#error "EEPROM error - MX_EEDATA not set"
				#endif

				MX_EEADR = addr & 0xff;
				#if (MX_EE_SIZE > 256)
					eeadrh = (addr & 0xff00) >> 8;
				#endif
				#ifdef MX_EE_TYPE2
					clear_bit(eecon1, EEPGD);
				#endif
				#ifdef MX_EE_TYPE3
					clear_bit(eecon1, EEPGD);
					clear_bit(eecon1, CFGS);
				#endif
				set_bit(eecon1, RD);
				data = MX_EEDATA;

			#endif

			#ifdef HI_TECH_C

				data = eeprom_read(addr);

			#endif
		#else
			#ifdef MX_EE_TYPE67X
				#error "FlowCode does not support EEPROM for this device"
			#else
				#ifdef MX_EE_TYPE62X
					#error "FlowCode does not support EEPROM for this device"
				#else
					#error "Chip does not have EEPROM memory"
				#endif
			#endif
		#endif
		return (data);

}

void FCD_EEPROM0_WriteEEPROM(short addr, char data)
{
	
		#ifdef MX_EE
			#ifdef _BOOSTC

				#ifndef MX_EEADR
					#ifdef EEADR
						#define MX_EEADR eeadr
					#endif
					#ifdef EEADRL
						#define MX_EEADR eeadrl
					#endif
				#endif
				#ifndef MX_EEDATA
					#ifdef EEDATA
						#define MX_EEDATA eedata
					#endif
					#ifdef EEDATAL
						#define MX_EEDATA eedatal
					#endif
				#endif

				#ifndef MX_EEADR	//Catch Error
					#error "EEPROM error - MX_EEADR not set"
				#endif

				#ifndef MX_EEDATA
					#error "EEPROM error - MX_EEDATA not set"
				#endif

				char bInterruptsEnabled;

				//wait for previous EE writes to complete...
				while (test_bit(eecon1, WR));

				MX_EEADR = addr & 0xff;
				#if (MX_EE_SIZE > 256)
					eeadrh = (addr & 0xff00) >> 8;
				#endif
				MX_EEDATA = data;
				#ifdef MX_EE_TYPE2
					clear_bit(eecon1, EEPGD);
				#endif
				#ifdef MX_EE_TYPE3
					clear_bit(eecon1, EEPGD);
					clear_bit(eecon1, CFGS);
				#endif
				set_bit(eecon1, WREN);
				bInterruptsEnabled = test_bit(intcon, GIE);
				clear_bit(intcon, GIE);			//Disable Interrupts

				eecon2 = 0x55;
				eecon2 = 0xAA;
				set_bit(eecon1, WR);
				while (test_bit(eecon1, WR));	//wait for EE write to complete...

				if (bInterruptsEnabled)
					set_bit(intcon, GIE);		//Re-enable Interrupts
				clear_bit(eecon1, WREN);

			#endif
			#ifdef HI_TECH_C

				eeprom_write(addr, data);

			#endif
		#else
			#ifdef MX_EE_TYPE67X
				#error "FlowCode does not support EEPROM for this device"
			#else
				#ifdef MX_EE_TYPE62X
					#error "FlowCode does not support EEPROM for this device"
				#else
					#error "Chip does not have EEPROM memory"
				#endif
			#endif
		#endif
}

//Macro implementaties

void main()
{
	
	//Initialisatie
	ansel = 0;
	cmcon = 0x07;


	//Interrupt initialisatie code
	option_reg = 0xC0;


	//Component Macro Aanroepen
	//Component Macro Aanroepen: A=EEPROM(0)::Read(0)
	FCV_A = FCD_EEPROM0_EEPROMRead(0);


	mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}



