extern char buffer[];

void i2c_isr(void)
{
	unsigned char buf,i;
	
	SSP1CON1bits.CKP = 0;
	putrs1USART((const far rom char *)"Starte ISR \r\n");
	INTCONbits.GIEL	 = 0;		//Disable alle interupts
	INTCONbits.GIEH	 = 0;		//Disable alle interupts
	PIR1bits.SSP1IF	 = 0;		//Clear Interrupt Flag bit
	SSP1STATbits.P = 0;		
	SSP1STATbits.BF = 0;
	for(i=0;i<45;i++)
	{
		i2cbuffer[i]= 0;
	}
	i = 0;
	if(SSP1BUF == 0x28)//Wenn im Buffer der Wert 0x28h (I2C-Adresse) steht, dann...
	{
		i2cbuffer[0] = ReadByte();//nächstes Byte einlesen vom I2C
		putrs1USART((const far rom char *)"Starte auswertung \r\n");
		switch(i2cbuffer[0]<<6)//Byte vom buffer[0] um sechs Stellen nach links verschieben...
		{
			case 0x00:putrs1USART((const far rom char *)"Starte Ausgangsroutine\r\n");
					  i = 1;
					  do 
					  {
						   	i2cbuffer[i]=ReadByte();
						  	i++;
						  	putrs1USART((const far rom char *)"Warte\r\n");
					  }while((i<45)&&(SSPSTATbits.P==0)); 
					  for(buf = 0;buf <i;buf++)
					  {
						 Write1USART(i2cbuffer[buf]);
						 putrs1USART((const far rom char *)"\r\n");
					  }
					  Write1USART(i2cbuffer);
					  putrs1USART((const far rom char *)"\r\n");
					  putrs1USART((const far rom char *)"ENDE Ausgangsroutine\r\n");
					  Close1USART();
					  Open1USART( USART_TX_INT_OFF & //Disable Uart Sende Interupt 
					   	        	USART_RX_INT_ON &  //Enable Uart Empfangs Interupt
						           	USART_ASYNCH_MODE &//Aktiviere Asynchron Übertragungs Modus
						       		USART_EIGHT_BIT &  //Aktiviere 8 Bit übertragung	
						           	USART_BRGH_HIGH, 51);// Setze Baud rate auf 9600 25 bei 4MHZ 
					  while(Busy1USART())
					  {
					    ;
					  }
					  setausgang(--i,&reset_count,led_status);
					  putrs1USART((const far rom char *)"Ausgang gesetzt\r\n");
			break;
			case 0x40:putrs1USART((const far rom char *)"Starte S0 out\r\n");
					  i = 1;
					  do 
					  {
						   	putrs1USART((const far rom char *)"Warte\r\n");
						  	i2cbuffer[i]=ReadByte();
						  	i++;
					  }while((i<11)&&(SSPSTATbits.P==0)); 
					  putrs1USART((const far rom char *)"ENDE S0 out\r\n");
					  s0out(i2cbuffer);
			break;
			case 0x80:
			break;
			case 0xC0:
			break;
		}
	}	
//	CloseI2C1();
	Delay10TCYx(50);
//	OpenI2C1(	SLAVE_7,
//	 			SLEW_OFF);
	SSP1CON1bits.CKP = 1;
	SSP1STATbits.P = 0;	
	PIR1bits.SSP1IF	 = 0;		//Clear Interrupt Flag bit	
	SSP1STATbits.BF = 0;
//	SSP1CON1bits.SSPOV = 0;

	putrs1USART((const far rom char *)"I2C resetet\r\n");
  	PIE1bits.SSP1IE = 1;
  	IPR1bits.SSP1IP = 1;
//  	SSPCON2bits.SEN = 1;         // clock stretch enable for slave transmit and receive mode
// 	SSPSTATbits.CKE = 1;         // SMBus specific inputs disabled = 0, enabled = 1
// 	SSP1ADD = 0x28;  			 // Setzte I²C Slave adress auf 0x80Hex 
//	SSPCON1bits.SSPEN = 1;       // enables serial port pins SDA und SCL
	INTCONbits.GIEH =1;	
	INTCONbits.GIEL =1;
}

void setausgang(unsigned int buffercount,char *count,volatile unsigned char status[])
{
	unsigned char j = 0;
	unsigned char i = 0;
	unsigned char k = 0;
	char volatile befehlsarr[3][14]={0};
	Write1USART(buffercount<<8);
	putrs1USART((const far rom char *)"\r\n");
	for(k=0;k<5;k++)
	{
		Write1USART(i2cbuffer[k]);
		putrs1USART((const far rom char *)"\r\n");
	}
	
	putrs1USART((const far rom char *)"Starte setausgang\r\n");
	for(k=0;k<= buffercount ;k++)
	{
		putrs1USART((const far rom char *)"Starte for schleife\r\n");
		befehlsarr[i][j]= i2cbuffer[k];
		if(i<3)
		{
			i++;
		}
		else
		{
			i = 0;
			j++;
		}
	}
	i = k/3;
	Write1USART(i);
	while(i>0)
	{
		i--;
		putrs1USART((const far rom char *)"Switch starte\r\n");
		switch(befehlsarr[2][i])
		{
			case 0xFF:   	  	  	  	  	  	  	  	 
			break;
			case 0x00:   	 
			break;
			case 0x01:  
			break;
			case 0x02:  
			break;
			case 0x04:  
			break;
			case 0x08:  
			break;
			case 0x10:  
			break;
			case 0x20:  
			break;
			case 0x40:  
			break;
			default : putrs1USART((const far rom char *)"Error nix gefunden\r\n");
			break;
		}
		putrs1USART((const far rom char *)"Switch ende\r\n");
	}
	for(i=0;i<3;i++)
	{
		for(j=0;j<14;j++)
		{
			befehlsarr[i][j]=0;
		}
	}
	j = 0;
	i = 0;
	k = 0;
}


