#include "usart.h"

void InitUsart1 (void)
{

//-Abertura das portas-

LATCbits.LATC6=0;
TRISCbits.TRISC6=0; //TX - transmissão
TRISCbits.TRISC7=1; //RX - recepção
ODCON2bits.U1OD=1; //Open-drain capability enabled (USART1)


//-Definição do Bauderate-

/*9600@20MHz*/
SPBRGH1 = 0b00000010; //definição de baudrate
SPBRG1 = 0b00001000; //definição de baudrate

/*9600@25MHz*/
//SPBRGH1 = 0b00000010; //definição de baudrate
//SPBRG1 = 0b10001010; //definição de baudrate

/*9600@4MHz*/
/*
SPBRGH1 = 0; //definição de baudrate
SPBRG1 = 25; //definição de baudrate
*/
TXSTA1bits.BRGH = 1; 
BAUDCON1bits.BRG16 = 1;


//-Activar comunicação assincrona-

TXSTA1bits.SYNC = 0; //modo assincrono
RCSTA1bits.SPEN = 1; //abilita a porta serie


//-Activar interrupts-

RCONbits.IPEN = 1; //estabelece prioridade nos interrupts
INTCONbits.GIEH = 1; //activa os interrupts de alta prioridade
INTCONbits.GIEL = 0; //não activa os interrupts de baixa prioridade

//IPR1bits.TX1IP = 1; //estabelece interrupt de transmissão na EUSART como alta prioridade
IPR1bits.RC1IP = 1; //estabelece interrupt de recepção na EUSART como alta prioridade

PIE1bits.TX1IE = 0; // interrupt de tranmissão off
PIE1bits.RC1IE = 1; //interrupts de recepção on


//-Seleccionar tamanho de mensagem-

TXSTA1bits.TX9 = 0; //comunicação a 8bits
RCSTA1bits.RX9 = 0; //comunicação a 8bits


//-Activar transmissão-

TXSTA1bits.TXEN = 1; //habilita a transmissão


//-Activar recepção-

RCSTA1bits.CREN = 1; //habilita a recepção

}


void InitUsart2 (void)
{

RPINR16=16;
RPOR15=5;

//-Abertura das portas-

LATCbits.LATC4=0;
TRISCbits.TRISC4=0; //TX - transmissão
TRISCbits.TRISC5=1; //RX - recepção
ODCON2bits.U2OD=1; //Open-drain capability enabled (USART2)


//-Definição do Bauderate-

/*9600@20MHz*/
SPBRGH2 = 0b00000010; //definição de baudrate
SPBRG2 = 0b00001000; //definição de baudrate

/*9600@25MHz*/
//SPBRGH2 = 0b00000010; //definição de baudrate
//SPBRG2 = 0b10001010; //definição de baudrate

/*9600@4MHz*/
/*
SPBRGH2 = 0; //definição de baudrate
SPBRG2 = 25; //definição de baudrate
*/
TXSTA2bits.BRGH = 1; 
BAUDCON2bits.BRG16 = 1;


//-Activar comunicação assincrona-

TXSTA2bits.SYNC = 0; //modo assincrono
RCSTA2bits.SPEN = 1; //abilita a porta serie


//-Activar interrupts-

RCONbits.IPEN = 1; //estabelece prioridade nos interrupts
INTCONbits.GIEH = 1; //activa os interrupts de alta prioridade
INTCONbits.GIEL = 0; //não activa os interrupts de baixa prioridade

//IPR1bits.TX1IP = 1; //estabelece interrupt de transmissão na EUSART como alta prioridade
IPR3bits.RC2IP = 1; //estabelece interrupt de recepção na EUSART como alta prioridade

PIE3bits.TX2IE = 0; // interrupt de tranmissão off
PIE3bits.RC2IE = 1; //interrupts de recepção on


//-Seleccionar tamanho de mensagem-

TXSTA2bits.TX9 = 0; //comunicação a 8bits
RCSTA2bits.RX9 = 0; //comunicação a 8bits


//-Activar transmissão-

TXSTA2bits.TXEN = 1; //habilita a transmissão


//-Activar recepção-

RCSTA2bits.CREN = 1; //habilita a recepção

}