void cargar_dato()
{
if(bit_test(numero,0)==1)
D0=1;
if(bit_test(numero,0)==0)
D0=0;
if(bit_test(numero,1)==1)
D1=1;
if(bit_test(numero,1)==0)
D1=0;
if(bit_test(numero,2)==1)
D2=1;
if(bit_test(numero,2)==0)
D2=0;
if(bit_test(numero,3)==1)
D3=1;
if(bit_test(numero,3)==0)
D3=0;
if(bit_test(numero,4)==1)
D4=1;
if(bit_test(numero,4)==0)
D4=0;
}
void enviar_digito()
{
output_low(DTMF_CE);
delay_ms(10);
numero=numerodis[j];
cargar_dato();
for(j=0;j<=i;++j)
{
//envío del D0
output_high(DTMF_CLK);
DTMF_DATA=D0;
delay_us(5);
output_low(DTMF_CLK);
delay_us(5);
//envío del D1
output_high(DTMF_CLK);
DTMF_DATA=D1;
delay_us(5);
output_low(DTMF_CLK);
delay_us(5);
//envío del D2
output_high(DTMF_CLK);
DTMF_DATA=D2;
delay_us(5);
output_low(DTMF_CLK);
delay_us(5);
//envío del D3
output_high(DTMF_CLK);
DTMF_DATA=D3;
delay_us(5);
output_low(DTMF_CLK);
delay_us(5);
//envío del D4
output_high(DTMF_CLK);
DTMF_DATA=D4;
delay_us(5);
output_low(DTMF_CLK);
numero=numerodis[j];
cargar_dato();
printf(" %u ",numero);
//tiempo de vida del tono
delay_ms(500);
}
//rutina de stop data
for(x=0;x<=4;++x)
{
output_high(DTMF_CLK);
DTMF_DATA=1;
delay_us(5);
output_low(DTMF_CLK);
delay_us(5);
}
output_high(DTMF_CE);
}
void rediscar()
{
putc('r');
output_high(rele_output1);
delay_ms(1000);
enviar_digito();
putc('F');
delay_ms(10);
output_low(rele_input);
for(j=0;j==i;++j)
numerodis[j]=0;
interrupcion_ext=0;
}
Hola Bikertron, o sea que estas haciendo un "repetidora" del numero discado...
pero por lo poco que se de C, estas colocando delay_us(5)
5 microsegundos.... creo que tendrias que colocar al menos 200 milisegundos...
Norberto
hola aca te mando el programa para el ht9200 en C del compilador CSS
revisa esta tabla amigo
sip y va bien :-/
hola aca te mando el programa para el ht9200 en C del compilador CSS
#include <16f628a.h>
#fuses HS,NOWDT,PUT,NOPROTECT,BROWNOUT,MCLR,NOLVP,NOCPD
#use delay(clock=20000000)
#use fast_io(b)
#byte porta = 0x05
#byte portb = 0x06
#bit dtmf_ce = portb.0
#bit dtmf_datos = portb.1
#bit dtmf_reloj = portb.2
int contador,numero;
void envia_dtmf(numero);
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
//
//
// Funcion Principal
//
//
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
void main()
{
set_tris_b(0);
output_b(0);
dtmf_ce = 0;
delay_ms(100);
envia_dtmf(2);//digito 2
envia_dtmf(31);//off dtmf
envia_dtmf(7);//digito 7
envia_dtmf(31);//off dtmf
envia_dtmf(6);//digito 6
envia_dtmf(31);//off dtmf
envia_dtmf(9);//digito 9
envia_dtmf(31);//off dtmf
envia_dtmf(10);//digito 0
envia_dtmf(31);//off dtmf
envia_dtmf(3);//digito 3
envia_dtmf(31);//off dtmf
envia_dtmf(3);//digito 3
envia_dtmf(31);//off dtmf
while(1);
}
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
//
// Funcion que envia codigo dtmf por el ht9200
//
//---------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------
void envia_dtmf(numero)
{
int a;
dtmf_reloj=1;
for(a=0;a<5;a++)
{
dtmf_datos=0;
if( bit_test(numero,0) )
dtmf_datos=1;
dtmf_reloj=0;
delay_us(5);
dtmf_reloj=1;
numero >>= 1;
}
delay_ms(60);
}
saludos! :-/
pd: habia cometido un error que si quieres el codigo de la tecla 0 en dtmf tienes que ver la tabla que esta en el datahseet del ht9200 donde verás que dice que tienes que mandar el numero 10.