La puesta en marcha del mt8870 es muy sencilla si lo tienes bien conectado, el modo de conexión esta muy explicito en el datasheet
el resto es codigo
aca te dejo un codigo para que lo estudies
///////////////////////
//RECEPTOR DTMF//
///////////////////////
#define DTMF_Q4 PIN_B1
#define DTMF_Q3 PIN_B2
#define DTMF_Q2 PIN_B3
#define DTMF_Q1 PIN_B4 //el pin B0 lo tengo como interrupción externa del pic para cuando el integrado detecta un numero configurado de low to high
/*ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);*/
//////////////////
//FUNCIONES//
/////////////////
// cuando se activa la interrupción levanto una bandera para luego en un loop infinito detecto la bandera y llamo la función y bajo la bandera
void almacenar_numero_linea()
{
putc('A');
delay_ms(10);
Q1=input(DTMF_Q1);
Q2=input(DTMF_Q2);
Q3=input(DTMF_Q3);
Q4=input(DTMF_Q4);
if(Q1==1)
bit_set(numero,0);
if(Q1==0)
bit_clear(numero,0);
if(Q2==1)
bit_set(numero,1);
if(Q2==0)
bit_clear(numero,1);
if(Q3==1)
bit_set(numero,2);
if(Q3==0)
bit_clear(numero,2);
if(Q4==1)
bit_set(numero,3);
if(Q4==0)
bit_clear(numero,3);
printf(" %u ",numero);
numerodis[i]=numero; // numerodis[] es un vector de tamaño i de 8 bit donde se almacenan los numeros discados
++i;
}