#include "p18lf26k22.h"
#include "stdio.h"
#include "usart.h"

void InterruptHigh(void);
void InitEUSART1(void);
void InitEUSART2(void);
void main(void);


///////////////////////////////////////// Soros Port inicializálása ///////////////////////////////////////////

// EUSART1 egység inicializálása (RC6-RC7) - GPS
void InitEUSART1()
{
	Open1USART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_BRGH_LOW & USART_CONT_RX & USART_EIGHT_BIT & USART_ASYNCH_MODE,51);
	PORTC=0;
	LATC=0;
	ANSELC=0b01000000;
	TRISC=0b10111111;
}

// EUSART2 egység inicializálása (RB6-RB7) - USB
void InitEUSART2()
{
	Open2USART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_BRGH_LOW & USART_EIGHT_BIT & USART_ASYNCH_MODE,12);
	PORTB=0;
	LATB=0;
	ANSELB=0b01000000;
	TRISB=0b10111111;
}

////////////////////////////////////////// Megszakítások kezelése /////////////////////////////////////////////

#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
	_asm
	goto InterruptHigh
	_endasm
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////

#pragma code 
#pragma interrupt InterruptHigh
void InterruptHigh ()
{
	// Vételi megszakítások (EUSART1)
	
	if(PIR1bits.RC1IF)                                                  // Receive buffer (RCREG1) is full
	{
		PIR1bits.RC1IF=0;											    // RC1IF flag törlése
		RCSTA1bits.CREN=0;												
		Write2USART(Read1USART());
		RCSTA1bits.CREN=1;												// Vétel újraindítása
	}
}

///////////////////////////////////////////// Főprogram (main) ////////////////////////////////////////////////

void main()
{
	// Lokális változók deklarálása //
		
	// Megszakítások inicializálása //
	INTCON=0xC0;
 	
	// High priority beállítása // 						
	IPR1bits.RC1IP=1;													// EUSART1 high priority
	
	// Inicializáló függvények (MCU) //

	InitEUSART1();
	InitEUSART2();
									
	// Végtelen ciklus //
	
	while(1)
	{
	}	
}
