//14 de julio del 2009
//Proyecto de Módulo DAC 18 bits para sistema de nanoposicionamiento a piezoeléctrico
//

/**/

#include <16F88.h>       // 
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,MCLR //
#use delay(clock=8000000,RESTART_WDT) // Oscilador a 8 Mhz
#use rs232(baud=100k,parity=N,xmit=PIN_B5,rcv=PIN_B2,bits=9,sync_master)// ver página 135 del ManualC
#use i2c(SLAVE, SDA=PIN_B1, SCL=PIN_B4, address=0x14, fast)
//use rs232(SYNC_MASTER	baud=38400, xmit=PIN_B2, rcv=PIN_B1)// RS232 Estándar
#include <LCD420.C>

#define OSC_8MHZ    4	//Define oscilador a 4 MHz con PCON=8d
#define Presencia	1	//Presencia de sensores
#define NoPresencia	0	//No Presencia

#define B1		Pin_A0
#define B2		Pin_A1
#define B3		Pin_B6
#define B4		Pin_B7

#define	fL_1	0
#define	fL_2	1
#define	fL_3	2
#define	fL_4	3
#define ret		200
#define	TRMT	1
#define WCK		PIN_A0
#define	SCKP	4

#byte flags=0x7F
#byte	TXSTA=0x98
#byte	BAUDCTL=0x187

#byte SSPCON1=0xFC6
#bit  SSPOV=SSPCON1.6

// VARIABLES EN RAM ///////////////////////////////////////////////////////////
//int Entrega,i,j,k,m=0;

int k,i;
BYTE address, buffer[20];
char rcvchar=0x00;   // último carácter recibido

// INTERRUPCIONES /////////////////////////////////////////////////////////////
#INT_SSP
void ssp_interupt ()
{
   BYTE incoming, state;

	state = i2c_isr_state();

	if(state < 0x80)//PAR					//Master is sending data PAR
	{
		incoming = i2c_read();
		buffer[k] = incoming;
		k++;
		//if(state == 1)							//First received byte is address
		//	address = incoming;
		//if(state == 2)							//Second received byte is data
		//	buffer[address] = incoming;
	}
	if(state == 0x80)//IMPAR				//Master is requesting data
	{
		i2c_write(i);
		i++;
	}
}
// Programa Principal /////////////////////////////////////////////////////////
	flush();
void main(void) 
{
	i=0;
	//setup_uart(INVERT);
	bit_set(BAUDCTL,SCKP);
   //setup_wdt(WDT_288MS);
   output_high(Pin_B7);
   buffer[0]=0x06;
   buffer[1]=0x07;
   buffer[2]=0x08;
   buffer[3]=0x09;
   buffer[4]='E';
   buffer[5]='F';
   buffer[6]='G';
   buffer[7]='H';
   buffer[8]='I';
   buffer[9]='J';
   buffer[10]='K';
   buffer[11]='L';
   buffer[12]='M';
   buffer[13]='N';
   buffer[14]='O';
   buffer[15]='P';

	k=0;
	enable_interrupts(INT_SSP);
	enable_interrupts(GLOBAL);
	flags=0;
do
{
	printf("%c",0x55);
	output_low(WCK);
	while(!bit_test(TXSTA,TRMT));
	printf("%c",0xFF);
	output_high(WCK);
	restart_wdt();
	delay_us(200);
}while(TRUE);
}