//*************************               ***************************
// Usart start v2.0
// modulo: Usart_start_2.x
// autore: EGi
// data:  3 novembre 2015
// descrizione: test di trasmissione di una stringa in uscita
// dall'usart (TX = RC6 pin 25, RX = RC7 pin 26)
// librerie Laurtec v3.3.0, MPLABX v2.30, XC8 v1.33
// picmicro: PIC18F4550
// clock: 20MHz
// scheda: Freedom Light
//******************************************************************
#include <xc.h>
#include <p18f4550.h>
#include "PIC18F4550_config.h"	// contiene i "Pragma"
#define LCD_DEFAULT
#include <LCD_44780.h>
#include <LCD_44780.c>
#include <delay.c>
#include "usart.h"	// della micropic
#include "buzzer.h"
#define BUTTON_1 PORTBbits.RB4
#define BUTTON_2 PORTBbits.RB5
#define	LEDverde LATDbits.LATD0 
#define	LEDrosso LATDbits.LATD1

//*************************************
//     Prototipi delle funzioni
//*************************************
void board_initialization (void);
   
//***********************************************
//*               Programma Principale			*
//***********************************************

int main (void){

	 board_initialization();	// inizializzazioni
	 
	//*************************************
	// Inizializzazione LCD
	//*************************************
	LCD_initialize(20);
    LCD_backlight(TURN_OFF_LED_LCD);
    LCD_cursor(0,0);	// (NO cursor, NO Blinking)
	LCD_goto_xy(3,1);	// (colonna, riga)
    LCD_write_message("Usart start");
	LCD_goto_xy(6,2);	// (colonna, riga)
    LCD_write_message("v2.0");
	delay_s(10);
	LCD_clear();
	LCD_goto_line(2);
	LCD_write_message("...start");
		
	while (BUTTON_1 == 1);	// attendo la pressione del tasto 2
	LCD_clear();
    //putrsUSART("\n");
	putrsUSART("$P:L1G:0:Test Led;");
	LCD_goto_line(2);
	LCD_write_message("sent message");
	while(1);
}// end main

//*************************************
//    Funzione inizializzazione
//*************************************
 void board_initialization (void) {
	 // Imposto PORTA
    LATA = 0x00;
    TRISA = 0xFF;	// tutte ingressi
    // Imposto PORTB
    LATB = 0x00;
    TRISB = 0xFF;	// tutte ingressi
    // Imposto PORTC
    LATC = 0b0000000;
    TRISC = 0b10111110;	// tutte ingressi tranne RC0(cicalino) e RC6(Tx)
    // Imposto PORTD
    LATD = 0x00;
    TRISD = 0x00;	// tutte uscite
    // Imposto PORTE
    LATE = 0x00;
    TRISE = 0xFF;	// tutte ingressi
	
	//Attivo i restitori di pull-up su PORTB
    INTCON2bits.RBPU = 0;
	// attivo alta la porta RC7(Rx)durante il boot del modulo
	LATCbits.LATC7 = 1;	
	
	//*****************************************************	
	// Configura l'USART, 8 bit, 57600 bit/s
	// 1 bit stop, 0 bit parità, interruzione RX abilitata
	//*****************************************************
	OpenUSART( USART_TX_INT_OFF &
	USART_RX_INT_OFF &
	USART_ASYNCH_MODE &
	USART_EIGHT_BIT &
	USART_CONT_RX &
	USART_BRGH_HIGH,
	21);
	 }
