bueno , no lo tengo muy comentado , a ver que te parece :
//..................escritura del bloque..................
PORTFbits.RF0=0; //OPERACIONES DE LA TARJETA ENCENDIDAS
for(i=0;i<15;i++)
{ //tiempo de espera para normalizacion
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
}
antes=5;
// comando de escritura CMD24
WriteSPI1(0x58); //comando 24
while(SPI1STATbits.SPITBF==1);
WriteSPI1(alta & 0x00FF);
while(SPI1STATbits.SPITBF==1);
WriteSPI1(media & 0x00FF);
while(SPI1STATbits.SPITBF==1);
WriteSPI1(baja & 0x00FF);
while(SPI1STATbits.SPITBF==1);
WriteSPI1(0x00); //no varia nunca
while(SPI1STATbits.SPITBF==1);
WriteSPI1(0xFF); //CRC PREESTABLECIDO
while(SPI1STATbits.SPITBF==1);
//espero respuesta de la tarjeta
do{
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
while(DataRdySPI1()!=1);
antes=ReadSPI1();
}while(antes!=0x00);
WriteUART2(antes);
antes=8; //para evitar problemas le pongo un numero
// que no puede enviar nunca
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
//espero un poco antes de enviar los datos
WriteSPI1(0xFE); //BYTE DE COMIENZO
while(SPI1STATbits.SPITBF==1);
for(i=0;i<=511;i++){
WriteSPI1(array
); //envio de datos
while(SPI1STATbits.SPITBF==1);
}
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
WriteSPI1(0xFF); //CRC PREESTABLECIDO
while(SPI1STATbits.SPITBF==1);
//espero la respuesta de la tarjeta
// el and es para prevenir algun problema
//ya que mis registros son de 16 bits
do{
while(DataRdySPI1()!=1){
WriteSPI1(0xFF);
while(SPI1STATbits.SPITBF==1);
}
antes=ReadSPI1();
}while(((antes) & (0X000F))!=0x05);
WriteUART2((antes) & (0X0F));
PORTFbits.RF0=1;
for(k=0;k<5;k++)
{
WriteSPI1(0xFF); //ciclos para que la tajeta termine
while(SPI1STATbits.SPITBF==1);
}
Lo siento me tengo que ir , nos vemos mañana
, y me comentas como te ha ido . Adeu.