//************************************************************************************
//**  
//**  Source name:   \\WDMYCLOUDMIRROR\alanwms\Transfer to Powersync Computer - Copy\Customers\Mytana\Claro4 Rev2\P3 Production Files\P3 Production FIle rev4 Encoder repair display delays.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC.18F.18F2553
//**  
//**  Generated by:  Flowcode v9.2.0.33
//**  Date:          Monday, May 23, 2022 15:33:26
//**  Users:         1
//**  Registered to: alanwms (96450348)
//**  Licence key: R84MNU
//**  
//**  
//**  https://www.flowcode.co.uk
//**  
//************************************************************************************


#define MX_PIC

#define MX_CAL_PIC

#define MX_CLK_SPEED 8000000

#define FCP_NULL Unconnected_Port

//Missing TRISE workaround
unsigned char TRISE;

#define MX_ADC_BITS_12
#include <xc.h>
#include <math.h>
//Chip Configuration Settings
__PROG_CONFIG(0x1, 0x38C1);
__PROG_CONFIG(0x2, 0xFED8);
__PROG_CONFIG(0x3, 0x79FF);
__PROG_CONFIG(0x4, 0xFF9B);
__PROG_CONFIG(0x5, 0xFFFF);
__PROG_CONFIG(0x6, 0xFFFF);
__PROG_CONFIG(0x7, 0xFFFF);

/*========================================================================*\
   Use :Include the type definitions
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\internals.c"



MX_UINT8 FCLV_LOOP1;
MX_UINT16 FCLV_LOOP2;
MX_UINT16 FCLV_LOOP3;
MX_UINT16 FCLV_LOOP4;
MX_UINT8 FCLV_LOOP5;
MX_UINT8 FCLV_LOOP6;
MX_UINT32 FCLV_LOOP7;
MX_UINT32 FCLV_LOOP8;
MX_UINT32 FCLV_LOOP9;
MX_UINT32 FCLV_LOOP10;


/*========================================================================*\
   Use :panel
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCVsz_INTEGRATE 10
#define FCVsz_REVISION 20
#define FCVsz_DISPLAY_STRING 20
#define FCV_CAL_200 (301) // Used in multiple place for cal
#define FCV_SET_CURSER (69) // Place Curser position
#define FCV_PREFIX (254) // Serial Prefix
#define FCV_CLEAR_SCREEN (81) // Clears Screen
MX_GLOBAL MX_SINT16 FCV_CURRENT_READ = (0);
MX_GLOBAL MX_UINT8 FCV_DECIMALS = (0x5);
MX_GLOBAL MX_BOOL FCV_CW = (0);
MX_GLOBAL MX_UINT16 FCV_CURRENT_INSTANT = (0x0);
MX_GLOBAL MX_UINT8 FCV_INTEGRATE_CLOCK;
MX_GLOBAL MX_FLOAT FCV_FLOAT_VALUE = (0.0);
MX_GLOBAL MX_UINT16 FCV_COUNT = (0xea60);
MX_GLOBAL MX_UINT8 FCV_CHANGE_BIT = (0x0);
MX_GLOBAL MX_BOOL FCV_HI = (0);
MX_GLOBAL MX_BOOL FCV_JUNK = (0);
MX_GLOBAL MX_FLOAT FCV_RESULT_FLOAT = (0.0);
MX_GLOBAL MX_UINT16 FCV_CURRENT_PEAK = (0xe5e); // SHort term shut down value over 10 amps
MX_GLOBAL MX_FLOAT FCV_ERROR_AVERAGE = (0.0);
MX_GLOBAL MX_SINT16 FCV_ENC2 = (0);
MX_GLOBAL MX_UINT8 FCV_POWER_UP_CHECKSUM = (0x0); // Placeholder for powerup check from eprom address13
MX_GLOBAL MX_BOOL FCV_FOREWARD_REVERSE_STORE = (1);
MX_GLOBAL MX_UINT16 FCV_LSB = (0x64);
MX_GLOBAL MX_FLOAT FCV_VELOCITY_GAIN = (0.5); // was .14
MX_GLOBAL MX_BOOL FCV_TEST_DIRECTION = (0);
MX_GLOBAL MX_SINT16 FCV_INTEGRATE[FCVsz_INTEGRATE];
MX_GLOBAL MX_UINT32 FCV_CURRENT_RMS = (0x0); // Value over period
MX_GLOBAL MX_FLOAT FCV_AMPS = (0.0);
MX_GLOBAL MX_UINT16 FCV_PROFILE = (0x0); // Generated Motion Accel
MX_GLOBAL MX_UINT8 FCV_STOP = (0x0);
MX_GLOBAL MX_UINT16 FCV_CURRENT_TRIP_VAR = (0x258);
MX_GLOBAL MX_FLOAT FCV_RAMP_FLOAT = (0.0);
MX_GLOBAL MX_UINT8 FCV_MOTOR_TEMP_COUNT = (0x0); // Display integration time
MX_GLOBAL MX_UINT8 FCV_X16777216 = (0x0); // 4th byte for eprom seconds
MX_GLOBAL MX_UINT16 FCV_COOL_DOWN_COUNT = (0x0);
MX_GLOBAL MX_UINT8 FCV_X256 = (0x0); // second byte for eprom seconds
MX_GLOBAL MX_UINT32 FCV_CURRENT_LIMIT_LOW = (0x667);
MX_GLOBAL MX_UINT16 FCV_BEEP_COUNT = (0x0);
MX_GLOBAL MX_UINT8 FCV_CURRENT_BEEP_COUNT = (0x0);
MX_GLOBAL MX_UINT16 FCV_DISPLAY_COUNT = (0x0);
MX_GLOBAL MX_UINT8 FCV_E4 = (0x0);
MX_GLOBAL MX_UINT8 FCV_ACCEL_RATE_ADDER = (0x3);
MX_GLOBAL MX_FLOAT FCV_VELOCITY_FLOAT = (0.100000001490116119384765625);
MX_GLOBAL MX_UINT16 FCV_TEMP_LIMIT = (0x4b0); // 1200 = 99c
MX_GLOBAL MX_UINT16 FCV_VAR5 = (0x0);
MX_GLOBAL MX_UINT8 FCV_E3 = (0x0);
MX_GLOBAL MX_CHAR FCV_REVISION[FCVsz_REVISION] = "P3.2";
MX_GLOBAL MX_FLOAT FCV_TEMP_FLOAT1 = (0.0);
MX_GLOBAL MX_SINT16 FCV_SWING = (0);
MX_GLOBAL MX_UINT8 FCV_E2 = (0x0);
MX_GLOBAL MX_FLOAT FCV_ERROR_FLOAT = (0.0);
MX_GLOBAL MX_FLOAT FCV_TEMP_FLOAT = (0.0);
MX_GLOBAL MX_UINT16 FCV_RAMP_STORE = (0x0);
MX_GLOBAL MX_UINT16 FCV_DC_VOLTS = (0x1000); // Reading volts drop to assure shutdown and saves
MX_GLOBAL MX_UINT8 FCV_E1 = (0x0);
MX_GLOBAL MX_UINT16 FCV_RAMP = (0x0);
MX_GLOBAL MX_UINT16 FCV_VAR2 = (0x0);
MX_GLOBAL MX_BOOL FCV_TOGGLE = (0);
MX_GLOBAL MX_BOOL FCV_JUNK2 = (0);
MX_GLOBAL MX_UINT8 FCV_DISPLAY_POSITION;
MX_GLOBAL MX_UINT8 FCV_CLEAR_PLACES = (0x0); // Number of places to clear
MX_GLOBAL MX_UINT16 FCV_TEST_COUNT = (0x5);
MX_GLOBAL MX_FLOAT FCV_CURRENT_GAIN = (0.5);
MX_GLOBAL MX_UINT8 FCV_INTEGRATE_COUNT = (0x0); // To gain error average over time
MX_GLOBAL MX_UINT32 FCV_CURRENT_BEEP_AVERAGE = (0x0); // Average for beep determination
MX_GLOBAL MX_UINT32 FCV_TEMP = (0x0);
MX_GLOBAL MX_UINT16 FCV_CURRENT_PEAK_COUNT = (0x0);
MX_GLOBAL MX_SINT16 FCV_DISPLAY_VALUE = (0);
MX_GLOBAL MX_BOOL FCV_PROGRAM_BUTTON = (1); // Encoder press
MX_GLOBAL MX_UINT8 FCV_STATE = (0x0); // I/O states
MX_GLOBAL MX_SINT16 FCV_ENCODER_COUNTER = (0);
MX_GLOBAL MX_UINT32 FCV_PROGRAM_BUTTON_COUNT = (0x0);
MX_GLOBAL MX_BOOL FCV_BEEP_ENABLE = (1);
MX_GLOBAL MX_UINT8 FCV_CLEAR_POSITION = (0x0); // Beginning position to clear
MX_GLOBAL MX_UINT16 FCV_MSB = (0x0);
MX_GLOBAL MX_FLOAT FCV_PGAIN = (0.4000000059604644775390625); // was2
MX_GLOBAL MX_UINT32 FCV_CURRENT_ACCUMULATOR = (0x0); // For average calcs
MX_GLOBAL MX_BOOL FCV_OK_TO_BEEP = (0);
MX_GLOBAL MX_SINT16 FCV_TEMP_STORE = (0); // Universal store
MX_GLOBAL MX_FLOAT FCV_TEMP_FLOAT_F = (0.0);
MX_GLOBAL MX_UINT16 FCV_HEART_BEAT = (0x0);
MX_GLOBAL MX_FLOAT FCV_CURRENT_VAR_STORE = (0.0);
MX_GLOBAL MX_UINT8 FCV_INTERRUPT_COUNT = (0x0);
MX_GLOBAL MX_UINT8 FCV_INTERRUPT_COUNT2 = (0x0);
MX_GLOBAL MX_UINT8 FCV_FIRST_TIME_PU = (0x0); // Obvious
MX_GLOBAL MX_FLOAT FCV_VMAX_GAIN = (1.25); // was1.70
MX_GLOBAL MX_BOOL FCV_FORWARD_REVERSE = (1); // Motor reverse switch
MX_GLOBAL MX_UINT32 FCV_SECONDS_COUNT_ULONG = (0x1); // Run time record
MX_GLOBAL MX_BOOL FCV_FR = (1);
MX_GLOBAL MX_SINT16 FCV_ERROR = (0);
MX_GLOBAL MX_FLOAT FCV_PROFILE_FLOAT = (0.0);
MX_GLOBAL MX_UINT8 FCV_PWM = (0x0); // Raw PWM Number
MX_GLOBAL MX_UINT8 FCV_PU_UNITS = (0x0);
MX_GLOBAL MX_SINT16 FCV_PWM_CLOCK = (0);
MX_GLOBAL MX_UINT16 FCV_COMMAND_SPEED = (0x64); // RPM Values
MX_GLOBAL MX_UINT8 FCV_MULT = (0x0);
MX_GLOBAL MX_UINT16 FCV_COUNT2 = (0x0);
MX_GLOBAL MX_UINT16 FCV_RMS_COUNT = (0x0); // Current read count
MX_GLOBAL MX_UINT16 FCV_CLOCK_INT = (0x0);
MX_GLOBAL MX_UINT8 FCV_BEEP_DELAY = (0xa);
MX_GLOBAL MX_UINT8 FCV_TEMP_BYTE = (0x0);
MX_GLOBAL MX_UINT16 FCV_VELOCITY = (0x0);
MX_GLOBAL MX_UINT8 FCV_STEP_INC = (0x1);
MX_GLOBAL MX_UINT16 FCV_CLOCK_INT3 = (0x0);
MX_GLOBAL MX_FLOAT FCV_EMF_TEMP = (0.0);
MX_GLOBAL MX_BOOL FCV_TOGGLE2 = (0); // To limit dispaly writing in proportional
MX_GLOBAL MX_CHAR FCV_DISPLAY_STRING[FCVsz_DISPLAY_STRING];
MX_GLOBAL MX_UINT16 FCV_TEMP_COUNT = (0x0);
MX_GLOBAL MX_FLOAT FCV_CURRENT_VAR = (0.0);
MX_GLOBAL MX_UINT32 FCV_CLOCK_INT2 = (0x0);
MX_GLOBAL MX_SINT16 FCV_INTEGRATE_RESULT;
MX_GLOBAL MX_UINT8 FCV_X65536 = (0x0); // 3rd byte for eprom seconds
MX_GLOBAL MX_FLOAT FCV_VMAX_STORE = (1.64999997615814208984375);
MX_GLOBAL MX_UINT8 FCV_X1 = (0x0); // UNits for eprom seconds
MX_GLOBAL MX_UINT16 FCV_VMAX = (0x0); // Motor Max Speed/Emprical Check
MX_GLOBAL MX_UINT8 FCV_MULT_UNITS = (0x0);
MX_GLOBAL MX_BOOL FCV_CURRENT_READ_OFF = (1);
MX_GLOBAL MX_UINT8 FCV_FR_COUNT = (0x0); // Debounce Forward Reverse Switch
MX_GLOBAL MX_UINT16 FCV_INT_INT = (0x0);
MX_GLOBAL MX_FLOAT FCV_MOTOR_TEMP = (0.0);
MX_GLOBAL MX_BOOL FCV_BEEP_IS_ON = (0);
MX_GLOBAL MX_SINT16 FCV_TIME_COUNT = (500);
MX_GLOBAL MX_BOOL FCV_FOOT_PEDAL_STORE = (1);
MX_GLOBAL MX_UINT32 FCV_CURRENT_LIMIT_HIGH = (0x99a); // Heat tested on Flyback at 152f
MX_GLOBAL MX_SINT16 FCV_CURRENT_LIMIT = (50); // milliamps x 2 populated by Current_limit_low and -hi
MX_GLOBAL MX_UINT8 FCV_PWM_CLOCK2 = (0x0); // Counter
MX_GLOBAL MX_FLOAT FCV_MOTOR_TEMP_CALIBRATE = (0.0);
MX_GLOBAL MX_BOOL FCV_FOOT_PEDAL = (1);

void FCM_Hi_Lo_current();
void FCM_Write_Display_Value();
void FCM_Power_Down();
void FCM_Change_Baud();
void FCM_Profile();
void FCM_Display_Torques();
void FCM_Splash_Screen();
void FCM_Running_display();
void FCM_Torque_limits();
void FCM_Encoder_test();
void FCM_PU_Counter();
void FCM_Accel_Rate_Adder();
void FCM_Get_IO();
void FCM_Read_Velocity();
void FCM_Calibrate_Motor_Vmax();
void FCM_Display_hours();
void FCM_Motor_stop_Wait();
void FCM_Fast_velocity_read();
void FCM_Temperatures();
void FCM_Write_display_float();
void FCM_BEEP_ENABLE();
void FCM_Factory_setup_mode();
void FCM_BEEP();
void FCM_Read_Speed();
void FCM_disp_vel_error();
void FCM_Display_State();
void FCM_Clear_text();
void FCM_Raw_PWM();
void FCM_DIsplay_Velocity_test();
void FCM_Torque_Level();
void FCM_Current_Beeps();
void FCM_CLS();
void FCM_Write_display_text();
void FCM_Test_Trap();
void FCM_Display_FS_and_FR();
void FCM_Proportional();
void FCM_User_Program_mode();
void FCM_Startup();
void FCM_Direction();
void FCM_Eprom_Defaults();
void FCM_Loop_Formula3();
void FCM_Run_Clock();
MX_UINT8 FCD_05262_switch_base1__ReadState();
void FCD_05262_switch_base1__WaitUntilHigh();
void FCD_05262_switch_base1__WaitUntilLow();
MX_UINT8 FCD_05261_switch_base1__ReadState();
void FCD_05261_switch_base1__WaitUntilHigh();
void FCD_05261_switch_base1__WaitUntilLow();

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_ADC_REF1 
#define MX_ADC_TYPE_13 
#define MX_ADC_CHANNEL_11 


/*=----------------------------------------------------------------------=*\
   Use :cal_adc
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define FC_ADC_Enable_5 FC_CAL_ADC_Enable_1
#define FC_ADC_Disable_5 FC_CAL_ADC_Disable_1
#define FC_ADC_Sample_5 FC_CAL_ADC_Sample_1

#define FCV_0aae5_cal_adc__FALSE (0)
#define FCV_0aae5_cal_adc__TRUE (1)

void FC_ADC_Disable_5();
void FC_ADC_Enable_5(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_ADC_Sample_5(MX_UINT8 FCL_SAMPLE_MODE);
MX_UINT16 FCD_08f45_adc_base__RawSampleInt();
MX_UINT8 FCD_08f45_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_08f45_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_UINT8 FCD_08f45_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_SINT16 FCD_08f45_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_UINT16 FCD_08f45_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_08f45_adc_base__GetVoltage();
void FCD_08f45_adc_base__RawEnable();
MX_UINT8 FCD_08f45_adc_base__RawSampleByte();
MX_UINT16 FCD_08f45_adc_base__GetInt();
void FCD_08f45_adc_base__RawDisable();
MX_UINT8 FCD_08f45_adc_base__GetByte();
#define FCD_0d102_DC_Voltage__RawSampleInt FCD_08f45_adc_base__RawSampleInt
#define FCD_0d102_DC_Voltage__RawAverageByte FCD_08f45_adc_base__RawAverageByte
#define FCD_0d102_DC_Voltage__GetString FCD_08f45_adc_base__GetString
#define FCD_0d102_DC_Voltage__GetAverageByte FCD_08f45_adc_base__GetAverageByte
#define FCD_0d102_DC_Voltage__RawAverageInt FCD_08f45_adc_base__RawAverageInt
#define FCD_0d102_DC_Voltage__GetAverageInt FCD_08f45_adc_base__GetAverageInt
#define FCD_0d102_DC_Voltage__GetVoltage FCD_08f45_adc_base__GetVoltage
#define FCD_0d102_DC_Voltage__RawEnable FCD_08f45_adc_base__RawEnable
#define FCD_0d102_DC_Voltage__RawSampleByte FCD_08f45_adc_base__RawSampleByte
#define FCD_0d102_DC_Voltage__GetInt FCD_08f45_adc_base__GetInt
#define FCD_0d102_DC_Voltage__RawDisable FCD_08f45_adc_base__RawDisable
#define FCD_0d102_DC_Voltage__GetByte FCD_08f45_adc_base__GetByte

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_ADC_REF1 
#define MX_ADC_TYPE_13 
#define MX_ADC_CHANNEL_2 


/*=----------------------------------------------------------------------=*\
   Use :cal_adc
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define FC_ADC_Enable_4 FC_CAL_ADC_Enable_1
#define FC_ADC_Disable_4 FC_CAL_ADC_Disable_1
#define FC_ADC_Sample_4 FC_CAL_ADC_Sample_1

#define FCV_0aae4_cal_adc__FALSE (0)
#define FCV_0aae4_cal_adc__TRUE (1)

void FC_ADC_Disable_4();
void FC_ADC_Enable_4(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_ADC_Sample_4(MX_UINT8 FCL_SAMPLE_MODE);
MX_UINT16 FCD_08f44_adc_base__RawSampleInt();
MX_UINT8 FCD_08f44_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_08f44_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_UINT8 FCD_08f44_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_SINT16 FCD_08f44_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_UINT16 FCD_08f44_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_08f44_adc_base__GetVoltage();
void FCD_08f44_adc_base__RawEnable();
MX_UINT8 FCD_08f44_adc_base__RawSampleByte();
MX_UINT16 FCD_08f44_adc_base__GetInt();
void FCD_08f44_adc_base__RawDisable();
MX_UINT8 FCD_08f44_adc_base__GetByte();
#define FCD_03522_Motor_Temp_Comp__RawSampleInt FCD_08f44_adc_base__RawSampleInt
#define FCD_03522_Motor_Temp_Comp__RawAverageByte FCD_08f44_adc_base__RawAverageByte
#define FCD_03522_Motor_Temp_Comp__GetString FCD_08f44_adc_base__GetString
#define FCD_03522_Motor_Temp_Comp__GetAverageByte FCD_08f44_adc_base__GetAverageByte
#define FCD_03522_Motor_Temp_Comp__RawAverageInt FCD_08f44_adc_base__RawAverageInt
#define FCD_03522_Motor_Temp_Comp__GetAverageInt FCD_08f44_adc_base__GetAverageInt
#define FCD_03522_Motor_Temp_Comp__GetVoltage FCD_08f44_adc_base__GetVoltage
#define FCD_03522_Motor_Temp_Comp__RawEnable FCD_08f44_adc_base__RawEnable
#define FCD_03522_Motor_Temp_Comp__RawSampleByte FCD_08f44_adc_base__RawSampleByte
#define FCD_03522_Motor_Temp_Comp__GetInt FCD_08f44_adc_base__GetInt
#define FCD_03522_Motor_Temp_Comp__RawDisable FCD_08f44_adc_base__RawDisable
#define FCD_03522_Motor_Temp_Comp__GetByte FCD_08f44_adc_base__GetByte

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_ADC_REF1 
#define MX_ADC_TYPE_13 
#define MX_ADC_CHANNEL_3 


/*=----------------------------------------------------------------------=*\
   Use :cal_adc
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define FC_ADC_Enable_3 FC_CAL_ADC_Enable_1
#define FC_ADC_Disable_3 FC_CAL_ADC_Disable_1
#define FC_ADC_Sample_3 FC_CAL_ADC_Sample_1

#define FCV_0aae3_cal_adc__FALSE (0)
#define FCV_0aae3_cal_adc__TRUE (1)

void FC_ADC_Disable_3();
void FC_ADC_Enable_3(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_ADC_Sample_3(MX_UINT8 FCL_SAMPLE_MODE);
MX_UINT16 FCD_08f43_adc_base__RawSampleInt();
MX_UINT8 FCD_08f43_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_08f43_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_UINT8 FCD_08f43_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_SINT16 FCD_08f43_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_UINT16 FCD_08f43_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_08f43_adc_base__GetVoltage();
void FCD_08f43_adc_base__RawEnable();
MX_UINT8 FCD_08f43_adc_base__RawSampleByte();
MX_UINT16 FCD_08f43_adc_base__GetInt();
void FCD_08f43_adc_base__RawDisable();
MX_UINT8 FCD_08f43_adc_base__GetByte();
#define FCD_03521_Temperature__RawSampleInt FCD_08f43_adc_base__RawSampleInt
#define FCD_03521_Temperature__RawAverageByte FCD_08f43_adc_base__RawAverageByte
#define FCD_03521_Temperature__GetString FCD_08f43_adc_base__GetString
#define FCD_03521_Temperature__GetAverageByte FCD_08f43_adc_base__GetAverageByte
#define FCD_03521_Temperature__RawAverageInt FCD_08f43_adc_base__RawAverageInt
#define FCD_03521_Temperature__GetAverageInt FCD_08f43_adc_base__GetAverageInt
#define FCD_03521_Temperature__GetVoltage FCD_08f43_adc_base__GetVoltage
#define FCD_03521_Temperature__RawEnable FCD_08f43_adc_base__RawEnable
#define FCD_03521_Temperature__RawSampleByte FCD_08f43_adc_base__RawSampleByte
#define FCD_03521_Temperature__GetInt FCD_08f43_adc_base__GetInt
#define FCD_03521_Temperature__RawDisable FCD_08f43_adc_base__RawDisable
#define FCD_03521_Temperature__GetByte FCD_08f43_adc_base__GetByte

/*========================================================================*\
   Use :TypeConversionsFree1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif



/*========================================================================*\
   Use :TypeConversionsFree1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif



/*========================================================================*\
   Use :cal_uart
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_UART_UseTX_2 (1)
#define MX_UART_TX_TRIS_2 trisc
#define MX_UART_REF2 
#define MX_UART_RTS_PIN_2 (2)
#define MX_UART_DBITS_2 (8)
#define MX_UART_RETURN_2 (1)
#define MX_UART_RX_PORT_2 portc
#define MX_UART_RTS_PORT_2 portb
#define MX_UART_ECHO_2 (0)
#define MX_UART_FLOWEN_2 (0)
#define MX_UART_CTS_PORT_2 portb
#define MX_UART_TX_PIN_2 (6)
#define MX_UART_RX_TRIS_2 trisc
#define MX_UART_BAUD_2 (9600)
#define MX_UART_RTS_TRIS_2 trisb
#define MX_UART_TX_PORT_2 portc
#define MX_UART_RX_PIN_2 (7)
#define MX_UART_UseRX_2 (1)
#define MX_UART_CTS_TRIS_2 trisb
#define MX_UART_CHANNEL_2 (1)
#define MX_UART_INT_2 (0)
#define MX_UART_CTS_PIN_2 (1)

MX_GLOBAL MX_BOOL FCV_05482_cal_uart__RS485_STATE;
MX_GLOBAL MX_UINT32 FCV_05482_cal_uart__CONSOLE;

MX_UINT8 FCD_05482_cal_uart__ControlPin(MX_UINT8 FCL_PIN, MX_UINT8 FCL_STATE);
void FCD_05482_cal_uart__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA);
void FCD_05482_cal_uart__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR);
void FC_CAL_UART_UpdateBaud_2(MX_UINT8 FCL_NEW_BAUD);
MX_UINT8 FCD_05482_cal_uart__TestProperty(MX_UINT8 FCL_PROPERTY);
void FCD_05482_cal_uart__SendNumber(MX_SINT32 FCL_NUMBER);
void FCD_05482_cal_uart__Prv_SimShowWaveform(MX_UINT8 FCL_TXRX, MX_UINT16 FCL_DATA);
MX_SINT16 FC_CAL_UART_Receive_2(MX_UINT8 FCL_TIMEOUT);
void FC_CAL_UART_Send_2(MX_UINT16 FCL_CHAR);
void FCD_05482_cal_uart__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES);
void FC_CAL_UART_Init_2();
void FC_CAL_UART_Delay_2();
void FC_CAL_UART_Uninit_2();
MX_UINT8 FCD_05482_cal_uart__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
MX_UINT8 FCD_05482_cal_uart__ReceiveString(MX_CHAR *FCL_STRINGDATA, MX_UINT16 FCLsz_STRINGDATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
void FCD_047b2_UART1__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA);
MX_UINT8 FCD_047b2_UART1__ReceiveINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
MX_SINT32 FCD_047b2_UART1__ReceiveNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA);
void FCD_047b2_UART1__SendBinary16Bit(MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST);
void FCD_047b2_UART1__SendINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST);
void FCD_047b2_UART1__SendNumber(MX_SINT32 FCL_NUMBER);
MX_UINT32 FCD_047b2_UART1__ReceiveBinary32Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
MX_FLOAT FCD_047b2_UART1__ReceiveBinaryFloat(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
void FCD_047b2_UART1__SendChar(MX_SINT16 FCL_CHAR);
void FCD_047b2_UART1__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES);
MX_UINT16 FCD_047b2_UART1__ReceiveBinary16Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
void FCD_047b2_UART1__ChangeHWBaud(MX_UINT8 FCL_NEWBAUD);
MX_FLOAT FCD_047b2_UART1__ReceiveFloat(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA);
void FCD_047b2_UART1__SendFloat(MX_FLOAT FCL_NUMBER);
void FCD_047b2_UART1__SendHexNumber(MX_UINT32 FCL_NUMBER, MX_UINT8 FCL_NUMCHARS, MX_BOOL FCL_PREFIX);
MX_UINT32 FCD_047b2_UART1__ReceiveHexNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA, MX_BOOL FCL_PREFIX);
void FCD_047b2_UART1__SendBinary32Bit(MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST);
void FCD_047b2_UART1__SendBinaryFloat(MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST);
MX_UINT8 FCD_047b2_UART1__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
void FCD_047b2_UART1__ReceiveString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT, MX_UINT16 FCL_NUMBYTES);
void FCD_047b2_UART1__Initialise();
MX_SINT16 FCD_047b2_UART1__ReceiveChar(MX_UINT8 FCL_TIMEOUT);

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_ADC_REF1 
#define MX_ADC_TYPE_13 
#define MX_ADC_CHANNEL_0 


/*=----------------------------------------------------------------------=*\
   Use :cal_adc
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define FC_ADC_Enable_2 FC_CAL_ADC_Enable_1
#define FC_ADC_Disable_2 FC_CAL_ADC_Disable_1
#define FC_ADC_Sample_2 FC_CAL_ADC_Sample_1

#define FCV_0aae2_cal_adc__FALSE (0)
#define FCV_0aae2_cal_adc__TRUE (1)

void FC_ADC_Disable_2();
void FC_ADC_Enable_2(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_ADC_Sample_2(MX_UINT8 FCL_SAMPLE_MODE);
MX_UINT16 FCD_08f42_adc_base__RawSampleInt();
MX_UINT8 FCD_08f42_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_08f42_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_UINT8 FCD_08f42_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_SINT16 FCD_08f42_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_UINT16 FCD_08f42_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_08f42_adc_base__GetVoltage();
void FCD_08f42_adc_base__RawEnable();
MX_UINT8 FCD_08f42_adc_base__RawSampleByte();
MX_UINT16 FCD_08f42_adc_base__GetInt();
void FCD_08f42_adc_base__RawDisable();
MX_UINT8 FCD_08f42_adc_base__GetByte();
#define FCD_0d101_Velocity_Feedback__RawSampleInt FCD_08f42_adc_base__RawSampleInt
#define FCD_0d101_Velocity_Feedback__RawAverageByte FCD_08f42_adc_base__RawAverageByte
#define FCD_0d101_Velocity_Feedback__GetString FCD_08f42_adc_base__GetString
#define FCD_0d101_Velocity_Feedback__GetAverageByte FCD_08f42_adc_base__GetAverageByte
#define FCD_0d101_Velocity_Feedback__RawAverageInt FCD_08f42_adc_base__RawAverageInt
#define FCD_0d101_Velocity_Feedback__GetAverageInt FCD_08f42_adc_base__GetAverageInt
#define FCD_0d101_Velocity_Feedback__GetVoltage FCD_08f42_adc_base__GetVoltage
#define FCD_0d101_Velocity_Feedback__RawEnable FCD_08f42_adc_base__RawEnable
#define FCD_0d101_Velocity_Feedback__RawSampleByte FCD_08f42_adc_base__RawSampleByte
#define FCD_0d101_Velocity_Feedback__GetInt FCD_08f42_adc_base__GetInt
#define FCD_0d101_Velocity_Feedback__RawDisable FCD_08f42_adc_base__RawDisable
#define FCD_0d101_Velocity_Feedback__GetByte FCD_08f42_adc_base__GetByte

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_ADC_REF1 
#define MX_ADC_TYPE_13 
#define MX_ADC_CHANNEL_1 


/*=----------------------------------------------------------------------=*\
   Use :cal_adc
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define FC_ADC_Enable_1 FC_CAL_ADC_Enable_1
#define FC_ADC_Disable_1 FC_CAL_ADC_Disable_1
#define FC_ADC_Sample_1 FC_CAL_ADC_Sample_1

#define FCV_0aae1_cal_adc__FALSE (0)
#define FCV_0aae1_cal_adc__TRUE (1)

void FC_ADC_Disable_1();
void FC_ADC_Enable_1(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_ADC_Sample_1(MX_UINT8 FCL_SAMPLE_MODE);
MX_UINT16 FCD_08f41_adc_base__RawSampleInt();
MX_UINT8 FCD_08f41_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_08f41_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_UINT8 FCD_08f41_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_SINT16 FCD_08f41_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_UINT16 FCD_08f41_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_08f41_adc_base__GetVoltage();
void FCD_08f41_adc_base__RawEnable();
MX_UINT8 FCD_08f41_adc_base__RawSampleByte();
MX_UINT16 FCD_08f41_adc_base__GetInt();
void FCD_08f41_adc_base__RawDisable();
MX_UINT8 FCD_08f41_adc_base__GetByte();
#define FCD_04751_Current__RawSampleInt FCD_08f41_adc_base__RawSampleInt
#define FCD_04751_Current__RawAverageByte FCD_08f41_adc_base__RawAverageByte
#define FCD_04751_Current__GetString FCD_08f41_adc_base__GetString
#define FCD_04751_Current__GetAverageByte FCD_08f41_adc_base__GetAverageByte
#define FCD_04751_Current__RawAverageInt FCD_08f41_adc_base__RawAverageInt
#define FCD_04751_Current__GetAverageInt FCD_08f41_adc_base__GetAverageInt
#define FCD_04751_Current__GetVoltage FCD_08f41_adc_base__GetVoltage
#define FCD_04751_Current__RawEnable FCD_08f41_adc_base__RawEnable
#define FCD_04751_Current__RawSampleByte FCD_08f41_adc_base__RawSampleByte
#define FCD_04751_Current__GetInt FCD_08f41_adc_base__GetInt
#define FCD_04751_Current__RawDisable FCD_08f41_adc_base__RawDisable
#define FCD_04751_Current__GetByte FCD_08f41_adc_base__GetByte

/*========================================================================*\
   Use :TypeConversionsFree1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif


void FCD_02573_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE);
void FCD_02573_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE);
MX_FLOAT FCD_02573_TypeConversionsFree1__GetFloat();
MX_UINT32 FCD_02573_TypeConversionsFree1__GetLong();
MX_UINT16 FCD_02573_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX);
void FCD_02573_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE);
MX_UINT8 FCD_02573_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX);
void FCD_02573_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE);

/*========================================================================*\
   Use :TypeConversionsFree1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif


void FCD_02572_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE);
void FCD_02572_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE);
MX_FLOAT FCD_02572_TypeConversionsFree1__GetFloat();
MX_UINT32 FCD_02572_TypeConversionsFree1__GetLong();
MX_UINT16 FCD_02572_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX);
void FCD_02572_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE);
MX_UINT8 FCD_02572_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX);
void FCD_02572_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE);

/*========================================================================*\
   Use :cal_uart
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_UART_UseTX_1 (1)
#define MX_UART_TX_TRIS_1 trisc
#define MX_UART_REF1 
#define MX_UART_RTS_PIN_1 (2)
#define MX_UART_DBITS_1 (8)
#define MX_UART_RETURN_1 (1)
#define MX_UART_RX_PORT_1 portc
#define MX_UART_RTS_PORT_1 portb
#define MX_UART_ECHO_1 (0)
#define MX_UART_FLOWEN_1 (0)
#define MX_UART_CTS_PORT_1 portb
#define MX_UART_TX_PIN_1 (6)
#define MX_UART_RX_TRIS_1 trisc
#define MX_UART_BAUD_1 (9600)
#define MX_UART_RTS_TRIS_1 trisb
#define MX_UART_TX_PORT_1 portc
#define MX_UART_RX_PIN_1 (7)
#define MX_UART_UseRX_1 (1)
#define MX_UART_CTS_TRIS_1 trisb
#define MX_UART_CHANNEL_1 (1)
#define MX_UART_INT_1 (0)
#define MX_UART_CTS_PIN_1 (1)

MX_GLOBAL MX_BOOL FCV_05481_cal_uart__RS485_STATE;
MX_GLOBAL MX_UINT32 FCV_05481_cal_uart__CONSOLE;

MX_UINT8 FCD_05481_cal_uart__ControlPin(MX_UINT8 FCL_PIN, MX_UINT8 FCL_STATE);
void FCD_05481_cal_uart__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA);
void FCD_05481_cal_uart__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR);
void FC_CAL_UART_UpdateBaud_1(MX_UINT8 FCL_NEW_BAUD);
MX_UINT8 FCD_05481_cal_uart__TestProperty(MX_UINT8 FCL_PROPERTY);
void FCD_05481_cal_uart__SendNumber(MX_SINT32 FCL_NUMBER);
void FCD_05481_cal_uart__Prv_SimShowWaveform(MX_UINT8 FCL_TXRX, MX_UINT16 FCL_DATA);
MX_SINT16 FC_CAL_UART_Receive_1(MX_UINT8 FCL_TIMEOUT);
void FC_CAL_UART_Send_1(MX_UINT16 FCL_CHAR);
void FCD_05481_cal_uart__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES);
void FC_CAL_UART_Init_1();
void FC_CAL_UART_Delay_1();
void FC_CAL_UART_Uninit_1();
MX_UINT8 FCD_05481_cal_uart__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
MX_UINT8 FCD_05481_cal_uart__ReceiveString(MX_CHAR *FCL_STRINGDATA, MX_UINT16 FCLsz_STRINGDATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
void FCD_047b1_uart9600__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA);
MX_UINT8 FCD_047b1_uart9600__ReceiveINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
MX_SINT32 FCD_047b1_uart9600__ReceiveNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA);
void FCD_047b1_uart9600__SendBinary16Bit(MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST);
void FCD_047b1_uart9600__SendINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST);
void FCD_047b1_uart9600__SendNumber(MX_SINT32 FCL_NUMBER);
MX_UINT32 FCD_047b1_uart9600__ReceiveBinary32Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
MX_FLOAT FCD_047b1_uart9600__ReceiveBinaryFloat(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
void FCD_047b1_uart9600__SendChar(MX_SINT16 FCL_CHAR);
void FCD_047b1_uart9600__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES);
MX_UINT16 FCD_047b1_uart9600__ReceiveBinary16Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT);
void FCD_047b1_uart9600__ChangeHWBaud(MX_UINT8 FCL_NEWBAUD);
MX_FLOAT FCD_047b1_uart9600__ReceiveFloat(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA);
void FCD_047b1_uart9600__SendFloat(MX_FLOAT FCL_NUMBER);
void FCD_047b1_uart9600__SendHexNumber(MX_UINT32 FCL_NUMBER, MX_UINT8 FCL_NUMCHARS, MX_BOOL FCL_PREFIX);
MX_UINT32 FCD_047b1_uart9600__ReceiveHexNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA, MX_BOOL FCL_PREFIX);
void FCD_047b1_uart9600__SendBinary32Bit(MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST);
void FCD_047b1_uart9600__SendBinaryFloat(MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST);
MX_UINT8 FCD_047b1_uart9600__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT);
void FCD_047b1_uart9600__ReceiveString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT, MX_UINT16 FCL_NUMBYTES);
void FCD_047b1_uart9600__Initialise();
MX_SINT16 FCD_047b1_uart9600__ReceiveChar(MX_UINT8 FCL_TIMEOUT);

/*========================================================================*\
   Use :TypeConversionsFree1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :TypeConversionsFree1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

#ifndef MX_UNIONTYPE
 #define MX_UNIONTYPE
 typedef union
{
  MX_FLOAT AsFloat;
  MX_UINT32 AsLong;
  MX_UINT16 AsInt[2];
  MX_UINT8  AsByte[4];
} MX_Union_Type;
 MX_Union_Type MX_Conv_Var;
#endif


void FCD_02571_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE);
void FCD_02571_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE);
MX_FLOAT FCD_02571_TypeConversionsFree1__GetFloat();
MX_UINT32 FCD_02571_TypeConversionsFree1__GetLong();
MX_UINT16 FCD_02571_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX);
void FCD_02571_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE);
MX_UINT8 FCD_02571_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX);
void FCD_02571_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE);

/*========================================================================*\
   Use :cal_eeprom
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_EEPROM_REF 
#define MX_EE_SIZE 256
#define MX_EE_Flash_Address 0
#define MX_EE_TYPE3 


/*=----------------------------------------------------------------------=*\
   Use :cal_eeprom
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define MX_EE
MX_UINT16 FC_CAL_EE_Read(MX_UINT16 FCL_ADDRESS);
void FC_CAL_EE_Write(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_DATA);

/*========================================================================*\
   Use :eeprom1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :eeprom1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/

//Initialise EEPROM MEMORY

#ifdef MX_CAL_PIC
__EEPROM_DATA(3,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF);
#endif

#ifdef MX_CAL_AVR
char EEMEM NonVolatileData[] = {3};
#endif

#ifdef MX_CAL_PIC16
int _EEDATA(2) NonVolatileData[] = {3};
#endif


#define FCVsz_06651_eeprom1__SIM_MEMORY 256

void FCD_06651_eeprom1__WriteFloat(MX_UINT16 FCL_STARTADDRESS, MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST);
MX_UINT16 FCD_06651_eeprom1__ReadInt(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST);
MX_FLOAT FCD_06651_eeprom1__ReadFloat(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST);
void FCD_06651_eeprom1__WriteByte(MX_UINT16 FCL_BYTEADDRESS, MX_UINT8 FCL_VALUE);
void FCD_06651_eeprom1__WriteInt(MX_UINT16 FCL_STARTADDRESS, MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST);
void FCD_06651_eeprom1__ReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT16 FCL_STARTADDRESS, MX_UINT8 FCL_MAXCHARS);
MX_UINT16 FCD_06651_eeprom1__Read(MX_UINT16 FCL_ADDRESS);
MX_UINT32 FCD_06651_eeprom1__ReadLong(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST);
void FCD_06651_eeprom1__WriteString(MX_UINT16 FCL_STARTADDRESS, MX_UINT8 FCL_MAXCHARS, MX_CHAR *FCL_DATASTRING, MX_UINT16 FCLsz_DATASTRING);
void FCD_06651_eeprom1__Sim_Write(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_VALUE);
void FCD_06651_eeprom1__Write(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_VALUE);
MX_UINT8 FCD_06651_eeprom1__ReadByte(MX_UINT16 FCL_BYTEADDRESS, MX_BOOL FCL_MSBFIRST);
MX_UINT16 FCD_06651_eeprom1__Sim_Read(MX_UINT16 FCL_ADDRESS);
void FCD_06651_eeprom1__WriteLong(MX_UINT16 FCL_STARTADDRESS, MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST);

/*========================================================================*\
   Use :cal_pwm
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_PWM_REF1 
#define MX_PWM_PRESCALE1 (1)
#define MX_PWM_PIN_1 (2)
#define MX_PWM_TYPE_1 (0)
#define MX_PWM_PORT_1 PORTC
#define MX_PWM_TRIS_1 TRISC
#define MX_PWM_CHANNEL_1 (1)


/*=----------------------------------------------------------------------=*\
   Use :cal_pwm
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define MX_PWM

#define MX_PWM_FREQ_1  7812
#define MX_PWM_TMR_1 2

void FC_CAL_PWM_ChangePeriod_1(MX_UINT16 FCL_PERIOD, MX_UINT16 FCL_PRESCALER);
void FC_CAL_PWM_Disable_1();
void FC_CAL_PWM_SetDuty8Bit_1(MX_UINT8 FCL_DUTY);
void FC_CAL_PWM_Enable_1();
void FC_CAL_PWM_ChangeFrequency_1(MX_UINT32 FCL_FREQUENCY);
void FC_CAL_PWM_SetDuty10Bit_1(MX_UINT16 FCL_DUTY);
void FC_CAL_PWM_SetDutyFloat_1(MX_FLOAT FCL_DUTY);

/*========================================================================*\
   Use :PWM1DRIVE
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_0df41_PWM1DRIVE__ENABLED = (0x0);

void FCD_0df41_PWM1DRIVE__ChangePeriod(MX_UINT16 FCL_PERIOD, MX_SINT16 FCL_PRESCALER);
void FCD_0df41_PWM1DRIVE__Disable();
void FCD_0df41_PWM1DRIVE__SetDutyCycle(MX_UINT8 FCL_DUTY);
void FCD_0df41_PWM1DRIVE__Enable();
void FCD_0df41_PWM1DRIVE__SetFrequency(MX_UINT32 FCL_FREQUENCY);
void FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(MX_UINT16 FCL_DUTY);

/*========================================================================*\
   Use :Include the chip adaption layer
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV9\CAL\includes.c"


/*=----------------------------------------------------------------------=*\
   Use :Supplementary defines
\*=----------------------------------------------------------------------=*/
unsigned char TRISE;

/*========================================================================*\
   Use :switch_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reads the button state as 0 for released or 1 for pressed
       :Performs debounce if required
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05262_switch_base1__ReadState()
{
	//Local variable definitions
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		if (1 != GET_PORT_PIN(B, 3))
		{

			// .Return = 1
			FCR_RETVAL = 1;

		} else {

			// .Return = 0
			FCR_RETVAL = 0;

		}

		// .del_count = 0
		// .old_switchval = .Return
		FCL_DEL_COUNT = 0;
		FCL_OLD_SWITCHVAL = FCR_RETVAL;

		#if (1) // 20 > 0

			while (FCL_DEL_COUNT < 20)
			{

				FCI_DELAYBYTEWDT_MS(1);

				if (1 != GET_PORT_PIN(B, 3))
				{

					// .Return = 1
					FCR_RETVAL = 1;

				} else {

					// .Return = 0
					FCR_RETVAL = 0;

				}

				if (FCR_RETVAL == FCL_OLD_SWITCHVAL)
				{

					// .del_count = .del_count + 1
					FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

				} else {

					// .del_count = 0
					FCL_DEL_COUNT = 0;

				}

				// .old_switchval = .Return
				FCL_OLD_SWITCHVAL = FCR_RETVAL;


			}

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	#else

	//Code has been optimised out by the pre-processor
	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'high'
       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_05262_switch_base1__WaitUntilHigh()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL = (0xff); // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	#if (1)

		while (1)
		{

			// .switchval = pin
			FCL_SWITCHVAL = GET_PORT_PIN(B, 3);

			#if (1) // 1 == 1

				// .switchval = ! .switchval
				FCL_SWITCHVAL = !FCL_SWITCHVAL;

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			// .del_count = 0
			// .old_switchval = .switchval
			FCL_DEL_COUNT = 0;
			FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;

			#if (1) // 20 > 0

				while (FCL_DEL_COUNT < 20)
				{

					FCI_DELAYBYTEWDT_MS(1);

					// .switchval = pin
					FCL_SWITCHVAL = GET_PORT_PIN(B, 3);

					#if (1) // 1 == 1

						// .switchval = ! .switchval
						FCL_SWITCHVAL = !FCL_SWITCHVAL;

					// #else

					//Code has been optimised out by the pre-processor
					#endif

					if (FCL_SWITCHVAL == FCL_OLD_SWITCHVAL)
					{

						// .del_count = .del_count + 1
						FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

					} else {

						// .del_count = 0
						FCL_DEL_COUNT = 0;

					}

					// .old_switchval = .switchval
					FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;


				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif


			if ((FCL_SWITCHVAL == 1) == 0) break;
		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'low'
       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_05262_switch_base1__WaitUntilLow()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL; // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	#if (1)

		while (1)
		{

			// .switchval = pin
			FCL_SWITCHVAL = GET_PORT_PIN(B, 3);

			#if (1) // 1 == 1

				// .switchval = ! .switchval
				FCL_SWITCHVAL = !FCL_SWITCHVAL;

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			// .del_count = 0
			// .old_switchval = .switchval
			FCL_DEL_COUNT = 0;
			FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;

			#if (1) // 20 > 0

				while (FCL_DEL_COUNT < 20)
				{

					FCI_DELAYBYTEWDT_MS(1);

					// .switchval = pin
					FCL_SWITCHVAL = GET_PORT_PIN(B, 3);

					#if (1) // 1 == 1

						// .switchval = ! .switchval
						FCL_SWITCHVAL = !FCL_SWITCHVAL;

					// #else

					//Code has been optimised out by the pre-processor
					#endif

					if (FCL_SWITCHVAL == FCL_OLD_SWITCHVAL)
					{

						// .del_count = .del_count + 1
						FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

					} else {

						// .del_count = 0
						FCL_DEL_COUNT = 0;

					}

					// .old_switchval = .switchval
					FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;


				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif


			if ((FCL_SWITCHVAL != 1) == 0) break;
		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}


/*========================================================================*\
   Use :switch_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reads the button state as 0 for released or 1 for pressed
       :Performs debounce if required
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05261_switch_base1__ReadState()
{
	//Local variable definitions
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		if (1 != GET_PORT_PIN(B, 7))
		{

			// .Return = 1
			FCR_RETVAL = 1;

		} else {

			// .Return = 0
			FCR_RETVAL = 0;

		}

		// .del_count = 0
		// .old_switchval = .Return
		FCL_DEL_COUNT = 0;
		FCL_OLD_SWITCHVAL = FCR_RETVAL;

		#if (1) // 20 > 0

			while (FCL_DEL_COUNT < 20)
			{

				FCI_DELAYBYTEWDT_MS(1);

				if (1 != GET_PORT_PIN(B, 7))
				{

					// .Return = 1
					FCR_RETVAL = 1;

				} else {

					// .Return = 0
					FCR_RETVAL = 0;

				}

				if (FCR_RETVAL == FCL_OLD_SWITCHVAL)
				{

					// .del_count = .del_count + 1
					FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

				} else {

					// .del_count = 0
					FCL_DEL_COUNT = 0;

				}

				// .old_switchval = .Return
				FCL_OLD_SWITCHVAL = FCR_RETVAL;


			}

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	#else

	//Code has been optimised out by the pre-processor
	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'high'
       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_05261_switch_base1__WaitUntilHigh()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL = (0xff); // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	#if (1)

		while (1)
		{

			// .switchval = pin
			FCL_SWITCHVAL = GET_PORT_PIN(B, 7);

			#if (1) // 1 == 1

				// .switchval = ! .switchval
				FCL_SWITCHVAL = !FCL_SWITCHVAL;

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			// .del_count = 0
			// .old_switchval = .switchval
			FCL_DEL_COUNT = 0;
			FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;

			#if (1) // 20 > 0

				while (FCL_DEL_COUNT < 20)
				{

					FCI_DELAYBYTEWDT_MS(1);

					// .switchval = pin
					FCL_SWITCHVAL = GET_PORT_PIN(B, 7);

					#if (1) // 1 == 1

						// .switchval = ! .switchval
						FCL_SWITCHVAL = !FCL_SWITCHVAL;

					// #else

					//Code has been optimised out by the pre-processor
					#endif

					if (FCL_SWITCHVAL == FCL_OLD_SWITCHVAL)
					{

						// .del_count = .del_count + 1
						FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

					} else {

						// .del_count = 0
						FCL_DEL_COUNT = 0;

					}

					// .old_switchval = .switchval
					FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;


				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif


			if ((FCL_SWITCHVAL == 1) == 0) break;
		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'low'
       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_05261_switch_base1__WaitUntilLow()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL; // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	#if (1)

		while (1)
		{

			// .switchval = pin
			FCL_SWITCHVAL = GET_PORT_PIN(B, 7);

			#if (1) // 1 == 1

				// .switchval = ! .switchval
				FCL_SWITCHVAL = !FCL_SWITCHVAL;

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			// .del_count = 0
			// .old_switchval = .switchval
			FCL_DEL_COUNT = 0;
			FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;

			#if (1) // 20 > 0

				while (FCL_DEL_COUNT < 20)
				{

					FCI_DELAYBYTEWDT_MS(1);

					// .switchval = pin
					FCL_SWITCHVAL = GET_PORT_PIN(B, 7);

					#if (1) // 1 == 1

						// .switchval = ! .switchval
						FCL_SWITCHVAL = !FCL_SWITCHVAL;

					// #else

					//Code has been optimised out by the pre-processor
					#endif

					if (FCL_SWITCHVAL == FCL_OLD_SWITCHVAL)
					{

						// .del_count = .del_count + 1
						FCL_DEL_COUNT = FCL_DEL_COUNT + 1;

					} else {

						// .del_count = 0
						FCL_DEL_COUNT = 0;

					}

					// .old_switchval = .switchval
					FCL_OLD_SWITCHVAL = FCL_SWITCHVAL;


				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif


			if ((FCL_SWITCHVAL != 1) == 0) break;
		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

}


/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth
       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f45_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_5(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f45_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_5(11, 0, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_5(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_5(11, 0, 0, 5);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_5(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as a string
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_08f45_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_08f45_adc_base__GetVoltage();

	// .Return = FloatToString$ (.sample)
	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL, FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a byte average sample over time
       :
       :Parameters for macro GetAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f45_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCD_08f45_adc_base__RawAverageByte(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_5();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_08f45_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_5(11, 0, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_5(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_5(11, 0, 0, 5);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_5(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a full width average sample over time
       :
       :Parameters for macro GetAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f45_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCD_08f45_adc_base__RawAverageInt(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_5();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_08f45_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_ADC_Enable_5(11, 0, 0, 5);

	FCL_SAMPLE = FC_ADC_Sample_5(1);

	// .Return = .sample * bitmul
	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.001221);

	FC_ADC_Disable_5();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables and configures the ADC channel to be an analogue input.
       :Only one ADC channel can be enabled at a time. Any RAW functions will reference the last enabled channel only.
\*=----------------------------------------------------------------------=*/
void FCD_08f45_adc_base__RawEnable()
{

	FC_ADC_Enable_5(11, 0, 0, 5);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte
       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f45_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_5(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f45_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_ADC_Enable_5(11, 0, 0, 5);

	FCR_RETVAL = FC_ADC_Sample_5(1);

	FC_ADC_Disable_5();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel and converts back to digital mode.
\*=----------------------------------------------------------------------=*/
void FCD_08f45_adc_base__RawDisable()
{

	FC_ADC_Disable_5();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f45_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_ADC_Enable_5(11, 0, 0, 5);

	FCR_RETVAL = FC_ADC_Sample_5(0);

	FC_ADC_Disable_5();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth
       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f44_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_4(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f44_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_4(2, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_4(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_4(2, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_4(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as a string
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_08f44_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_08f44_adc_base__GetVoltage();

	// .Return = FloatToString$ (.sample)
	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL, FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a byte average sample over time
       :
       :Parameters for macro GetAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f44_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCD_08f44_adc_base__RawAverageByte(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_4();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_08f44_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_4(2, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_4(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_4(2, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_4(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a full width average sample over time
       :
       :Parameters for macro GetAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f44_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCD_08f44_adc_base__RawAverageInt(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_4();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_08f44_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_ADC_Enable_4(2, 6, 0, 10);

	FCL_SAMPLE = FC_ADC_Sample_4(1);

	// .Return = .sample * bitmul
	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.001221);

	FC_ADC_Disable_4();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables and configures the ADC channel to be an analogue input.
       :Only one ADC channel can be enabled at a time. Any RAW functions will reference the last enabled channel only.
\*=----------------------------------------------------------------------=*/
void FCD_08f44_adc_base__RawEnable()
{

	FC_ADC_Enable_4(2, 6, 0, 10);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte
       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f44_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_4(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f44_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_ADC_Enable_4(2, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_4(1);

	FC_ADC_Disable_4();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel and converts back to digital mode.
\*=----------------------------------------------------------------------=*/
void FCD_08f44_adc_base__RawDisable()
{

	FC_ADC_Disable_4();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f44_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_ADC_Enable_4(2, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_4(0);

	FC_ADC_Disable_4();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth
       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f43_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_3(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f43_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_3(3, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_3(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_3(3, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_3(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as a string
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_08f43_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_08f43_adc_base__GetVoltage();

	// .Return = FloatToString$ (.sample)
	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL, FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a byte average sample over time
       :
       :Parameters for macro GetAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f43_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCD_08f43_adc_base__RawAverageByte(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_3();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_08f43_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_3(3, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_3(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_3(3, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_3(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a full width average sample over time
       :
       :Parameters for macro GetAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f43_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCD_08f43_adc_base__RawAverageInt(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_3();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_08f43_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_ADC_Enable_3(3, 6, 0, 10);

	FCL_SAMPLE = FC_ADC_Sample_3(1);

	// .Return = .sample * bitmul
	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.001221);

	FC_ADC_Disable_3();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables and configures the ADC channel to be an analogue input.
       :Only one ADC channel can be enabled at a time. Any RAW functions will reference the last enabled channel only.
\*=----------------------------------------------------------------------=*/
void FCD_08f43_adc_base__RawEnable()
{

	FC_ADC_Enable_3(3, 6, 0, 10);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte
       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f43_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_3(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f43_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_ADC_Enable_3(3, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_3(1);

	FC_ADC_Disable_3();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel and converts back to digital mode.
\*=----------------------------------------------------------------------=*/
void FCD_08f43_adc_base__RawDisable()
{

	FC_ADC_Disable_3();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f43_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_ADC_Enable_3(3, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_3(0);

	FC_ADC_Disable_3();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :cal_uart
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Allows direct control over the TX and RTS pins
       :Also allows for reading of the state of the RX and CTS pins.
       :Only available when the UART is uninitialised.
       :
       :Parameters for macro ControlPin:
       :  Pin : 0=TX, 1=RX, 2=RTS, 3=CTS
       :  State : MX_UINT8
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05482_cal_uart__ControlPin(MX_UINT8 FCL_PIN, MX_UINT8 FCL_STATE)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	switch (FCL_PIN)
	{
		case 1:
		{
			#if (1)

				// .Return = RX
				FCR_RETVAL = GET_PORT_PIN(C, 7);

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			break;
		}
		case 2:
		{
			#if (0)

			//Code has been optimised out by the pre-processor
			// #else

			#endif

			break;
		}
		case 3:
		{
			#if (0)

			//Code has been optimised out by the pre-processor
			// #else

			#endif

			break;
		}
		default:
		{
			#if (1)

				if (FCL_STATE)
				{

					// TX = 1
					SET_PORT_PIN(C, 6, 1);

				} else {

					// TX = 0
					SET_PORT_PIN(C, 6, 0);

				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif

		}
	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a string of bytes via the UART peripheral
       :
       :Parameters for macro SendString:
       :  Data[20] : Data String to transmit
\*=----------------------------------------------------------------------=*/
void FCD_05482_cal_uart__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT8 FCL_LEN;


	// .Len = Length$ (.Data)
	// .Idx = 0
	FCL_LEN = FCI_GETLENGTH(FCL_DATA, FCLsz_DATA);
	FCL_IDX = 0;

	while (FCL_IDX < FCL_LEN)
	{

		FC_CAL_UART_Send_2(FCL_DATA[FCL_IDX]);

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_TextConsole:
       :  Str[20] : MX_CHAR (by-ref)
       :  colour : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_05482_cal_uart__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR)
{

	switch (FCL_COLOUR)
	{
		case 1:
		{


			break;
		}
		case 2:
		{


			break;
		}
		default:
		{


		}
	}



}

/*=----------------------------------------------------------------------=*\
   Use :A simple macro to allow us to test the value of a single property during runtime.
       :
       :Parameters for macro TestProperty:
       :  Property : 0=UseTX, 1=UseRX, 2=UseFlowControl
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05482_cal_uart__TestProperty(MX_UINT8 FCL_PROPERTY)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_PROPERTY == 0)
	{

		#if (1)

			// .Return = 1
			FCR_RETVAL = 1;

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	// } else {

	}

	if (FCL_PROPERTY == 1)
	{

		#if (1)

			// .Return = 1
			FCR_RETVAL = 1;

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	// } else {

	}

	if (FCL_PROPERTY == 2)
	{

		#if (0)

		//Code has been optimised out by the pre-processor
		// #else

		#endif

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a numeric value as an ASCII string
       :
       :Parameters for macro SendNumber:
       :  Number : Numeric value to send
\*=----------------------------------------------------------------------=*/
void FCD_05482_cal_uart__SendNumber(MX_SINT32 FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

	FCD_05482_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);

	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_SimShowWaveform:
       :  TXRX : MX_UINT8
       :  Data : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_05482_cal_uart__Prv_SimShowWaveform(MX_UINT8 FCL_TXRX, MX_UINT16 FCL_DATA)
{

	if (FCL_TXRX)
	{

		#if (1)

			// RX = 0
			SET_PORT_PIN(C, 7, 0);

			FCI_DELAYBYTE_US(104);

			for (FCLV_LOOP10=0; (FCLV_LOOP10)<(8); (FCLV_LOOP10)++)
			{

				if (FCL_DATA & 0x01)
				{

					// RX = 1
					SET_PORT_PIN(C, 7, 1);

				} else {

					// RX = 0
					SET_PORT_PIN(C, 7, 0);

				}

				FCI_DELAYBYTE_US(104);

				// .Data = .Data >> 1
				FCL_DATA = FCL_DATA >> 1;


			}

			// RX = 1
			SET_PORT_PIN(C, 7, 1);

			FCI_DELAYBYTE_US(104);

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	} else {

		#if (1)

			// TX = 0
			SET_PORT_PIN(C, 6, 0);

			FCI_DELAYBYTE_US(104);

			for (FCLV_LOOP9=0; (FCLV_LOOP9)<(8); (FCLV_LOOP9)++)
			{

				if (FCL_DATA & 0x01)
				{

					// TX = 1
					SET_PORT_PIN(C, 6, 1);

				} else {

					// TX = 0
					SET_PORT_PIN(C, 6, 0);

				}

				FCI_DELAYBYTE_US(104);

				// .Data = .Data >> 1
				FCL_DATA = FCL_DATA >> 1;


			}

			// TX = 1
			SET_PORT_PIN(C, 6, 1);

			FCI_DELAYBYTE_US(104);

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[32768] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_05482_cal_uart__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;


	// .Idx = 0
	FCL_IDX = 0;

	while (FCL_IDX < FCL_NUMBYTES)
	{

		FC_CAL_UART_Send_2(FCL_DATA[FCL_IDX]);

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[32768] : MX_UINT8
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05482_cal_uart__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT16 FCL_IN;
	MX_UINT16 FCL_TOUT;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		// .tout = 256
		FCL_TOUT = 256;

	#else

	//Code has been optimised out by the pre-processor
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMBYTES)
	{

		FCL_IN = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_IN < FCL_TOUT)
		{

			// .Data[.Return] = .in
			FCL_DATA[FCR_RETVAL] = FCL_IN;

			// .Return = .Return + 1
			FCR_RETVAL = FCR_RETVAL + 1;

		} else {

			goto FCC_ReceiveByteArray_A;

		}


	}

FCC_ReceiveByteArray_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a string of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveString:
       :  StringData[20] : MX_CHAR (by-ref)
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05482_cal_uart__ReceiveString(MX_CHAR *FCL_STRINGDATA, MX_UINT16 FCLsz_STRINGDATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT16 FCL_IN;
	MX_UINT16 FCL_TOUT;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		// .Tout = 256
		FCL_TOUT = 256;

	#else

	//Code has been optimised out by the pre-processor
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMBYTES)
	{

		FCL_IN = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_IN < FCL_TOUT)
		{

			// .StringData[.Return] = .in
			FCL_STRINGDATA[FCR_RETVAL] = FCL_IN;

			// .Return = .Return + 1
			FCR_RETVAL = FCR_RETVAL + 1;

		} else {

			goto FCC_ReceiveString_A;

		}


	}

FCC_ReceiveString_A:
	;

	// .StringData[.Return] = 0
	FCL_STRINGDATA[FCR_RETVAL] = 0;

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :UART1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sends out a string of bytes from the UART interface.
       :
       :Parameters for macro SendString:
       :  Data[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
	//Local variable definitions
	MX_UINT16 FCL_LEN;
	MX_UINT16 FCL_IDX;


	FCD_05482_cal_uart__SendString(FCL_DATA, FCLsz_DATA);



}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of 16-bit INT/UINT values and returns the number of values received.
       :
       :Parameters for macro ReceiveINTArray:
       :  Data[20] : Array to store the incoming data
       :  NumValues : Maximum number of values to try and receive
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b2_UART1__ReceiveINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMVALUES)
	{

		if (FCL_MSBFIRST)
		{

			FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

			FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		} else {

			FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

			FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		}



		FCL_DATA[FCR_RETVAL] = FCD_02573_TypeConversionsFree1__GetInt(0);

		// .Return = .Return + 1
		FCR_RETVAL = FCR_RETVAL + 1;


	}

FCC_ReceiveINTArray_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_SINT32
\*=----------------------------------------------------------------------=*/
MX_SINT32 FCD_047b2_UART1__ReceiveNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
	//Local variable definitions
	MX_BOOL FCL_FIRST = (1);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_BOOL FCL_BNEG = (0);
	MX_SINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			if (FCL_FIRST)
			{

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || FCL_CHAR == '-')
				{

					// .first = 0
					FCL_FIRST = 0;

					if (FCL_CHAR == '-')
					{

						// .bNeg = 1
						FCL_BNEG = 1;

					} else {

						// .Return = .Return * 10
						// .Return = .Return + (.char - '0')
						FCR_RETVAL = FCR_RETVAL * 10;
						FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

					}

				} else {

					if (FCL_IGNOREDATA)
					{

					} else {

						// .done = 1
						FCL_DONE = 1;

					}

				}

			} else {

				if (FCL_CHAR >= '0' && FCL_CHAR <= '9')
				{

					// .Return = .Return * 10
					// .Return = .Return + (.char - '0')
					FCR_RETVAL = FCR_RETVAL * 10;
					FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

				} else {

					// .done = 1
					FCL_DONE = 1;

				}

			}

		}


	}

	if (FCL_BNEG)
	{

		// .Return = 0 - .Return
		FCR_RETVAL = 0 - FCR_RETVAL;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 16-bit binary value split across two bytes.
       :
       :Parameters for macro SendBinary16Bit:
       :  Value : MX_UINT16
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendBinary16Bit(MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetInt(0, FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of 16-bit INT/UINT values via the UART peripheral
       :
       :Parameters for macro SendINTArray:
       :  Data[20] : Data to transmit
       :  NumValues : Number of 16-bit values to send from the array
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT8 FCL_BYTE;


	while (FCL_IDX < FCL_NUMVALUES)
	{

		FCD_02573_TypeConversionsFree1__SetInt(0, FCL_DATA[FCL_IDX]);

		if (FCL_MSBFIRST)
		{

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

			FC_CAL_UART_Send_2(FCL_BYTE);

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

			FC_CAL_UART_Send_2(FCL_BYTE);

		} else {

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

			FC_CAL_UART_Send_2(FCL_BYTE);

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

			FC_CAL_UART_Send_2(FCL_BYTE);

		}



		// .idx = .idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendNumber:
       :  Number : MX_SINT32
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendNumber(MX_SINT32 FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

	FCD_05482_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);



	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit value split across four bytes.
       :
       :Parameters for macro ReceiveBinary32Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b2_UART1__ReceiveBinary32Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetLong();

FCC_ReceiveBinary32Bit_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit floating point value split across four bytes.
       :
       :Parameters for macro ReceiveBinaryFloat:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b2_UART1__ReceiveBinaryFloat(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_FLOAT FCR_RETVAL;


	// .Return = 0.0
	FCR_RETVAL = 0.0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetFloat();

FCC_ReceiveBinaryFloat_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a single packet from the UART interface.
       :
       :Parameters for macro SendChar:
       :  Char : MX_SINT16
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendChar(MX_SINT16 FCL_CHAR)
{

	FC_CAL_UART_Send_2(FCL_CHAR);



}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[20] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES)
{

	// cal_uart :: SendByteArray (.Data, .NumBytes)
	FCD_05482_cal_uart__SendByteArray(FCL_DATA, 20, FCL_NUMBYTES);



}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 16-bit value split across two bytes.
       :
       :Parameters for macro ReceiveBinary16Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_047b2_UART1__ReceiveBinary16Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT16 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetInt(0);

FCC_ReceiveBinary16Bit_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Changes the hardware UART baud rate allowing for dynamic speed changes.
       :
       :Parameters for macro ChangeHWBaud:
       :  NewBaud : 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200, 8=250000
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__ChangeHWBaud(MX_UINT8 FCL_NEWBAUD)
{

	FC_CAL_UART_UpdateBaud_2(FCL_NEWBAUD);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a floating point number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveFloat:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b2_UART1__ReceiveFloat(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_BOOL FCL_DPRX = (0);
#define FCLsz_STR 20
	MX_CHAR FCL_STR[FCLsz_STR];
	MX_FLOAT FCR_RETVAL;


	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			if (FCL_IDX == 0)
			{

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '-'))
				{

					// .str[.idx] = .char
					FCL_STR[FCL_IDX] = FCL_CHAR;

					// .idx = .idx + 1
					FCL_IDX = FCL_IDX + 1;

				} else {

					if (FCL_IGNOREDATA)
					{

					} else {

						// .done = 1
						FCL_DONE = 1;

					}

				}

			} else {

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '.' && FCL_DPRX == 0))
				{

					if (FCL_CHAR == '.')
					{

						// .dpRx = 1
						FCL_DPRX = 1;

					// } else {

					}

					// .str[.idx] = .char
					FCL_STR[FCL_IDX] = FCL_CHAR;

					// .idx = .idx + 1
					FCL_IDX = FCL_IDX + 1;

				} else {

					// .done = 1
					FCL_DONE = 1;

				}

			}

		}


	}

	if (FCL_IDX)
	{

		// .str[.idx] = 0
		FCL_STR[FCL_IDX] = 0;

		// .Return = StringToFloat$ (.str)
		FCR_RETVAL = FCI_STRING_TO_FLOAT(FCL_STR, FCLsz_STR);

	} else {

		// .Return = 0.0
		FCR_RETVAL = 0.0;

	}

	return (FCR_RETVAL);

	//Local variable definitions
#undef FCLsz_STR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a floating point number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendFloat:
       :  Number : MX_FLOAT
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendFloat(MX_FLOAT FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = FloatToString$ (.Number)
	FCI_FLOAT_TO_STRING(FCL_NUMBER, FCV_PRECISION, FCL_NUMSTR, FCLsz_NUMSTR);

	FCD_05482_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);



	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII hexadecimal String from the UART interface.
       :
       :Parameters for macro SendHexNumber:
       :  Number : MX_UINT32
       :  NumChars : Number of characters in the string data, 0 for auto, 2 for 0x00, 4 for 0x0000
       :  Prefix : Generate hexadecimal prefix 0x e.g. 1= 0xFF, 0= FF
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendHexNumber(MX_UINT32 FCL_NUMBER, MX_UINT8 FCL_NUMCHARS, MX_BOOL FCL_PREFIX)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
#define FCLsz_CHARS 8
	MX_UINT8 FCL_CHARS[FCLsz_CHARS];


	if (FCL_PREFIX)
	{

		FC_CAL_UART_Send_2('0');

		FC_CAL_UART_Send_2('x');

	// } else {

	}

	if (FCL_NUMCHARS == 0)
	{

		if (FCL_NUMBER < 256)
		{

			// .NumChars = 2
			FCL_NUMCHARS = 2;

		} else {

			if (FCL_NUMBER < 65536)
			{

				// .NumChars = 4
				FCL_NUMCHARS = 4;

			} else {

				// .NumChars = 8
				FCL_NUMCHARS = 8;

			}

		}

	// } else {

	}

	if (FCL_NUMCHARS > 8)
	{

		// .NumChars = 8
		FCL_NUMCHARS = 8;

	// } else {

	}

	while (FCL_IDX < FCL_NUMCHARS)
	{

		// .chars[.idx] = .Number % 16
		// .Number = .Number >> 4
		FCL_CHARS[FCL_IDX] = FCL_NUMBER % 16;
		FCL_NUMBER = FCL_NUMBER >> 4;

		if (FCL_CHARS[FCL_IDX] >= 10)
		{

			// .chars[.idx] = .chars[.idx] + 'A' - 10
			FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + 'A' - 10;

		} else {

			// .chars[.idx] = .chars[.idx] + '0'
			FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + '0';

		}

		// .idx = .idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

	while (FCL_IDX > 0)
	{

		// .idx = .idx - 1
		FCL_IDX = FCL_IDX - 1;

		FC_CAL_UART_Send_2(FCL_CHARS[FCL_IDX]);




	}

	//Local variable definitions
#undef FCLsz_CHARS
}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a hex number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none hexadecimal char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveHexNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :  Prefix : Look for prefix before receiving, 1=0xFF, 0=FF
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b2_UART1__ReceiveHexNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA, MX_BOOL FCL_PREFIX)
{
	//Local variable definitions
	MX_UINT8 FCL_STATE = (0x0);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_UINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_PREFIX == 0)
	{

		// .state = 2
		FCL_STATE = 2;

	// } else {

	}

	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			switch (FCL_STATE)
			{
				case 1:
				{
					if (FCL_CHAR == 'x')
					{

						// .state = .state + 1
						FCL_STATE = FCL_STATE + 1;

					} else {

						if (FCL_CHAR == '0')
						{

						} else {

							if (FCL_IGNOREDATA)
							{

								// .state = .state + 1
								FCL_STATE = FCL_STATE + 1;

							} else {

								// .done = 1
								FCL_DONE = 1;

							}

						}

					}

					break;
				}
				case 2:
				{
					if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR >= 'A' && FCL_CHAR <= 'F'))
					{

						if (FCL_CHAR >= 'A' && FCL_CHAR <= 'F')
						{

							// .Return = .Return * 16
							// .Return = .Return + (.char - 'A') + 10
							FCR_RETVAL = FCR_RETVAL * 16;
							FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - 'A') + 10;

						} else {

							// .Return = .Return * 16
							// .Return = .Return + (.char - '0')
							FCR_RETVAL = FCR_RETVAL * 16;
							FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

						}

					} else {

						if ((FCL_PREFIX == 0) && (FCL_IGNOREDATA == 1))
						{

						} else {

							// .done = 1
							FCL_DONE = 1;

						}

					}

					break;
				}
				default:
				{
					if (FCL_CHAR == '0')
					{

						// .state = .state + 1
						FCL_STATE = FCL_STATE + 1;

					} else {

						if (FCL_IGNOREDATA)
						{

						} else {

							// .done = 1
							FCL_DONE = 1;

						}

					}

				}
			}

		}


	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary value split across four bytes.
       :
       :Parameters for macro SendBinary32Bit:
       :  Value : MX_UINT32
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendBinary32Bit(MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetLong(FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_2(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary floating point value split across four bytes.
       :
       :Parameters for macro SendBinaryFloat:
       :  Value : MX_FLOAT
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__SendBinaryFloat(MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetFloat(FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_2(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_2(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[20] : Array to store the incoming data
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b2_UART1__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = cal_uart :: ReceiveByteArray(.Data, .NumBytes, .Timeout)
	FCR_RETVAL = FCD_05482_cal_uart__ReceiveByteArray(FCL_DATA, 20, FCL_NUMBYTES, FCL_TIMEOUT);



	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a string of bytes from the UART interface.
       :
       :Parameters for macro ReceiveString:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :  NumBytes : The number of bytes to try and receive, ideally your string variable should have at least 1 more byte to store the null termination byte
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__ReceiveString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT, MX_UINT16 FCL_NUMBYTES)
{
	//Local variable definitions
	MX_UINT16 FCL_RXCOUNT = (0x0);
	MX_UINT16 FCL_RETVAL;


	FCL_RXCOUNT = FCD_05482_cal_uart__ReceiveString(FCR_RETVAL, FCRsz_RETVAL, FCL_NUMBYTES, FCL_TIMEOUT);

	if (FCL_RXCOUNT)
	{



	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets up the RS232 peripheral, must be called at the start of your program or at least before you start calling any other RS232 macros.
\*=----------------------------------------------------------------------=*/
void FCD_047b2_UART1__Initialise()
{

	FC_CAL_UART_Init_2();

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a single packet from the UART interface.
       :
       :Parameters for macro ReceiveChar:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_047b2_UART1__ReceiveChar(MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_SINT16 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_UART_Receive_2(FCL_TIMEOUT);

	if (FCR_RETVAL <= 256)
	{



	// } else {

	}

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth
       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f42_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_2(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f42_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_2(0, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_2(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_2(0, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_2(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as a string
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_08f42_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_08f42_adc_base__GetVoltage();

	// .Return = FloatToString$ (.sample)
	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL, FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a byte average sample over time
       :
       :Parameters for macro GetAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f42_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCD_08f42_adc_base__RawAverageByte(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_2();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_08f42_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_2(0, 6, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_2(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_2(0, 6, 0, 10);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_2(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a full width average sample over time
       :
       :Parameters for macro GetAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f42_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCD_08f42_adc_base__RawAverageInt(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_2();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_08f42_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_ADC_Enable_2(0, 6, 0, 10);

	FCL_SAMPLE = FC_ADC_Sample_2(1);

	// .Return = .sample * bitmul
	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.001221);

	FC_ADC_Disable_2();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables and configures the ADC channel to be an analogue input.
       :Only one ADC channel can be enabled at a time. Any RAW functions will reference the last enabled channel only.
\*=----------------------------------------------------------------------=*/
void FCD_08f42_adc_base__RawEnable()
{

	FC_ADC_Enable_2(0, 6, 0, 10);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte
       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f42_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_2(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f42_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_ADC_Enable_2(0, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_2(1);

	FC_ADC_Disable_2();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel and converts back to digital mode.
\*=----------------------------------------------------------------------=*/
void FCD_08f42_adc_base__RawDisable()
{

	FC_ADC_Disable_2();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f42_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_ADC_Enable_2(0, 6, 0, 10);

	FCR_RETVAL = FC_ADC_Sample_2(0);

	FC_ADC_Disable_2();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth
       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f41_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_1(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f41_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_1(1, 1, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_1(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_1(1, 1, 0, 2);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Byte)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_1(0);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as a string
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_08f41_adc_base__GetString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_08f41_adc_base__GetVoltage();

	// .Return = FloatToString$ (.sample)
	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL, FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a byte average sample over time
       :
       :Parameters for macro GetAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f41_adc_base__GetAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCD_08f41_adc_base__RawAverageByte(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width average sample over time
       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_08f41_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS > 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_1(1, 1, 0, FCL_DELAYUS);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_1(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FC_ADC_Enable_1(1, 1, 0, 2);

			// .average = .average + cal_adc :: Sample (cal_adc :: Sample_Full)
			// .count = .count + 1
			FCL_AVERAGE = FCL_AVERAGE + FC_ADC_Sample_1(1);
			FCL_COUNT = FCL_COUNT + 1;


		}

	}

	// .Return = .average / .count
	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function call to read the ADC as a full width average sample over time
       :
       :Parameters for macro GetAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : Number of micro seconds in between taking each sample
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f41_adc_base__GetAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FCD_08f41_adc_base__RawAverageInt(FCL_NUMSAMPLES, FCL_DELAYUS);

	FC_ADC_Disable_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_08f41_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_ADC_Enable_1(1, 1, 0, 2);

	FCL_SAMPLE = FC_ADC_Sample_1(1);

	// .Return = .sample * bitmul
	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.001221);

	FC_ADC_Disable_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables and configures the ADC channel to be an analogue input.
       :Only one ADC channel can be enabled at a time. Any RAW functions will reference the last enabled channel only.
\*=----------------------------------------------------------------------=*/
void FCD_08f41_adc_base__RawEnable()
{

	FC_ADC_Enable_1(1, 1, 0, 2);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte
       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f41_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_ADC_Sample_1(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_08f41_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_ADC_Enable_1(1, 1, 0, 2);

	FCR_RETVAL = FC_ADC_Sample_1(1);

	FC_ADC_Disable_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel and converts back to digital mode.
\*=----------------------------------------------------------------------=*/
void FCD_08f41_adc_base__RawDisable()
{

	FC_ADC_Disable_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_08f41_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_ADC_Enable_1(1, 1, 0, 2);

	FCR_RETVAL = FC_ADC_Sample_1(0);

	FC_ADC_Disable_1();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :TypeConversionsFree1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE)
{

	if (FCL_INDEX < 2)
	{

		MX_Conv_Var.AsInt[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit LONG value
       :
       :Parameters for macro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE)
{

	MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02573_TypeConversionsFree1__GetFloat()
{
	//Local variable definitions
	MX_FLOAT FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsFloat;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02573_TypeConversionsFree1__GetLong()
{
	//Local variable definitions
	MX_UINT32 FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsLong;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 16-bit INT value
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02573_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	if (FCL_INDEX < 2)
	{

		FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 8-bit BYTE value
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE)
{

	if (FCL_INDEX < 4)
	{

		MX_Conv_Var.AsByte[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 8-bit BYTE value.
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02573_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	if (FCL_INDEX < 4)
	{

		FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02573_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

	MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :TypeConversionsFree1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE)
{

	if (FCL_INDEX < 2)
	{

		MX_Conv_Var.AsInt[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit LONG value
       :
       :Parameters for macro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE)
{

	MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02572_TypeConversionsFree1__GetFloat()
{
	//Local variable definitions
	MX_FLOAT FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsFloat;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02572_TypeConversionsFree1__GetLong()
{
	//Local variable definitions
	MX_UINT32 FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsLong;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 16-bit INT value
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02572_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	if (FCL_INDEX < 2)
	{

		FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 8-bit BYTE value
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE)
{

	if (FCL_INDEX < 4)
	{

		MX_Conv_Var.AsByte[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 8-bit BYTE value.
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02572_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	if (FCL_INDEX < 4)
	{

		FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02572_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

	MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :cal_uart
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Allows direct control over the TX and RTS pins
       :Also allows for reading of the state of the RX and CTS pins.
       :Only available when the UART is uninitialised.
       :
       :Parameters for macro ControlPin:
       :  Pin : 0=TX, 1=RX, 2=RTS, 3=CTS
       :  State : MX_UINT8
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ControlPin(MX_UINT8 FCL_PIN, MX_UINT8 FCL_STATE)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	switch (FCL_PIN)
	{
		case 1:
		{
			#if (1)

				// .Return = RX
				FCR_RETVAL = GET_PORT_PIN(C, 7);

			// #else

			//Code has been optimised out by the pre-processor
			#endif

			break;
		}
		case 2:
		{
			#if (0)

			//Code has been optimised out by the pre-processor
			// #else

			#endif

			break;
		}
		case 3:
		{
			#if (0)

			//Code has been optimised out by the pre-processor
			// #else

			#endif

			break;
		}
		default:
		{
			#if (1)

				if (FCL_STATE)
				{

					// TX = 1
					SET_PORT_PIN(C, 6, 1);

				} else {

					// TX = 0
					SET_PORT_PIN(C, 6, 0);

				}

			// #else

			//Code has been optimised out by the pre-processor
			#endif

		}
	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a string of bytes via the UART peripheral
       :
       :Parameters for macro SendString:
       :  Data[20] : Data String to transmit
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT8 FCL_LEN;


	// .Len = Length$ (.Data)
	// .Idx = 0
	FCL_LEN = FCI_GETLENGTH(FCL_DATA, FCLsz_DATA);
	FCL_IDX = 0;

	while (FCL_IDX < FCL_LEN)
	{

		FC_CAL_UART_Send_1(FCL_DATA[FCL_IDX]);

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_TextConsole:
       :  Str[20] : MX_CHAR (by-ref)
       :  colour : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__Prv_TextConsole(MX_CHAR *FCL_STR, MX_UINT16 FCLsz_STR, MX_UINT8 FCL_COLOUR)
{

	switch (FCL_COLOUR)
	{
		case 1:
		{


			break;
		}
		case 2:
		{


			break;
		}
		default:
		{


		}
	}



}

/*=----------------------------------------------------------------------=*\
   Use :A simple macro to allow us to test the value of a single property during runtime.
       :
       :Parameters for macro TestProperty:
       :  Property : 0=UseTX, 1=UseRX, 2=UseFlowControl
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__TestProperty(MX_UINT8 FCL_PROPERTY)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_PROPERTY == 0)
	{

		#if (1)

			// .Return = 1
			FCR_RETVAL = 1;

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	// } else {

	}

	if (FCL_PROPERTY == 1)
	{

		#if (1)

			// .Return = 1
			FCR_RETVAL = 1;

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	// } else {

	}

	if (FCL_PROPERTY == 2)
	{

		#if (0)

		//Code has been optimised out by the pre-processor
		// #else

		#endif

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits a numeric value as an ASCII string
       :
       :Parameters for macro SendNumber:
       :  Number : Numeric value to send
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendNumber(MX_SINT32 FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

	FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);

	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Parameters for macro Prv_SimShowWaveform:
       :  TXRX : MX_UINT8
       :  Data : MX_UINT16
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__Prv_SimShowWaveform(MX_UINT8 FCL_TXRX, MX_UINT16 FCL_DATA)
{

	if (FCL_TXRX)
	{

		#if (1)

			// RX = 0
			SET_PORT_PIN(C, 7, 0);

			FCI_DELAYBYTE_US(104);

			for (FCLV_LOOP10=0; (FCLV_LOOP10)<(8); (FCLV_LOOP10)++)
			{

				if (FCL_DATA & 0x01)
				{

					// RX = 1
					SET_PORT_PIN(C, 7, 1);

				} else {

					// RX = 0
					SET_PORT_PIN(C, 7, 0);

				}

				FCI_DELAYBYTE_US(104);

				// .Data = .Data >> 1
				FCL_DATA = FCL_DATA >> 1;


			}

			// RX = 1
			SET_PORT_PIN(C, 7, 1);

			FCI_DELAYBYTE_US(104);

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	} else {

		#if (1)

			// TX = 0
			SET_PORT_PIN(C, 6, 0);

			FCI_DELAYBYTE_US(104);

			for (FCLV_LOOP9=0; (FCLV_LOOP9)<(8); (FCLV_LOOP9)++)
			{

				if (FCL_DATA & 0x01)
				{

					// TX = 1
					SET_PORT_PIN(C, 6, 1);

				} else {

					// TX = 0
					SET_PORT_PIN(C, 6, 0);

				}

				FCI_DELAYBYTE_US(104);

				// .Data = .Data >> 1
				FCL_DATA = FCL_DATA >> 1;


			}

			// TX = 1
			SET_PORT_PIN(C, 6, 1);

			FCI_DELAYBYTE_US(104);

		// #else

		//Code has been optimised out by the pre-processor
		#endif

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[32768] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_05481_cal_uart__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;


	// .Idx = 0
	FCL_IDX = 0;

	while (FCL_IDX < FCL_NUMBYTES)
	{

		FC_CAL_UART_Send_1(FCL_DATA[FCL_IDX]);

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[32768] : MX_UINT8
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT16 FCL_IN;
	MX_UINT16 FCL_TOUT;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		// .tout = 256
		FCL_TOUT = 256;

	#else

	//Code has been optimised out by the pre-processor
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMBYTES)
	{

		FCL_IN = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_IN < FCL_TOUT)
		{

			// .Data[.Return] = .in
			FCL_DATA[FCR_RETVAL] = FCL_IN;

			// .Return = .Return + 1
			FCR_RETVAL = FCR_RETVAL + 1;

		} else {

			goto FCC_ReceiveByteArray_A;

		}


	}

FCC_ReceiveByteArray_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a string of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveString:
       :  StringData[20] : MX_CHAR (by-ref)
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_05481_cal_uart__ReceiveString(MX_CHAR *FCL_STRINGDATA, MX_UINT16 FCLsz_STRINGDATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX;
	MX_UINT16 FCL_IN;
	MX_UINT16 FCL_TOUT;
	MX_UINT8 FCR_RETVAL;


	#if (1)

		// .Tout = 256
		FCL_TOUT = 256;

	#else

	//Code has been optimised out by the pre-processor
	#endif

	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMBYTES)
	{

		FCL_IN = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_IN < FCL_TOUT)
		{

			// .StringData[.Return] = .in
			FCL_STRINGDATA[FCR_RETVAL] = FCL_IN;

			// .Return = .Return + 1
			FCR_RETVAL = FCR_RETVAL + 1;

		} else {

			goto FCC_ReceiveString_A;

		}


	}

FCC_ReceiveString_A:
	;

	// .StringData[.Return] = 0
	FCL_STRINGDATA[FCR_RETVAL] = 0;

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :uart9600
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sends out a string of bytes from the UART interface.
       :
       :Parameters for macro SendString:
       :  Data[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendString(MX_CHAR *FCL_DATA, MX_UINT16 FCLsz_DATA)
{
	//Local variable definitions
	MX_UINT16 FCL_LEN;
	MX_UINT16 FCL_IDX;


	FCD_05481_cal_uart__SendString(FCL_DATA, FCLsz_DATA);



}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of 16-bit INT/UINT values and returns the number of values received.
       :
       :Parameters for macro ReceiveINTArray:
       :  Data[20] : Array to store the incoming data
       :  NumValues : Maximum number of values to try and receive
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b1_uart9600__ReceiveINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT8 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	while (FCR_RETVAL < FCL_NUMVALUES)
	{

		if (FCL_MSBFIRST)
		{

			FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

			FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		} else {

			FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

			FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

			if (FCL_BYTE > 255)
			{

				goto FCC_ReceiveINTArray_A;

			// } else {

			}

			FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		}



		FCL_DATA[FCR_RETVAL] = FCD_02573_TypeConversionsFree1__GetInt(0);

		// .Return = .Return + 1
		FCR_RETVAL = FCR_RETVAL + 1;


	}

FCC_ReceiveINTArray_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_SINT32
\*=----------------------------------------------------------------------=*/
MX_SINT32 FCD_047b1_uart9600__ReceiveNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
	//Local variable definitions
	MX_BOOL FCL_FIRST = (1);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_BOOL FCL_BNEG = (0);
	MX_SINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			if (FCL_FIRST)
			{

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || FCL_CHAR == '-')
				{

					// .first = 0
					FCL_FIRST = 0;

					if (FCL_CHAR == '-')
					{

						// .bNeg = 1
						FCL_BNEG = 1;

					} else {

						// .Return = .Return * 10
						// .Return = .Return + (.char - '0')
						FCR_RETVAL = FCR_RETVAL * 10;
						FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

					}

				} else {

					if (FCL_IGNOREDATA)
					{

					} else {

						// .done = 1
						FCL_DONE = 1;

					}

				}

			} else {

				if (FCL_CHAR >= '0' && FCL_CHAR <= '9')
				{

					// .Return = .Return * 10
					// .Return = .Return + (.char - '0')
					FCR_RETVAL = FCR_RETVAL * 10;
					FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

				} else {

					// .done = 1
					FCL_DONE = 1;

				}

			}

		}


	}

	if (FCL_BNEG)
	{

		// .Return = 0 - .Return
		FCR_RETVAL = 0 - FCR_RETVAL;

	// } else {

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 16-bit binary value split across two bytes.
       :
       :Parameters for macro SendBinary16Bit:
       :  Value : MX_UINT16
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendBinary16Bit(MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetInt(0, FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of 16-bit INT/UINT values via the UART peripheral
       :
       :Parameters for macro SendINTArray:
       :  Data[20] : Data to transmit
       :  NumValues : Number of 16-bit values to send from the array
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendINTArray(MX_UINT16 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMVALUES, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT8 FCL_BYTE;


	while (FCL_IDX < FCL_NUMVALUES)
	{

		FCD_02573_TypeConversionsFree1__SetInt(0, FCL_DATA[FCL_IDX]);

		if (FCL_MSBFIRST)
		{

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

			FC_CAL_UART_Send_1(FCL_BYTE);

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

			FC_CAL_UART_Send_1(FCL_BYTE);

		} else {

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

			FC_CAL_UART_Send_1(FCL_BYTE);

			FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

			FC_CAL_UART_Send_1(FCL_BYTE);

		}



		// .idx = .idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendNumber:
       :  Number : MX_SINT32
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendNumber(MX_SINT32 FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = ToString$ (.Number)
	FCI_TOSTRING(FCL_NUMBER, FCL_NUMSTR,20);

	FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);



	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit value split across four bytes.
       :
       :Parameters for macro ReceiveBinary32Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b1_uart9600__ReceiveBinary32Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary32Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetLong();

FCC_ReceiveBinary32Bit_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 32-bit floating point value split across four bytes.
       :
       :Parameters for macro ReceiveBinaryFloat:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b1_uart9600__ReceiveBinaryFloat(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_FLOAT FCR_RETVAL;


	// .Return = 0.0
	FCR_RETVAL = 0.0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(2, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinaryFloat_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(3, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetFloat();

FCC_ReceiveBinaryFloat_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a single packet from the UART interface.
       :
       :Parameters for macro SendChar:
       :  Char : MX_SINT16
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendChar(MX_SINT16 FCL_CHAR)
{

	FC_CAL_UART_Send_1(FCL_CHAR);



}

/*=----------------------------------------------------------------------=*\
   Use :Transmits an array of bytes via the UART peripheral
       :
       :Parameters for macro SendByteArray:
       :  Data[20] : Data to transmit
       :  NumBytes : Number of bytes to send from the array
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES)
{

	// cal_uart :: SendByteArray (.Data, .NumBytes)
	FCD_05481_cal_uart__SendByteArray(FCL_DATA, 20, FCL_NUMBYTES);



}

/*=----------------------------------------------------------------------=*\
   Use :Receives a binary 16-bit value split across two bytes.
       :
       :Parameters for macro ReceiveBinary16Bit:
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_047b1_uart9600__ReceiveBinary16Bit(MX_BOOL FCL_MSBFIRST, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT16 FCL_BYTE;
	MX_UINT16 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

	} else {

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(0, FCL_BYTE);

		FCL_BYTE = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_BYTE > 255)
		{

			goto FCC_ReceiveBinary16Bit_A;

		// } else {

		}

		FCD_02573_TypeConversionsFree1__SetByte(1, FCL_BYTE);

	}



	FCR_RETVAL = FCD_02573_TypeConversionsFree1__GetInt(0);

FCC_ReceiveBinary16Bit_A:
	;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Changes the hardware UART baud rate allowing for dynamic speed changes.
       :
       :Parameters for macro ChangeHWBaud:
       :  NewBaud : 0=1200, 1=2400, 2=4800, 3=9600, 4=19200, 5=38400, 6=57600, 7=115200, 8=250000
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__ChangeHWBaud(MX_UINT8 FCL_NEWBAUD)
{

	FC_CAL_UART_UpdateBaud_1(FCL_NEWBAUD);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a floating point number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none numeric char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveFloat:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_047b1_uart9600__ReceiveFloat(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_BOOL FCL_DPRX = (0);
#define FCLsz_STR 20
	MX_CHAR FCL_STR[FCLsz_STR];
	MX_FLOAT FCR_RETVAL;


	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			if (FCL_IDX == 0)
			{

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '-'))
				{

					// .str[.idx] = .char
					FCL_STR[FCL_IDX] = FCL_CHAR;

					// .idx = .idx + 1
					FCL_IDX = FCL_IDX + 1;

				} else {

					if (FCL_IGNOREDATA)
					{

					} else {

						// .done = 1
						FCL_DONE = 1;

					}

				}

			} else {

				if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR == '.' && FCL_DPRX == 0))
				{

					if (FCL_CHAR == '.')
					{

						// .dpRx = 1
						FCL_DPRX = 1;

					// } else {

					}

					// .str[.idx] = .char
					FCL_STR[FCL_IDX] = FCL_CHAR;

					// .idx = .idx + 1
					FCL_IDX = FCL_IDX + 1;

				} else {

					// .done = 1
					FCL_DONE = 1;

				}

			}

		}


	}

	if (FCL_IDX)
	{

		// .str[.idx] = 0
		FCL_STR[FCL_IDX] = 0;

		// .Return = StringToFloat$ (.str)
		FCR_RETVAL = FCI_STRING_TO_FLOAT(FCL_STR, FCLsz_STR);

	} else {

		// .Return = 0.0
		FCR_RETVAL = 0.0;

	}

	return (FCR_RETVAL);

	//Local variable definitions
#undef FCLsz_STR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a floating point number as an ASCII String from the UART interface.
       :
       :Parameters for macro SendFloat:
       :  Number : MX_FLOAT
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendFloat(MX_FLOAT FCL_NUMBER)
{
	//Local variable definitions
#define FCLsz_NUMSTR 20
	MX_CHAR FCL_NUMSTR[FCLsz_NUMSTR];


	// .numStr = FloatToString$ (.Number)
	FCI_FLOAT_TO_STRING(FCL_NUMBER, FCV_PRECISION, FCL_NUMSTR, FCLsz_NUMSTR);

	FCD_05481_cal_uart__SendString(FCL_NUMSTR, FCLsz_NUMSTR);



	//Local variable definitions
#undef FCLsz_NUMSTR
}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a number as an ASCII hexadecimal String from the UART interface.
       :
       :Parameters for macro SendHexNumber:
       :  Number : MX_UINT32
       :  NumChars : Number of characters in the string data, 0 for auto, 2 for 0x00, 4 for 0x0000
       :  Prefix : Generate hexadecimal prefix 0x e.g. 1= 0xFF, 0= FF
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendHexNumber(MX_UINT32 FCL_NUMBER, MX_UINT8 FCL_NUMCHARS, MX_BOOL FCL_PREFIX)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
#define FCLsz_CHARS 8
	MX_UINT8 FCL_CHARS[FCLsz_CHARS];


	if (FCL_PREFIX)
	{

		FC_CAL_UART_Send_1('0');

		FC_CAL_UART_Send_1('x');

	// } else {

	}

	if (FCL_NUMCHARS == 0)
	{

		if (FCL_NUMBER < 256)
		{

			// .NumChars = 2
			FCL_NUMCHARS = 2;

		} else {

			if (FCL_NUMBER < 65536)
			{

				// .NumChars = 4
				FCL_NUMCHARS = 4;

			} else {

				// .NumChars = 8
				FCL_NUMCHARS = 8;

			}

		}

	// } else {

	}

	if (FCL_NUMCHARS > 8)
	{

		// .NumChars = 8
		FCL_NUMCHARS = 8;

	// } else {

	}

	while (FCL_IDX < FCL_NUMCHARS)
	{

		// .chars[.idx] = .Number % 16
		// .Number = .Number >> 4
		FCL_CHARS[FCL_IDX] = FCL_NUMBER % 16;
		FCL_NUMBER = FCL_NUMBER >> 4;

		if (FCL_CHARS[FCL_IDX] >= 10)
		{

			// .chars[.idx] = .chars[.idx] + 'A' - 10
			FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + 'A' - 10;

		} else {

			// .chars[.idx] = .chars[.idx] + '0'
			FCL_CHARS[FCL_IDX] = FCL_CHARS[FCL_IDX] + '0';

		}

		// .idx = .idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

	while (FCL_IDX > 0)
	{

		// .idx = .idx - 1
		FCL_IDX = FCL_IDX - 1;

		FC_CAL_UART_Send_1(FCL_CHARS[FCL_IDX]);




	}

	//Local variable definitions
#undef FCLsz_CHARS
}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a hex number as ASCII characters and convert back into a numeric value. Note this function will receive until a timeout or a none hexadecimal char is received, the none numeric char will be lost.
       :
       :Parameters for macro ReceiveHexNumber:
       :  Timeout : Max time in ms to wait in between bytes
       :  IgnoreData : 0=Dont ignore any data, 1=Ignore any initial none numeric data
       :  Prefix : Look for prefix before receiving, 1=0xFF, 0=FF
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_047b1_uart9600__ReceiveHexNumber(MX_UINT8 FCL_TIMEOUT, MX_BOOL FCL_IGNOREDATA, MX_BOOL FCL_PREFIX)
{
	//Local variable definitions
	MX_UINT8 FCL_STATE = (0x0);
	MX_BOOL FCL_DONE = (0);
	MX_UINT16 FCL_CHAR;
	MX_UINT32 FCR_RETVAL;


	// .Return = 0
	FCR_RETVAL = 0;

	if (FCL_PREFIX == 0)
	{

		// .state = 2
		FCL_STATE = 2;

	// } else {

	}

	while (FCL_DONE == 0)
	{

		FCL_CHAR = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

		if (FCL_CHAR >= 255)
		{

			// .done = 1
			FCL_DONE = 1;

		} else {



			switch (FCL_STATE)
			{
				case 1:
				{
					if (FCL_CHAR == 'x')
					{

						// .state = .state + 1
						FCL_STATE = FCL_STATE + 1;

					} else {

						if (FCL_CHAR == '0')
						{

						} else {

							if (FCL_IGNOREDATA)
							{

								// .state = .state + 1
								FCL_STATE = FCL_STATE + 1;

							} else {

								// .done = 1
								FCL_DONE = 1;

							}

						}

					}

					break;
				}
				case 2:
				{
					if ((FCL_CHAR >= '0' && FCL_CHAR <= '9') || (FCL_CHAR >= 'A' && FCL_CHAR <= 'F'))
					{

						if (FCL_CHAR >= 'A' && FCL_CHAR <= 'F')
						{

							// .Return = .Return * 16
							// .Return = .Return + (.char - 'A') + 10
							FCR_RETVAL = FCR_RETVAL * 16;
							FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - 'A') + 10;

						} else {

							// .Return = .Return * 16
							// .Return = .Return + (.char - '0')
							FCR_RETVAL = FCR_RETVAL * 16;
							FCR_RETVAL = FCR_RETVAL + (FCL_CHAR - '0');

						}

					} else {

						if ((FCL_PREFIX == 0) && (FCL_IGNOREDATA == 1))
						{

						} else {

							// .done = 1
							FCL_DONE = 1;

						}

					}

					break;
				}
				default:
				{
					if (FCL_CHAR == '0')
					{

						// .state = .state + 1
						FCL_STATE = FCL_STATE + 1;

					} else {

						if (FCL_IGNOREDATA)
						{

						} else {

							// .done = 1
							FCL_DONE = 1;

						}

					}

				}
			}

		}


	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary value split across four bytes.
       :
       :Parameters for macro SendBinary32Bit:
       :  Value : MX_UINT32
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendBinary32Bit(MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetLong(FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_1(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Sends out a 32-bit binary floating point value split across four bytes.
       :
       :Parameters for macro SendBinaryFloat:
       :  Value : MX_FLOAT
       :  MSBfirst : 0=Least significant byte first, 1=Most significant byte first
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__SendBinaryFloat(MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT8 FCL_BYTE;


	FCD_02573_TypeConversionsFree1__SetFloat(FCL_VALUE);

	if (FCL_MSBFIRST)
	{

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

	} else {

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(0);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(1);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(2);

		FC_CAL_UART_Send_1(FCL_BYTE);

		FCL_BYTE = FCD_02573_TypeConversionsFree1__GetByte(3);

		FC_CAL_UART_Send_1(FCL_BYTE);

	}



}

/*=----------------------------------------------------------------------=*\
   Use :Receives an array of bytes and returns the number of bytes received.
       :
       :Parameters for macro ReceiveByteArray:
       :  Data[20] : Array to store the incoming data
       :  NumBytes : Maximum number of bytes to try and receive
       :  Timeout : Max amount of time in ms to wait between bytes
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_047b1_uart9600__ReceiveByteArray(MX_UINT8 *FCL_DATA, MX_UINT16 FCLsz_DATA, MX_UINT8 FCL_NUMBYTES, MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	// .Return = cal_uart :: ReceiveByteArray(.Data, .NumBytes, .Timeout)
	FCR_RETVAL = FCD_05481_cal_uart__ReceiveByteArray(FCL_DATA, 20, FCL_NUMBYTES, FCL_TIMEOUT);



	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a string of bytes from the UART interface.
       :
       :Parameters for macro ReceiveString:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :  NumBytes : The number of bytes to try and receive, ideally your string variable should have at least 1 more byte to store the null termination byte
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__ReceiveString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT8 FCL_TIMEOUT, MX_UINT16 FCL_NUMBYTES)
{
	//Local variable definitions
	MX_UINT16 FCL_RXCOUNT = (0x0);
	MX_UINT16 FCL_RETVAL;


	FCL_RXCOUNT = FCD_05481_cal_uart__ReceiveString(FCR_RETVAL, FCRsz_RETVAL, FCL_NUMBYTES, FCL_TIMEOUT);

	if (FCL_RXCOUNT)
	{



	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets up the RS232 peripheral, must be called at the start of your program or at least before you start calling any other RS232 macros.
\*=----------------------------------------------------------------------=*/
void FCD_047b1_uart9600__Initialise()
{

	FC_CAL_UART_Init_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Attempts to receive a single packet from the UART interface.
       :
       :Parameters for macro ReceiveChar:
       :  Timeout : Time to wait in milliseconds for valid data before returning, 0=Dont wait, 255=Wait forever.
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_047b1_uart9600__ReceiveChar(MX_UINT8 FCL_TIMEOUT)
{
	//Local variable definitions
	MX_SINT16 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_UART_Receive_1(FCL_TIMEOUT);

	if (FCR_RETVAL <= 256)
	{



	// } else {

	}

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :TypeConversionsFree1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets a single 16-bit INT value.
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro SetInt:
       :  Index : Range: 0-1
       :  Value : Range: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetInt(MX_UINT8 FCL_INDEX, MX_UINT16 FCL_VALUE)
{

	if (FCL_INDEX < 2)
	{

		MX_Conv_Var.AsInt[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit LONG value
       :
       :Parameters for macro SetLong:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetLong(MX_UINT32 FCL_VALUE)
{

	MX_Conv_Var.AsLong = FCL_VALUE;

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit FLOAT value
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_02571_TypeConversionsFree1__GetFloat()
{
	//Local variable definitions
	MX_FLOAT FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsFloat;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 32-bit LONG value
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_02571_TypeConversionsFree1__GetLong()
{
	//Local variable definitions
	MX_UINT32 FCR_RETVAL;


	FCR_RETVAL = MX_Conv_Var.AsLong;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 16-bit INT value
       :Index is in little endian, 0 is the LSW and 1 is the MSW
       :
       :Parameters for macro GetInt:
       :  Index : Range: 0-1
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_02571_TypeConversionsFree1__GetInt(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	if (FCL_INDEX < 2)
	{

		FCR_RETVAL = MX_Conv_Var.AsInt[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 8-bit BYTE value
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro SetByte:
       :  Index : Range: 0-3
       :  Value : Range: 0-255
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetByte(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_VALUE)
{

	if (FCL_INDEX < 4)
	{

		MX_Conv_Var.AsByte[FCL_INDEX] = FCL_VALUE;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single 8-bit BYTE value.
       :Index is in little endian, 0 is the LSB and 3 is the MSB
       :
       :Parameters for macro GetByte:
       :  Index : Range: 0-3
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_02571_TypeConversionsFree1__GetByte(MX_UINT8 FCL_INDEX)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	if (FCL_INDEX < 4)
	{

		FCR_RETVAL = MX_Conv_Var.AsByte[FCL_INDEX];

	} else {

		// .Return = 0
		FCR_RETVAL = 0;

	}

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a single 32-bit FLOAT value
       :
       :Parameters for macro SetFloat:
       :  Value : Range: 0-4294967295
\*=----------------------------------------------------------------------=*/
void FCD_02571_TypeConversionsFree1__SetFloat(MX_FLOAT FCL_VALUE)
{

	MX_Conv_Var.AsFloat = FCL_VALUE;

}


/*========================================================================*\
   Use :eeprom1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Writes a 32-bit float value starting at the specified address.
       :A 32-bit float will consume 4 bytes which will be 4 locations on an 8-bit device or 2 locations on a 16-bit device.
       :
       :Parameters for macro WriteFloat:
       :  StartAddress : Initial EE location to start reading
       :  Value : Floating point value to write
       :  MSBFirst : 0=LSB First, 1=MSB First
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__WriteFloat(MX_UINT16 FCL_STARTADDRESS, MX_FLOAT FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;


	FCD_02571_TypeConversionsFree1__SetFloat(FCL_VALUE);

	#if (1) // 8 == 8

		for (FCL_IDX=0; (FCL_IDX)<(4); (FCL_IDX)++)
		{

			if (FCL_MSBFIRST)
			{

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(3 - FCL_IDX);

			} else {

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(FCL_IDX);

			}

			FCD_06651_eeprom1__Write(FCL_STARTADDRESS + FCL_IDX, FCL_VAL);


		}

	#else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a 16-bit int value starting from the specified address.
       :A 16-bit int will consume 2 bytes which will be 2 locations on an 8-bit device or 1 location on a 16-bit device.
       :
       :Parameters for macro ReadInt:
       :  StartAddress : Initial EE location to start reading
       :  MSBFirst : 0=LSB First, 1=MSB First
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_06651_eeprom1__ReadInt(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;
	MX_UINT16 FCR_RETVAL;


	#if (1) // 8 == 8

		for (FCL_IDX=0; (FCL_IDX)<(2); (FCL_IDX)++)
		{

			FCL_VAL = FCD_06651_eeprom1__Read(FCL_STARTADDRESS + FCL_IDX);

			if (FCL_MSBFIRST)
			{

				FCD_02571_TypeConversionsFree1__SetByte(1 - FCL_IDX, FCL_VAL);

			} else {

				FCD_02571_TypeConversionsFree1__SetByte(FCL_IDX, FCL_VAL);

			}


		}

		FCR_RETVAL = FCD_02571_TypeConversionsFree1__GetInt(0);

	#else

	//Code has been optimised out by the pre-processor
	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a 32-bit float value starting from the specified address.
       :A 32-bit float will consume 4 bytes which will be 4 locations on an 8-bit device or 2 locations on a 16-bit device.
       :
       :Parameters for macro ReadFloat:
       :  StartAddress : Initial EE location to start reading
       :  MSBFirst : 0=LSB First, 1=MSB First
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_06651_eeprom1__ReadFloat(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;
	MX_FLOAT FCR_RETVAL;


	#if (1) // 8 == 8

		for (FCL_IDX=0; (FCL_IDX)<(4); (FCL_IDX)++)
		{

			FCL_VAL = FCD_06651_eeprom1__Read(FCL_STARTADDRESS + FCL_IDX);

			if (FCL_MSBFIRST)
			{

				FCD_02571_TypeConversionsFree1__SetByte(3 - FCL_IDX, FCL_VAL);

			} else {

				FCD_02571_TypeConversionsFree1__SetByte(FCL_IDX, FCL_VAL);

			}


		}

	#else

	//Code has been optimised out by the pre-processor
	#endif

	FCR_RETVAL = FCD_02571_TypeConversionsFree1__GetFloat();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a 8-bit byte value to the specified address.
       :A 8-bit byte will consume 1 bytes which will be 1 locations on an 8-bit device or half a location on a 16-bit device.
       :
       :Parameters for macro WriteByte:
       :  ByteAddress : Byte address, EEADDR on 8-bit device or EEADDR/2 on a 16-bit device
       :  Value : Floating point value to write
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__WriteByte(MX_UINT16 FCL_BYTEADDRESS, MX_UINT8 FCL_VALUE)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;


	#if (1) // 8 == 8

		FCD_06651_eeprom1__Write(FCL_BYTEADDRESS, FCL_VALUE);

	#else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a 16-bit int value starting at the specified address.
       :A 16-bit int will consume 2 bytes which will be 2 locations on an 8-bit device or 1 location on a 16-bit device.
       :
       :Parameters for macro WriteInt:
       :  StartAddress : Initial EE location to start reading
       :  Value : Floating point value to write
       :  MSBFirst : 0=LSB First, 1=MSB First
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__WriteInt(MX_UINT16 FCL_STARTADDRESS, MX_UINT16 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;


	#if (1) // 8 == 8

		FCD_02571_TypeConversionsFree1__SetInt(0, FCL_VALUE);

		for (FCL_IDX=0; (FCL_IDX)<(2); (FCL_IDX)++)
		{

			if (FCL_MSBFIRST)
			{

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(1 - FCL_IDX);

			} else {

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(FCL_IDX);

			}

			FCD_06651_eeprom1__Write(FCL_STARTADDRESS + FCL_IDX, FCL_VAL);


		}

	#else

	//Code has been optimised out by the pre-processor
	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a string of data from the EE memory starting at the specified address.
       :8-bit EE memory stores a character into each memory location.
       :16-bit EE memory stores two characters into each memory location.
       :
       :Parameters for macro ReadString:
       :  StartAddress : EE Address of the first character in the string
       :  MaxChars : The maximum number of characters to try and read plus null termination
       :
       :Returns : MX_CHAR*
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__ReadString(MX_CHAR *FCR_RETVAL, MX_UINT16 FCRsz_RETVAL, MX_UINT16 FCL_STARTADDRESS, MX_UINT8 FCL_MAXCHARS)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT16 FCL_VAL;


	// .val = 0
	FCL_VAL = 0;

	while (FCL_IDX < (FCL_MAXCHARS - 1))
	{

		#if (1) // 8 == 8

			FCL_VAL = FCD_06651_eeprom1__Read(FCL_STARTADDRESS + FCL_IDX);

		#else

		//Code has been optimised out by the pre-processor
		#endif

		// .Return[.idx] = .val & 0xFF
		FCR_RETVAL[FCL_IDX] = FCL_VAL & 0xFF;

		if (FCR_RETVAL[FCL_IDX] == 0)
		{

			goto FCC_ReadString_A;

		// } else {

		}

		// .idx = .idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

	// .Return[.idx] = 0
	FCR_RETVAL[FCL_IDX] = 0;

FCC_ReadString_A:
	;

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a packet of bits from the EEPROM
       :The number of bits read is 8 or 16, depending on the platform
       :
       :Parameters for macro Read:
       :  Address : The address, in elements, to read the data from
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_06651_eeprom1__Read(MX_UINT16 FCL_ADDRESS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FCR_RETVAL = FC_CAL_EE_Read(FCL_ADDRESS);

	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a 32-bit long value starting from the specified address.
       :A 32-bit long will consume 4 bytes which will be 4 locations on an 8-bit device or 2 locations on a 16-bit device.
       :
       :Parameters for macro ReadLong:
       :  StartAddress : Initial EE location to start reading
       :  MSBFirst : 0=LSB First, 1=MSB First
       :
       :Returns : MX_UINT32
\*=----------------------------------------------------------------------=*/
MX_UINT32 FCD_06651_eeprom1__ReadLong(MX_UINT16 FCL_STARTADDRESS, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;
	MX_UINT32 FCR_RETVAL;


	#if (1) // 8 == 8

		for (FCL_IDX=0; (FCL_IDX)<(4); (FCL_IDX)++)
		{

			FCL_VAL = FCD_06651_eeprom1__Read(FCL_STARTADDRESS + FCL_IDX);

			if (FCL_MSBFIRST)
			{

				FCD_02571_TypeConversionsFree1__SetByte(3 - FCL_IDX, FCL_VAL);

			} else {

				FCD_02571_TypeConversionsFree1__SetByte(FCL_IDX, FCL_VAL);

			}


		}

	#else

	//Code has been optimised out by the pre-processor
	#endif

	FCR_RETVAL = FCD_02571_TypeConversionsFree1__GetLong();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a string of data to the EE memory starting at the specified address.
       :8-bit EE memory stores a character into each memory location.
       :16-bit EE memory stores two characters into each memory location.
       :
       :Parameters for macro WriteString:
       :  StartAddress : EE Address of the first character in the string
       :  MaxChars : The maximum number of characters to try and read plus null termination
       :  DataString[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__WriteString(MX_UINT16 FCL_STARTADDRESS, MX_UINT8 FCL_MAXCHARS, MX_CHAR *FCL_DATASTRING, MX_UINT16 FCLsz_DATASTRING)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT16 FCL_VAL;


	// .val = 0
	FCL_VAL = 0;

	while (FCL_IDX < (FCL_MAXCHARS - 1))
	{

		#if (1) // 8 == 8

			// .Val = .DataString[.idx]
			FCL_VAL = FCL_DATASTRING[FCL_IDX];

			FCD_06651_eeprom1__Write(FCL_STARTADDRESS + FCL_IDX, FCL_VAL);

		#else

		//Code has been optimised out by the pre-processor
		#endif

		if (FCL_DATASTRING[FCL_IDX] == 0)
		{

			#if (0) // 8 == 16

			//Code has been optimised out by the pre-processor
			// #else

			#endif

			goto FCC_WriteString_A;

		// } else {

		}

		// .Idx = .Idx + 1
		FCL_IDX = FCL_IDX + 1;


	}

	#if (0) // 8 == 16

	//Code has been optimised out by the pre-processor
	#else

		FCD_06651_eeprom1__Write(FCL_STARTADDRESS + FCL_IDX, 0);

	#endif

FCC_WriteString_A:
	;

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a packet of bits from the EEPROM
       :The number of bits written is 8 or 16, depending on the platform
       :
       :Parameters for macro Sim_Write:
       :  Address : The address, in elements, to read the data from
       :  Value : The 8 or 16 bit value to store in EEPROM
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__Sim_Write(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_VALUE)
{

	#if (0)

	//Code has been optimised out by the pre-processor
	// #else

	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a packet of bits from the EEPROM
       :The number of bits written is 8 or 16, depending on the platform
       :
       :Parameters for macro Write:
       :  Address : The address, in elements, to write the data to
       :  Value : The 8 or 16 bit value to store in EEPROM
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__Write(MX_UINT16 FCL_ADDRESS, MX_UINT16 FCL_VALUE)
{

	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		FC_CAL_EE_Write(FCL_ADDRESS, FCL_VALUE);

	#endif

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a 8-bit byte value starting from the specified address.
       :A 8-bit byte will consume 1 byte which will be 1 locations on an 8-bit device or half a location on a 16-bit device.
       :
       :Parameters for macro ReadByte:
       :  ByteAddress : Byte address, EEADDR on 8-bit device or EEADDR/2 on a 16-bit device
       :  MSBFirst : 0=LSB First, 1=MSB First
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_06651_eeprom1__ReadByte(MX_UINT16 FCL_BYTEADDRESS, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCR_RETVAL;


	#if (1) // 8 == 8

		FCR_RETVAL = FCD_06651_eeprom1__Read(FCL_BYTEADDRESS);

	#else

	//Code has been optimised out by the pre-processor
	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads a packet of bits from the EEPROM
       :The number of bits read is 8 or 16, depending on the platform
       :
       :Parameters for macro Sim_Read:
       :  Address : The address, in elements, to read the data from
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_06651_eeprom1__Sim_Read(MX_UINT16 FCL_ADDRESS)
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	#if (0)

	//Code has been optimised out by the pre-processor
	#else

		// .Return = 0xFFFF
		FCR_RETVAL = 0xFFFF;

	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Writes a 32-bit long value starting at the specified address.
       :A 32-bit long will consume 4 bytes which will be 4 locations on an 8-bit device or 2 locations on a 16-bit device.
       :
       :Parameters for macro WriteLong:
       :  StartAddress : Initial EE location to start reading
       :  Value : Floating point value to write
       :  MSBFirst : 0=LSB First, 1=MSB First
\*=----------------------------------------------------------------------=*/
void FCD_06651_eeprom1__WriteLong(MX_UINT16 FCL_STARTADDRESS, MX_UINT32 FCL_VALUE, MX_BOOL FCL_MSBFIRST)
{
	//Local variable definitions
	MX_UINT16 FCL_VAL;
	MX_UINT8 FCL_IDX;


	FCD_02571_TypeConversionsFree1__SetLong(FCL_VALUE);

	#if (1) // 8 == 8

		for (FCL_IDX=0; (FCL_IDX)<(4); (FCL_IDX)++)
		{

			if (FCL_MSBFIRST)
			{

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(3 - FCL_IDX);

			} else {

				FCL_VAL = FCD_02571_TypeConversionsFree1__GetByte(FCL_IDX);

			}

			FCD_06651_eeprom1__Write(FCL_STARTADDRESS + FCL_IDX, FCL_VAL);


		}

	#else

	//Code has been optimised out by the pre-processor
	#endif

}


/*========================================================================*\
   Use :PWM1DRIVE
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Sets the overall period and prescaler of the output PWM signal.
       :
       :Parameters for macro ChangePeriod:
       :  Period : The maximum number that will represent 100% on, PIC/AVR: 0-255 16-bit PIC: 0-65535
       :  Prescaler : The scaler used to divide the system clock speed down to the PWM rate.
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__ChangePeriod(MX_UINT16 FCL_PERIOD, MX_SINT16 FCL_PRESCALER)
{

	FC_CAL_PWM_ChangePeriod_1(FCL_PERIOD, FCL_PRESCALER);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables a PWM channel and allows the default output / input state to be resumed
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__Disable()
{

	// Enabled = 0
	FCV_0df41_PWM1DRIVE__ENABLED = 0;

	FC_CAL_PWM_Disable_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Sets the PWM duty cycle in terms of on/off based on the current period setting.
       :E.g. if period = 255 then duty of 128 is equal to 50% on and 50% off.
       :16-bit PIC users should use the 10bit duty function to access the full range.
       :
       :Parameters for macro SetDutyCycle:
       :  Duty : 8-bit PWM duty 0-255
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__SetDutyCycle(MX_UINT8 FCL_DUTY)
{

#if 0 // Disabled code
	if (FCV_0df41_PWM1DRIVE__ENABLED)
	{

	// } else {

	}

#endif // Disabled code

	FC_CAL_PWM_SetDuty8Bit_1(FCL_DUTY);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables a PWM channel as an output overriding the default output pin state.
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__Enable()
{

	// Enabled = 1
	FCV_0df41_PWM1DRIVE__ENABLED = 1;

	FC_CAL_PWM_ChangePeriod_1(255, 1);

	FC_CAL_PWM_Enable_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Sets a PWM of the specifed frequency at a duty of 50%
       :Ideal use is a  frequency generator
       :
       :Parameters for macro SetFrequency:
       :  Frequency : Enter frequency in Hz
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__SetFrequency(MX_UINT32 FCL_FREQUENCY)
{
	//Local variable definitions
	MX_UINT16 FCL_PERIODOVERFLOW;
	MX_UINT8 FCL_PRESCALER;
	MX_SINT16 FCL_DUTY10BIT;


	// .Prescaler = 1
	FCL_PRESCALER = 1;

	while (1)
	{

		// .PeriodOverflow = (- .Prescaler + (ClockSpeed / (.Frequency << 2))) / .Prescaler
		FCL_PERIODOVERFLOW = (-FCL_PRESCALER + (8000000 / (FCL_FREQUENCY << 2))) / FCL_PRESCALER;

		if (FCL_PERIODOVERFLOW > 255)
		{

			// .Prescaler = .Prescaler << 2
			FCL_PRESCALER = FCL_PRESCALER << 2;

		// } else {

		}

		// .Duty10Bit = .PeriodOverflow << 1
		FCL_DUTY10BIT = FCL_PERIODOVERFLOW << 1;


		if (((FCL_PERIODOVERFLOW > 255) && (FCL_PRESCALER)) == 0) break;
	}

	FC_CAL_PWM_ChangePeriod_1(FCL_PERIODOVERFLOW, FCL_PRESCALER);

	FC_CAL_PWM_SetDuty10Bit_1(FCL_DUTY10BIT);

}

/*=----------------------------------------------------------------------=*\
   Use :PIC/AVR - Sets the full scale PWM duty cycle based on the current period setting.
       :If period = 255 then Duty of 512 is equal to 50%.
       :
       :16-bit PICs have a 16-bit period range available.
       :If period = 65535 then Duty of 32768 is equal to 50%.
       :
       :Parameters for macro SetDutyCycle10Bit:
       :  Duty : PWM duty PIC/AVR: 0-1023 16-bit PIC: 0-65535
\*=----------------------------------------------------------------------=*/
void FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(MX_UINT16 FCL_DUTY)
{

#if 0 // Disabled code
	if (FCV_0df41_PWM1DRIVE__ENABLED)
	{

	// } else {

	}

#endif // Disabled code

	FC_CAL_PWM_SetDuty10Bit_1(FCL_DUTY);

}


/*========================================================================*\
   Use :panel
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Hi_Lo_current()
{

	// Name: Setup High or low curent limit - DISPLAY ONLY, Type: Decision: hi = 1?
	if (FCV_HI == 1)
	{

		// Name: Calculation, Type: Calculation:
		// Current_limit = Current_limit_high
		FCV_CURRENT_LIMIT = FCV_CURRENT_LIMIT_HIGH;

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is High"
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is High",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	} else {

		// Name: Calculation, Type: Calculation:
		// Current_limit = Current_limit_low
		FCV_CURRENT_LIMIT = FCV_CURRENT_LIMIT_LOW;

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is Low "
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is Low ",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Write_Display_Value()
{
	//Local variable definitions
	MX_SINT16 FCL_VALUE = (0);


	//Comment:
	//Useage - Arguments passed:
	//display_position dictates data placement area
	//[float_value] dictates written floating point number string text
	//[Value] is an integer that will be used if non zero
	//Decimals = 0  dictates integer [Value]
	//Decimals = 5 dictates 5 places including point.

	// Name: Display Command Mode, Type: Component Macro: uart9600::SendChar(0xFE)
	FCD_047b1_uart9600__SendChar(0xFE);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Ready to Set Cursor, Type: Component Macro: uart9600::SendChar(0x45)
	FCD_047b1_uart9600__SendChar(0x45);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Curser Position place, Type: Component Macro: uart9600::SendChar(display_position)
	FCD_047b1_uart9600__SendChar(FCV_DISPLAY_POSITION);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Calculation, Type: Calculation:
	// decimals = 5
	// display_string = ToString$ (Display_value)
	// display_string = left$ (display_string,5)
	FCV_DECIMALS = 5;
	FCI_TOSTRING(FCV_DISPLAY_VALUE, FCV_DISPLAY_STRING,20);
	FCI_LEFTSTRING(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING, 5, FCV_DISPLAY_STRING,20);

	// Name: Send display string, Type: Component Macro: uart9600::SendString(display_string)
	FCD_047b1_uart9600__SendString(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Clear the right side of the value, Type: Component Macro: uart9600::SendString("  ")
	FCD_047b1_uart9600__SendString("  ", 3);

}

/*=----------------------------------------------------------------------=*\
   Use :Convert Seconds Meter to hours and stuff into eproms 
       :Address 15, 16, 17, 18 eproms
\*=----------------------------------------------------------------------=*/
void FCM_Power_Down()
{

	//Comment:
	//First get eeprom values

	// Name: Call Component Macro, Type: Component Macro: x1=eeprom1::Read(15)
	FCV_X1 = FCD_06651_eeprom1__Read(15);

	// Name: Call Component Macro, Type: Component Macro: X256=eeprom1::Read(16)
	FCV_X256 = FCD_06651_eeprom1__Read(16);

	// Name: Call Component Macro, Type: Component Macro: x65536=eeprom1::Read(17)
	FCV_X65536 = FCD_06651_eeprom1__Read(17);

	// Name: Call Component Macro, Type: Component Macro: x16777216=eeprom1::Read(18)
	FCV_X16777216 = FCD_06651_eeprom1__Read(18);

	// Name: Calculation, Type: Calculation:
	// Seconds_count_Ulong = Seconds_count_Ulong + x1 + (x256 * 255) + (x65536 * 65535) + (x16777216 * 16777215)
	FCV_SECONDS_COUNT_ULONG = FCV_SECONDS_COUNT_ULONG + FCV_X1 + (FCV_X256 * 255) + (FCV_X65536 * 65535) + (FCV_X16777216 * 16777215);

	// Name: Calculation, Type: Calculation:
	// e1 = Seconds_count_Ulong
	// e2 = Seconds_count_Ulong >> 8
	// e3 = Seconds_count_Ulong >> 16
	// e4 = Seconds_count_Ulong >> 24
	FCV_E1 = FCV_SECONDS_COUNT_ULONG;
	FCV_E2 = FCV_SECONDS_COUNT_ULONG >> 8;
	FCV_E3 = FCV_SECONDS_COUNT_ULONG >> 16;
	FCV_E4 = FCV_SECONDS_COUNT_ULONG >> 24;

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(15, e1)
	FCD_06651_eeprom1__Write(15, FCV_E1);

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(16, e2)
	FCD_06651_eeprom1__Write(16, FCV_E2);

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(17, e3)
	FCD_06651_eeprom1__Write(17, FCV_E3);

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(18, e4)
	FCD_06651_eeprom1__Write(18, FCV_E4);

	// Name: Stay Here, Type: Loop: Loop  100 times
	for (FCLV_LOOP1=0; (FCLV_LOOP1)<(100); (FCLV_LOOP1)++)
	{

		// Name: Interrupt, Type: Interrupt: Disable TMR0
		cr_bit(INTCON, TMR0IE);

		// Name: Turn off SCR, Type: Output: 0 -> B1
		SET_PORT_PIN(B,1,(0));

		// Name: Enable Cathode, Type: Output: 0 -> C1
		SET_PORT_PIN(C,1,(0));

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
		FCD_0df41_PWM1DRIVE__Enable();

		// Name: Dump residual energy into motor, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(4095)
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(4095);

		// Name: Beep, Type: Output: 1 -> A6
		SET_PORT_PIN(A,6,(1));

		// Name: Delay, Type: Delay: 10 ms
		FCI_DELAYBYTEWDT_MS(10);

		// Name: Beep, Type: Output: 0 -> A6
		SET_PORT_PIN(A,6,(0));

		// Name: Delay, Type: Delay: 10 ms
		FCI_DELAYBYTEWDT_MS(10);


	}

	// Name: Interrupt, Type: Interrupt: Enable TMR0
	cr_bit(T0CON, T0CS);
	st_bit(T0CON, T0SE);
	T0CON = (T0CON & 0xF0) | 0x07;
	st_bit(INTCON, GIE);
	st_bit(INTCON, TMR0IE);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Change_Baud()
{

	// Name: Prefix Command, Type: Component Macro: uart9600::SendChar(0xFE)
	FCD_047b1_uart9600__SendChar(0xFE);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Change rate to 115.2K command, Type: Component Macro: uart9600::SendChar(0x61)
	FCD_047b1_uart9600__SendChar(0x61);

	// Name: Delay, Type: Delay: 3 ms
	FCI_DELAYBYTEWDT_MS(3);

	// Name: Change rate to 19.2k, Type: Component Macro: uart9600::SendChar(7)
	FCD_047b1_uart9600__SendChar(7);

	// Name: Delay, Type: Delay: 3 ms
	FCI_DELAYBYTEWDT_MS(3);

}

/*=----------------------------------------------------------------------=*\
   Use :Generate a profile from zero to vmax for reference.
       :Profile is returned with new value for each itteration
       :Error is developed with profile - velocity
       :Vmax is pre loaded with velocity counts referenced to speed feedback
\*=----------------------------------------------------------------------=*/
void FCM_Profile()
{

	// Name: 327 counts per AMP, Type: Component Macro: Current_read=Current::GetInt()
	FCV_CURRENT_READ = FCD_04751_Current__GetInt();

	// Name: 2.5 volts or 1474 = zero so, Type: Calculation:
	// Current_read = Current_read - 1474 //2048
	FCV_CURRENT_READ = FCV_CURRENT_READ - 1474;

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Start at a non zero, Type: Decision: Profile_Float < 25?
	if (flt_lt(FCV_PROFILE_FLOAT, 25))
	{

		// Name: Calculation, Type: Calculation:
		// Profile_Float = 25
		FCV_PROFILE_FLOAT = 25;

	// } else {

	}

	// Name: Roll down to meet new lower speed, Type: Decision: Profile_Float > vmax OR Current_read > Current_limit?
	if (flt_gt(FCV_PROFILE_FLOAT, flt_fromi(FCV_VMAX)) | FCV_CURRENT_READ > FCV_CURRENT_LIMIT)
	{

		// Name: Slow down to new lower speed, Type: Calculation:
		// profile_float = profile_float - step_inc
		FCV_PROFILE_FLOAT = flt_sub(FCV_PROFILE_FLOAT, flt_fromi(FCV_STEP_INC));

	} else {

		// Name: Roll up to new faster speed, Type: Calculation:
		// profile_float = profile_float + (step_inc + Accel_Rate_Adder)
		FCV_PROFILE_FLOAT = flt_add(FCV_PROFILE_FLOAT, flt_fromi((FCV_STEP_INC + FCV_ACCEL_RATE_ADDER)));

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Calibration purpose, Type: Decision: Current_read_off = 0?
	if (FCV_CURRENT_READ_OFF == 0)
	{

		// Name: Roll down to meet new lower speed, Type: Decision: Profile_Float > vmax?
		if (flt_gt(FCV_PROFILE_FLOAT, flt_fromi(FCV_VMAX)))
		{

			// Name: Slow down to new lower speed, Type: Calculation:
			// profile_float = profile_float - step_inc
			FCV_PROFILE_FLOAT = flt_sub(FCV_PROFILE_FLOAT, flt_fromi(FCV_STEP_INC));

		} else {

			// Name: Roll up to new faster speed, Type: Calculation:
			// profile_float = profile_float + (step_inc + Accel_Rate_Adder)
			FCV_PROFILE_FLOAT = flt_add(FCV_PROFILE_FLOAT, flt_fromi((FCV_STEP_INC + FCV_ACCEL_RATE_ADDER)));

		}

	} else {

		// Name: Decision, Type: Decision: Current_read > Current_limit?
		if (FCV_CURRENT_READ > FCV_CURRENT_LIMIT)
		{

			// Name: Slow down to new lower speed, Type: Calculation:
			// profile_float = profile_float - (step_inc * 4)
			FCV_PROFILE_FLOAT = flt_sub(FCV_PROFILE_FLOAT, flt_fromi((FCV_STEP_INC * 4)));

		// } else {

		}

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: 18 equates to 3 amps locked rotor, Type: Decision: profile_float < 12?
	if (flt_lt(FCV_PROFILE_FLOAT, 12))
	{

		// Name: Calculation, Type: Calculation:
		// profile_float = 12
		FCV_PROFILE_FLOAT = 12;

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Used at powerup time to display torque settings
\*=----------------------------------------------------------------------=*/
void FCM_Display_Torques()
{

	// Name: Display Low Value %, Type: Calculation:
	// display_string = "low Value"
	// display_position = 0x40
	FCI_SCOPY("low Value",10, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x40;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	//Comment:
	//Comment

	// Name: Call Component Macro, Type: Component Macro: Display_Value=eeprom1::Read(8)
	FCV_DISPLAY_VALUE = FCD_06651_eeprom1__Read(8);

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// display_position = 0x4a
	// float_value = 100 / (4096 / int2float (Current_limit_low))
	// display_value = float2int (float_value)
	FCV_DISPLAY_POSITION = 0x4a;
	FCV_FLOAT_VALUE = flt_div(100, (flt_div(4096, flt_fromi(FCV_CURRENT_LIMIT_LOW))));
	FCV_DISPLAY_VALUE = flt_toi(FCV_FLOAT_VALUE);

#endif // Disabled code

	// Name: Calculation, Type: Calculation:
	// display_position = 0x4a
	FCV_DISPLAY_POSITION = 0x4a;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	//Comment:
	//Comment

	// Name: Display  Value %, Type: Calculation:
	// display_string = "High Value"
	// display_position = 0x14
	FCI_SCOPY("High Value",11, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x14;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: Display_Value=eeprom1::Read(9)
	FCV_DISPLAY_VALUE = FCD_06651_eeprom1__Read(9);

	// Name: Calculation, Type: Calculation:
	// display_position = 0x1f
	FCV_DISPLAY_POSITION = 0x1f;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Splash_Screen()
{

	// Name: Calculation, Type: Calculation:
	// display_string = Revision
	// display_position = 0x0f
	FCI_SCOPY(FCV_REVISION,FCVsz_REVISION, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x0f;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// Display_String = "MYTANA"
	// display_position = 0x06
	FCI_SCOPY("MYTANA",7, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x06;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	//Comment:
	//****************************

	// Name: Calculation, Type: Calculation:
	// display_string = "Model 745"
	// display_position = 0x59
	FCI_SCOPY("Model 745",10, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x59;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	//Comment:
	//****************************

	// Name: Calculation, Type: Calculation:
	// display_string = "800 328 8170"
	// display_position = 0x43
	FCI_SCOPY("800 328 8170",13, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x43;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	//Comment:
	//****************************

	// Name: Delay, Type: Delay: 3 s
	FCI_DELAYBYTEWDT_S(3);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Calculation, Type: Calculation:
	// Display_String = "MYTANA"
	// display_position = 0x06
	FCI_SCOPY("MYTANA",7, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x06;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: Cool_Down_count=eeprom1::Read(10)
	FCV_COOL_DOWN_COUNT = FCD_06651_eeprom1__Read(10);

	// Name: Calculation, Type: Calculation:
	// Display_position = 0x54
	// display_string = "CDC"
	FCV_DISPLAY_POSITION = 0x54;
	FCI_SCOPY("CDC",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Write the number of stored CDC's, Type: Calculation:
	// display_position = 0x58
	// display_value = Cool_Down_count
	FCV_DISPLAY_POSITION = 0x58;
	FCV_DISPLAY_VALUE = FCV_COOL_DOWN_COUNT;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// Display_position = 0x5c
	// display_string = "Hour"
	FCV_DISPLAY_POSITION = 0x5c;
	FCI_SCOPY("Hour",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

#endif // Disabled code

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// display_position = 0x61
	// display_value = Seconds_count_Ulong
	FCV_DISPLAY_POSITION = 0x61;
	FCV_DISPLAY_VALUE = FCV_SECONDS_COUNT_ULONG;

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

#endif // Disabled code

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Running_display()
{

	// Name: Decision, Type: Decision: Current_limit = Current_limit_high?
	if (FCV_CURRENT_LIMIT == FCV_CURRENT_LIMIT_HIGH)
	{

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is High"
		// toggle2 = 1
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is High",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
		FCV_TOGGLE2 = 1;

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	} else {

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is Low "
		// toggle2 = 0
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is Low ",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
		FCV_TOGGLE2 = 0;

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	}

	// Name: Calculation, Type: Calculation:
	// Display_String = "MYTANA"
	// display_position = 0x06
	FCI_SCOPY("MYTANA",7, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x06;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Display Run Mode AND RPM Value (space), Type: Calculation:
	// Display_String = "Running      RPM"
	// display_position = 0x54
	FCI_SCOPY("Running      RPM",17, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x54;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: lsb=eeprom1::Read(3)
	FCV_LSB = FCD_06651_eeprom1__Read(3);

	// Name: Call Component Macro, Type: Component Macro: MSB=eeprom1::Read(4)
	FCV_MSB = FCD_06651_eeprom1__Read(4);

	// Name: Calculation, Type: Calculation:
	// command_speed = msb + LSB
	// Display_Value = Command_Speed
	// Display_position = 0x5c
	FCV_COMMAND_SPEED = FCV_MSB + FCV_LSB;
	FCV_DISPLAY_VALUE = FCV_COMMAND_SPEED;
	FCV_DISPLAY_POSITION = 0x5c;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Eprom units for powerup cycles, Type: Component Macro: PU_units=eeprom1::Read(100)
	FCV_PU_UNITS = FCD_06651_eeprom1__Read(100);

	// Name: Eprom multiplier for powerup cycles, Type: Component Macro: mult_Units=eeprom1::Read(101)
	FCV_MULT_UNITS = FCD_06651_eeprom1__Read(101);

	// Name: Calculation, Type: Calculation:
	// display_position = 0x40
	// display_string = "PU"
	FCV_DISPLAY_POSITION = 0x40;
	FCI_SCOPY("PU",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x43
	FCV_DISPLAY_POSITION = 0x43;

	// Name: Add number of 255's, Type: Calculation:
	// Display_Value = pu_units + (mult_Units * 255)
	FCV_DISPLAY_VALUE = FCV_PU_UNITS + (FCV_MULT_UNITS * 255);

	// Name: Write Powerup Values, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	//Comment:
	//****************************

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Torque_limits()
{

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::Enable()
	/* Error: Unknown or missing component : QuadEncoder1::Enable */;

	// Name: Reset Encoder Counter, Type: Component Macro: QuadEncoder1::ResetCounter()
	/* Error: Unknown or missing component : QuadEncoder1::ResetCounter */;

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Display Low Value %, Type: Calculation:
	// display_string = "low Value"
	// display_position = 0x00
	FCI_SCOPY("low Value",10, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x00;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	//Comment:
	//Comment

	// Name: Calculation, Type: Calculation:
	// display_position = 0x0a
	// float_value = 100 / (4096 / int2float (Current_limit_low))
	// display_value = float2int (float_value)
	FCV_DISPLAY_POSITION = 0x0a;
	FCV_FLOAT_VALUE = flt_div(100, (flt_div(4096, flt_fromi(FCV_CURRENT_LIMIT_LOW))));
	FCV_DISPLAY_VALUE = flt_toi(FCV_FLOAT_VALUE);

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Get percentage into encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(Display_Value*4)
	/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

	// Name: Wait for release, Type: Loop: While program_button = 0
	while (FCV_PROGRAM_BUTTON == 0)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


	}

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

		// Name: Call Component Macro, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Decision, Type: Decision: Change_bit = 1?
		if (FCV_CHANGE_BIT == 1)
		{

			// Name: Call Component Macro, Type: Component Macro: Display_Value=QuadEncoder1::ReadCounter()
			/* Error: Unknown or missing component : QuadEncoder1::ReadCounter */;

			// Name: Calculation, Type: Calculation:
			// Display_Value = display_value / 4
			FCV_DISPLAY_VALUE = FCV_DISPLAY_VALUE / 4;

		// } else {

		}

		// Name: Limit Value, Type: Decision: display_value > 100?
		if (FCV_DISPLAY_VALUE > 100)
		{

			// Name: Calculation, Type: Calculation:
			// display_value = 100
			FCV_DISPLAY_VALUE = 100;

			// Name: Sync encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(400)
			/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

		} else {

			// Name: Limit Value, Type: Decision: display_value < 0?
			if (FCV_DISPLAY_VALUE < 0)
			{

				// Name: Calculation, Type: Calculation:
				// display_value = 0
				FCV_DISPLAY_VALUE = 0;

				// Name: Sync encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(0)
				/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

			// } else {

			}

		}

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();


	}

	// Name: Delay, Type: Delay: 200 ms
	FCI_DELAYBYTEWDT_MS(200);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Low value to eprom, Type: Component Macro: eeprom1::Write(8, Display_Value)
	FCD_06651_eeprom1__Write(8, FCV_DISPLAY_VALUE);

	//Comment:
	//Comment

	// Name: Display  Value %, Type: Calculation:
	// display_string = "High Value"
	// display_position = 0x14
	FCI_SCOPY("High Value",11, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x14;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x20
	// float_value = 100 / (4096 / int2float (Current_limit_high))
	// display_value = float2int (float_value)
	FCV_DISPLAY_POSITION = 0x20;
	FCV_FLOAT_VALUE = flt_div(100, (flt_div(4096, flt_fromi(FCV_CURRENT_LIMIT_HIGH))));
	FCV_DISPLAY_VALUE = flt_toi(FCV_FLOAT_VALUE);

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Get percentage into encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(Display_Value*4)
	/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

	// Name: Wait for release, Type: Loop: While program_button = 0
	while (FCV_PROGRAM_BUTTON == 0)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


	}

	//Comment:
	//Comment

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

		// Name: Call Component Macro, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Decision, Type: Decision: Change_bit = 1?
		if (FCV_CHANGE_BIT == 1)
		{

			// Name: Call Component Macro, Type: Component Macro: Display_Value=QuadEncoder1::ReadCounter()
			/* Error: Unknown or missing component : QuadEncoder1::ReadCounter */;

			// Name: Calculation, Type: Calculation:
			// Display_Value = display_value / 4
			FCV_DISPLAY_VALUE = FCV_DISPLAY_VALUE / 4;

		// } else {

		}

		// Name: Limit Value, Type: Decision: display_value > 100?
		if (FCV_DISPLAY_VALUE > 100)
		{

			// Name: Calculation, Type: Calculation:
			// display_value = 100
			FCV_DISPLAY_VALUE = 100;

			// Name: Sync encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(400)
			/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

		} else {

			// Name: Limit Value, Type: Decision: display_value < 0?
			if (FCV_DISPLAY_VALUE < 0)
			{

				// Name: Calculation, Type: Calculation:
				// display_value = 0
				FCV_DISPLAY_VALUE = 0;

				// Name: Sync encoder register, Type: Component Macro: QuadEncoder1::WriteCounter(0)
				/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

			// } else {

			}

		}

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();


	}

	// Name: Loop, Type: Loop: While Program_button = 0
	while (FCV_PROGRAM_BUTTON == 0)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


	}

	// Name: Delay, Type: Delay: 200 ms
	FCI_DELAYBYTEWDT_MS(200);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Program Eprom, Type: Component Macro: eeprom1::Write(9, Display_Value)
	FCD_06651_eeprom1__Write(9, FCV_DISPLAY_VALUE);

}

/*=----------------------------------------------------------------------=*\
   Use :Get eprom saved speed and encoder count
       :Leave this routine with Command_speed pupulated with actual RPM value. Display the values in increments of 25 RPM starting at 100 RPM Save the new data to eprom location 3 (command speed  and 5 (encoder count)
\*=----------------------------------------------------------------------=*/
void FCM_Encoder_test()
{

	// Name: Read Saved Encoder Counter Value, Type: Component Macro: Encoder_counter=eeprom1::Read(5)
	FCV_ENCODER_COUNTER = FCD_06651_eeprom1__Read(5);

	// Name: Calculation, Type: Calculation:
	// Encoder_counter = Encoder_counter << 2
	// Command_Speed = 125
	FCV_ENCODER_COUNTER = FCV_ENCODER_COUNTER << 2;
	FCV_COMMAND_SPEED = 125;

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::WriteCounter(Encoder_counter)
	/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

	// Name: Loop, Type: Loop: While Program_button = 0
	while (1)
	{


		if ((FCV_PROGRAM_BUTTON == 0) == 0) break;
	}

	//Comment:
	//Reinstate Command Speed Value

	// Name: Call Component Macro, Type: Component Macro: LSB=eeprom1::Read(3)
	FCV_LSB = FCD_06651_eeprom1__Read(3);

	// Name: Call Component Macro, Type: Component Macro: MSB=eeprom1::Read(4)
	FCV_MSB = FCD_06651_eeprom1__Read(4);

	// Name: Reinstate Command Speed from Eprom location 3 and 4, Type: Calculation:
	// Command_Speed = LSB + MSB
	FCV_COMMAND_SPEED = FCV_LSB + FCV_MSB;

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Delay, Type: Delay: 3 ms
		FCI_DELAYBYTEWDT_MS(3);

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

		// Name: Call Component Macro, Type: Component Macro: change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Call Component Macro, Type: Component Macro: Encoder_counter=QuadEncoder1::ReadCounter()
		/* Error: Unknown or missing component : QuadEncoder1::ReadCounter */;

		// Name: Encoder number display, Type: Calculation:
		// display_position = 0x54
		// Encoder_counter = Encoder_counter >> 2
		// Display_Value = Encoder_counter
		FCV_DISPLAY_POSITION = 0x54;
		FCV_ENCODER_COUNTER = FCV_ENCODER_COUNTER >> 2;
		FCV_DISPLAY_VALUE = FCV_ENCODER_COUNTER;

		// Name: Going up, Type: Decision: Encoder_counter = 0?
		if (FCV_ENCODER_COUNTER == 0)
		{

			// Name: 4x Multiplier, Type: Component Macro: QuadEncoder1::WriteCounter(4)
			/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

			// Name: Calculation, Type: Calculation:
			// Encoder_counter = 1
			FCV_ENCODER_COUNTER = 1;

		} else {

			// Name: Decision, Type: Decision: Encoder_counter > 9?
			if (FCV_ENCODER_COUNTER > 9)
			{

				// Name: Max value, Type: Component Macro: QuadEncoder1::WriteCounter(36)
				/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

				// Name: Calculation, Type: Calculation:
				// Encoder_counter = 9
				FCV_ENCODER_COUNTER = 9;

			// } else {

			}

		}

		// Name: , Type: Switch: Encoder_counter?
		switch (FCV_ENCODER_COUNTER)
		{
			case 1:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 100
				// Encoder_counter = 1
				FCV_COMMAND_SPEED = 100;
				FCV_ENCODER_COUNTER = 1;

				break;
			}
			case 2:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 125
				// Encoder_counter = 2
				FCV_COMMAND_SPEED = 125;
				FCV_ENCODER_COUNTER = 2;

				break;
			}
			case 3:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 150
				// Encoder_counter = 3
				FCV_COMMAND_SPEED = 150;
				FCV_ENCODER_COUNTER = 3;

				break;
			}
			case 4:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 175
				FCV_COMMAND_SPEED = 175;

				break;
			}
			case 5:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 200
				FCV_COMMAND_SPEED = 200;

				break;
			}
			case 6:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 225
				FCV_COMMAND_SPEED = 225;

				break;
			}
			case 7:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 250
				FCV_COMMAND_SPEED = 250;

				break;
			}
			case 8:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 275
				FCV_COMMAND_SPEED = 275;

				break;
			}
			case 9:
			{
				// Name: Calculation, Type: Calculation:
				// Command_Speed = 300
				FCV_COMMAND_SPEED = 300;

				break;
			}
			// default:

		}

		// Name: New Speed, Type: Calculation:
		// Display_Value = Command_Speed
		// display_position = 0x1e
		FCV_DISPLAY_VALUE = FCV_COMMAND_SPEED;
		FCV_DISPLAY_POSITION = 0x1e;

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();


	}

	// Name: Larger than 8 bits - Store anything over 250 to eprom 4 address, Type: Switch: command_speed?
	switch (FCV_COMMAND_SPEED)
	{
		case 275:
		{
			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
			FCD_06651_eeprom1__Write(3, 250);

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 25)
			FCD_06651_eeprom1__Write(4, 25);

			break;
		}
		case 300:
		{
			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
			FCD_06651_eeprom1__Write(3, 250);

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 50)
			FCD_06651_eeprom1__Write(4, 50);

			break;
		}
		default:
		{
			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, Command_Speed)
			FCD_06651_eeprom1__Write(3, FCV_COMMAND_SPEED);

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 0)
			FCD_06651_eeprom1__Write(4, 0);

		}
	}

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(5, Encoder_counter)
	FCD_06651_eeprom1__Write(5, FCV_ENCODER_COUNTER);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_PU_Counter()
{

	// Name: First time PU location, Type: Component Macro: First_Time_PU=eeprom1::Read(13)
	FCV_FIRST_TIME_PU = FCD_06651_eeprom1__Read(13);

	// Name: Make it so if not 99, Type: Decision: First_Time_PU = 99?
	if (FCV_FIRST_TIME_PU == 99)
	{

		// Name: Call Component Macro, Type: Component Macro: PU_Units=eeprom1::Read(100)
		FCV_PU_UNITS = FCD_06651_eeprom1__Read(100);

		// Name: Decision, Type: Decision: PU_units = 255?
		if (FCV_PU_UNITS == 255)
		{

			// Name: Set units back to zero, Type: Component Macro: eeprom1::Write(100, 0)
			FCD_06651_eeprom1__Write(100, 0);

			// Name: Calculation, Type: Calculation:
			// PU_units = 1
			FCV_PU_UNITS = 1;

			// Name: Call Component Macro, Type: Component Macro: Mult_Units=eeprom1::Read(101)
			FCV_MULT_UNITS = FCD_06651_eeprom1__Read(101);

			// Name: Calculation, Type: Calculation:
			// mult_units = Mult_Units + 1
			FCV_MULT_UNITS = FCV_MULT_UNITS + 1;

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(101, Mult_Units)
			FCD_06651_eeprom1__Write(101, FCV_MULT_UNITS);

		} else {

			// Name: Increment units, Type: Calculation:
			// pu_units = PU_units + 1
			FCV_PU_UNITS = FCV_PU_UNITS + 1;

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(100, pu_units)
			FCD_06651_eeprom1__Write(100, FCV_PU_UNITS);

		}

	} else {

		// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(13, 99)
		FCD_06651_eeprom1__Write(13, 99);

		// Name: pu_units, Type: Component Macro: eeprom1::Write(100, 0)
		FCD_06651_eeprom1__Write(100, 0);

		// Name: 255 Mult, Type: Component Macro: eeprom1::Write(101, 0)
		FCD_06651_eeprom1__Write(101, 0);

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Simply adds number to step_inc just for accel
\*=----------------------------------------------------------------------=*/
void FCM_Accel_Rate_Adder()
{
	//Local variable definitions
	MX_UINT8 FCL_PB_COUNT = (0x0);


	// Name: Interrupt, Type: Interrupt: Disable TMR0
	cr_bit(INTCON, TMR0IE);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x00
	// display_string = "Accel Rate"
	FCV_DISPLAY_POSITION = 0x00;
	FCI_SCOPY("Accel Rate",11, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// .PB_Count = 1
	FCL_PB_COUNT = 1;

	// Name: Loop, Type: Loop: Until Program_button = 0
	while (1)
	{

		// Name: Delay, Type: Delay: 1 s
		FCI_DELAYBYTEWDT_S(1);

		// Name: Switch, Type: Switch: .PB_Count?
		switch (FCL_PB_COUNT)
		{
			case 1:
			{
				// Name: Calculation, Type: Calculation:
				// Accel_Rate_Adder = 1
				FCV_ACCEL_RATE_ADDER = 1;

				break;
			}
			case 2:
			{
				// Name: Calculation, Type: Calculation:
				// Accel_Rate_Adder = 2
				FCV_ACCEL_RATE_ADDER = 2;

				break;
			}
			case 3:
			{
				// Name: Calculation, Type: Calculation:
				// Accel_Rate_Adder = 3
				FCV_ACCEL_RATE_ADDER = 3;

				break;
			}
			case 4:
			{
				// Name: Calculation, Type: Calculation:
				// Accel_Rate_Adder = 4
				FCV_ACCEL_RATE_ADDER = 4;

				break;
			}
			// default:

		}

		// Name: Calculation, Type: Calculation:
		// Display_value = Accel_Rate_Adder
		// display_position = 0x0b
		// .PB_Count = .PB_Count + 1
		FCV_DISPLAY_VALUE = FCV_ACCEL_RATE_ADDER;
		FCV_DISPLAY_POSITION = 0x0b;
		FCL_PB_COUNT = FCL_PB_COUNT + 1;

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();

		// Name: Decision, Type: Decision: .pb_count > 4?
		if (FCL_PB_COUNT > 4)
		{

			// Name: Calculation, Type: Calculation:
			// .pb_count = 1
			FCL_PB_COUNT = 1;

		// } else {

		}

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


		if ((FCV_PROGRAM_BUTTON == 0) != 0) break;
	}

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(19, Accel_Rate_Adder)
	FCD_06651_eeprom1__Write(19, FCV_ACCEL_RATE_ADDER);

	// Name: Interrupt, Type: Interrupt: Enable TMR0
	cr_bit(T0CON, T0CS);
	st_bit(T0CON, T0SE);
	T0CON = (T0CON & 0xF0) | 0x07;
	st_bit(INTCON, GIE);
	st_bit(INTCON, TMR0IE);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Get_IO()
{
	//Local variable definitions
	MX_UINT16 FCL_PD_COUNT = (0x0);


	// Name: Call Component Macro, Type: Component Macro: DC_Volts=DC_Voltage::GetInt()
	FCV_DC_VOLTS = FCD_0d102_DC_Voltage__GetInt();

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Eprom Storage of run time, Type: Decision: DC_Volts < 1200?
	if (FCV_DC_VOLTS < 1200)
	{

		// Name: Output, Type: Output: 1 -> A6
		SET_PORT_PIN(A,6,(1));

#if 0 // Disabled code
		// Name: Calculation, Type: Calculation:
		// .pd_count = .pd_count + 1
		FCL_PD_COUNT = FCL_PD_COUNT + 1;

#endif // Disabled code

		// Name: Decision, Type: Decision: .pd_count = 0 //> 100?
		if (FCL_PD_COUNT == 0)
		{

			// Name: Calculation, Type: Calculation:
			// .pd_count = 0
			FCL_PD_COUNT = 0;

			// Name: Call Macro, Type: User Macro: Power_Down()
			FCM_Power_Down();

		// } else {

		}

#if 0 // Disabled code
		// Name: Output, Type: Output: 0 -> A6
		SET_PORT_PIN(A,6,(0));

#endif // Disabled code

	} else {

		// Name: Calculation, Type: Calculation:
		// .pd_count = 0
		FCL_PD_COUNT = 0;

	}

	// Name: Decision, Type: Decision: Foot_Pedal = 0?
	if (FCV_FOOT_PEDAL == 0)
	{

		// Name: C0unt2 = count2+1, Type: Calculation:
		// Count2 = count2 + 1
		FCV_COUNT2 = FCV_COUNT2 + 1;

		// Name: Decision, Type: Decision: count2 = 30?
		if (FCV_COUNT2 == 30)
		{

			// Name: Calculation, Type: Calculation:
			// count2 = 0
			FCV_COUNT2 = 0;

			// Name: 30 clicks/second then store, Type: Calculation:
			// Seconds_count_Ulong = Seconds_count_Ulong + 1
			FCV_SECONDS_COUNT_ULONG = FCV_SECONDS_COUNT_ULONG + 1;

		// } else {

		}

	// } else {

	}

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// State = 9
	FCV_STATE = 9;

#endif // Disabled code

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: 10 clicks per second, Type: Calculation:
	// Clock_int = Clock_int + 1
	// Clock_int2 = Clock_int2 + 1
	// clock_int3 = clock_int3 + 1
	// Integrate_Clock = Integrate_Clock + 1
	// int_int = Int_int + 1
	FCV_CLOCK_INT = FCV_CLOCK_INT + 1;
	FCV_CLOCK_INT2 = FCV_CLOCK_INT2 + 1;
	FCV_CLOCK_INT3 = FCV_CLOCK_INT3 + 1;
	FCV_INTEGRATE_CLOCK = FCV_INTEGRATE_CLOCK + 1;
	FCV_INT_INT = FCV_INT_INT + 1;

	// Name: Get program button status, Type: Input: B5 -> Program_button
	FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

	// Name: Get foot switch status, Type: Input: B7 -> Foot_pedal_store
	FCV_FOOT_PEDAL_STORE = GET_PORT_PIN(B,7);

	// Name: Debounce foot pedal, Type: Switch: Foot_Pedal_store?
	switch (FCV_FOOT_PEDAL_STORE)
	{
		case 1:
		{
			// Name: Calculation, Type: Calculation:
			// Interrupt_count = Interrupt_count + 1
			FCV_INTERRUPT_COUNT = FCV_INTERRUPT_COUNT + 1;

			// Name: 13 count to stay away from pulse syncronized capture, Type: Decision: Interrupt_count > 13?
			if (FCV_INTERRUPT_COUNT > 13)
			{

				// Name: Calculation, Type: Calculation:
				// Foot_pedal = 1
				// Interrupt_count = 0
				FCV_FOOT_PEDAL = 1;
				FCV_INTERRUPT_COUNT = 0;

			// } else {

			}

			break;
		}
		case 0:
		{
			// Name: Calculation, Type: Calculation:
			// Interrupt_count = Interrupt_count + 1
			FCV_INTERRUPT_COUNT = FCV_INTERRUPT_COUNT + 1;

			// Name: Decision, Type: Decision: Interrupt_count > 10?
			if (FCV_INTERRUPT_COUNT > 10)
			{

				// Name: Calculation, Type: Calculation:
				// Foot_pedal = 0
				// Interrupt_count = 0
				FCV_FOOT_PEDAL = 0;
				FCV_INTERRUPT_COUNT = 0;

			// } else {

			}

			break;
		}
		// default:

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Debounce fwd rev switch, Type: Switch: Foreward_Reverse_Store?
	switch (FCV_FOREWARD_REVERSE_STORE)
	{
		case 1:
		{
			// Name: Calculation, Type: Calculation:
			// Interrupt_count2 = Interrupt_count2 + 1
			FCV_INTERRUPT_COUNT2 = FCV_INTERRUPT_COUNT2 + 1;

			// Name: Decision, Type: Decision: Interrupt_count2 > 10?
			if (FCV_INTERRUPT_COUNT2 > 10)
			{

				// Name: Calculation, Type: Calculation:
				// Forward_Reverse = 1
				// Interrupt_count2 = 0
				FCV_FORWARD_REVERSE = 1;
				FCV_INTERRUPT_COUNT2 = 0;

			// } else {

			}

			break;
		}
		case 0:
		{
			// Name: Calculation, Type: Calculation:
			// Interrupt_count2 = Interrupt_count2 + 1
			FCV_INTERRUPT_COUNT2 = FCV_INTERRUPT_COUNT2 + 1;

			// Name: Decision, Type: Decision: Interrupt_count2 > 10?
			if (FCV_INTERRUPT_COUNT2 > 10)
			{

				// Name: Calculation, Type: Calculation:
				// Forward_Reverse = 0
				// Interrupt_count = 0
				FCV_FORWARD_REVERSE = 0;
				FCV_INTERRUPT_COUNT = 0;

			// } else {

			}

			break;
		}
		// default:

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Reset at 2 seconds, Type: Decision: int_int > 10?
	if (FCV_INT_INT > 10)
	{

		// Name: Calculation, Type: Calculation:
		// int_int = 0
		FCV_INT_INT = 0;

		// Name: Foot switch  State, Type: Decision: Foot_Pedal = 0?
		if (FCV_FOOT_PEDAL == 0)
		{

			// Name: Calculation, Type: Calculation:
			// State = 1
			FCV_STATE = 1;

		// } else {

		}

		// Name: Program Button State, Type: Decision: Program_button = 0?
		if (FCV_PROGRAM_BUTTON == 0)
		{

			// Name: Calculation, Type: Calculation:
			// State = 2
			FCV_STATE = 2;

		// } else {

		}

	// } else {

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Determine average, Type: Calculation:
	// Integrate[integrate_count] = Error_Average
	// Swing = integrate[0] + integrate[1] + integrate[2] + integrate[3] + integrate[4] + integrate[5] + integrate[6] + integrate[7] + integrate[8] + integrate[9] + integrate[9]
	// Swing = Swing / 10
	FCV_INTEGRATE[FCV_INTEGRATE_COUNT] = flt_toi(FCV_ERROR_AVERAGE);
	FCV_SWING = FCV_INTEGRATE[0] + FCV_INTEGRATE[1] + FCV_INTEGRATE[2] + FCV_INTEGRATE[3] + FCV_INTEGRATE[4] + FCV_INTEGRATE[5] + FCV_INTEGRATE[6] + FCV_INTEGRATE[7] + FCV_INTEGRATE[8] + FCV_INTEGRATE[9] + FCV_INTEGRATE[9];
	FCV_SWING = FCV_SWING / 10;

	// Name: Decision, Type: Decision: Integrate_count = 2?
	if (FCV_INTEGRATE_COUNT == 2)
	{

		// Name: Decision, Type: Decision: Swing > integrate_Result?
		if (FCV_SWING > FCV_INTEGRATE_RESULT)
		{

			// Name: Calculation, Type: Calculation:
			// Integrate_Result = Integrate_Result + 1
			FCV_INTEGRATE_RESULT = FCV_INTEGRATE_RESULT + 1;

		// } else {

		}

		// Name: Decision, Type: Decision: Swing < Integrate_Result?
		if (FCV_SWING < FCV_INTEGRATE_RESULT)
		{

			// Name: Calculation, Type: Calculation:
			// Integrate_Result = Integrate_Result - 1
			FCV_INTEGRATE_RESULT = FCV_INTEGRATE_RESULT - 1;

		// } else {

		}

		// Name: Calculation, Type: Calculation:
		// Integrate_count = 0
		FCV_INTEGRATE_COUNT = 0;

	} else {

		// Name: INcrement counter, Type: Calculation:
		// Integrate_count = Integrate_count + 1
		FCV_INTEGRATE_COUNT = FCV_INTEGRATE_COUNT + 1;

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	//Comment:
	//Get current RMS Values

	// Name: Get current, Type: Component Macro: Current_Instant=Current::GetInt()
	FCV_CURRENT_INSTANT = FCD_04751_Current__GetInt();

	// Name: Replacement  opamp, Type: Calculation:
	// Current_Instant = (Current_Instant - 1474) * 2
	FCV_CURRENT_INSTANT = (FCV_CURRENT_INSTANT - 1474) * 2;

	// Name: Add next read, Type: Calculation:
	// Current_Accumulator = Current_accumulator + Current_Instant
	// RMS_Count = RMS_count + 1
	// Current_Beep_count = Current_Beep_count + 1
	// Current_beep_Average = Current_beep_Average + Current_Instant
	FCV_CURRENT_ACCUMULATOR = FCV_CURRENT_ACCUMULATOR + FCV_CURRENT_INSTANT;
	FCV_RMS_COUNT = FCV_RMS_COUNT + 1;
	FCV_CURRENT_BEEP_COUNT = FCV_CURRENT_BEEP_COUNT + 1;
	FCV_CURRENT_BEEP_AVERAGE = FCV_CURRENT_BEEP_AVERAGE + FCV_CURRENT_INSTANT;

	// Name: Decision, Type: Decision: Beep_Is_on = 1?
	if (FCV_BEEP_IS_ON == 1)
	{

		// Name: Calculation, Type: Calculation:
		// beep_count = beep_count + 1
		FCV_BEEP_COUNT = FCV_BEEP_COUNT + 1;

		// Name: Decision, Type: Decision: beep_count > 5?
		if (FCV_BEEP_COUNT > 5)
		{

			// Name: Output, Type: Output: 0 -> A6
			SET_PORT_PIN(A,6,(0));

			// Name: Calculation, Type: Calculation:
			// beep_count = 0
			FCV_BEEP_COUNT = 0;

		// } else {

		}

	// } else {

	}

	// Name: Decision, Type: Decision: Current_Beep_count > 30?
	if (FCV_CURRENT_BEEP_COUNT > 30)
	{

		// Name: Calculation, Type: Calculation:
		// Current_beep_Average = Current_beep_Average / 30
		FCV_CURRENT_BEEP_AVERAGE = FCV_CURRENT_BEEP_AVERAGE / 30;

		// Name: Decision, Type: Decision: hi = 1?
		if (FCV_HI == 1)
		{

			// Name: Decision, Type: Decision: Current_beep_Average > Current_limit_high?
			if (FCV_CURRENT_BEEP_AVERAGE > FCV_CURRENT_LIMIT_HIGH)
			{

				// Name: Calculation, Type: Calculation:
				// OK_to_beep = 1
				FCV_OK_TO_BEEP = 1;

			} else {

				// Name: Calculation, Type: Calculation:
				// OK_to_beep = 0
				FCV_OK_TO_BEEP = 0;

			}

		} else {

			// Name: Decision, Type: Decision: Current_beep_Average > Current_limit_low?
			if (FCV_CURRENT_BEEP_AVERAGE > FCV_CURRENT_LIMIT_LOW)
			{

				// Name: Calculation, Type: Calculation:
				// OK_to_beep = 1
				FCV_OK_TO_BEEP = 1;

			} else {

				// Name: Calculation, Type: Calculation:
				// OK_to_beep = 0
				FCV_OK_TO_BEEP = 0;

			}

		}

		// Name: Calculation, Type: Calculation:
		// Current_Beep_count = 0
		// //Current_beep_Average = Current_Instant
		FCV_CURRENT_BEEP_COUNT = 0;

	// } else {

	}

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: 1 minute passed? Too much current?, Type: Decision: RMS_Count > 1831?
	if (FCV_RMS_COUNT > 1831)
	{

		// Name: Calculation, Type: Calculation:
		// RMS_Count = 0
		// Current_RMS = Current_Accumulator / 1831
		// Current_Accumulator = 0
		FCV_RMS_COUNT = 0;
		FCV_CURRENT_RMS = FCV_CURRENT_ACCUMULATOR / 1831;
		FCV_CURRENT_ACCUMULATOR = 0;

	// } else {

	}

	// Name: Decision, Type: Decision: hi = 1?
	if (FCV_HI == 1)
	{

		// Name: Calculation, Type: Calculation:
		// Current_limit = Current_limit_high
		FCV_CURRENT_LIMIT = FCV_CURRENT_LIMIT_HIGH;

	} else {

		// Name: Calculation, Type: Calculation:
		// Current_limit = Current_limit_low
		FCV_CURRENT_LIMIT = FCV_CURRENT_LIMIT_LOW;

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Read_Velocity()
{

	// Name: PWM_stop is active?, Type: Decision: PWM_Clock > 1?
	if (FCV_PWM_CLOCK > 1)
	{

		// Name: Calculation, Type: Calculation:
		// PWM_Clock = 0
		FCV_PWM_CLOCK = 0;

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Disable()
		FCD_0df41_PWM1DRIVE__Disable();

		// Name: Disable PWM Drive Bit, Type: Output: 1 -> C1
		SET_PORT_PIN(C,1,(1));

		// Name: EMF to settle. Creates small click at zero velocity high torque, Type: Delay: 60 us
		FCI_DELAYBYTE_US(60);

		// Name: Enable Read, Type: Output: 0 -> C0
		SET_PORT_PIN(C,0,(0));

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		//Comment:
		//Assure Large Numbers are elliminated

		// Name: Get KE value from Motor, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
		FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

		//Comment:
		//Assure Large Numbers are elliminated

		// Name: Normalize speed numbers, Type: Calculation:
		// Velocity_Float = Velocity_Float * Velocity_Gain
		FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Disable Read, Type: Output: 1 -> C0
		SET_PORT_PIN(C,0,(1));

		// Name: Calculation, Type: Calculation:
		// ramp_store = Ramp
		// //Ramp = 0
		FCV_RAMP_STORE = FCV_RAMP;

		// Name: Re-Enable PWM, Type: Output: 0 -> C1
		SET_PORT_PIN(C,1,(0));

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
		FCD_0df41_PWM1DRIVE__Enable();

	} else {

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Calculation, Type: Calculation:
		// PWM_Clock = PWM_Clock + 1
		FCV_PWM_CLOCK = FCV_PWM_CLOCK + 1;

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sets motor feedback number for 150 RPM by adjusting vmax gain. Also, gets ambient temperature stored so that vmax can be slightly adjusted for winding temperature changes
\*=----------------------------------------------------------------------=*/
void FCM_Calibrate_Motor_Vmax()
{

	// Name: Get vmax gain eprom location 11, Type: Component Macro: temp_byte=eeprom1::Read(11)
	FCV_TEMP_BYTE = FCD_06651_eeprom1__Read(11);

	// Name: Read Analog current motor temperature float, Type: Component Macro: Motor_temp_calibrate=Motor_Temp_Comp::GetInt()
	FCV_MOTOR_TEMP_CALIBRATE = flt_fromi(FCD_03522_Motor_Temp_Comp__GetInt());

	// Name: Calculation, Type: Calculation:
	// Motor_temp_calibrate = Motor_temp_calibrate / 6
	FCV_MOTOR_TEMP_CALIBRATE = flt_div(FCV_MOTOR_TEMP_CALIBRATE, 6);

	// Name: Write motor temp to eprom location 12, Type: Component Macro: eeprom1::Write(12, Motor_temp_calibrate)
	FCD_06651_eeprom1__Write(12, flt_toi(FCV_MOTOR_TEMP_CALIBRATE));

	// Name: Convert motor temperature to degrees c, Type: Calculation:
	// Motor_temp_calibrate = (Motor_temp_calibrate - 65) * .72 //gets degrees c.
	FCV_MOTOR_TEMP_CALIBRATE = flt_mul((flt_sub(FCV_MOTOR_TEMP_CALIBRATE, 65)), .72);

	// Name: If not already set then fix at 150 RPM, Type: Decision: temp_byte > 240?
	if (FCV_TEMP_BYTE > 240)
	{

	} else {

		// Name: Call Component Macro, Type: Component Macro: vmax_gain=eeprom1::Read(11)
		FCV_VMAX_GAIN = flt_fromi(FCD_06651_eeprom1__Read(11));

		// Name: Calculation, Type: Calculation:
		// vmax_gain = vmax_gain / 100
		// Ramp = 0
		FCV_VMAX_GAIN = flt_div(FCV_VMAX_GAIN, 100);
		FCV_RAMP = 0;

	}

	// Name: Calculation, Type: Calculation:
	// vmax = Cal_200
	// //200 RPM
	// Ramp = 0
	FCV_VMAX = FCV_CAL_200;
	FCV_RAMP = 0;

	// Name: Calculation, Type: Calculation:
	// vmax = vmax * vmax_gain
	// vmax = (vmax * 33) / 100
	// //vmax = (vmax * 66) / 100
	FCV_VMAX = flt_toi(flt_mul(flt_fromi(FCV_VMAX), FCV_VMAX_GAIN));
	FCV_VMAX = (FCV_VMAX * 33) / 100;

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x00
	// display_string = "TAC = 200 RPM"
	FCV_DISPLAY_POSITION = 0x00;
	FCI_SCOPY("TAC = 200 RPM",14, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Loop, Type: Loop: While Program_button = 0
	while (FCV_PROGRAM_BUTTON == 0)
	{

#if 0 // Disabled code
		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// display_string = "adjust for 150 RPM"
		FCV_DISPLAY_POSITION = 0x00;
		FCI_SCOPY("adjust for 150 RPM",19, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

#endif // Disabled code


	}

	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
	FCD_0df41_PWM1DRIVE__Enable();

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::Enable()
	/* Error: Unknown or missing component : QuadEncoder1::Enable */;

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::ResetCounter()
	/* Error: Unknown or missing component : QuadEncoder1::ResetCounter */;

	// Name: Turn current formulas off, Type: Calculation:
	// Current_read_off = 0
	FCV_CURRENT_READ_OFF = 0;

	// Name: Wait for pedal, Type: Loop: While Foot_Pedal = 1
	while (FCV_FOOT_PEDAL == 1)
	{

		// Name: Get foot switch status, Type: Input: B7 -> Foot_Pedal
		FCV_FOOT_PEDAL = GET_PORT_PIN(B,7);


	}

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Read and Display, Type: User Macro: Read_Speed()
		FCM_Read_Speed();

		// Name: Call Macro, Type: User Macro: Profile()
		FCM_Profile();

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(float2int(Profile_Float))
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(flt_toi(FCV_PROFILE_FLOAT));

		// Name: Call Component Macro, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Call Component Macro, Type: Component Macro: Encoder_counter=QuadEncoder1::ReadCounter()
		/* Error: Unknown or missing component : QuadEncoder1::ReadCounter */;

		// Name: Calculation, Type: Calculation:
		// display_position = 0x56
		// Temp_Float1 = encoder_counter / 4
		// Temp_float1 = temp_float1 / 100
		// vmax_gain = vmax_store + temp_float1
		// float_value = vmax_gain //Write value
		FCV_DISPLAY_POSITION = 0x56;
		FCV_TEMP_FLOAT1 = flt_fromi(FCV_ENCODER_COUNTER / 4);
		FCV_TEMP_FLOAT1 = flt_div(FCV_TEMP_FLOAT1, 100);
		FCV_VMAX_GAIN = flt_add(FCV_VMAX_STORE, FCV_TEMP_FLOAT1);
		FCV_FLOAT_VALUE = FCV_VMAX_GAIN;

		// Name: Adjustmet value for 200 RPM, Type: Calculation:
		// vmax = Cal_200 * vmax_gain
		// float_value = vmax_gain
		// var5 = var5 + 1
		FCV_VMAX = flt_toi(flt_mul(FCV_CAL_200, FCV_VMAX_GAIN));
		FCV_FLOAT_VALUE = FCV_VMAX_GAIN;
		FCV_VAR5 = FCV_VAR5 + 1;

		// Name: Decision, Type: Decision: var5 > 50?
		if (FCV_VAR5 > 50)
		{

			// Name: Call Macro, Type: User Macro: Write_display_float()
			FCM_Write_display_float();

			// Name: Calculation, Type: Calculation:
			// var5 = 0
			FCV_VAR5 = 0;

			// Name: Display Speed feedback in approx RPM, Type: Calculation:
			// Display_position = 0x62
			// float_value = velocity_float / 2
			FCV_DISPLAY_POSITION = 0x62;
			FCV_FLOAT_VALUE = flt_div(FCV_VELOCITY_FLOAT, 2);

			// Name: Call Macro, Type: User Macro: Write_display_float()
			FCM_Write_display_float();

		// } else {

		}


	}

	// Name: Ramp to zero current formulas back on, Type: Calculation:
	// ramp = 0
	// Current_read_off = 1
	FCV_RAMP = 0;
	FCV_CURRENT_READ_OFF = 1;

	// Name: Vmax gain, Type: Component Macro: eeprom1::Write(11, vmax_gain*100)
	FCD_06651_eeprom1__Write(11, flt_toi(flt_mul(FCV_VMAX_GAIN, 100)));

	// Name: Call Component Macro, Type: Component Macro: vmax_gain=eeprom1::Read(11)
	FCV_VMAX_GAIN = flt_fromi(FCD_06651_eeprom1__Read(11));

	// Name: Calculation, Type: Calculation:
	// vmax_gain = vmax_gain / 100
	FCV_VMAX_GAIN = flt_div(FCV_VMAX_GAIN, 100);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Display_hours()
{

	//Comment:
	//First get eeprom values

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Call Component Macro, Type: Component Macro: x1=eeprom1::Read(15)
	FCV_X1 = FCD_06651_eeprom1__Read(15);

	// Name: Call Component Macro, Type: Component Macro: X256=eeprom1::Read(16)
	FCV_X256 = FCD_06651_eeprom1__Read(16);

	// Name: Call Component Macro, Type: Component Macro: x65536=eeprom1::Read(17)
	FCV_X65536 = FCD_06651_eeprom1__Read(17);

	// Name: Call Component Macro, Type: Component Macro: x16777216=eeprom1::Read(18)
	FCV_X16777216 = FCD_06651_eeprom1__Read(18);

	// Name: Calculation, Type: Calculation:
	// result_float = x1 + (x256 * 255) + (x65536 * 65536) + (x16777216 * 16777215)
	// display_position = 0x00
	// float_value = result_float / 3600
	FCV_RESULT_FLOAT = flt_fromi(FCV_X1 + (FCV_X256 * 255) + (FCV_X65536 * 65536) + (FCV_X16777216 * 16777215));
	FCV_DISPLAY_POSITION = 0x00;
	FCV_FLOAT_VALUE = flt_div(FCV_RESULT_FLOAT, 3600);

	// Name: Call Macro, Type: User Macro: Write_display_float()
	FCM_Write_display_float();

	// Name: Calculation, Type: Calculation:
	// Display_position = 0x07
	// display_string = "Motor Hours"
	FCV_DISPLAY_POSITION = 0x07;
	FCI_SCOPY("Motor Hours",12, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Macro, Type: User Macro: Display_Torques()
	FCM_Display_Torques();

	// Name: Delay, Type: Delay: 2 s
	FCI_DELAYBYTEWDT_S(2);

	// Name: Clear the Screen, Type: User Macro: CLS()
	FCM_CLS();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Motor_stop_Wait()
{

	// Name: Input, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Decision, Type: Decision: Forward_Reverse = fr?
	if (FCV_FORWARD_REVERSE == FCV_FR)
	{

	} else {

		// Name: Wait for motor to stop, Type: Loop: Until Velocity_Float < 10
		while (1)
		{

			// Name: Disable PWM, Type: Output: 1 -> C1
			SET_PORT_PIN(C,1,(1));

			// Name: BACK EMF Decay, Type: Delay: 5 ms
			FCI_DELAYBYTEWDT_MS(5);

			// Name: Enable Read, Type: Output: 0 -> C0
			SET_PORT_PIN(C,0,(0));

			// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
			FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());


			if ((flt_lt(FCV_VELOCITY_FLOAT, 10)) != 0) break;
		}

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Fast_velocity_read()
{

	// Name: Calculation, Type: Calculation:
	// PWM_Clock = 0
	FCV_PWM_CLOCK = 0;

	// Name: Disable PWM Drive, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Wait for Back EMF to settle, Type: Delay: 5 ms
	FCI_DELAYBYTEWDT_MS(5);

	// Name: Enable Read, Type: Output: 0 -> C0
	SET_PORT_PIN(C,0,(0));

	// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
	FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

	// Name: Normalize speed numbers, Type: Calculation:
	// Velocity_Float = Velocity_Float * Velocity_Gain
	FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

	// Name: Delay, Type: Delay: 1 ms
	FCI_DELAYBYTEWDT_MS(1);

	// Name: Disable Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Re-Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

}

/*=----------------------------------------------------------------------=*\
   Use :Gets diode temp and motor temp outside of run time to determine
       :vamx cahnge for motor temp change and
       :Cool down period if diode is too hot
\*=----------------------------------------------------------------------=*/
void FCM_Temperatures()
{

	// Name: Read Analog  at motor temperature zero to 1444, Type: Component Macro: Motor_temp=Motor_Temp_Comp::GetInt()
	FCV_MOTOR_TEMP = flt_fromi(FCD_03522_Motor_Temp_Comp__GetInt());

	// Name: Scale to degrees, Type: Calculation:
	// Motor_Temp_count = 0
	// Motor_temp = Motor_temp / 6
	// Motor_temp = (motor_temp - 65) * .72 //gets degrees c.
	FCV_MOTOR_TEMP_COUNT = 0;
	FCV_MOTOR_TEMP = flt_div(FCV_MOTOR_TEMP, 6);
	FCV_MOTOR_TEMP = flt_mul((flt_sub(FCV_MOTOR_TEMP, 65)), .72);

	//Comment:
	//Motor temp is compared to Calibrated 
	//temp and summed with the vmax to adjust
	//for temperature rise.
	//See proportional

	// Name: Delay, Type: Delay: 1 ms
	FCI_DELAYBYTEWDT_MS(1);

	// Name: Call Component Macro, Type: Component Macro: EMF_TEMP=Temperature::GetAverageInt(20, 4)
	FCV_EMF_TEMP = flt_fromi(FCD_03521_Temperature__GetAverageInt(20, 4));

#if 0 // Disabled code
	// Name: Scale to degrees, Type: Calculation:
	// Motor_Temp_count = 0
	// EMF_TEMP = EMF_TEMP / 6
	// EMF_TEMP = (EMF_TEMP - 65) * .72 //gets degrees c.
	FCV_MOTOR_TEMP_COUNT = 0;
	FCV_EMF_TEMP = flt_div(FCV_EMF_TEMP, 6);
	FCV_EMF_TEMP = flt_mul((flt_sub(FCV_EMF_TEMP, 65)), .72);

#endif // Disabled code

	// Name: Diode Temp Check 1200 = 1.5v or 100C, Type: Decision: EMF_TEMP > temp_limit?
	if (flt_gt(FCV_EMF_TEMP, flt_fromi(FCV_TEMP_LIMIT)))
	{

		// Name: Check multiple times, Type: Decision: temp_count > 500?
		if (FCV_TEMP_COUNT > 500)
		{

			// Name: Call Macro, Type: User Macro: CLS()
			FCM_CLS();

#if 0 // Disabled code
			// Name: Call Component Macro, Type: Component Macro: EMF_TEMP=Temperature::GetInt()
			FCV_EMF_TEMP = flt_fromi(FCD_03521_Temperature__GetInt());

#endif // Disabled code

			// Name: Display Variables for test, Type: Calculation:
			// display_position = 0x4e
			// display_value = EMF_TEMP
			FCV_DISPLAY_POSITION = 0x4e;
			FCV_DISPLAY_VALUE = flt_toi(FCV_EMF_TEMP);

			// Name: Display Variables for test, Type: Calculation:
			// display_position = 0x0e
			// display_value = EMF_TEMP
			// temp_count = 0
			FCV_DISPLAY_POSITION = 0x0e;
			FCV_DISPLAY_VALUE = flt_toi(FCV_EMF_TEMP);
			FCV_TEMP_COUNT = 0;

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();

			// Name: Call Component Macro, Type: Component Macro: Cool_Down_count=eeprom1::Read(10)
			FCV_COOL_DOWN_COUNT = FCD_06651_eeprom1__Read(10);

			// Name: Calculation, Type: Calculation:
			// Cool_Down_count = Cool_Down_count + 1
			FCV_COOL_DOWN_COUNT = FCV_COOL_DOWN_COUNT + 1;

			// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(10, Cool_Down_count)
			FCD_06651_eeprom1__Write(10, FCV_COOL_DOWN_COUNT);

			// Name: Disable PWM, Type: Output: 1 -> C1
			SET_PORT_PIN(C,1,(1));

			// Name: Calculation, Type: Calculation:
			// Display_position = 0x54
			// display_string = "Cool Down Period"
			// profile = 0
			// temp_count = 0
			FCV_DISPLAY_POSITION = 0x54;
			FCI_SCOPY("Cool Down Period",17, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
			FCV_PROFILE = 0;
			FCV_TEMP_COUNT = 0;

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

			// Name: Loop, Type: Loop: While EMF_TEMP > temp_limit
			while (1)
			{

				// Name: Call Component Macro, Type: Component Macro: EMF_TEMP=Temperature::GetInt()
				FCV_EMF_TEMP = flt_fromi(FCD_03521_Temperature__GetInt());

				// Name: Scale to degrees, Type: Calculation:
				// EMF_TEMP = EMF_TEMP / 6
				// EMF_TEMP = (EMF_TEMP - 65) * .72 //gets degrees c.
				FCV_EMF_TEMP = flt_div(FCV_EMF_TEMP, 6);
				FCV_EMF_TEMP = flt_mul((flt_sub(FCV_EMF_TEMP, 65)), .72);


				if ((flt_gt(FCV_EMF_TEMP, flt_fromi(FCV_TEMP_LIMIT))) == 0) break;
			}

			// Name: Calculation, Type: Calculation:
			// Temp_count = 15
			FCV_TEMP_COUNT = 15;

			// Name: Loop, Type: Loop: While temp_count > 0
			while (1)
			{

				// Name: Delay, Type: Delay: 1 s
				FCI_DELAYBYTEWDT_S(1);

				// Name: Calculation, Type: Calculation:
				// Display_position = 0x00
				// Display_Value = temp_count
				FCV_DISPLAY_POSITION = 0x00;
				FCV_DISPLAY_VALUE = FCV_TEMP_COUNT;

				// Name: Call Macro, Type: User Macro: Write_Display_Value()
				FCM_Write_Display_Value();

				// Name: Calculation, Type: Calculation:
				// temp_count = temp_count - 1
				// Beep_delay = 10
				FCV_TEMP_COUNT = FCV_TEMP_COUNT - 1;
				FCV_BEEP_DELAY = 10;

				// Name: Call Macro, Type: User Macro: BEEP()
				FCM_BEEP();


				if ((FCV_TEMP_COUNT > 0) == 0) break;
			}

			// Name: Clear Screen, Type: User Macro: CLS()
			FCM_CLS();

			// Name: Call Macro, Type: User Macro: Splash_Screen()
			FCM_Splash_Screen();

		} else {

			// Name: Calculation, Type: Calculation:
			// temp_count = temp_count + 1
			FCV_TEMP_COUNT = FCV_TEMP_COUNT + 1;

		}

	} else {

		// Name: Calculation, Type: Calculation:
		// temp_count = 0
		FCV_TEMP_COUNT = 0;

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Write_display_float()
{

	//Comment:
	//Useage - Arguments passed:
	//display_position dictates data placement area
	//[float_value] dictates written floating point number string text
	//Decimals = 3 dictates 3 places including point ie - 0.0 is 3 places

	// Name: Display Command Mode, Type: Component Macro: uart9600::SendChar(0xFE)
	FCD_047b1_uart9600__SendChar(0xFE);

	// Name: Ready to Set Cursor, Type: Component Macro: uart9600::SendChar(0x45)
	FCD_047b1_uart9600__SendChar(0x45);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Curser Position place, Type: Component Macro: uart9600::SendChar(display_position)
	FCD_047b1_uart9600__SendChar(FCV_DISPLAY_POSITION);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Calculation, Type: Calculation:
	// display_string = FloatToString$ (float_value)
	// display_string = left$ (display_string,decimals)
	FCI_FLOAT_TO_STRING(FCV_FLOAT_VALUE, FCV_PRECISION, FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING);
	FCI_LEFTSTRING(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING, FCV_DECIMALS, FCV_DISPLAY_STRING,20);

	// Name: Send display string, Type: Component Macro: uart9600::SendString(display_string)
	FCD_047b1_uart9600__SendString(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Clear the right side of the value, Type: Component Macro: uart9600::SendChar("  ")
	FCD_047b1_uart9600__SendChar(' ');
	FCD_047b1_uart9600__SendChar(' ');

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_BEEP_ENABLE()
{

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Calculation, Type: Calculation:
	// Display_position = 00
	// display_string = "beep enable?"
	FCV_DISPLAY_POSITION = 00;
	FCI_SCOPY("beep enable?",13, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Decision, Type: Decision: Program_button = 0?
	if (FCV_PROGRAM_BUTTON == 0)
	{

		// Name: Loop, Type: Loop: While Program_button = 0
		while (FCV_PROGRAM_BUTTON == 0)
		{


		}

	// } else {

	}

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Calculation, Type: Calculation:
		// toggle = toggle XOR (1)
		FCV_TOGGLE = FCV_TOGGLE ^ (1);

		// Name: Decision, Type: Decision: toggle = 1?
		if (FCV_TOGGLE == 1)
		{

			// Name: Calculation, Type: Calculation:
			// Display_position = 14
			// display_string = "yes"
			FCV_DISPLAY_POSITION = 14;
			FCI_SCOPY("yes",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		} else {

			// Name: Calculation, Type: Calculation:
			// Display_position = 14
			// display_string = "no "
			FCV_DISPLAY_POSITION = 14;
			FCI_SCOPY("no ",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		}

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Delay, Type: Delay: 1 s
		FCI_DELAYBYTEWDT_S(1);


	}

	// Name: Write enable value, Type: Component Macro: eeprom1::Write(14, toggle)
	FCD_06651_eeprom1__Write(14, FCV_TOGGLE);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Factory_setup_mode()
{

#if 0 // Disabled code
	// Name: Get switch status, Type: Input: C5 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(C,5);

#endif // Disabled code

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Decision, Type: Decision: Forward_Reverse = 1?
	if (FCV_FORWARD_REVERSE == 1)
	{

		// Name: Relay Pulse, Type: Output: 1 -> A5
		SET_PORT_PIN(A,5,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Relay Pulse, Type: Output: 0 -> A5
		SET_PORT_PIN(A,5,(0));

		// Name: Calculation, Type: Calculation:
		// FR = 1
		FCV_FR = 1;

	} else {

		// Name: Relay Pulse, Type: Output: 1 -> A4
		SET_PORT_PIN(A,4,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Relay Pulse, Type: Output: 0 -> A4
		SET_PORT_PIN(A,4,(0));

		// Name: Calculation, Type: Calculation:
		// fr = 0
		FCV_FR = 0;

	}

	// Name: Call Macro, Type: User Macro: Calibrate_Motor_Vmax()
	FCM_Calibrate_Motor_Vmax();

	// Name: Calculation, Type: Calculation:
	// display_string = "Eprom Default ok"
	// display_position = 0x00
	FCI_SCOPY("Eprom Default ok",17, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x00;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Delay, Type: Delay: 700 ms
	FCI_DELAYINTWDT_MS(700);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Delay, Type: Delay: 15 ms
	FCI_DELAYBYTEWDT_MS(15);

	// Name: Clear PWM output?, Type: Output: 0 -> C2
	SET_PORT_PIN(C,2,(0));

	// Name: Calculation, Type: Calculation:
	// Command_Speed = 200
	// test_count = 0
	FCV_COMMAND_SPEED = 200;
	FCV_TEST_COUNT = 0;

	// Name: Call Macro, Type: User Macro: Eprom_Defaults()
	FCM_Eprom_Defaults();

	// Name: Sets default cool down count to zero, Type: Component Macro: Cool_Down_count=eeprom1::Read(10)
	FCV_COOL_DOWN_COUNT = FCD_06651_eeprom1__Read(10);

	// Name: Calculation, Type: Calculation:


	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: 50 minutes, Type: Loop: Loop  1000 times
	for (FCLV_LOOP2=0; (FCLV_LOOP2)<(1000); (FCLV_LOOP2)++)
	{

		// Name: Display Run Mode AND RPM Value (space), Type: Calculation:
		// Display_String = "TESTING      RPM"
		// display_position = 0x54
		// Command_Speed = Command_Speed * 2
		FCI_SCOPY("TESTING      RPM",17, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
		FCV_DISPLAY_POSITION = 0x54;
		FCV_COMMAND_SPEED = FCV_COMMAND_SPEED * 2;

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Calculation, Type: Calculation:
		// Display_Value = Command_Speed / 2
		// Display_position = 0x5c
		FCV_DISPLAY_VALUE = FCV_COMMAND_SPEED / 2;
		FCV_DISPLAY_POSITION = 0x5c;

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();

		// Name: Decision, Type: Decision: mult = 0?
		if (FCV_MULT == 0)
		{

			// Name: Calculation, Type: Calculation:
			// Display_Value = PU_units
			FCV_DISPLAY_VALUE = FCV_PU_UNITS;

		} else {

			// Name: Calculation, Type: Calculation:
			// Display_Value = pu_units * mult_Units
			FCV_DISPLAY_VALUE = FCV_PU_UNITS * FCV_MULT_UNITS;

		}

		//Comment:
		//****************************

		// Name: Calculation, Type: Calculation:
		// pwm = 0
		// ramp = 0
		FCV_PWM = 0;
		FCV_RAMP = 0;

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
		FCD_0df41_PWM1DRIVE__Enable();

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Disable()
		FCD_0df41_PWM1DRIVE__Disable();

		// Name: Wait for motor to stop, Type: Loop: While var2 > 2
		while (1)
		{

			// Name: Call Component Macro, Type: Component Macro: Temp_float=Temperature::GetInt()
			FCV_TEMP_FLOAT = flt_fromi(FCD_03521_Temperature__GetInt());

			// Name: Calculation, Type: Calculation:
			// temp_float = (temp_float - 409.6) / 8.7 //centigrade
			// temp_float_f = (temp_float * 1.8) + 32
			FCV_TEMP_FLOAT = flt_div((flt_sub(FCV_TEMP_FLOAT, 409.6)), 8.7);
			FCV_TEMP_FLOAT_F = flt_add((flt_mul(FCV_TEMP_FLOAT, 1.8)), 32);

			// Name: Decision, Type: Decision: temp > temp_limit?
			if (FCV_TEMP > FCV_TEMP_LIMIT)
			{

				// Name: Calculation, Type: Calculation:
				// display_position = 0x14
				// display_string = "temp HI"
				FCV_DISPLAY_POSITION = 0x14;
				FCI_SCOPY("temp HI",8, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

			} else {

				// Name: Calculation, Type: Calculation:
				// display_position = 0x14
				// display_string = "temp      c "
				FCV_DISPLAY_POSITION = 0x14;
				FCI_SCOPY("temp      c ",13, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

			}

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

			// Name: Calculation, Type: Calculation:
			// display_position = 0x1c
			// Display_Value = temp_float
			FCV_DISPLAY_POSITION = 0x1c;
			FCV_DISPLAY_VALUE = flt_toi(FCV_TEMP_FLOAT);

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();

			// Name: Calculation, Type: Calculation:
			// display_position = 0x21
			// Display_Value = Temp_float_F
			FCV_DISPLAY_POSITION = 0x21;
			FCV_DISPLAY_VALUE = flt_toi(FCV_TEMP_FLOAT_F);

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();

			// Name: Calculation, Type: Calculation:
			// display_string = "f"
			// display_position = 0x24
			FCI_SCOPY("f",2, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
			FCV_DISPLAY_POSITION = 0x24;

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

			// Name: Call Component Macro, Type: Component Macro: var2=Velocity_Feedback::GetAverageInt(100, 100)
			FCV_VAR2 = FCD_0d101_Velocity_Feedback__GetAverageInt(100, 100);

			// Name: Delay, Type: Delay: 100 ms
			FCI_DELAYBYTEWDT_MS(100);

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Calculation, Type: Calculation:
			// display_position = 0x40
			// display_string = "Velocity"
			FCV_DISPLAY_POSITION = 0x40;
			FCI_SCOPY("Velocity",9, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

			// Name: Calculation, Type: Calculation:
			// display_position = 0x49
			// Display_Value = var2
			FCV_DISPLAY_POSITION = 0x49;
			FCV_DISPLAY_VALUE = FCV_VAR2;

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();


			if ((FCV_VAR2 > 2) == 0) break;
		}

		// Name: Call Macro, Type: User Macro: Read_Velocity()
		FCM_Read_Velocity();

		// Name: Decision, Type: Decision: Velocity_Float < 10?
		if (flt_lt(FCV_VELOCITY_FLOAT, 10))
		{

		} else {

			// Name: Delay, Type: Delay: 5 s
			FCI_DELAYBYTEWDT_S(5);

		}

		// Name: Calculation, Type: Calculation:
		// beep_delay = 100
		FCV_BEEP_DELAY = 100;

		// Name: Decision, Type: Decision: test_direction = 1?
		if (FCV_TEST_DIRECTION == 1)
		{

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Delay, Type: Delay: 750 ms
			FCI_DELAYINTWDT_MS(750);

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Calculation, Type: Calculation:
			// test_direction = 0
			FCV_TEST_DIRECTION = 0;

			// Name: Relay Pulse, Type: Output: 1 -> A5
			SET_PORT_PIN(A,5,(1));

			// Name: Delay, Type: Delay: 50 ms
			FCI_DELAYBYTEWDT_MS(50);

			// Name: Relay Pulse, Type: Output: 0 -> A5
			SET_PORT_PIN(A,5,(0));

			// Name: Calculation, Type: Calculation:
			// FR = 1
			FCV_FR = 1;

		} else {

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Delay, Type: Delay: 200 ms
			FCI_DELAYBYTEWDT_MS(200);

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Delay, Type: Delay: 200 ms
			FCI_DELAYBYTEWDT_MS(200);

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: Calculation, Type: Calculation:
			// test_direction = 1
			FCV_TEST_DIRECTION = 1;

			// Name: Relay Pulse, Type: Output: 1 -> A4
			SET_PORT_PIN(A,4,(1));

			// Name: Delay, Type: Delay: 50 ms
			FCI_DELAYBYTEWDT_MS(50);

			// Name: Relay Pulse, Type: Output: 0 -> A4
			SET_PORT_PIN(A,4,(0));

			// Name: Calculation, Type: Calculation:
			// FR = 0
			FCV_FR = 0;

		}

		// Name: Delay, Type: Delay: 100 ms
		FCI_DELAYBYTEWDT_MS(100);

		// Name: Loop, Type: Loop: Loop  2000 times
		for (FCLV_LOOP3=0; (FCLV_LOOP3)<(2000); (FCLV_LOOP3)++)
		{

			// Name: Decision, Type: Decision: Program_button = 0?
			if (FCV_PROGRAM_BUTTON == 0)
			{

				// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
				FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

				// Name: Delay, Type: Delay: 10 ms
				FCI_DELAYBYTEWDT_MS(10);

				// Name: Goto Connection Point, Type: Goto Connection Point: [C]: C
				goto FCC_Factory_setup_mode_C;

			// } else {

			}

			// Name: Call Macro, Type: User Macro: Read_Velocity()
			FCM_Read_Velocity();

			// Name: Calculation, Type: Calculation:
			// display_position = 0x49
			// Display_Value = Velocity_Float
			FCV_DISPLAY_POSITION = 0x49;
			FCV_DISPLAY_VALUE = flt_toi(FCV_VELOCITY_FLOAT);

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();

			// Name: Delay, Type: Delay: 10 ms
			FCI_DELAYBYTEWDT_MS(10);

			// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
			FCD_0df41_PWM1DRIVE__Enable();

			// Name: rAMP UP, Type: Calculation:
			// ramp = Ramp + 1
			FCV_RAMP = FCV_RAMP + 1;

			// Name: Decision, Type: Decision: Ramp > Command_Speed?
			if (FCV_RAMP > FCV_COMMAND_SPEED)
			{

				// Name: Calculation, Type: Calculation:
				// Ramp = Command_Speed
				FCV_RAMP = FCV_COMMAND_SPEED;

			// } else {

			}

			//Comment:
			//Test without current manipulation

			// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(ramp)
			FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(FCV_RAMP);


		}

		// Name: Connection Point, Type: Declare Connection Point: [A]: A
	FCC_Factory_setup_mode_A:
		;

		// Name: Calculation, Type: Calculation:
		// ramp = ramp - 1
		FCV_RAMP = FCV_RAMP - 1;

		// Name: Delay, Type: Delay: 6 ms
		FCI_DELAYBYTEWDT_MS(6);

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(ramp)
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(FCV_RAMP);

		// Name: Decision, Type: Decision: ramp > 10?
		if (FCV_RAMP > 10)
		{

			// Name: Goto Connection Point, Type: Goto Connection Point: [A]: A
			goto FCC_Factory_setup_mode_A;

		// } else {

		}

		// Name: Calculation, Type: Calculation:
		// Command_Speed = 200
		FCV_COMMAND_SPEED = 200;

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Disable()
		FCD_0df41_PWM1DRIVE__Disable();

		// Name: Calculation, Type: Calculation:
		// test_count = test_count + 1
		// display_position = 0x0b
		// Display_Value = Test_count
		FCV_TEST_COUNT = FCV_TEST_COUNT + 1;
		FCV_DISPLAY_POSITION = 0x0b;
		FCV_DISPLAY_VALUE = FCV_TEST_COUNT;

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// display_string = "Test Count"
		FCV_DISPLAY_POSITION = 0x00;
		FCI_SCOPY("Test Count",11, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();


	}

	// Name: Calculation, Type: Calculation:
	// Command_Speed = 100
	FCV_COMMAND_SPEED = 100;

	// Name: Calculation, Type: Calculation:
	// display_position = 0x59
	// display_string = "Test Complete"
	FCV_DISPLAY_POSITION = 0x59;
	FCI_SCOPY("Test Complete",14, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// count2 = 10
	FCV_COUNT2 = 10;

	// Name: Connection Point, Type: Declare Connection Point: [B]: B
FCC_Factory_setup_mode_B:
	;

	// Name: Decision, Type: Decision: count2 > 0?
	if (FCV_COUNT2 > 0)
	{

		// Name: Calculation, Type: Calculation:
		// count2 = count2 - 1
		FCV_COUNT2 = FCV_COUNT2 - 1;

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

#if 0 // Disabled code
		// Name: Output, Type: Output: 1 -> A2
		SET_PORT_PIN(A,2,(1));

#endif // Disabled code

		// Name: Beeper On, Type: Output: 1 -> A6
		SET_PORT_PIN(A,6,(1));

		// Name: Delay, Type: Delay: 500 ms
		FCI_DELAYINTWDT_MS(500);

		// Name: Beeper On, Type: Output: 1 -> A6
		SET_PORT_PIN(A,6,(1));

		// Name: Delay, Type: Delay: 500 ms
		FCI_DELAYINTWDT_MS(500);

		// Name: Goto Connection Point, Type: Goto Connection Point: [B]: B
		goto FCC_Factory_setup_mode_B;

	// } else {

	}

	// Name: Connection Point, Type: Declare Connection Point: [C]: C
FCC_Factory_setup_mode_C:
	;

	// Name: Call Macro, Type: User Macro: Read_Velocity()
	FCM_Read_Velocity();

	// Name: Decision, Type: Decision: Velocity_Float < 10?
	if (flt_lt(FCV_VELOCITY_FLOAT, 10))
	{

	} else {

		// Name: Wait for motor to wind down, Type: Delay: 5 s
		FCI_DELAYBYTEWDT_S(5);

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_BEEP()
{

	// Name: Calculation, Type: Calculation:
	// count = count + 1
	FCV_COUNT = FCV_COUNT + 1;

	// Name: Output, Type: Output: 1 -> A6
	SET_PORT_PIN(A,6,(1));

	// Name: Delay, Type: Delay: beep_delay ms
	FCI_DELAYBYTEWDT_MS(FCV_BEEP_DELAY);

	// Name: Output, Type: Output: 0 -> A6
	SET_PORT_PIN(A,6,(0));

	// Name: Calculation, Type: Calculation:
	// count = 0
	FCV_COUNT = 0;

	// Name: Decision, Type: Decision: count > 5?
	if (FCV_COUNT > 5)
	{

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Used for testing only and displayin speed
\*=----------------------------------------------------------------------=*/
void FCM_Read_Speed()
{

	// Name: Disable PWM Drive, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: EMF to settle. Creates small click at zero velocity high torque, Type: Delay: 3 ms
	FCI_DELAYBYTEWDT_MS(3);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Enable Read, Type: Output: 0 -> C0
	SET_PORT_PIN(C,0,(0));

	// Name: Wait for read to settle, Type: Delay: 500 us
	FCI_DELAYINT_US(500);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Get KE value from Motor, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
	FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

	// Name: Disable Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Normalize speed numbers, Type: Calculation:
	// Velocity_Float = Velocity_Float * Velocity_Gain
	FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

	// Name: Calculation, Type: Calculation:
	// ramp_store = Ramp
	// //Ramp = 0
	FCV_RAMP_STORE = FCV_RAMP;

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Re-Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// Display_position = 0x40
	// display_string = "Vel x gain"
	FCV_DISPLAY_POSITION = 0x40;
	FCI_SCOPY("Vel x gain",11, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

#endif // Disabled code

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// Display_position = 0x4b
	// Display_Value = Velocity_Float * Velocity_Gain
	FCV_DISPLAY_POSITION = 0x4b;
	FCV_DISPLAY_VALUE = flt_toi(flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN));

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

#endif // Disabled code

#if 0 // Disabled code
	// Name: Display, Type: Calculation:
	// display_position = 0x15
	// display_string = "VMAX"
	FCV_DISPLAY_POSITION = 0x15;
	FCI_SCOPY("VMAX",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

#endif // Disabled code

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// display_position = 0x22
	// Display_Value = VMAX
	FCV_DISPLAY_POSITION = 0x22;
	FCV_DISPLAY_VALUE = FCV_VMAX;

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

#endif // Disabled code

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_disp_vel_error()
{

	// Name: Calculation, Type: Calculation:
	// display_position = 0x21
	// display_string = "Er"
	FCV_DISPLAY_POSITION = 0x21;
	FCI_SCOPY("Er",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x23
	// Display_Value = Error_Average
	FCV_DISPLAY_POSITION = 0x23;
	FCV_DISPLAY_VALUE = flt_toi(FCV_ERROR_AVERAGE);

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x62
	// display_string = "Ve"
	FCV_DISPLAY_POSITION = 0x62;
	FCI_SCOPY("Ve",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x64
	// Display_Value = Velocity_Float
	FCV_DISPLAY_POSITION = 0x64;
	FCV_DISPLAY_VALUE = flt_toi(FCV_VELOCITY_FLOAT);

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x0d
	// display_string = "Ra"
	FCV_DISPLAY_POSITION = 0x0d;
	FCI_SCOPY("Ra",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x10
	// Display_Value = Ramp
	FCV_DISPLAY_POSITION = 0x10;
	FCV_DISPLAY_VALUE = FCV_RAMP;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x00
	// display_string = "Pr"
	FCV_DISPLAY_POSITION = 0x00;
	FCI_SCOPY("Pr",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x02
	// Display_Value = Profile_Float
	FCV_DISPLAY_POSITION = 0x02;
	FCV_DISPLAY_VALUE = flt_toi(FCV_PROFILE_FLOAT);

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Display_State()
{
	//Local variable definitions
	MX_UINT8 FCL_POSITION;
	MX_UINT8 FCL_VALUE;


	// Name: Calculation, Type: Calculation:
	// display_Position = 0x4c
	// display_value = state
	FCV_DISPLAY_POSITION = 0x4c;
	FCV_DISPLAY_VALUE = FCV_STATE;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

}

/*=----------------------------------------------------------------------=*\
   Use :Variable "Clear_position" has the beginning place for clear. "clear_places" is number of places to clear.
\*=----------------------------------------------------------------------=*/
void FCM_Clear_text()
{

	// Name: Prefix, Type: Component Macro: uart9600::SendChar(prefix)
	FCD_047b1_uart9600__SendChar(FCV_PREFIX);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Set Curser command, Type: Component Macro: uart9600::SendChar(Set_Curser)
	FCD_047b1_uart9600__SendChar(FCV_SET_CURSER);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Get Curser to position "clear", Type: Component Macro: uart9600::SendChar(Clear_position)
	FCD_047b1_uart9600__SendChar(FCV_CLEAR_POSITION);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Loop, Type: Loop: Until clear_places = 0
	while (1)
	{

		// Name: So we can see it wipe., Type: Delay: 120 ms
		FCI_DELAYBYTEWDT_MS(120);

		// Name: Calculation, Type: Calculation:
		// display_string = " "
		FCI_SCOPY(" ",2, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Component Macro, Type: Component Macro: uart9600::SendString(display_string)
		FCD_047b1_uart9600__SendString(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING);

		// Name: Delay, Type: Delay: 100 us
		FCI_DELAYBYTE_US(100);

		// Name: Calculation, Type: Calculation:
		// Clear_Places = Clear_Places - 1
		FCV_CLEAR_PLACES = FCV_CLEAR_PLACES - 1;

		// Name: Delay, Type: Delay: 2 ms
		FCI_DELAYBYTEWDT_MS(2);


		if ((FCV_CLEAR_PLACES == 0) != 0) break;
	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Raw_PWM()
{

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Output, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

	// Name: Calculation, Type: Calculation:
	// display_position = 0x00
	// display_string = "PWM test"
	FCV_DISPLAY_POSITION = 0x00;
	FCI_SCOPY("PWM test",9, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
	FCD_0df41_PWM1DRIVE__Enable();

	// Name: Loop, Type: Loop: While 1
	while (1)
	{

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(250)
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(250);

		// Name: Loop, Type: Loop: Loop  1000 times
		for (FCLV_LOOP4=0; (FCLV_LOOP4)<(1000); (FCLV_LOOP4)++)
		{

#if 0 // Disabled code
			// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
			FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

#endif // Disabled code

#if 0 // Disabled code
			// Name: Calculation, Type: Calculation:
			// display_position = 0x0a
			// float_Value = Velocity_Float
			FCV_DISPLAY_POSITION = 0x0a;
			FCV_FLOAT_VALUE = FCV_VELOCITY_FLOAT;

#endif // Disabled code

#if 0 // Disabled code
			// Name: Call Macro, Type: User Macro: Write_display_float()
			FCM_Write_display_float();

#endif // Disabled code


		}

		// Name: Calculation, Type: Calculation:
		// Velocity = Velocity + 50
		FCV_VELOCITY = FCV_VELOCITY + 50;

		// Name: Delay, Type: Delay: 3 s
		FCI_DELAYBYTEWDT_S(3);

		// Name: Decision, Type: Decision: velocity > 500?
		if (FCV_VELOCITY > 500)
		{

			// Name: Calculation, Type: Calculation:
			// velocity = 150
			FCV_VELOCITY = 150;

		// } else {

		}

		// Name: Call Macro, Type: User Macro: BEEP()
		FCM_BEEP();


	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_DIsplay_Velocity_test()
{

	// Name: Loop, Type: Loop: While 1
	while (1)
	{

		// Name: Output, Type: Output: 0 -> C0
		SET_PORT_PIN(C,0,(0));

		// Name: Output, Type: Output: 1 -> C1
		SET_PORT_PIN(C,1,(1));

		// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
		FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// Display_Value = Velocity_Float
		FCV_DISPLAY_POSITION = 0x00;
		FCV_DISPLAY_VALUE = flt_toi(FCV_VELOCITY_FLOAT);

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();


	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Torque_Level()
{

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Loop, Type: Loop: While Program_button = 0
	while (1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


		if ((FCV_PROGRAM_BUTTON == 0) == 0) break;
	}

	// Name: Calculation, Type: Calculation:
	// display_position = 0x54
	// display_string = "Torque Level"
	FCV_DISPLAY_POSITION = 0x54;
	FCI_SCOPY("Torque Level",13, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: Hi=eeprom1::Read(7)
	FCV_HI = FCD_06651_eeprom1__Read(7);

	// Name: Decision, Type: Decision: Hi = 1?
	if (FCV_HI == 1)
	{

		// Name: Calculation, Type: Calculation:
		// display_position = 0x61
		// display_string = "high"
		FCV_DISPLAY_POSITION = 0x61;
		FCI_SCOPY("high",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	} else {

		// Name: Calculation, Type: Calculation:
		// display_position = 0x61
		// display_string = "Low"
		FCV_DISPLAY_POSITION = 0x61;
		FCI_SCOPY("Low",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	}

	// Name: Loop, Type: Loop: While Program_button = 1
	while (FCV_PROGRAM_BUTTON == 1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

		// Name: Decision, Type: Decision: hi = 1?
		if (FCV_HI == 1)
		{

			// Name: Calculation, Type: Calculation:
			// display_position = 0x61
			// display_string = "high"
			// hi = 0
			FCV_DISPLAY_POSITION = 0x61;
			FCI_SCOPY("high",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
			FCV_HI = 0;

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

		} else {

			// Name: Calculation, Type: Calculation:
			// display_position = 0x61
			// display_string = "Low "
			// hi = 1
			FCV_DISPLAY_POSITION = 0x61;
			FCI_SCOPY("Low ",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
			FCV_HI = 1;

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

		}

		// Name: Delay, Type: Delay: 700 ms
		FCI_DELAYINTWDT_MS(700);


	}

	// Name: Calculation, Type: Calculation:
	// display_position = 0x4d
	// display_string = "OK"
	FCV_DISPLAY_POSITION = 0x4d;
	FCI_SCOPY("OK",3, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Need to reverse for correct display, Type: Calculation:
	// Hi = Hi XOR (1)
	FCV_HI = FCV_HI ^ (1);

	// Name: Loop, Type: Loop: While program_button = 0
	while (1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


		if ((FCV_PROGRAM_BUTTON == 0) == 0) break;
	}

	// Name: Decision, Type: Decision: hi = 1?
	if (FCV_HI == 1)
	{

		// Name: Eprom 1 is high, Type: Component Macro: eeprom1::Write(7, 1)
		FCD_06651_eeprom1__Write(7, 1);

	} else {

		// Name: Eprom 0 is low, Type: Component Macro: eeprom1::Write(7, 0)
		FCD_06651_eeprom1__Write(7, 0);

	}

	// Name: Delay, Type: Delay: 1 s
	FCI_DELAYBYTEWDT_S(1);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Current_Beeps()
{

#if 0 // Disabled code
	// Name: Calculation, Type: Calculation:
	// Temp_store = Current_read
	FCV_TEMP_STORE = FCV_CURRENT_READ;

#endif // Disabled code

#if 0 // Disabled code
	// Name: 327 counts per AMP, Type: Component Macro: Current_read=Current::GetInt()
	FCV_CURRENT_READ = FCD_04751_Current__GetInt();

#endif // Disabled code

#if 0 // Disabled code
	// Name: Replacement  opamp, Type: Calculation:
	// Current_read = (Current_read - 1474) // * 2
	FCV_CURRENT_READ = (FCV_CURRENT_READ - 1474);

#endif // Disabled code

#if 0 // Disabled code
	// Name: Call Component Macro, Type: Component Macro: Beep_enable=eeprom1::Read(14)
	FCV_BEEP_ENABLE = FCD_06651_eeprom1__Read(14);

#endif // Disabled code

#if 0 // Disabled code
	// Name: Decision, Type: Decision: hi = 1?
	if (FCV_HI == 1)
	{

#if 0 // Disabled code
		// Name: , Type: Decision: current_read > (Current_limit_high) AND OK_to_beep = 1 AND Beep_enable = 1?
		if (FCV_CURRENT_READ > (FCV_CURRENT_LIMIT_HIGH) & FCV_OK_TO_BEEP == 1 & FCV_BEEP_ENABLE == 1)
		{

#if 0 // Disabled code
			// Name: Milliseconds, Type: Calculation:
			// beep_delay = 20
			// OK_to_beep = 0
			// Current_beep_Average = 0
			// Beep_Is_on = 1
			FCV_BEEP_DELAY = 20;
			FCV_OK_TO_BEEP = 0;
			FCV_CURRENT_BEEP_AVERAGE = 0;
			FCV_BEEP_IS_ON = 1;

#endif // Disabled code

#if 0 // Disabled code
			// Name: Beeper On, Type: Output: 1 -> A6
			SET_PORT_PIN(A,6,(1));

#endif // Disabled code

		// } else {

		}

#endif // Disabled code

	} else {

#if 0 // Disabled code
		// Name: , Type: Decision: current_read > (Current_limit_low) AND OK_to_beep = 1 AND Beep_enable = 1?
		if (FCV_CURRENT_READ > (FCV_CURRENT_LIMIT_LOW) & FCV_OK_TO_BEEP == 1 & FCV_BEEP_ENABLE == 1)
		{

#if 0 // Disabled code
			//Comment:
			//Current at low set points are
			//drawin by reducer friction, so
			//setpoint is raised to prevent beeping

#endif // Disabled code

#if 0 // Disabled code
			// Name: Milliseconds, Type: Calculation:
			// beep_delay = 20
			// OK_to_beep = 0
			// Current_beep_Average = 0
			// Beep_Is_on = 1
			FCV_BEEP_DELAY = 20;
			FCV_OK_TO_BEEP = 0;
			FCV_CURRENT_BEEP_AVERAGE = 0;
			FCV_BEEP_IS_ON = 1;

#endif // Disabled code

#if 0 // Disabled code
			// Name: Beeper On, Type: Output: 1 -> A6
			SET_PORT_PIN(A,6,(1));

#endif // Disabled code

		// } else {

		}

#endif // Disabled code

	}

#endif // Disabled code

#if 0 // Disabled code
	// Name: Reinstate current read value, Type: Calculation:
	// current_read = temp_store
	FCV_CURRENT_READ = FCV_TEMP_STORE;

#endif // Disabled code

}

/*=----------------------------------------------------------------------=*\
   Use :Clears the whole screen
\*=----------------------------------------------------------------------=*/
void FCM_CLS()
{

	// Name: Call Component Macro, Type: Component Macro: uart9600::SendChar(Prefix)
	FCD_047b1_uart9600__SendChar(FCV_PREFIX);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Call Component Macro, Type: Component Macro: uart9600::SendChar(clear_screen)
	FCD_047b1_uart9600__SendChar(FCV_CLEAR_SCREEN);

	// Name: Delay, Type: Delay: 2 ms
	FCI_DELAYBYTEWDT_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Usage - Display_string should already be loaded with text before call. Display position is also required
\*=----------------------------------------------------------------------=*/
void FCM_Write_display_text()
{

	// Name: Ready to Set Cursor, Type: Component Macro: UART1::SendChar(0xfe)
	FCD_047b2_UART1__SendChar(0xfe);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Ready to Set Cursor, Type: Component Macro: UART1::SendChar(0x45)
	FCD_047b2_UART1__SendChar(0x45);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Curser Position place, Type: Component Macro: UART1::SendChar(display_position)
	FCD_047b2_UART1__SendChar(FCV_DISPLAY_POSITION);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Send display string, Type: Component Macro: UART1::SendString(display_string)
	FCD_047b2_UART1__SendString(FCV_DISPLAY_STRING, FCVsz_DISPLAY_STRING);

	// Name: ADDED TO PRODUCTION, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Test_Trap()
{

	// Name: Calculation, Type: Calculation:
	// display_position = 0x0f
	// display_string = "Trap"
	// float_value = vmax_gain
	FCV_DISPLAY_POSITION = 0x0f;
	FCI_SCOPY("Trap",5, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_FLOAT_VALUE = FCV_VMAX_GAIN;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Display_FS_and_FR()
{

	//Comment:
	//Comment

	// Name: Calculation, Type: Calculation:
	// display_position = 0x13
	// Display_Value = Foot_Pedal
	FCV_DISPLAY_POSITION = 0x13;
	FCV_DISPLAY_VALUE = FCV_FOOT_PEDAL;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	// Name: Calculation, Type: Calculation:
	// display_position = 0x10
	// Display_Value = Forward_Reverse
	FCV_DISPLAY_POSITION = 0x10;
	FCV_DISPLAY_VALUE = FCV_FORWARD_REVERSE;

	// Name: Call Macro, Type: User Macro: Write_Display_Value()
	FCM_Write_Display_Value();

	//Comment:
	//Comment

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Proportional()
{
	//Local variable definitions
	MX_UINT8 FCL_STATE = (0x0); // Fault Finder
	MX_SINT16 FCL_ENC2_STORE = (0);
	MX_SINT16 FCL_UP = (0);
	MX_UINT16 FCL_COUNT = (0x0);
	MX_BOOL FCL_ROLLOVER = (0); // Encoder rolls over or not


	// Name: Display Actual amps, Type: Calculation:
	// display_position = 0x4d
	// display_string = "   "
	FCV_DISPLAY_POSITION = 0x4d;
	FCI_SCOPY("   ",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Read Current setting high or low, Type: Component Macro: Hi=eeprom1::Read(7)
	FCV_HI = FCD_06651_eeprom1__Read(7);

	// Name: Display hi or low torque, Type: User Macro: Hi_Lo_current()
	FCM_Hi_Lo_current();

	// Name: Setup Display for run time, Type: User Macro: Running_display()
	FCM_Running_display();

	// Name: Calculation, Type: Calculation:
	// Beep_delay = 10
	FCV_BEEP_DELAY = 10;

	// Name: Interrupt, Type: Interrupt: Disable TMR0
	cr_bit(INTCON, TMR0IE);

	// Name: Call Macro, Type: User Macro: BEEP()
	FCM_BEEP();

	// Name: Interrupt, Type: Interrupt: Enable TMR0
	cr_bit(T0CON, T0CS);
	st_bit(T0CON, T0SE);
	T0CON = (T0CON & 0xF0) | 0x07;
	st_bit(INTCON, GIE);
	st_bit(INTCON, TMR0IE);

#if 0 // Disabled code
	// Name: Input, Type: Input: A3 -> junk2
	FCV_JUNK2 = GET_PORT_PIN(A,3);

#endif // Disabled code

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Decision, Type: Decision: Forward_Reverse = 1?
	if (FCV_FORWARD_REVERSE == 1)
	{

		// Name: Display Actual amps, Type: Calculation:
		// display_position = 0x4d
		// display_string = ">>>"
		FCV_DISPLAY_POSITION = 0x4d;
		FCI_SCOPY(">>>",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Calculation, Type: Calculation:
		// FR = 1
		FCV_FR = 1;

	} else {

		// Name: Display Actual amps, Type: Calculation:
		// display_position = 0x4d
		// display_string = "<<<"
		FCV_DISPLAY_POSITION = 0x4d;
		FCI_SCOPY("<<<",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Calculation, Type: Calculation:
		// FR = 0
		FCV_FR = 0;

	}

	// Name: Delay, Type: Delay: 5 ms
	FCI_DELAYBYTEWDT_MS(5);

#if 0 // Disabled code
	// Name: Disable PWM, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

#endif // Disabled code

	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
	FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
	FCD_0df41_PWM1DRIVE__Enable();

	// Name: Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

	//Comment:
	//***********************************

	// Name: Disable PWM Drive, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Enable Read, Type: Output: 0 -> C0
	SET_PORT_PIN(C,0,(0));

	// Name: EMF to settle. Creates small click at zero velocity high torque, Type: Delay: 300 us
	FCI_DELAYINT_US(300);

	// Name: Get KE value from Motor, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
	FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

	//Comment:
	//_________________________________________

	//Comment:
	//_________________________________________

	// Name: Disable Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Re-Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

	// Name: Display Run Mode, Type: Calculation:
	// ramp = 0
	// error = 0
	// //profile_float = 0.0
	// error_float = 0.0
	// //velocity_float = 0.0
	// //velocity = 0
	// current_read = 0
	// enc2 = 0
	// Velocity_float = Velocity_Float * velocity_Gain
	// profile_float = velocity_float / 3
	FCV_RAMP = 0;
	FCV_ERROR = 0;
	FCV_ERROR_FLOAT = 0.0;
	FCV_CURRENT_READ = 0;
	FCV_ENC2 = 0;
	FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);
	FCV_PROFILE_FLOAT = flt_div(FCV_VELOCITY_FLOAT, 3);

	// Name: Calculae and load ramp, Type: User Macro: Loop_Formula3()
	FCM_Loop_Formula3();

	// Name: Encoder back to zero, Type: Component Macro: QuadEncoder1::ResetCounter()
	/* Error: Unknown or missing component : QuadEncoder1::ResetCounter */;

	// Name: Decision, Type: Decision: Current_limit = Current_limit_high?
	if (FCV_CURRENT_LIMIT == FCV_CURRENT_LIMIT_HIGH)
	{

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is High"
		// toggle2 = 1
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is High",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
		FCV_TOGGLE2 = 1;

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	} else {

		// Name: Display high or low torue setting, Type: Calculation:
		// display_position = 0x14
		// display_string = "Torque is Low "
		// toggle2 = 0
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("Torque is Low ",15, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
		FCV_TOGGLE2 = 0;

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

	}

	// Name: Debounced in interrupt, Type: Loop: Until Foot_Pedal = 1
	while (1)
	{

		// Name: Interrupt, Type: Interrupt: Disable TMR0
		cr_bit(INTCON, TMR0IE);

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Get diode and motor temps, Type: User Macro: Temperatures()
		FCM_Temperatures();

		// Name: Interrupt, Type: Interrupt: Enable TMR0
		cr_bit(T0CON, T0CS);
		st_bit(T0CON, T0SE);
		T0CON = (T0CON & 0xF0) | 0x07;
		st_bit(INTCON, GIE);
		st_bit(INTCON, TMR0IE);

		// Name: Turn on Hi Voltage, Type: Output: 1 -> B1
		SET_PORT_PIN(B,1,(1));

		// Name: Run Time Speed Changes, Type: Decision: Program_button = 0?
		if (FCV_PROGRAM_BUTTON == 0)
		{

			//Comment:
			//Prevent Noise from activating speed change

			// Name: Calculation, Type: Calculation:
			// program_button_count = program_button_count + 1
			FCV_PROGRAM_BUTTON_COUNT = FCV_PROGRAM_BUTTON_COUNT + 1;

			// Name: Decision, Type: Decision: program_button_count > 3?
			if (FCV_PROGRAM_BUTTON_COUNT > 3)
			{

				// Name: Calculation, Type: Calculation:
				// program_button_count = 0
				FCV_PROGRAM_BUTTON_COUNT = 0;

			} else {

				// Name: Goto Connection Point, Type: Goto Connection Point: [A]: A
				goto FCC_Proportional_A;

			}

			// Name: Calculation, Type: Calculation:
			// Command_Speed = Command_Speed + 25
			FCV_COMMAND_SPEED = FCV_COMMAND_SPEED + 25;

			// Name: Decision, Type: Decision: Command_Speed > 300?
			if (FCV_COMMAND_SPEED > 300)
			{

				// Name: Calculation, Type: Calculation:
				// Command_Speed = 100
				FCV_COMMAND_SPEED = 100;

			// } else {

			}

			// Name: Interrupt, Type: Interrupt: Disable TMR0
			cr_bit(INTCON, TMR0IE);

			// Name: Delay, Type: Delay: 10 ms
			FCI_DELAYBYTEWDT_MS(10);

			// Name: At 300 RPM - Display "MAX", Type: Decision: Command_Speed = 300?
			if (FCV_COMMAND_SPEED == 300)
			{

				// Name: Calculation, Type: Calculation:
				// display_position = 0x5c
				// display_string = "300"
				// //Vmax = Command_Speed
				FCV_DISPLAY_POSITION = 0x5c;
				FCI_SCOPY("300",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

				// Name: Call Macro, Type: User Macro: Write_display_text()
				FCM_Write_display_text();

			} else {

				// Name: Calculation, Type: Calculation:
				// display_position = 0x5c
				// Display_Value = Command_Speed
				// //Vmax = Command_Speed
				FCV_DISPLAY_POSITION = 0x5c;
				FCV_DISPLAY_VALUE = FCV_COMMAND_SPEED;

				// Name: Call Macro, Type: User Macro: Write_Display_Value()
				FCM_Write_Display_Value();

			}

			// Name: Loop, Type: Loop: While Program_button = 0 //AND .count < 5
			while (FCV_PROGRAM_BUTTON == 0)
			{

				// Name: Input, Type: Input: B5 -> Program_button
				FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

				// Name: Calculation, Type: Calculation:
				// .count = .count + 1
				FCL_COUNT = FCL_COUNT + 1;


			}

			// Name: Calculation, Type: Calculation:
			// .count = 0
			FCL_COUNT = 0;

			// Name: Switch, Type: Switch: Command_Speed?
			switch (FCV_COMMAND_SPEED)
			{
				case 275:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
					FCD_06651_eeprom1__Write(3, 250);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 25)
					FCD_06651_eeprom1__Write(4, 25);

					break;
				}
				case 300:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
					FCD_06651_eeprom1__Write(3, 250);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 50)
					FCD_06651_eeprom1__Write(4, 50);

					break;
				}
				default:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, command_speed)
					FCD_06651_eeprom1__Write(3, FCV_COMMAND_SPEED);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 0)
					FCD_06651_eeprom1__Write(4, 0);

				}
			}

			// Name: Interrupt, Type: Interrupt: Enable TMR0
			cr_bit(T0CON, T0CS);
			st_bit(T0CON, T0SE);
			T0CON = (T0CON & 0xF0) | 0x07;
			st_bit(INTCON, GIE);
			st_bit(INTCON, TMR0IE);

			// Name: Connection Point, Type: Declare Connection Point: [A]: A
		FCC_Proportional_A:
			;

		} else {

			// Name: Decision, Type: Decision: Command_Speed > 300?
			if (FCV_COMMAND_SPEED > 300)
			{

				// Name: Calculation, Type: Calculation:
				// Command_Speed = 100
				FCV_COMMAND_SPEED = 100;

			// } else {

			}

			// Name: Calculation, Type: Calculation:
			// program_button_count = 0
			FCV_PROGRAM_BUTTON_COUNT = 0;

		}

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Decision, Type: Decision: Change_bit = 1?
		if (FCV_CHANGE_BIT == 1)
		{

			// Name: Call Component Macro, Type: Component Macro: enc2=QuadEncoder1::ReadCounter()
			/* Error: Unknown or missing component : QuadEncoder1::ReadCounter */;

			// Name: Calculation, Type: Calculation:
			// enc2 = enc2 / 4
			FCV_ENC2 = FCV_ENC2 / 4;

			// Name: Decision, Type: Decision: enc2 > .enc2_store?
			if (FCV_ENC2 > FCL_ENC2_STORE)
			{

				// Name: Calculation, Type: Calculation:
				// Command_Speed = Command_Speed + 25
				FCV_COMMAND_SPEED = FCV_COMMAND_SPEED + 25;

				// Name: Calculation, Type: Calculation:
				// .enc2_store = enc2
				FCL_ENC2_STORE = FCV_ENC2;

			// } else {

			}

			// Name: Decision, Type: Decision: enc2 < .enc2_store?
			if (FCV_ENC2 < FCL_ENC2_STORE)
			{

				// Name: Calculation, Type: Calculation:
				// Command_Speed = Command_Speed - 25
				FCV_COMMAND_SPEED = FCV_COMMAND_SPEED - 25;

				// Name: Calculation, Type: Calculation:
				// .enc2_store = enc2
				FCL_ENC2_STORE = FCV_ENC2;

			// } else {

			}

			// Name: Calculation, Type: Calculation:
			// CHANGE_BIT = 0
			FCV_CHANGE_BIT = 0;

			// Name: Switch, Type: Switch: .Rollover?
			switch (FCL_ROLLOVER)
			{
				case 0:
				{
					// Name: Decision, Type: Decision: Command_Speed < 100?
					if (FCV_COMMAND_SPEED < 100)
					{

						// Name: Calculation, Type: Calculation:
						// COMMAND_SPEED = 100
						FCV_COMMAND_SPEED = 100;

					// } else {

					}

					// Name: Decision, Type: Decision: Command_Speed > 300?
					if (FCV_COMMAND_SPEED > 300)
					{

						// Name: Calculation, Type: Calculation:
						// COMMAND_SPEED = 300
						FCV_COMMAND_SPEED = 300;

					// } else {

					}

					break;
				}
				case 1:
				{
					// Name: Decision, Type: Decision: Command_Speed < 100?
					if (FCV_COMMAND_SPEED < 100)
					{

						// Name: Calculation, Type: Calculation:
						// COMMAND_SPEED = 100
						FCV_COMMAND_SPEED = 100;

					// } else {

					}

					// Name: Decision, Type: Decision: Command_Speed > 300?
					if (FCV_COMMAND_SPEED > 300)
					{

						// Name: Calculation, Type: Calculation:
						// COMMAND_SPEED = 100
						FCV_COMMAND_SPEED = 100;

					// } else {

					}

					break;
				}
				// default:

			}

			// Name: Calculation, Type: Calculation:
			// display_position = 0x5C
			// Display_Value = Command_Speed
			FCV_DISPLAY_POSITION = 0x5C;
			FCV_DISPLAY_VALUE = FCV_COMMAND_SPEED;

			// Name: Interrupt, Type: Interrupt: Disable TMR0
			cr_bit(INTCON, TMR0IE);

			// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
			/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

			// Name: Call Macro, Type: User Macro: Write_Display_Value()
			FCM_Write_Display_Value();

			// Name: Switch, Type: Switch: Command_Speed?
			switch (FCV_COMMAND_SPEED)
			{
				case 275:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
					FCD_06651_eeprom1__Write(3, 250);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 25)
					FCD_06651_eeprom1__Write(4, 25);

					break;
				}
				case 300:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, 250)
					FCD_06651_eeprom1__Write(3, 250);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 50)
					FCD_06651_eeprom1__Write(4, 50);

					break;
				}
				default:
				{
					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(3, command_speed)
					FCD_06651_eeprom1__Write(3, FCV_COMMAND_SPEED);

					// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(4, 0)
					FCD_06651_eeprom1__Write(4, 0);

				}
			}

			// Name: Delay, Type: Delay: 10 ms
			FCI_DELAYBYTEWDT_MS(10);

			// Name: Interrupt, Type: Interrupt: Enable TMR0
			cr_bit(T0CON, T0CS);
			st_bit(T0CON, T0SE);
			T0CON = (T0CON & 0xF0) | 0x07;
			st_bit(INTCON, GIE);
			st_bit(INTCON, TMR0IE);

		// } else {

		}

		// Name: command_speed, Type: Switch: Command_Speed?
		switch (FCV_COMMAND_SPEED)
		{
			case 100:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 130 //219
				// step_inc = 1
				FCV_VMAX = 130;
				FCV_STEP_INC = 1;

				break;
			}
			case 125:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 178 //270
				// step_inc = 1
				FCV_VMAX = 178;
				FCV_STEP_INC = 1;

				break;
			}
			case 150:
			{
				// Name: Around 230, Type: Calculation:
				// Vmax = 212
				// step_inc = 1
				FCV_VMAX = 212;
				FCV_STEP_INC = 1;

				break;
			}
			case 175:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 263 //370
				// step_inc = 2
				FCV_VMAX = 263;
				FCV_STEP_INC = 2;

				break;
			}
			case 200:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = Cal_200
				// step_inc = 2
				FCV_VMAX = FCV_CAL_200;
				FCV_STEP_INC = 2;

				break;
			}
			case 225:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 349 //492
				// step_inc = 2
				FCV_VMAX = 349;
				FCV_STEP_INC = 2;

				break;
			}
			case 250:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 431 //560
				// step_inc = 2
				FCV_VMAX = 431;
				FCV_STEP_INC = 2;

				break;
			}
			case 275:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 480 //623
				// step_inc = 1
				FCV_VMAX = 480;
				FCV_STEP_INC = 1;

				break;
			}
			case 300:
			{
				// Name: Calculation, Type: Calculation:
				// Vmax = 538 //699
				// step_inc = 1
				FCV_VMAX = 538;
				FCV_STEP_INC = 1;

				break;
			}
			// default:

		}

		//Comment:
		//Temperature is taken
		//in macro "temperatures" while foot switch is off

#if 0 // Disabled code
		// Name: Deduct or add temperature change from ambient calibration., Type: Calculation:
		// Vmax = Vmax + ((Motor_temp_calibrate - Motor_temp) * 2)
		// pgain = .5
		FCV_VMAX = flt_toi(flt_add(flt_fromi(FCV_VMAX), (flt_mul((flt_sub(FCV_MOTOR_TEMP_CALIBRATE, FCV_MOTOR_TEMP)), 2))));
		FCV_PGAIN = .5;

#endif // Disabled code

		// Name: Interrupt, Type: Interrupt: Disable TMR0
		cr_bit(INTCON, TMR0IE);

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		// Name: Call Component Macro, Type: Component Macro: vmax_gain=eeprom1::Read(11)
		FCV_VMAX_GAIN = flt_fromi(FCD_06651_eeprom1__Read(11));

		// Name: Calculation, Type: Calculation:
		// vmax_gain = Vmax_gain / 100 //vmax_gain = vmax_store
		// vmax = (vmax * vmax_gain) / 1.75
		// step_inc = 1
		FCV_VMAX_GAIN = flt_div(FCV_VMAX_GAIN, 100);
		FCV_VMAX = flt_toi(flt_div((flt_mul(flt_fromi(FCV_VMAX), FCV_VMAX_GAIN)), 1.75));
		FCV_STEP_INC = 1;

		// Name: Get closed loop values and set ramp PWM, Type: User Macro: Loop_Formula3()
		FCM_Loop_Formula3();

		// Name: increments profile  to vmax. Drops speed for hi current, Type: User Macro: Profile()
		FCM_Profile();

		// Name: Get current Value, Type: Component Macro: Current_peak=Current::GetAverageInt(10, 15)
		FCV_CURRENT_PEAK = FCD_04751_Current__GetAverageInt(10, 15);

		// Name: 3500 = 10.2 AMPS, Type: Decision: Current_peak > 3500?
		if (FCV_CURRENT_PEAK > 3500)
		{

			// Name: Calculation, Type: Calculation:
			// Time_count = Time_count + 1
			FCV_TIME_COUNT = FCV_TIME_COUNT + 1;

#if 0 // Disabled code
			// Name: Decision, Type: Decision: Current_peak > 3900?
			if (FCV_CURRENT_PEAK > 3900)
			{

#if 0 // Disabled code
				// Name: Calculation, Type: Calculation:
				// time_count = time_count + 20
				FCV_TIME_COUNT = FCV_TIME_COUNT + 20;

#endif // Disabled code

			// } else {

			}

#endif // Disabled code

			// Name: Decision 500 = approx 10 sec, Type: Decision: time_count > 500?
			if (FCV_TIME_COUNT > 500)
			{

				// Name: Beep Off, Type: Output: 0 -> A6
				SET_PORT_PIN(A,6,(0));

				// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
				FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

				// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Disable()
				FCD_0df41_PWM1DRIVE__Disable();

				// Name: Calculation, Type: Calculation:
				// display_position = 0x54
				// display_string = "Jammed "
				FCV_DISPLAY_POSITION = 0x54;
				FCI_SCOPY("Jammed ",8, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

				// Name: Call Macro, Type: User Macro: Write_display_text()
				FCM_Write_display_text();

				// Name: Loop, Type: Loop: While Foot_Pedal = 0
				while (FCV_FOOT_PEDAL == 0)
				{

					// Name: Get foot switch status, Type: Input: B7 -> Foot_Pedal
					FCV_FOOT_PEDAL = GET_PORT_PIN(B,7);


				}

				// Name: Delay, Type: Delay: 1 s
				FCI_DELAYBYTEWDT_S(1);

				// Name: Calculation, Type: Calculation:
				// Time_count = 0
				// Beep_delay = 1000
				FCV_TIME_COUNT = 0;
				FCV_BEEP_DELAY = 1000;

				// Name: Beep on, Type: Output: 1 -> A6
				SET_PORT_PIN(A,6,(1));

				// Name: Delay, Type: Delay: 1 s
				FCI_DELAYBYTEWDT_S(1);

				// Name: Beep Off, Type: Output: 0 -> A6
				SET_PORT_PIN(A,6,(0));

				// Name: Interrupt, Type: Interrupt: Enable TMR0
				cr_bit(T0CON, T0CS);
				st_bit(T0CON, T0SE);
				T0CON = (T0CON & 0xF0) | 0x07;
				st_bit(INTCON, GIE);
				st_bit(INTCON, TMR0IE);

				// Name: Goto Connection Point, Type: Goto Connection Point: [B]: B
				goto FCC_Proportional_B;

			// } else {

			}

		} else {

			// Name: Calculation, Type: Calculation:
			// Time_count = 0
			FCV_TIME_COUNT = 0;

		}

		//Comment:
		//CURRENT BEEPS  ******************************

		// Name: Calculation, Type: Calculation:
		// Temp_store = Current_read
		FCV_TEMP_STORE = FCV_CURRENT_READ;

		// Name: 327 counts per AMP, Type: Component Macro: Current_read=Current::GetInt()
		FCV_CURRENT_READ = FCD_04751_Current__GetInt();

		// Name: Replacement  opamp, Type: Calculation:
		// Current_read = (Current_read - 1474) // * 2
		FCV_CURRENT_READ = (FCV_CURRENT_READ - 1474);

		// Name: Call Component Macro, Type: Component Macro: Beep_enable=eeprom1::Read(14)
		FCV_BEEP_ENABLE = FCD_06651_eeprom1__Read(14);

		// Name: Decision, Type: Decision: hi = 1?
		if (FCV_HI == 1)
		{

			// Name: , Type: Decision: current_read > (Current_limit_high) AND OK_to_beep = 1 AND Beep_enable = 1?
			if (FCV_CURRENT_READ > (FCV_CURRENT_LIMIT_HIGH) & FCV_OK_TO_BEEP == 1 & FCV_BEEP_ENABLE == 1)
			{

				// Name: Milliseconds, Type: Calculation:
				// beep_delay = 20
				// OK_to_beep = 0
				// Current_beep_Average = 0
				// Beep_Is_on = 1
				FCV_BEEP_DELAY = 20;
				FCV_OK_TO_BEEP = 0;
				FCV_CURRENT_BEEP_AVERAGE = 0;
				FCV_BEEP_IS_ON = 1;

				// Name: Beeper On, Type: Output: 1 -> A6
				SET_PORT_PIN(A,6,(1));

			// } else {

			}

		} else {

			// Name: , Type: Decision: current_read > (Current_limit_low) AND OK_to_beep = 1 AND Beep_enable = 1?
			if (FCV_CURRENT_READ > (FCV_CURRENT_LIMIT_LOW) & FCV_OK_TO_BEEP == 1 & FCV_BEEP_ENABLE == 1)
			{

				//Comment:
				//Current at low set points are
				//drawin by reducer friction, so
				//setpoint is raised to prevent beeping

				// Name: Milliseconds, Type: Calculation:
				// beep_delay = 20
				// OK_to_beep = 0
				// Current_beep_Average = 0
				// Beep_Is_on = 1
				FCV_BEEP_DELAY = 20;
				FCV_OK_TO_BEEP = 0;
				FCV_CURRENT_BEEP_AVERAGE = 0;
				FCV_BEEP_IS_ON = 1;

				// Name: Beeper On, Type: Output: 1 -> A6
				SET_PORT_PIN(A,6,(1));

			// } else {

			}

		}

		// Name: Reinstate current read value, Type: Calculation:
		// current_read = temp_store
		FCV_CURRENT_READ = FCV_TEMP_STORE;

		//Comment:
		//CURRENT BEEPS FINISHED ******************************

		// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
		/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

		//Comment:
		//Current COntrol

		// Name: Interrupt, Type: Interrupt: Enable TMR0
		cr_bit(T0CON, T0CS);
		st_bit(T0CON, T0SE);
		T0CON = (T0CON & 0xF0) | 0x07;
		st_bit(INTCON, GIE);
		st_bit(INTCON, TMR0IE);

		// Name: Decision, Type: Decision: Forward_Reverse = fr?
		if (FCV_FORWARD_REVERSE == FCV_FR)
		{

			// Name: Calculation, Type: Calculation:
			// FR_Count = 0
			FCV_FR_COUNT = 0;

		} else {

			// Name: Calculation, Type: Calculation:
			// FR_Count = FR_Count + 1
			FCV_FR_COUNT = FCV_FR_COUNT + 1;

			// Name: On Solid?, Type: Decision: FR_count > 5?
			if (FCV_FR_COUNT > 5)
			{

				// Name: Decision, Type: Decision: Forward_Reverse = fr?
				if (FCV_FORWARD_REVERSE == FCV_FR)
				{

				} else {

					// Name: Interrupt, Type: Interrupt: Disable TMR0
					cr_bit(INTCON, TMR0IE);

					// Name: Call Macro, Type: User Macro: Direction()
					FCM_Direction();

					// Name: Interrupt, Type: Interrupt: Enable TMR0
					cr_bit(T0CON, T0CS);
					st_bit(T0CON, T0SE);
					T0CON = (T0CON & 0xF0) | 0x07;
					st_bit(INTCON, GIE);
					st_bit(INTCON, TMR0IE);

					// Name: Calculation, Type: Calculation:
					// Profile_Float = 0
					// Velocity_Float = 0
					FCV_PROFILE_FLOAT = 0;
					FCV_VELOCITY_FLOAT = 0;

					// Name: Calculation, Type: Calculation:
					// Clock_int2 = 0
					FCV_CLOCK_INT2 = 0;

				}

			// } else {

			}

		}


		if ((FCV_FOOT_PEDAL == 1) != 0) break;
	}

	// Name: Connection Point, Type: Declare Connection Point: [B]: B
FCC_Proportional_B:
	;

	// Name: Calculation, Type: Calculation:
	// Stop = 0
	FCV_STOP = 0;

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Setup Display for run time, Type: User Macro: Running_display()
	FCM_Running_display();

	// Name: Display Run Mode, Type: Calculation:
	// current_read = 0
	// enc2 = 0
	// current_var = 0
	FCV_CURRENT_READ = 0;
	FCV_ENC2 = 0;
	FCV_CURRENT_VAR = 0;

	// Name: Get encoder back to zero, Type: Component Macro: QuadEncoder1::ResetCounter()
	/* Error: Unknown or missing component : QuadEncoder1::ResetCounter */;

	// Name: Display Run Mode, Type: Calculation:
	// Display_String = "Stopped"
	// display_position = 0x54
	FCI_SCOPY("Stopped",8, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
	FCV_DISPLAY_POSITION = 0x54;

	// Name: Call Macro, Type: User Macro: Write_display_text()
	FCM_Write_display_text();

	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
	FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_User_Program_mode()
{

	// Name: Call Component Macro, Type: Component Macro: lsb=eeprom1::Read(3)
	FCV_LSB = FCD_06651_eeprom1__Read(3);

	// Name: Call Component Macro, Type: Component Macro: msb=eeprom1::Read(4)
	FCV_MSB = FCD_06651_eeprom1__Read(4);

	// Name: Calculation, Type: Calculation:
	// command_speed = msb + lsb
	FCV_COMMAND_SPEED = FCV_MSB + FCV_LSB;

	// Name: First powerup or corruption  intervention, Type: Decision: Command_Speed > 300 OR Command_Speed < 0?
	if (FCV_COMMAND_SPEED > 300 | FCV_COMMAND_SPEED < 0)
	{

		// Name: Set Default powerup speed, Type: Calculation:
		// Command_Speed = 100
		FCV_COMMAND_SPEED = 100;

		// Name: Set eproms up at pu defaults, Type: Component Macro: eeprom1::Write(3, 100)
		FCD_06651_eeprom1__Write(3, 100);

		// Name: Set eproms up at pu defaults, Type: Component Macro: eeprom1::Write(4, 0)
		FCD_06651_eeprom1__Write(4, 0);

	// } else {

	}

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Wait for release, Type: Loop: While Program_button = 0
	while (1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);


		if ((FCV_PROGRAM_BUTTON == 0) == 0) break;
	}

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::Enable()
	/* Error: Unknown or missing component : QuadEncoder1::Enable */;

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::WriteCounter(Command_Speed*4)
	/* Error: Unknown or missing component : QuadEncoder1::WriteCounter */;

	// Name: Wait for release, Type: Loop: While Program_button = 1
	while (1)
	{

		// Name: Input, Type: Input: B5 -> Program_button
		FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// display_string = "User Program Mode"
		FCV_DISPLAY_POSITION = 0x00;
		FCI_SCOPY("User Program Mode",18, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		//Comment:
		//*************************

		// Name: Calculation, Type: Calculation:
		// display_position = 0x14
		// display_string = "New Speed        RPM"
		FCV_DISPLAY_POSITION = 0x14;
		FCI_SCOPY("New Speed        RPM",21, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Call Macro, Type: User Macro: Encoder_test()
		FCM_Encoder_test();


		if ((FCV_PROGRAM_BUTTON == 1) == 0) break;
	}

	//Comment:
	//Separate MSB and LSB for eprom saving

	// Name: Call Component Macro, Type: Component Macro: lsb=eeprom1::Read(3)
	FCV_LSB = FCD_06651_eeprom1__Read(3);

	// Name: Call Component Macro, Type: Component Macro: msb=eeprom1::Read(4)
	FCV_MSB = FCD_06651_eeprom1__Read(4);

	// Name: Calculation, Type: Calculation:
	// command_speed = msb + lsb
	FCV_COMMAND_SPEED = FCV_MSB + FCV_LSB;

	// Name: Call Macro, Type: User Macro: Torque_Level()
	FCM_Torque_Level();

	// Name: Delay, Type: Delay: 100 ms
	FCI_DELAYBYTEWDT_MS(100);

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Startup()
{

	//Comment:
	//Set Reverse switch and relay 

	// Name: Call Component Macro, Type: Component Macro: QuadEncoder1::Enable()
	/* Error: Unknown or missing component : QuadEncoder1::Enable */;

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Wait for motor to stop before switching relay, Type: Loop: Until Velocity_Float < 10
	while (1)
	{

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
		FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// Display_Value = Velocity_Float
		FCV_DISPLAY_POSITION = 0x00;
		FCV_DISPLAY_VALUE = flt_toi(FCV_VELOCITY_FLOAT);

		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();


		if ((flt_lt(FCV_VELOCITY_FLOAT, 10)) != 0) break;
	}

	//Comment:
	//Align fwd/rev switch with BiStable relay

	// Name: Forward is 0, Type: Decision: Forward_Reverse = 0?
	if (FCV_FORWARD_REVERSE == 0)
	{

		// Name: Calculation, Type: Calculation:
		// cw = 1
		FCV_CW = 1;

		// Name: Output, Type: Output: 1 -> A5
		SET_PORT_PIN(A,5,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Output, Type: Output: 0 -> A5
		SET_PORT_PIN(A,5,(0));

		// Name: Calculation, Type: Calculation:
		// FR = 1
		FCV_FR = 1;

	} else {

		// Name: Calculation, Type: Calculation:
		// cw = 0
		FCV_CW = 0;

		// Name: Output, Type: Output: 1 -> A4
		SET_PORT_PIN(A,4,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Output, Type: Output: 0 -> A4
		SET_PORT_PIN(A,4,(0));

		// Name: Calculation, Type: Calculation:
		// FR = 0
		FCV_FR = 0;

	}

	//Comment:
	//BiStabl relay now aligns with Fwd/Rev Switch
	//Motor should be stopped at this time

	//Comment:
	//Turn Screen On

	// Name: Set backlight to full on, Type: Component Macro: UART1::SendChar(prefix)
	FCD_047b2_UART1__SendChar(FCV_PREFIX);

	// Name: Full on Light, Type: Component Macro: UART1::SendChar(0x53)
	FCD_047b2_UART1__SendChar(0x53);

	// Name: Delay, Type: Delay: 100 us
	FCI_DELAYBYTE_US(100);

	// Name: Call Component Macro, Type: Component Macro: UART1::SendChar(8)
	FCD_047b2_UART1__SendChar(8);

	// Name: CLear the Screen, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Read Eprom Command Speed, Type: Component Macro: Command_Speed=eeprom1::Read(3)
	FCV_COMMAND_SPEED = FCD_06651_eeprom1__Read(3);

	// Name: Read Saved Encoder Counter Value, Type: Component Macro: Encoder_counter=eeprom1::Read(5)
	FCV_ENCODER_COUNTER = FCD_06651_eeprom1__Read(5);

	// Name: Enable Read, Type: Output: 0 -> C0
	SET_PORT_PIN(C,0,(0));

	// Name: Disable PWM Drive, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Delay, Type: Delay: 1 ms
	FCI_DELAYBYTEWDT_MS(1);

	// Name: Delay, Type: Delay: 1 s
	FCI_DELAYBYTEWDT_S(1);

	// Name: Disable Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Get low torque value, Type: Component Macro: Current_limit_low=eeprom1::Read(8)
	FCV_CURRENT_LIMIT_LOW = FCD_06651_eeprom1__Read(8);

	// Name: Get high torque value, Type: Component Macro: Current_limit_high=eeprom1::Read(9)
	FCV_CURRENT_LIMIT_HIGH = FCD_06651_eeprom1__Read(9);

	//Comment:
	//***************************

	// Name: Convert eeprom numbers (0 to 100) to 2048, Type: Calculation:
	// Current_limit_low = (current_limit_low * 2048) / 100
	// Current_limit_high = (current_limit_high * 2048) / 100
	FCV_CURRENT_LIMIT_LOW = (FCV_CURRENT_LIMIT_LOW * 2048) / 100;
	FCV_CURRENT_LIMIT_HIGH = (FCV_CURRENT_LIMIT_HIGH * 2048) / 100;

#if 0 // Disabled code
	// Name: Convert to 0-4096, Type: Calculation:
	// Current_limit_low = (Current_limit_low * 4096) / 100
	// //then limit to 75% by -
	// Current_limit_low = Current_limit_low / 1.3
	// Current_limit_high = (Current_limit_high * 4096) / 100
	// //then limit to 75% by -
	// Current_limit_high = Current_limit_high / 1.3
	FCV_CURRENT_LIMIT_LOW = (FCV_CURRENT_LIMIT_LOW * 4096) / 100;
	FCV_CURRENT_LIMIT_LOW = flt_toi(flt_div(flt_fromi(FCV_CURRENT_LIMIT_LOW), 1.3));
	FCV_CURRENT_LIMIT_HIGH = (FCV_CURRENT_LIMIT_HIGH * 4096) / 100;
	FCV_CURRENT_LIMIT_HIGH = flt_toi(flt_div(flt_fromi(FCV_CURRENT_LIMIT_HIGH), 1.3));

#endif // Disabled code

	//Comment:
	//***************************

	// Name: Call Macro, Type: User Macro: CLS()
	FCM_CLS();

	// Name: Beep, Type: User Macro: BEEP()
	FCM_BEEP();

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Direction()
{

#if 0 // Disabled code
	// Name: Decision, Type: Decision: Forward_Reverse = fr?
	if (FCV_FORWARD_REVERSE == FCV_FR)
	{

#if 0 // Disabled code
		// Name: Goto Connection Point, Type: Goto Connection Point: [A]: A
		goto FCC_Direction_A;

#endif // Disabled code

	// } else {

	}

#endif // Disabled code

	// Name: Disable PWM Ground, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Turn off motor, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
	FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

	// Name: Disable PWM, Type: Component Macro: PWM1DRIVE::Disable()
	FCD_0df41_PWM1DRIVE__Disable();

	// Name: Call Macro, Type: User Macro: Read_Velocity()
	FCM_Read_Velocity();

	// Name: Wait for motor to stop, Type: Decision: velocity_float > 10?
	if (flt_gt(FCV_VELOCITY_FLOAT, 10))
	{

		// Name: Continue if foot switch is reactivated, Type: Decision: Foot_Pedal = 0?
		if (FCV_FOOT_PEDAL == 0)
		{

			// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
			FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

			// Name: User Hit reverse while in decel, then FS - Wait for stop, Type: Decision: Forward_Reverse = 1 AND FR = 0 OR (Forward_Reverse = 0 AND FR = 1)?
			if (FCV_FORWARD_REVERSE == 1 & FCV_FR == 0 | (FCV_FORWARD_REVERSE == 0 & FCV_FR == 1))
			{

				// Name: Call Macro, Type: User Macro: Motor_stop_Wait()
				FCM_Motor_stop_Wait();

				// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Disable()
				FCD_0df41_PWM1DRIVE__Disable();

				// Name: Loop, Type: Loop: While velocity_float > 10
				while (1)
				{

					// Name: Disable PWM Drive, Type: Output: 1 -> C1
					SET_PORT_PIN(C,1,(1));

					// Name: Wait for Back EMF to settle, Type: Delay: 5 ms
					FCI_DELAYBYTEWDT_MS(5);

					// Name: Enable Read, Type: Output: 0 -> C0
					SET_PORT_PIN(C,0,(0));

					// Name: Call Component Macro, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
					FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

					// Name: Normalize speed numbers, Type: Calculation:
					// Velocity_Float = Velocity_Float * Velocity_Gain
					FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

					// Name: Delay, Type: Delay: 1 ms
					FCI_DELAYBYTEWDT_MS(1);

					// Name: Disable Read, Type: Output: 1 -> C0
					SET_PORT_PIN(C,0,(1));

					// Name: Re-Enable PWM, Type: Output: 0 -> C1
					SET_PORT_PIN(C,1,(0));

#if 0 // Disabled code
					// Name: Calculation, Type: Calculation:
					// velocity_float = velocity_float * Velocity_Gain
					FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

#endif // Disabled code


					if ((flt_gt(FCV_VELOCITY_FLOAT, 10)) == 0) break;
				}

			// } else {

			}

		// } else {

		}

	} else {

		// Name: Motor to continue on the fly if reverse switch not activated, Type: Decision: Forward_Reverse = 1 AND FR = 0 OR (Forward_Reverse = 0 AND FR = 1)?
		if (FCV_FORWARD_REVERSE == 1 & FCV_FR == 0 | (FCV_FORWARD_REVERSE == 0 & FCV_FR == 1))
		{

			// Name: Call Macro, Type: User Macro: Motor_stop_Wait()
			FCM_Motor_stop_Wait();

		// } else {

		}

	}

	// Name: Get foot switch status, Type: Input: B7 -> Foot_Pedal
	FCV_FOOT_PEDAL = GET_PORT_PIN(B,7);

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Decision, Type: Decision: Forward_Reverse = 1?
	if (FCV_FORWARD_REVERSE == 1)
	{

		// Name: Display Actual amps, Type: Calculation:
		// display_position = 0x4d
		// display_string = ">>>"
		FCV_DISPLAY_POSITION = 0x4d;
		FCI_SCOPY(">>>",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Relay Pulse, Type: Output: 1 -> A5
		SET_PORT_PIN(A,5,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Relay Pulse, Type: Output: 0 -> A5
		SET_PORT_PIN(A,5,(0));

		// Name: Calculation, Type: Calculation:
		// fr = 1
		FCV_FR = 1;

	} else {

		// Name: Display Actual amps, Type: Calculation:
		// display_position = 0x4d
		// display_string = "<<<"
		FCV_DISPLAY_POSITION = 0x4d;
		FCI_SCOPY("<<<",4, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Relay Pulse, Type: Output: 1 -> A4
		SET_PORT_PIN(A,4,(1));

		// Name: Delay, Type: Delay: 50 ms
		FCI_DELAYBYTEWDT_MS(50);

		// Name: Relay Pulse, Type: Output: 0 -> A4
		SET_PORT_PIN(A,4,(0));

		// Name: Calculation, Type: Calculation:
		// fr = 0
		FCV_FR = 0;

	}

	// Name: Delay, Type: Delay: 5 ms
	FCI_DELAYBYTEWDT_MS(5);

	// Name: Calculation, Type: Calculation:
	// Ramp = 0
	FCV_RAMP = 0;

	// Name: Enable Drive, Type: Component Macro: PWM1DRIVE::Enable()
	FCD_0df41_PWM1DRIVE__Enable();

	// Name: Connection Point, Type: Declare Connection Point: [A]: A
FCC_Direction_A:
	;

	// Name: Re-Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

}

/*=----------------------------------------------------------------------=*\
   Use :Factory defaults
\*=----------------------------------------------------------------------=*/
void FCM_Eprom_Defaults()
{

	// Name: Command Speed LSB defaults, Type: Component Macro: eeprom1::Write(3, 100)
	FCD_06651_eeprom1__Write(3, 100);

	// Name: Command Speed MSB defaults, Type: Component Macro: eeprom1::Write(4, 0)
	FCD_06651_eeprom1__Write(4, 0);

	// Name: Read and load Command Speed, Type: Component Macro: Command_Speed=eeprom1::Read(3)
	FCV_COMMAND_SPEED = FCD_06651_eeprom1__Read(3);

	// Name: Encoder Counter Location, Type: Component Macro: eeprom1::Write(5, 3)
	FCD_06651_eeprom1__Write(5, 3);

	// Name: Torque selection at low value is 0, Type: Component Macro: eeprom1::Write(7, 0)
	FCD_06651_eeprom1__Write(7, 0);

	// Name: Low Level value for torque - Value is percentage, Type: Component Macro: eeprom1::Write(8, 40)
	FCD_06651_eeprom1__Write(8, 40);

	// Name: High level value for torque value is percentage, Type: Component Macro: eeprom1::Write(9, 60)
	FCD_06651_eeprom1__Write(9, 60);

	// Name: Load Variable, Type: Component Macro: Current_limit_low=eeprom1::Read(8)
	FCV_CURRENT_LIMIT_LOW = FCD_06651_eeprom1__Read(8);

	// Name: Load Variable, Type: Component Macro: Current_limit_high=eeprom1::Read(9)
	FCV_CURRENT_LIMIT_HIGH = FCD_06651_eeprom1__Read(9);

	// Name: Cool Down Counts, Type: Component Macro: eeprom1::Write(10, 0)
	FCD_06651_eeprom1__Write(10, 0);

	//Comment:
	//Address 11 = vmax_gain

	//Comment:
	//Address 12  = Temp calibrate constant

	// Name: Powerup Check for new program, Type: Component Macro: eeprom1::Write(13, 99)
	FCD_06651_eeprom1__Write(13, 99);

	// Name: Beep Enable bit, Type: Component Macro: eeprom1::Write(14, 1)
	FCD_06651_eeprom1__Write(14, 1);

	//Comment:
	//Address 100 = Powerup counts units

	//Comment:
	//Address 101 = Powerup counts 255 multiplier

	// Name: Eprom Seconds for timer, Type: Component Macro: eeprom1::Write(15, 0)
	FCD_06651_eeprom1__Write(15, 0);

	// Name: Eprom Seconds for timer, Type: Component Macro: eeprom1::Write(16, 0)
	FCD_06651_eeprom1__Write(16, 0);

	// Name: Eprom Seconds for timer, Type: Component Macro: eeprom1::Write(17, 0)
	FCD_06651_eeprom1__Write(17, 0);

	// Name: Eprom Seconds for timer, Type: Component Macro: eeprom1::Write(18, 0)
	FCD_06651_eeprom1__Write(18, 0);

	// Name: Call Component Macro, Type: Component Macro: eeprom1::Write(19, 3)
	FCD_06651_eeprom1__Write(19, 3);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Loop_Formula3()
{

	// Name: Calculation, Type: Calculation:
	// PWM_Clock2 = 0
	FCV_PWM_CLOCK2 = 0;

	// Name: Disable PWM Drive, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Enable Read, Type: Output: 0 -> C0
	SET_PORT_PIN(C,0,(0));

	// Name: EMF to settle. Creates small click at zero velocity high torque, Type: Delay: 150 us
	FCI_DELAYBYTE_US(150);

	// Name: Get KE value from Motor, Type: Component Macro: Velocity_Float=Velocity_Feedback::GetInt()
	FCV_VELOCITY_FLOAT = flt_fromi(FCD_0d101_Velocity_Feedback__GetInt());

	//Comment:
	//_________________________________________

	//Comment:
	//_________________________________________

	// Name: Disable Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Re-Enable PWM, Type: Output: 0 -> C1
	SET_PORT_PIN(C,1,(0));

#if 0 // Disabled code
	// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::Enable()
	FCD_0df41_PWM1DRIVE__Enable();

#endif // Disabled code

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Normalize speed numbers, Type: Calculation:
	// Velocity_Float = Velocity_Float * Velocity_Gain
	FCV_VELOCITY_FLOAT = flt_mul(FCV_VELOCITY_FLOAT, FCV_VELOCITY_GAIN);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Get error value, Type: Calculation:
	// error_average = Profile_Float - Velocity_Float
	// Error_Average = Error_Average * pgain
	FCV_ERROR_AVERAGE = flt_sub(FCV_PROFILE_FLOAT, FCV_VELOCITY_FLOAT);
	FCV_ERROR_AVERAGE = flt_mul(FCV_ERROR_AVERAGE, FCV_PGAIN);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Calculation, Type: Calculation:
	// ramp_store = Ramp
	// //Ramp = 0
	FCV_RAMP_STORE = FCV_RAMP;

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	//Comment:
	//At Vmax formulas

	// Name: Calculation, Type: Calculation:
	// Ramp_float = float2int ((profile_float) + (error_Average) + (Integrate_Result)) * 2
	FCV_RAMP_FLOAT = flt_fromi(flt_toi(flt_add(flt_add((FCV_PROFILE_FLOAT), (FCV_ERROR_AVERAGE)), flt_fromi((FCV_INTEGRATE_RESULT)))) * 2);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Decision, Type: Decision: ramp_float < 0 OR Ramp_Float > 800?
	if (flt_lt(FCV_RAMP_FLOAT, 0) | flt_gt(FCV_RAMP_FLOAT, 800))
	{

		// Name: Goto Connection Point, Type: Goto Connection Point: [A]: A
		goto FCC_Loop_Formula3_A;

	// } else {

	}

	// Name: Load Ramp with New Value, Type: Calculation:
	// Ramp = float2int (Ramp_Float)
	FCV_RAMP = flt_toi(FCV_RAMP_FLOAT);

	// Name: Change Speed at run time?, Type: Component Macro: Change_bit=QuadEncoder1::CheckForChanges()
	/* Error: Unknown or missing component : QuadEncoder1::CheckForChanges */;

	// Name: Decision, Type: Decision: velocity_float < 5?
	if (flt_lt(FCV_VELOCITY_FLOAT, 5))
	{

		// Name: Calculation, Type: Calculation:
		// velocity_float = 5
		FCV_VELOCITY_FLOAT = 5;

	// } else {

	}

	//Comment:
	//Comment

	// Name: Decision, Type: Decision: display_count > 2?
	if (FCV_DISPLAY_COUNT > 2)
	{

#if 0 // Disabled code
		// Name: Display Actual amps, Type: Calculation:
		// Display_count = 0
		// display_position = 0x4d
		// Float_Value = profile_float
		FCV_DISPLAY_COUNT = 0;
		FCV_DISPLAY_POSITION = 0x4d;
		FCV_FLOAT_VALUE = FCV_PROFILE_FLOAT;

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_display_float()
		FCM_Write_display_float();

#endif // Disabled code

#if 0 // Disabled code
		// Name: Display Actual amps, Type: Calculation:
		// Display_count = 0
		// display_position = 0x0d
		// //Display_value = Foot_Pedal
		// Float_Value = Velocity_Float
		FCV_DISPLAY_COUNT = 0;
		FCV_DISPLAY_POSITION = 0x0d;
		FCV_FLOAT_VALUE = FCV_VELOCITY_FLOAT;

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_display_float()
		FCM_Write_display_float();

#endif // Disabled code

#if 0 // Disabled code
		// Name: Display Actual amps, Type: Calculation:
		// Display_count = 0
		// display_position = 0x22
		// //Display_value = Foot_Pedal
		// Float_Value = velocity_float
		FCV_DISPLAY_COUNT = 0;
		FCV_DISPLAY_POSITION = 0x22;
		FCV_FLOAT_VALUE = FCV_VELOCITY_FLOAT;

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_display_float()
		FCM_Write_display_float();

#endif // Disabled code

#if 0 // Disabled code
		// Name: Display Actual amps, Type: Calculation:
		// Display_count = 0
		// display_position = 0x61
		// //Display_value = Foot_Pedal
		// Float_Value = Ramp_float
		FCV_DISPLAY_COUNT = 0;
		FCV_DISPLAY_POSITION = 0x61;
		FCV_FLOAT_VALUE = FCV_RAMP_FLOAT;

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_display_float()
		FCM_Write_display_float();

#endif // Disabled code

#if 0 // Disabled code
		// Name: Call Macro, Type: User Macro: Write_Display_Value()
		FCM_Write_Display_Value();

#endif // Disabled code

	} else {

		// Name: Calculation, Type: Calculation:
		// Display_Count = Display_Count + 1
		FCV_DISPLAY_COUNT = FCV_DISPLAY_COUNT + 1;

	}

	// Name: Crap Number made it here, Type: Decision: ramp > 800 OR ramp < 1?
	if (FCV_RAMP > 800 | FCV_RAMP < 1)
	{

		//Comment:
		//Crap Number made it here

	} else {

		// Name: Call Component Macro, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(Ramp)
		FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(FCV_RAMP);

	}

	// Name: Connection Point, Type: Declare Connection Point: [A]: A
FCC_Loop_Formula3_A:
	;

}

/*=----------------------------------------------------------------------=*\
   Use :Runs at powerdown only
       :Collects seconds and stores in eeprom to be displayed at powerup
       :Requires 4 eprom locations - Addressed 15,16,17,18
       :Equates to 1.1745 million hours
       :Interrupt get_i/o collects seconds
\*=----------------------------------------------------------------------=*/
void FCM_Run_Clock()
{

}

/*=----------------------------------------------------------------------=*\
   Use :Supplementary implementations
\*=----------------------------------------------------------------------=*/




/*========================================================================*\
   Use :Main
\*========================================================================*/
void main()
{
	#ifdef INTOSCHELPER
		INTOSCHELPERCODE
	#endif
ADCON0=0x3D;
ADCON1 = 0x0F;
UCFG = 0x08;
cr_bit(PIE2, USBIE);




	// Name: C Code, Type: C Code:
	/*
	  Enter C code below this comment
	*/
	OSCCON = 0x71;
	INTCON2 &=0x7F;
	//UCON = 0x13;

	// Name: Set Array values, Type: Calculation:
	// Integrate[0] = 0
	// Integrate[1] = 0
	// Integrate[2] = 0
	// Integrate[3] = 0
	// Integrate[4] = 0
	// Integrate[5] = 0
	// Integrate[6] = 0
	// Integrate[7] = 0
	// Integrate[8] = 0
	// Integrate[9] = 0
	FCV_INTEGRATE[0] = 0;
	FCV_INTEGRATE[1] = 0;
	FCV_INTEGRATE[2] = 0;
	FCV_INTEGRATE[3] = 0;
	FCV_INTEGRATE[4] = 0;
	FCV_INTEGRATE[5] = 0;
	FCV_INTEGRATE[6] = 0;
	FCV_INTEGRATE[7] = 0;
	FCV_INTEGRATE[8] = 0;
	FCV_INTEGRATE[9] = 0;

	// Name: Delay, Type: Delay: 500 ms
	FCI_DELAYINTWDT_MS(500);

	// Name: Turn on Hi Voltage, Type: Output: 1 -> B1
	SET_PORT_PIN(B,1,(1));

	// Name: Disable PWM, Type: Output: 1 -> C1
	SET_PORT_PIN(C,1,(1));

	// Name: Disable Velocity Read, Type: Output: 1 -> C0
	SET_PORT_PIN(C,0,(1));

	// Name: Prevent toggle on mclr/re3, Type: Output: 0 -> B6
	SET_PORT_PIN(B,6,(0));

	// Name: Input, Type: Input: E3 -> Junk
	FCV_JUNK = GET_PORT_PIN(E,3);

	// Name: Get program button status, Type: Input: B5 -> Program_button
	FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

	// Name: Get foot switch status, Type: Input: B7 -> Foot_Pedal
	FCV_FOOT_PEDAL = GET_PORT_PIN(B,7);

	// Name: Forward Reverse Switch, Type: Input: B3 -> Forward_Reverse
	FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

	// Name: Init 9600 Rate to change default display speed, Type: Component Macro: uart9600::Initialise()
	FCD_047b1_uart9600__Initialise();

	// Name: Change Serial to 57600 Baud, Type: User Macro: Change_Baud()
	FCM_Change_Baud();

	// Name: UART1 Init, Type: Component Macro: UART1::Initialise()
	FCD_047b2_UART1__Initialise();

	// Name: Active on powerup, Type: Loop: While Foot_Pedal = 0 AND Program_button = 1
	while (1)
	{

		// Name: Get foot switch status, Type: Input: B7 -> Foot_Pedal
		FCV_FOOT_PEDAL = GET_PORT_PIN(B,7);

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// display_string = "Pedal on Powerup!"
		FCV_DISPLAY_POSITION = 0x00;
		FCI_SCOPY("Pedal on Powerup!",18, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();


		if ((FCV_FOOT_PEDAL == 0 & FCV_PROGRAM_BUTTON == 1) == 0) break;
	}

	// Name: Interrupt, Type: Interrupt: Enable TMR0
	cr_bit(T0CON, T0CS);
	st_bit(T0CON, T0SE);
	T0CON = (T0CON & 0xF0) | 0x07;
	st_bit(INTCON, GIE);
	st_bit(INTCON, TMR0IE);

	// Name: Get Vmax Gain Value, Type: Component Macro: temp_byte=eeprom1::Read(11)
	FCV_TEMP_BYTE = FCD_06651_eeprom1__Read(11);

	// Name: Vmax Gain not set?, Type: Decision: temp_byte > 240?
	if (FCV_TEMP_BYTE > 240)
	{

	} else {

		// Name: Call Component Macro, Type: Component Macro: vmax_gain=eeprom1::Read(11)
		FCV_VMAX_GAIN = flt_fromi(FCD_06651_eeprom1__Read(11));

		// Name: Calculation, Type: Calculation:
		// vmax_gain = vmax_gain / 100
		FCV_VMAX_GAIN = flt_div(FCV_VMAX_GAIN, 100);

	}

	// Name: Display hours and torque settings, Type: User Macro: Display_hours()
	FCM_Display_hours();

	// Name: Check for Powerup  Setup, Type: Input: B5 -> Program_button
	FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

	// Name: Delay, Type: Delay: 100 ms
	FCI_DELAYBYTEWDT_MS(100);

	// Name: Should be 99, Type: Component Macro: Power_up_Checksum=eeprom1::Read(13)
	FCV_POWER_UP_CHECKSUM = FCD_06651_eeprom1__Read(13);

	// Name: Decision, Type: Decision: Program_button = 0 AND Foot_Pedal = 1 OR Power_up_Checksum != 99?
	if (FCV_PROGRAM_BUTTON == 0 & FCV_FOOT_PEDAL == 1 | FCV_POWER_UP_CHECKSUM != 99)
	{

		// Name: New CHip Installed, Type: Decision: Power_up_Checksum != 99?
		if (FCV_POWER_UP_CHECKSUM != 99)
		{

			// Name: Call Macro, Type: User Macro: CLS()
			FCM_CLS();

			// Name: Call Macro, Type: User Macro: Eprom_Defaults()
			FCM_Eprom_Defaults();

			// Name: Calculation, Type: Calculation:
			// display_string = "Eprom Default ok"
			// display_position = 0x00
			FCI_SCOPY("Eprom Default ok",17, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);
			FCV_DISPLAY_POSITION = 0x00;

			// Name: Call Macro, Type: User Macro: Write_display_text()
			FCM_Write_display_text();

			// Name: Delay, Type: Delay: 2 s
			FCI_DELAYBYTEWDT_S(2);

			// Name: Call Macro, Type: User Macro: CLS()
			FCM_CLS();

		// } else {

		}

		// Name: Calculation, Type: Calculation:
		// display_position = 0x00
		// display_string = "Beep on/off"
		FCV_DISPLAY_POSITION = 0x00;
		FCI_SCOPY("Beep on/off",12, FCV_DISPLAY_STRING,FCVsz_DISPLAY_STRING);

		// Name: Call Macro, Type: User Macro: Write_display_text()
		FCM_Write_display_text();

		// Name: Calculation, Type: Calculation:
		// program_button_count = 0
		FCV_PROGRAM_BUTTON_COUNT = 0;

		// Name: 5 seconds, Type: Loop: While program_button = 0 AND program_button_count < 50
		while (1)
		{

			// Name: Check for Powerup  Setup, Type: Input: B5 -> Program_button
			FCV_PROGRAM_BUTTON = GET_PORT_PIN(B,5);

			// Name: Delay, Type: Delay: 100 ms
			FCI_DELAYBYTEWDT_MS(100);

			// Name: Calculation, Type: Calculation:
			// program_button_count = program_button_count + 1
			FCV_PROGRAM_BUTTON_COUNT = FCV_PROGRAM_BUTTON_COUNT + 1;


			if ((FCV_PROGRAM_BUTTON == 0 & FCV_PROGRAM_BUTTON_COUNT < 50) == 0) break;
		}

		// Name: Decision, Type: Decision: program_button_count = 50?
		if (FCV_PROGRAM_BUTTON_COUNT == 50)
		{

			// Name: Factory Setup, Type: User Macro: Factory_setup_mode()
			FCM_Factory_setup_mode();

			// Name: Call Macro, Type: User Macro: CLS()
			FCM_CLS();

		} else {

			// Name: Call Macro, Type: User Macro: BEEP_ENABLE()
			FCM_BEEP_ENABLE();

		}

		//Comment:
		//New pic chip eprom will read 255
		//Or button pressed will cause factory set mode

	// } else {

	}

	// Name: Decision, Type: Decision: Program_button = 0 AND Foot_Pedal = 0?
	if (FCV_PROGRAM_BUTTON == 0 & FCV_FOOT_PEDAL == 0)
	{

		// Name: Call Macro, Type: User Macro: Torque_limits()
		FCM_Torque_limits();

		// Name: Call Macro, Type: User Macro: Accel_Rate_Adder()
		FCM_Accel_Rate_Adder();

	// } else {

	}

	// Name: Get rate value for accel, Type: Component Macro: Accel_Rate_Adder=eeprom1::Read(19)
	FCV_ACCEL_RATE_ADDER = FCD_06651_eeprom1__Read(19);

	// Name: Develop a constant Either default or eprom value, Type: Calculation:
	// vmax_store = vmax_gain
	FCV_VMAX_STORE = FCV_VMAX_GAIN;

	// Name: Call Startup, Type: User Macro: Startup()
	FCM_Startup();

	// Name: Call Macro, Type: User Macro: PU_Counter()
	FCM_PU_Counter();

	// Name: Call Macro, Type: User Macro: Splash_Screen()
	FCM_Splash_Screen();

	// Name: Calculation, Type: Calculation:
	// Clear_Places = 6
	// Clear_position = 0x00
	FCV_CLEAR_PLACES = 6;
	FCV_CLEAR_POSITION = 0x00;

	//Comment:
	//***************Setup PWM registers

	// Name: Load Calibrated Temperature, Type: Component Macro: Motor_temp_calibrate=eeprom1::Read(12)
	FCV_MOTOR_TEMP_CALIBRATE = flt_fromi(FCD_06651_eeprom1__Read(12));

	// Name: Convert motor temperature to degrees c, Type: Calculation:
	// //Motor_temp_calibrate = Motor_temp_calibrate / 6
	// Motor_temp_calibrate = (Motor_temp_calibrate - 65) * .72 //gets degrees c.
	FCV_MOTOR_TEMP_CALIBRATE = flt_mul((flt_sub(FCV_MOTOR_TEMP_CALIBRATE, 65)), .72);

	// Name: Loop, Type: Loop: While 1
	while (1)
	{

		// Name: Calculation, Type: Calculation:
		// Display_count = 0
		// display_position = 0x4d
		// Display_Value = ramp_float
		FCV_DISPLAY_COUNT = 0;
		FCV_DISPLAY_POSITION = 0x4d;
		FCV_DISPLAY_VALUE = flt_toi(FCV_RAMP_FLOAT);

		// Name: FS State, Type: Decision: Foot_Pedal = 0?
		if (FCV_FOOT_PEDAL == 0)
		{

			// Name: Calculation, Type: Calculation:
			// State = 1
			FCV_STATE = 1;

			// Name: Call Component Macro, Type: Component Macro: LSB=eeprom1::Read(3)
			FCV_LSB = FCD_06651_eeprom1__Read(3);

			// Name: Call Component Macro, Type: Component Macro: MSB=eeprom1::Read(4)
			FCV_MSB = FCD_06651_eeprom1__Read(4);

			// Name: Calculation, Type: Calculation:
			// Command_Speed = msb + lsb
			FCV_COMMAND_SPEED = FCV_MSB + FCV_LSB;

			// Name: Input, Type: Input: B3 -> Forward_Reverse
			FCV_FORWARD_REVERSE = GET_PORT_PIN(B,3);

			// Name: COntinue without waiting for stop, Type: Decision: Forward_Reverse = fr?
			if (FCV_FORWARD_REVERSE == FCV_FR)
			{

			} else {

				// Name: Call Macro, Type: User Macro: Direction()
				FCM_Direction();

			}

			// Name: Interrupt, Type: Interrupt: Disable TMR0
			cr_bit(INTCON, TMR0IE);

			// Name: Clear PWM component, Type: Component Macro: PWM1DRIVE::SetDutyCycle10Bit(0)
			FCD_0df41_PWM1DRIVE__SetDutyCycle10Bit(0);

			// Name: Interrupt, Type: Interrupt: Enable TMR0
			cr_bit(T0CON, T0CS);
			st_bit(T0CON, T0SE);
			T0CON = (T0CON & 0xF0) | 0x07;
			st_bit(INTCON, GIE);
			st_bit(INTCON, TMR0IE);

			// Name: Call Macro, Type: User Macro: Proportional()
			FCM_Proportional();

		// } else {

		}

		// Name: Progam button, Type: Decision: Program_button = 0?
		if (FCV_PROGRAM_BUTTON == 0)
		{

			// Name: Call Macro, Type: User Macro: BEEP()
			FCM_BEEP();

			// Name: User_program_mode, Type: User Macro: User_Program_mode()
			FCM_User_Program_mode();

			// Name: Call Macro, Type: User Macro: Splash_Screen()
			FCM_Splash_Screen();

		// } else {

		}


	}

	mainendloop: goto mainendloop;
}



/*========================================================================*\
   Use :Interrupt
\*========================================================================*/
void MX_INTERRUPT_MACRO(void)
{

	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


	//Handler code for [TMR0]
	#ifndef MX_INTHANDLER_INTCON_TMR0IF
	#define MX_INTHANDLER_INTCON_TMR0IF
	if (ts_bit(INTCON, TMR0IF) && ts_bit(INTCON, TMR0IE))
	{
		FCM_Get_IO();
		cr_bit(INTCON, TMR0IF);
	}
	#else
	#warning "This interrupt has previously been enabled, so the macro <Get_IO> may never get called."
	#endif


}




