//************************************************************************************
//**  
//**  File name:     C:\Documents and Settings\Nicolas\Mes documents\Electronic\programmes\Flowcode v3\Télécommande + Receiver\Transmitter\télécommande 32 bit\telecommande_32 bit.c
//**  Generated by:  Flowcode v3.6.11.53
//**  Date:          Saturday, February 05, 2011 16:18:28
//**  Licence:       50 User
//**  Registered to: Don Bosco Woluwe LABELO2
//**  
//**  
//**     NOT FOR COMMERCIAL USE
//**  
//**  http://www.matrixmultimedia.com
//************************************************************************************


#define MX_PIC

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

//Functions
#include <system.h>
#pragma CLOCK_FREQ 20000000

//Configuration data

//Internal functions
#include "C:\Program Files\Matrix Multimedia\Flowcode V3\FCD\internals.h"

//Macro function declarations
void FCM_Startbit();
void FCM_modulated_pulse();
void FCM_Logic_1_signal();
void FCM_Logic_0_signal();
void FCM_IR_signal(char FCL_ADDRESS_MSB, char FCL_ADDRESS_LSB, char FCL_COMMAND_MSB, char FCL_COMMAND_LSB);


//Variable declarations
char FCV_SWITCH_LAMP0_OFF;
char FCV_SWITCH_LAMP1_OFF;
char FCV_SWITCH_LAMP1_ON;
char FCV_SLEEP_MODE_COUNTER;
char FCV_SWITCH_LAMP0_ON;

char FCLV_LOOP1;
char FCLV_LOOP2;
char FCLV_LOOP3;
char FCLV_LOOP4;


//Supplementary defines


//Macro implementations

void FCM_Startbit()
{
	
	//Loop
	//Loop: Loop 139 times
	for (FCLV_LOOP1=0; FCLV_LOOP1<139; FCLV_LOOP1++)
	{
		//Call Macro
		//Call Macro: modulated_pulse
		FCM_modulated_pulse();


	}


	//Output
	//Output: 0 -> A0
	trisa = trisa & 0xfe;
	if (0)
		porta = (porta & 0xfe) | 0x01;
	else
		porta = porta & 0xfe;


	//Delay
	//Delay: 4 ms
	delay_ms(4);


	//C Code
	//C Code:
	delay_10us(38);


}

void FCM_modulated_pulse()
{
	
	//Output
	//Output: 1 -> A0
	trisa = trisa & 0xfe;
	if (1)
		porta = (porta & 0xfe) | 0x01;
	else
		porta = porta & 0xfe;


	//C Code
	//C Code:
	delay_us(6);


	//Output
	//Output: 0 -> A0
	trisa = trisa & 0xfe;
	if (0)
		porta = (porta & 0xfe) | 0x01;
	else
		porta = porta & 0xfe;


	//C Code
	//C Code:
	delay_us(17);


}

void FCM_Logic_1_signal()
{
	
	//Loop
	//Loop: Loop 18 times
	for (FCLV_LOOP2=0; FCLV_LOOP2<18; FCLV_LOOP2++)
	{
		//Call Macro
		//Call Macro: modulated_pulse
		FCM_modulated_pulse();


	}


	//Output
	//Output: 0 -> A0
	trisa = trisa & 0xfe;
	if (0)
		porta = (porta & 0xfe) | 0x01;
	else
		porta = porta & 0xfe;


	//Delay
	//Delay: 1 ms
	delay_ms(1);


	//C Code
	//C Code:
	delay_10us(62);


}

void FCM_Logic_0_signal()
{
	
	//Loop
	//Loop: Loop 18 times
	for (FCLV_LOOP3=0; FCLV_LOOP3<18; FCLV_LOOP3++)
	{
		//Call Macro
		//Call Macro: modulated_pulse
		FCM_modulated_pulse();


	}


	//Output
	//Output: 0 -> A0
	trisa = trisa & 0xfe;
	if (0)
		porta = (porta & 0xfe) | 0x01;
	else
		porta = porta & 0xfe;


	//C Code
	//C Code:
	delay_10us(55);



}

void FCM_IR_signal(char FCL_ADDRESS_MSB, char FCL_ADDRESS_LSB, char FCL_COMMAND_MSB, char FCL_COMMAND_LSB)
{
	
	//Local variable definitions
	char FCL_ADDRESS_BIT[16];
	char FCL_COMMAND_BIT[16];
	char FCL_BIT;

	//Calculation
	//Calculation:
	//  IR_signal.bit = 0
	//  // bit 15
	//  IR_signal.Address_bit[15] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[15] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 14
	//  IR_signal.Address_bit[14] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[14] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 13
	//  IR_signal.Address_bit[13] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[13] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 12
	//  IR_signal.Address_bit[12] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[12] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 11
	//  IR_signal.Address_bit[11] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[11] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 10
	//  IR_signal.Address_bit[10] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[10] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 9
	//  IR_signal.Address_bit[9] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[9] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 8
	//  IR_signal.Address_bit[8] = IR_signal.Address_LSB MOD 2
	//  IR_signal.Address_LSB = IR_signal.Address_LSB / 2
	//  IR_signal.Command_bit[8] = IR_signal.Command_LSB MOD 2
	//  IR_signal.Command_LSB = IR_signal.Command_LSB / 2
	//  // bit 7
	//  IR_signal.Address_bit[7] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[7] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 6
	//  IR_signal.Address_bit[6] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[6] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 5
	//  IR_signal.Address_bit[5] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[5] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 4
	//  IR_signal.Address_bit[4] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[4] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 3
	//  IR_signal.Address_bit[3] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[3] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 2
	//  IR_signal.Address_bit[2] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[2] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 1
	//  IR_signal.Address_bit[1] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[1] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	//  // bit 0
	//  IR_signal.Address_bit[0] = IR_signal.Address_MSB MOD 2
	//  IR_signal.Address_MSB = IR_signal.Address_MSB / 2
	//  IR_signal.Command_bit[0] = IR_signal.Command_MSB MOD 2
	//  IR_signal.Command_MSB = IR_signal.Command_MSB / 2
	FCL_BIT = 0;
	// bit 15
	FCL_ADDRESS_BIT[15] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[15] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 14
	FCL_ADDRESS_BIT[14] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[14] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 13
	FCL_ADDRESS_BIT[13] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[13] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 12
	FCL_ADDRESS_BIT[12] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[12] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 11
	FCL_ADDRESS_BIT[11] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[11] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 10
	FCL_ADDRESS_BIT[10] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[10] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 9
	FCL_ADDRESS_BIT[9] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[9] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 8
	FCL_ADDRESS_BIT[8] = FCL_ADDRESS_LSB % 2;
	FCL_ADDRESS_LSB = FCL_ADDRESS_LSB / 2;
	FCL_COMMAND_BIT[8] = FCL_COMMAND_LSB % 2;
	FCL_COMMAND_LSB = FCL_COMMAND_LSB / 2;
	// bit 7
	FCL_ADDRESS_BIT[7] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[7] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 6
	FCL_ADDRESS_BIT[6] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[6] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 5
	FCL_ADDRESS_BIT[5] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[5] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 4
	FCL_ADDRESS_BIT[4] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[4] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 3
	FCL_ADDRESS_BIT[3] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[3] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 2
	FCL_ADDRESS_BIT[2] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[2] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 1
	FCL_ADDRESS_BIT[1] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[1] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	// bit 0
	FCL_ADDRESS_BIT[0] = FCL_ADDRESS_MSB % 2;
	FCL_ADDRESS_MSB = FCL_ADDRESS_MSB / 2;
	FCL_COMMAND_BIT[0] = FCL_COMMAND_MSB % 2;
	FCL_COMMAND_MSB = FCL_COMMAND_MSB / 2;
	

	//Call Macro
	//Call Macro: Startbit
	FCM_Startbit();


	//Loop
	//Loop: While IR_signal.bit < 16
	while (1)
	{
		//Decision
		//Decision: IR_signal.Address_bit[IR_signal.bit]?
		if (FCL_ADDRESS_BIT[FCL_BIT])
		{
			//Call Macro
			//Call Macro: Logic_1_signal
			FCM_Logic_1_signal();


		} else {
			//Call Macro
			//Call Macro: Logic_0_signal
			FCM_Logic_0_signal();


		}


		//Calculation
		//Calculation:
		//  IR_signal.bit = IR_signal.bit + 1
		FCL_BIT = FCL_BIT + 1;
		

		if ((FCL_BIT < 16) == 0) break;
	}


	//Calculation
	//Calculation:
	//  IR_signal.bit = 0
	FCL_BIT = 0;
	

	//Loop
	//Loop: While IR_signal.bit < 16
	while (1)
	{
		//Decision
		//Decision: IR_signal.Command_bit[IR_signal.bit]?
		if (FCL_COMMAND_BIT[FCL_BIT])
		{
			//Call Macro
			//Call Macro: Logic_1_signal
			FCM_Logic_1_signal();


		} else {
			//Call Macro
			//Call Macro: Logic_0_signal
			FCM_Logic_0_signal();


		}


		//Calculation
		//Calculation:
		//  IR_signal.bit = IR_signal.bit + 1
		FCL_BIT = FCL_BIT + 1;
		

		if ((FCL_BIT < 16) == 0) break;
	}


	//Comment:
	//Endbit


	//Loop
	//Loop: Loop 18 times
	for (FCLV_LOOP4=0; FCLV_LOOP4<18; FCLV_LOOP4++)
	{
		//Call Macro
		//Call Macro: modulated_pulse
		FCM_modulated_pulse();


	}


	//Delay
	//Delay: 60 ms
	delay_ms(60);


}

//Supplementary implementations


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


	//Interrupt initialisation code
	option_reg = 0xC0;


	//Loop
	//Loop: While 1
	while (1)
	{
		//Input
		//Input: A1 -> switch_lamp0_ON
		trisa = trisa | 0x02;
		FCV_SWITCH_LAMP0_ON = ((porta & 0x02) == 0x02);


		//Decision
		//Decision: switch_lamp0_ON?
		if (FCV_SWITCH_LAMP0_ON)
		{
			//Call Macro
			//Call Macro: IR_signal(0xE0, 0xE0, 0x00, 0x01)
			FCM_IR_signal(0xE0, 0xE0, 0x00, 0x01);


		} else {
			//Input
			//Input: A2 -> switch_lamp0_OFF
			trisa = trisa | 0x04;
			FCV_SWITCH_LAMP0_OFF = ((porta & 0x04) == 0x04);


			//Decision
			//Decision: switch_lamp0_OFF?
			if (FCV_SWITCH_LAMP0_OFF)
			{
				//Call Macro
				//Call Macro: IR_signal(0xE0, 0xE0, 0x00, 0x03)
				FCM_IR_signal(0xE0, 0xE0, 0x00, 0x03);


			} else {
				//Input
				//Input: A3 -> switch_lamp1_ON
				trisa = trisa | 0x08;
				FCV_SWITCH_LAMP1_ON = ((porta & 0x08) == 0x08);


				//Decision
				//Decision: switch_lamp1_ON?
				if (FCV_SWITCH_LAMP1_ON)
				{
					//Call Macro
					//Call Macro: IR_signal(0xE0, 0xE0, 0x00, 0x06)
					FCM_IR_signal(0xE0, 0xE0, 0x00, 0x06);


				} else {
					//Input
					//Input: A4 -> switch_lamp1_OFF
					trisa = trisa | 0x10;
					FCV_SWITCH_LAMP1_OFF = ((porta & 0x10) == 0x10);


					//Decision
					//Decision: switch_lamp1_OFF?
					if (FCV_SWITCH_LAMP1_OFF)
					{
						//Call Macro
						//Call Macro: IR_signal(0xE0, 0xE0, 0x00, 0x09)
						FCM_IR_signal(0xE0, 0xE0, 0x00, 0x09);


					}


				}


			}


		}


	}


	mainendloop: goto mainendloop;
}

void interrupt(void)
{
}



