📄 codec dtmf.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 + -