/***************************************************************

*                      Micro-GT IDE                            *

*                G-Tronic Robotics                             *

 *              Micro-GT Versatile I.D.E.                      *

*                By    Marco Visentini                         *

*              Piattaforma Micro-GT IDE                        *

*                   Mplab X & V8.50                            *

*                 Compiler Hitech c16                          *

****************************************************************/




/******************************************
 *       Come se usa sto strafanto        *
 * Per caricare con il bootloader la porta*
 * è imposta a 38400 con quarzo a 20Mhz   *
 * Per usare la seriale e inviare i dati  *
 * non spostare il cavo e non reimpostare *
 * la COM da pannello di controllo.       *
 * impostare hyperterminal a 19200        *
 *8 bit, nessun controllo di flusso.      *
 * non toccare gli altri prametri.        *
 * Dalla tastiera premere la sequenza:    *
 *       @  A  0 0 0  e invio             *
 *  per spegnere i led inviare            *
 *       @  I  0 0 0  e invio             *
 *****************************************/

#include <pic.h>
#include "delay.h"


extern void Par_ser(void);


unsigned char C1,C2,C3,C4,RxPos,Flags;
int r=0;


main(void)
{
PORTA = 0x00;		// azzera le porte
PORTB = 0x00;
PORTC = 0x00;

TRISA = 0x00;	        // tutte uscite per evitare interferenze
TRISB = 0x00; 		// uscite per servi
TRISC = 0b11000000;		// bit 6-7 Seriale

//Var_Init();		// init variabili posizione
ADCON1= 0x87;		// PORTA all digital mode

//Inizializzazione uart
TXSTA= 0x20;		// TX abilitato
RCSTA= 0X90;		// Registro RX USART
BRGH = 0;		// USART High velocity
SPBRG= 15;		// BRGH = 0 Baud Rate Generator (15=19200 baud 20Mhz)



//Inizializzazione TIMER1
T1CON   = 0;		// TIMER 1 resettato
T1CKPS1 = 0,T1CKPS0=0;	// TIMER1 prescaler = 1
T1OSCEN = 0;		// TIMER1 external oscillator disable
TMR1CS  = 0;		// TIMER1 internal clock (fosc/4)
TMR1ON  = 0;		// TIMER1 in STOP

//Inizializzazione interrupt
INTCON = 0;		// Interrupt disabilitato
PIE1   = 0;		// Interrupt di periferica disabilitati
GIE    = 1;		// Global Interrupt Enable
PEIE   = 1;		// Periferal Interrupt Enable
RCIE   = 1;		// USART Receive Interrupt Enable


while(1){
 if (Flags==1) Par_ser();
 DelayMs(2);	



 // Delay aggiuntivo
 }
}



void interrupt SerChar(void)    //prototipo ricezione
{
  if (RCREG==0x40 | RxPos > 6)  //se arriva la chiocciola dimensiona la stringa
   {
   C1=0,C2=0,C3=0,C4=0;		//azzero la stringa
   RxPos=0,Flags=0;
   }
  if (RxPos==1) C1=RCREG;	//ricezione della stringa comandi
  if (RxPos==2) C2=RCREG;
  if (RxPos==3) C3=RCREG;
  if (RxPos==4) C4=RCREG;
  if ((RxPos==5) && (RCREG==0x0d)) Flags=1; // <CR> terminator
  RxPos++;
}

void
Par_ser(void)		       // Analisi comandi
{
    int a;
   
 Flags=0;
 switch (C1)
  {
 
  case 0x41:    //carattere A
   RB0=1;
   DelayMs(8);
   break;
  case 0x42:	//carattere B
     
   RB0=0;
   DelayMs(8);
   break;
  case 0x43:	//carattere C
      
   RB1=1;
   DelayMs(8);
   break;
  case 0x44:	//carattere D
   RB1=0;
   DelayMs(8);
   break;
  case 0x45:	//carattere E
   RB2=1;
   DelayMs(8);
   break;
  case 0x46:	//carattere F
   RB2=0;
   DelayMs(8);
   break;
  case 0x47:	//carattere G
   RB3=1;
   DelayMs(8);
   break;
  case 0x48:	//carattere H
   RB3=0;
   DelayMs(8);
   break;
     case 0x49:	//carattere I
   RB4=1;
   DelayMs(8);
   break;
  case 0x4A:	//carattere J
   RB4=0;
   DelayMs(8);
   break;
  case 0x4B:	//carattere K
      RB5=1;
   DelayMs(8);
   break;
  case 0x4C:	//carattere L
      RB5=0;
   DelayMs(8);
   break;
 case 0x4D:	//carattere M
     RB6=1;
    DelayMs(8);
   break;
  case 0x4E:	//carattere N
      RB6=0;
    DelayMs(8);
   break;
  case 0x4F:	//carattere O
      RB7=1;
    DelayMs(8);
   break;
   case 0x50:	//carattere P
      RB7=0;
    DelayMs(8);
   break;

 
   case 0x63:	//carattere c
       PORTB=0b0000000;
      
   DelayMs(8);
   break;


  }
}


    
  

 



    






        





	






