📄 u4091bm.c
字号:
/*_____________________________________________________________________________________________________________________________________________________________________________
U4091BM.c
Version 1.0 Julio 9 2008
Funciones del nucleo encargado de comunicarse serialmente con el chip telefonico U4091BM
Ubiquos Ltda. Alexander Espinosa G.
Cada frame de comunicaciones contiene 12 bits en el formato:
A0-A3- Direccion del registro que se accesa
D0-D7- Contenido del registro seleccionado
Proceso de escritura:
El bit de datos debe estar estable cuando el clock este alto, se desplazan 12 bits y entra la indicacion de escritura
la transicion de la linea DATA mientras el CLK esta alto, inicia la carga interna
Proceso de lectura:
ciclo normal:
se envian direcciones de 4 bits seguidas del indicador de lectura y se produce una salida del U4091BM
_____________________________________________________________________________________________________________________________________________________________________________*/
/*_____________________________________________________________________________________________________________________________________________________________________________
colgar.c
Version 1.0 Julio 9 2008
Genera un cuelgue del transistor de control de OFF-HOOK
Ubiquos Ltda. Alexander Espinosa G.
_____________________________________________________________________________________________________________________________________________________________________________*/
void colgar()
{
P6OUT&=~CUELGUE; // colgar la linea telefonica
Ptr_rx_dtmf=0; // y preparar el receptor dtmf
Semaforo_dtmf|=TELEFONO_COLGADO;
Semaforo_dtmf&=~(TIMBRANDO+MARCANDO);
Banderas_u4091=COLGADO; // Indicar que el telefono esta colgado
Cta_repiques=0;
}
/*_____________________________________________________________________________________________________________________________________________________________________________
descolgar.c
Version 1.0 Julio 9 2008
Descuelga el telefono
Ubiquos Ltda. Alexander Espinosa G.
_____________________________________________________________________________________________________________________________________________________________________________*/
void descolgar()
{
P6OUT|=CUELGUE; // descolgar la linea telefonica
Ptr_rx_dtmf=0; // y preparar el receptor dtmf
Semaforo_dtmf&=~TELEFONO_COLGADO;
Semaforo_dtmf&=~(TIMBRANDO+MARCANDO);
Banderas_u4091&=~COLGADO; // Indicar telefono esta descolgado
Cta_repiques=0;
}
/*_____________________________________________________________________________________________________________________________________________________________________________
estado_linea.c
Version 1.0 Julio 9 2008
Establece si la linea esta presente, pasando inicialmente RINGEN a 1 y tomando varias tramas de referencia
Ubiquos Ltda. Alexander Espinosa G.
_____________________________________________________________________________________________________________________________________________________________________________*/
void estado_linea()
{
unsigned char Intentos;
P6OUT|=RINGEN;
Intentos=0;
do
{
leer_rapido_u4091();
}
while(++Intentos<5);
P6OUT&=~RINGEN;
if(Banderas_u4091 & RFDO)
{
Banderas_u4091|=LINEA_OK;
}
else
{
Banderas_u4091&=~LINEA_OK;
}
}
/*_____________________________________________________________________________________________________________________________________________________________________________
leer_rapido_u4091.c
Version 1.0 Julio 9 2008
Hace una lectura rapida de los bits D7(IZC) y D6(IVE)
Para detectar el estado de la linea, el control de ringer debe estar en alto
para detectar timbre se debe tener la linea de ringer en bajo
Ubiquos Ltda. Alexander Espinosa G.
_____________________________________________________________________________________________________________________________________________________________________________*/
void leer_rapido_u4091()
{
// Primero se genera un strobe, cambiando el estado de SDA mientras SCL esta activa alta
strobe_u4091();
// Proceder a invertir el sentido del pin de SDA a modo entrada
ENTRADA_SDA_U4091(); // pasar a modo entrada SDA
retardo_u4091(130);
// Realizar la lectura
APAGAR_CLK_U4091(); // Garantiza el clk en bajo
retardo_u4091(150);
ACTIVAR_CLK_U4091(); // Subir el clk para leer el bit 7
retardo_u4091(70);
Banderas_u4091&=~(RFDO+LIDET); // Borrar las banderas de interes
if(INPUT_SDA_4091) // si se lee 1 en la entrada
{
Banderas_u4091|=RFDO; // Se activa la bandera IVE (bit 6)
}
// leer el segundo bit
APAGAR_CLK_U4091(); // Garantiza el clk en bajo
retardo_u4091(150);
ACTIVAR_CLK_U4091(); // Subir el clk para leer el bit 6
retardo_u4091(70);
if(INPUT_SDA_4091) // si se lee 1 en la entrada
{
Banderas_u4091|=LIDET; // Se activa la bandera IZC (bit 7)
}
// Terminar el proceso de lectura y retornar el control de la SDA
APAGAR_CLK_U4091(); // Garantiza el clk en bajo
retardo_u4091(150);
SALIDA_SDA_U4091(); // Volver a modo salida la linea SDA
ACTIVAR_CLK_U4091(); // Inicia el proceso
}
/*_____________________________________________________________________________________________________________________________________________________________________________
leer_u4091.c
Version 1.0 Julio 9 2008
Leer los registros internos del chip telefonico U4091BM
Parametros-
Registro- Numero del registro que se lee
Ubiquos Ltda. Alexander Espinosa G.
_____________________________________________________________________________________________________________________________________________________________________________*/
unsigned char leer_u4091(unsigned char Registro)
{
unsigned char Contador;
// Ciclo de envio de la direccion del registro
Registro<<=1; // desplazamiento para insertar el bit de lectura
Registro|=0x01; // Bit de lectura
Contador=0;
do
{
APAGAR_CLK_U4091(); // Garantiza el clk en bajo
if(Registro & 0x10) // revisar el bit mas significativo de la direccion
{
ACTIVAR_SDA_U4091(); // si es 1, se enciende la linea de data
}
else
{
APAGAR_SDA_U4091(); // si es 0, se apaga la linea de data
}
retardo_u4091(150);
// Subir el nivel del reloj para latchar el bit en el U4091
ACTIVAR_CLK_U4091();
Registro<<=1; // Apuntar al siguiente bit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -