//**********************************************************************************************************************************
//Descrizione programma : trasferisce lo stato di un pulsate su un led
//Scritto da : Andrea Cipriani
//Versione : 1.0
//Descrizione del funzionamento : Legge lo stato di un pulsante (Tasto) collegato a RB0 e ne trasferisce lo stato su un led (LED0)
//connesso a RA0. Lo stato negato del pulsante viene trasferito su un altro led (LED1) collegato a RA1.
//Il tasto non è dotato di resistenza di pull-up o pull-down. 

//**********************************************************************************************************************************
//Dati di sistema
//Fclock : 2.457.600 Hz
//Tclock : ~400 nS
//Tistruzione : ~1.6 uS
//Watchdog : no
//Quarzo : XT

//*********************************************************************************************************************************
//Cablaggio porte

//RA0 (OUT) -->
//RA1 (OUT) -->
//RA2 (OUT) -->
//RA3 (OUT) -->
//RA4 (OUT) -->
//RA5 (OUT) -->

//RB0 (IN)  <--
//RB1 (OUT) -->
//RB2 (OUT) -->
//RB3 (OUT) -->
//RB4 (OUT) -->
//RB5 (OUT) -->
//RB6 (OUT) -->
//RB7 (OUT) -->

//RC0 (OUT) -->
//RC1 (OUT) -->
//RC2 (OUT) -->
//RC3 (OUT) -->
//RC4 (OUT) -->
//RC5 (OUT) -->
//RC6 (OUT) -->
//RC7 (OUT) -->

//RD0 (OUT) -->
//RD1 (OUT) -->
//RD2 (OUT) -->
//RD3 (OUT) -->
//RD4 (OUT) -->
//RD5 (OUT) -->
//RD6 (OUT) -->
//RD7 (OUT) -->

//RE0 (OUT) -->
//RE1 (OUT) -->
//RE2 (OUT) -->

//*********************************************************************************************************************************
//INCLUDE files
#include <pic.h>

//*********************************************************************************************************************************
//Prototipi
void SystemInit (void);

//*********************************************************************************************************************************
//Simboli
#define Led0 RA0
#define Led1 RA1
#define Tasto RB0

//*********************************************************************************************************************************
//Tipo di segnale (analogico o digitale) sui portx
#define ADMode 0x06;   //tutto in digitale

//Collegamenti a PORTA
//RA0 (OUT) --> LED0
//RA1 (OUT) --> LED1
//RA2 (OUT) --> NU
//RA3 (OUT) --> NU
//RA4 (OUT) --> NU
//RA5 (OUT) --> NU
#define TrisaInit 0x00;

//Colelgamenti a PORTB
//RB0 (IN)  <-- PULSANTE
//RB1 (OUT) --> NU
//RB2 (OUT) --> NU
//RB3 (OUT) --> NU
//RB4 (OUT) --> NU
//RB5 (OUT) --> NU
//RB6 (OUT) --> NU
//RB7 (OUT) --> NU
#define TrisbInit 0x01;

//Colelgamenti a PORTC
//RC0 (OUT) --> NU
//RC1 (OUT) --> NU
//RC2 (OUT) --> NU
//RC3 (OUT) --> NU
//RC4 (OUT) --> NU
//RC5 (OUT) --> NU
//RC6 (OUT) --> NU
//RC7 (OUT) --> NU
#define TriscInit 0x00;

//Colelgamenti a PORTD
//RD0 (OUT) --> NU
//RD1 (OUT) --> NU
//RD2 (OUT) --> NU
//RD3 (OUT) --> NU
//RD4 (OUT) --> NU
//RD5 (OUT) --> NU
//RD6 (OUT) --> NU
//RD7 (OUT) --> NU
#define TrisdInit 0x00;

//Colelgamenti a PORTE
//RE0 (OUT) --> NU
//RE1 (OUT) --> NU
//RE2 (OUT) --> NU
#define TriseInit 0x00;


//*********************************************************************************************************************************
//Main
void main(void)
{
 SystemInit();
 for (;;)
 {
  Led0 = Tasto;
  Led1 = !Tasto;
 }
 
}


//*********************************************************************************************************************************
//Definizione funzioni

void SystemInit (void)
{
 //Tipi di segnali sui portx
 ADCON1 = ADMode;

 //Direzione portx
 PORTA = 0;
 TRISA = TrisaInit;
 TRISB = TrisbInit;
 TRISC = TriscInit;
 TRISD = TrisdInit;
 TRISE = TriseInit;

 //Pull-up su i pin di PORTB
 OPTION = 0x00; 
}


