por ffcprog » 14 Jan 2009 10:23
tudo bom meu querido!!
Olha estes dtmf decoder paralelo são bem simples.
Ele faz a amostragem em BCD em 4 bits, e tem mais 1 pino que quando ele recebe um sinal dtmf este pinos vai de 0 para 1, e se mantem neste estado enquanto sinal dtmf presente, e o bcd também.
Você pode pegar este pino, e simplesmente ligar na interrupção.
Para transformar um BCD em decimal ASCII de forma a escrever em um LCD por exemplo, basta pegar o bcd que chegou somar o valor 48 ou 0x30 HEx.
Suponha que chegou o valor BCD assim 0111 = 7 decimal para o uC, para nós os humanos, basta somar BCD + 48 = '7', ou seja caracter 7.
ex: suponha que você ligou estes 4 bits, em RA.0...3, e aquele pino que eu comentei no int RB0 em borda de subida.
void interrupt(){
//teste para saber se foi RB0
Se sim{
minha_var = PORTA;
minha_var += 48;
usart_write(minha_var);
}
Este simples exemplo, conforme recebe dtmf, ele vai mandando pela serial para o PC por exemplo.
Deu pra clarear as idéias ?
ffcprog