void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char TextString[256];
  unsigned int UniqueID = CSpinEdit1->Value;
  int StartPercent, cnt;

  CGauge1->Progress = 0;
    
  //config data pins as output
  OutputPort(nAddress+2, InputPort(nAddress+2)&0xDF);

  //Enable buffers
  SetOE(1);

  //Start programming
  SetMOSI(0);
  SetSCK(0);
  SetReset(0);
  Sleep(1);
  SetReset(1);
  for (cnt=0; cnt<50; cnt++)
  {
    CGauge1->AddProgress(1);
    Sleep(75);
  }

  StartPercent = CGauge1->PercentDone;
  for (cnt=0; cnt<16; cnt++)
  {
    SetMOSI((bool)(UniqueID&(0x8000>>cnt)));
    SetSCK(1);
    Sleep(1);
    SetSCK(0);
    Sleep(1);
    CGauge1->AddProgress(((100-StartPercent)*cnt)/32);
  }
  unsigned int ControlValue = 0xAC5A;
  for (cnt=0; cnt<16; cnt++)
  {
    SetMOSI((bool)(ControlValue&(0x8000>>cnt)));
    SetSCK(1);
    Sleep(1);
    SetSCK(0);
    Sleep(1);
    CGauge1->AddProgress(((100-StartPercent)*cnt)/32);
  }
  Sleep(100);
  
  //Start reset
  SetMOSI(0);
  SetSCK(0);

  SetReset(0);
  Sleep(1);
  SetReset(1);

  //Disable buffers
  SetOE(0);
}
/////////////////////////////////////////////////////////////////////////////////
/// SPIWrite.
/// Propósito: Envia um caractere através do pino MOSI<br>
/// Entradas: char dado, dado que será enviado<br>
/// Saídas: Nenhuma
///
/// \param [in] dado char que será enviado através do pino MOSI
/////////////////////////////////////////////////////////////////////////////////
void SPIWrite(char dado){	  
	int i;
	for(i=7; i>=0; i--){				// para os 8 bits do caractere
		if(dado & (1 << i ))            // faz um AND com uma máscara 
										// que se move até percorrer os 8 bits
			SetMOSI();					// seta o pino
		else 						    // ou
			ClearMOSI();				// zera o pino

		DelaySPI(10);					// aguarda e gera pulsos de clock
		SetSCK();                       // para o dispositivo slave SPI
		DelaySPI(10);
		ClearSCK();
		DelaySPI(10);
	}
}
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  //config data pins as output
  OutputPort(nAddress+2, InputPort(nAddress+2)&0xDF);

  //Enable buffers
  SetOE(1);

  //Start reset
  SetMOSI(0);
  SetSCK(0);

  SetReset(0);
  Sleep(1);
  SetReset(1);

  //Disable buffers
  SetOE(0);
}