Un saludo:Estoy trabajando con el pcd 3312(generador de tonos) y cm8870(decodificador de tonos).El decodificador funciona bien con un telefono,pero con el pcd 3312 no puedo generar los numeros a discar.Estoy con el 12f629 oscilador interno,no se si sera la frecuencia del cristal o que sera,pero no anda ni empujado.En el simulador (sim84)rota el registro contador y por cada rotacion da un pulso bajo el reloj(creo que es asi).Esta codigo lo encontre en el foro(no me acuerdo de quien es,que me disculpe)pero le he cambiado los retardos arriba y abajo y sigue igual.Si alguien me puede ayudar se lo agradeceria.Att jose
movlw .5 ;en este caso envía el 5
call dtmf ;llama a la subrutina
call retardo_60ms ;llama a la sub de retardo
;para que suene unos 60ms
movlw .31 ;con este número detiene la salida del tono
;puede ser cualquier número que termine con 5 unos...
call dtmf ;lo envía
call retardo_40ms ;suponiendo que enviamos otro dígito
;tiene que haber un tiempo con silencio
;entre dígito y dígito.
dtmf movwf digito ;carga el número a enviar en dígito
movlw d'5' ;carga el contador en 5
movwf contador ;va a contar cinco veces
bsf portb,rb4 ;se asegura que el pulso del clock esté en uno, en este caso es rb4
dtmf_bucle bsf portb,rb3 ;saca el dato a transmitir por rb3
btfss digito,0 ;si el bit a transmitir es uno lo deja como está
bcf portb,rb3 ;si no lo pone en cero
bcf portb,rb4 ;flanco de bajada del clock, transmite el bit
nop ;el tiempo de retardo es 5 uS
nop ;para una frecuencia de 100khz aprox.
nop
nop
bsf portb,rb4 ;sube el pulso de reloj
rrf digito,1 ;va rotando el bit a transmitir
bcf status,c ;limpia el carry
decfsz contador,1 ;si llegó a cero el contador, sale del bucle
goto dtmf_bucle ;vuelve al bucle
return ;retorna al programa