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

📄 codec dtmf.c

📁 simple codec using u4091
💻 C
字号:
#include <msp430x26x.h>
// Este programa comprueba el uso de las rutinas correspondientes a la plataforma de la consola Ubiquos U100
#include "constantes plataforma.h"
#include "variables plataforma.h"
#include "funciones plataforma.h"

unsigned char Volumen;
unsigned  char telefono[]={0x08,0x04,0x02,0x05,0x03,0x09,0x07,0x0E};
unsigned char Dmy;
unsigned int Timbrazos;
unsigned int Recuelgue;
unsigned int Tiempo_linea;
unsigned char Estado;
unsigned char Registros[16];
unsigned char Estado_anterior_movil1;
unsigned char Estado_anterior_movil2;


void enviar_registros();
void retardo(unsigned int Retardo);

void main()
{
  configurar();
  Banderas_codec=0;
  colgar();
  Timbrazos=0; Banderas_u4091=COLGADO;      Tiempo_linea=0;
 P6OUT&=~RINGEN;
 P5OUT=0;
 
 Dmy=0;
 do
 {
   Registros[Dmy]=0;
 }
 while(++Dmy!=16);
 enviar_registros();
 Volumen=0;
 
 // Configurar los bits de control del sistema
 do
 {
 escribir_u4091(R0_U4091, R0_DEFAULT); Registros[0]=R0_DEFAULT;
 escribir_u4091(R1_U4091, R1_DEFAULT); Registros[1]=R1_DEFAULT;
 escribir_u4091(R2_U4091, R2_DEFAULT); Registros[2]=R2_DEFAULT;
 escribir_u4091(R3_U4091, R3_DEFAULT); Registros[3]=R3_DEFAULT;
 escribir_u4091(R4_U4091, R4_DEFAULT); Registros[4]=R4_DEFAULT;
 escribir_u4091(R5_U4091, R5_DEFAULT); Registros[5]=R5_DEFAULT;
 escribir_u4091(R6_U4091, R6_DEFAULT); Registros[6]=R6_DEFAULT;
 escribir_u4091(R7_U4091, R7_DEFAULT); Registros[7]=R7_DEFAULT;
 escribir_u4091(R8_U4091, R8_DEFAULT); Registros[8]=R8_DEFAULT;
 escribir_u4091(R9_U4091, R9_DEFAULT); Registros[9]=R9_DEFAULT;
 escribir_u4091(R10_U4091, R10_DEFAULT); Registros[10]=R10_DEFAULT;
 escribir_u4091(R11_U4091, R11_DEFAULT); Registros[11]=R11_DEFAULT;
 escribir_u4091(R12_U4091, R12_DEFAULT); Registros[12]=R12_DEFAULT;
 escribir_u4091(R13_U4091, R13_DEFAULT); Registros[13]=R13_DEFAULT;
 escribir_u4091(R14_U4091, R14_DEFAULT); Registros[14]=R14_DEFAULT;
 escribir_u4091(R15_U4091, R15_DEFAULT); Registros[15]=R15_DEFAULT;
 }
 while(++Tiempo_linea<10);
 enviar_registros();
 Dmy=leer_u4091(0);                                                           // borrar la interrupcion
 Tiempo_linea=0;
 Estado_anterior_movil1=0;
 Estado_anterior_movil2=0;
  _BIS_SR(GIE);                                                              // Habilitar las interrupciones
 while(1)
  {
    if((P5IN & ESTADO_MOVIL1)&&(Estado_anterior_movil1==1))
    {
      while (!(IFG2&UCA0TXIFG));                                              // Buffer USCI_A0 TX vacio?
      UCA0TXBUF = 'X';                                                        // enviar acuse de recibo
      Estado_anterior_movil1=0;
    }
    if((P5IN & ESTADO_MOVIL1)==0)
    {
      Estado_anterior_movil1=1;
    }
    
    if((P5IN & ESTADO_MOVIL2)&&(Estado_anterior_movil2==0))
    {
      while (!(IFG2&UCA0TXIFG));                                              // Buffer USCI_A0 TX vacio?
      UCA0TXBUF = 'Y';                                                        // enviar acuse de recibo
      Estado_anterior_movil2=1;
    }
    if((P5IN & ESTADO_MOVIL2)==0)
    {
      Estado_anterior_movil2=0;
    }
    
    if(Banderas_codec & TX_DTMF)                                              // Hay datos DTMF para enviar?
    {
      Banderas_codec &=~TX_DTMF;                                              // Borrar la bandera 
      enviar_tono(Dato_tx_dtmf);                                              // enviar el tono correspondiente
    }
    
    if(Estado==1)
    {
      sensibilidad_microfono(0);
      descolgar(); Estado=0;
      while (!(IFG2&UCA0TXIFG));                                              // Buffer USCI_A0 TX vacio?
      UCA0TXBUF = 'd';                                                        // enviar acuse de recibo
    }

    if(Estado==2)
    {
      colgar(); Estado=0;
      while (!(IFG2&UCA0TXIFG));                                              // Buffer USCI_A0 TX vacio?
      UCA0TXBUF = 'c';                                                        // enviar acuse de recibo
    }
    
    if(Estado==7)
    {
        // Suspender el microfono para no generar realimentacion
      sensibilidad_microfono(0);
      descolgar();
      retardo(60000);
       llamar(telefono);       // desconectar todo
       Estado=0;
      while (!(IFG2&UCA0TXIFG));                                              // Buffer USCI_A0 TX vacio?
      UCA0TXBUF = 'l';                                                        // enviar acuse de recibo
    }

// seccion de volumen
   if((P2IN & BIT1)==0)
   {
     while((P2IN & BIT1)==0);
     if (++Volumen>0x1F) Volumen=0x1F;
     fijar_volumen();
   }
   if((P2IN & BIT2)==0)
   {
     while((P2IN & BIT2)==0);
     if (--Volumen>0x1F) Volumen=0x00;
     fijar_volumen();
   }
   // indicadores
     
   if(Semaforo_dtmf & TIMBRANDO)
    {
//      encender_indicador(LED_OK);
      Semaforo_dtmf&=~TIMBRANDO;
    }
    else
    {
//      apagar_indicador(LED_OK);
    }
   
//    
   
  }
}

void retardo(unsigned int Retardo)
{
  while(--Retardo);
}

void enviar_registros()
{
  unsigned char Dmy;
  Dmy=0;
  do
  {
    escribir_u4091(Dmy, Registros[Dmy]);
  }
  while(++Dmy<16);
}

#include "plataforma.c"
#include "U4091BM.c"
#include "conversion numerica.c"
#include "indicadores.c"
#include "plataforma dtmf.c"
#include "cmx865ads.c"
#include "interrupcion serial.c"







⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -