Hola yo trabaje con isd les paso algunas librerias que tengo de ejemplo quisas les pueda ser util, por lo general no se usa todas las lineas de datos independientes para controlar el isd ya que de esta forma permite cceder a espacios de reproduccion muy cortos, por lo general se usan 2 o 4 lineas de datos para controlar el isd + las usuales para play , rec y reset.
#bit isd_ce= 0x08.0
#bit isd_pd= 0x08.1
#bit isd_m0= 0x08.2
#bit isd_eom= 0x08.3
void ISD_CE_LOW_PULSE( void ) //CE -> LOW PULSE
{ isd_ce= 0;
delay_cycles (3);
isd_ce= 1;
}
void ISD_Reset ( void ) //ISD reset
{ isd_pd= 1;
delay_ms (30);
isd_ce= 1;
}
void NormalPlay ( void )
{ isd_m0= 0;
delay_cycles (1);
ISD_CE_LOW_PULSE ();
}
void FastForward ( void )
{ isd_m0= 1;
delay_cycles (1);
ISD_CE_LOW_PULSE ();
delay_ms (100); //wait until EOM or 100msec
}
//******************************************
//funcion para reproducir mensaje
//******************************************
void MessagePlay (char sequence)
{
ISD_Reset();
isd_pd= 0;
delay_ms (30);
while (sequence > 1)
{ FastForward();
sequence--;
}
NormalPlay ();
while (isd_eom); //wait until end of message for another message
delay_ms (13); //12.5 msec pulse width end of message signal
}
// reproductor / grabador de 4 areas fijas
#bit isd_ce= 0x08.0
#bit isd_pd= 0x08.1
#bit isd_PR= 0x08.2
#bit isd_eom= 0x08.3
#bit isd_A0= 0x09.0
#bit isd_A1= 0x09.1
void ISD_CE_LOW_PULSE( void ) //CE -> LOW PULSE
{ isd_ce= 0;
delay_cycles (3);
isd_ce= 1;
}
void ISD_CE_REC ( void ) //ISD record
{ // isd_pd= 1;
delay_ms (30);
isd_ce= 0;
delay_ms (19000);
isd_ce= 1;
}
void ISD_Reset ( void ) //ISD reset
{ isd_pd= 1;
delay_ms (30);
isd_ce= 1;
}
void Play ( void )
{ isd_ce=1;
// isd_m0= 0;
isd_PR= 1;
delay_cycles (1);
ISD_CE_LOW_PULSE ();
isd_ce=1;
}
void Rec ( void )
{ isd_ce=1;
// isd_m0= 0;
isd_PR= 0;
delay_cycles (1);
//ISD_CE_REC ();
isd_CE =0;
delay_ms (19000);
isd_CE =1;
}
/*void FastForward ( void )
{ isd_m0= 1;
delay_cycles (1);
ISD_CE_LOW_PULSE ();
delay_ms (100); //wait until EOM or 100msec
}*/
//******************************************
//Funcion para reproducir mensaje
//******************************************
void MessagePlay (char sequence)
{
ISD_Reset();
isd_pd= 0;
delay_ms (30);
disable_interrupts(INT_EXT);
Switch (sequence)
{ case "0": isd_A0= 0 ; isd_A1= 0 ; break;
case "1": isd_A0= 1 ; isd_A1= 0 ; break;
case "2": isd_A0= 0 ; isd_A1= 1 ; break;
case "3": isd_A0= 1 ; isd_A1= 1 ; break;
default: break;
}
Play ();
//while (isd_eom); //wait until end of message for another message
//delay_ms (13); //12.5 msec pulse width end of message signal
// delay_ms (20000);
ISD_Reset ();
enable_interrupts(INT_EXT);
}
void MessageRec (char sequence)
{
ISD_Reset ();
isd_pd= 0;
delay_ms (30);
disable_interrupts(INT_EXT);
Switch (sequence)
{ case "0" : isd_A0= 0 ; isd_A1= 0 ; break;
case "1" : isd_A0= 1 ; isd_A1= 0 ; break;
case "2" : isd_A0= 0 ; isd_A1= 1 ; break;
case "3" : isd_A0= 1 ; isd_A1= 1 ; break;
default: break;
}
Rec ();
// delay_ms (20000); //12.5 msec pulse width end of message signal
ISD_Reset ();
enable_interrupts(INT_EXT);
}