⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u4091bm.c

📁 some routines to control a n u4091 using c for msp controller
💻 C
📖 第 1 页 / 共 2 页
字号:
/*_____________________________________________________________________________________________________________________________________________________________________________
  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 + -