📄 soundintel.c.bak
字号:
case 0: temp=DTMF_DecordResouce_1;break;
case 1: temp=DTMF_DecordResouce_2;break;
default: return;
}
//资源连接
Writesoundway((SingleAddress-EXTTEL_ID),temp,ON);
WriteDTMF_Decord(i,dtmfdecord_res,SingleAddress);
WriteDTMF_Decord(i,dtmfdecord_state,1); //资源被启动
return;
}
}
}
void DecordDTMF()
{//扫描是否有信号解出
idata UCHAR i,temp_dv,temp_data;
EnDetectRing=0;
PORT=0xff;
temp_dv=PORT;
EnDetectRing=1;
PORT=0xff;
for(i=0;i<DTMF_DecordResouceNum;i++)
{
if(ReadDTMF_Decord(i,dtmfdecord_state)==1)
{//出现数据
if((bit)((temp_dv>>(4+i))&0x01))
{
WriteDTMF_Decord(i,dtmfdecord_state,2);
}
}
else if(ReadDTMF_Decord(i,dtmfdecord_state)==2)
{
if((bit)((temp_dv>>(4+i))&0x01))
{//数据有效期持续
return;
}
else
{//取数据
switch(i)
{
case 0: EnDTMFDecordOut1=1;break;
case 1: EnDTMFDecordOut2=1;break;
default: break;
}
PORT=0xff;
temp_data=PORT;
switch(i)
{
case 0: EnDTMFDecordOut1=0;break;
case 1: EnDTMFDecordOut2=0;break;
default: break;
}
temp_data=temp_data&0x0f;
if(temp_data==0x0a){temp_data=0;}
if(ReadDTMF_Decord(i,dtmfdecord_length)<12)
{
WriteDTMF_Decord(i,(ReadDTMF_Decord(i,dtmfdecord_length)+dtmfdecord_datastar),temp_data);
//数据存储
WriteDTMF_Decord(i,dtmfdecord_length,(ReadDTMF_Decord(i,dtmfdecord_length)+1));
//改变解码数据长度
}
else
{//数据区益处
;
}
//存储数据
SendDecodeMessage((ReadDTMF_Decord(i,dtmfdecord_res)), (ReadDTMF_Decord(i,dtmfdecord_length)),i);
//发送解码消息
WriteDTMF_Decord(i,dtmfdecord_state,1);
}
}
else
{
WriteDTMF_Decord(i,dtmfdecord_state,0);//出错归原
return;
}
}
}
UCHAR GetDTMFResNum(UCHAR originresID)
{
idata UCHAR i,temp=0;
for(i=0;i<DTMF_DecordResouceNum;i++)
{
if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
{
switch(i)
{
case 0: temp=DTMF_DecordResouce_1;break;
case 1: temp=DTMF_DecordResouce_2;break;
default: break;
}
return(temp);
}
}
return(0xff);//出错
}
void ReleaseDTMFRes(UCHAR originresID)
{
idata UCHAR i,j;
//首先要切断DTMF信号通道
i=GetDTMFResNum(originresID);
Writesoundway((originresID-EXTTEL_ID),i,OFF);
for(i=0;i<15;i++)
{
if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
{
for(j=0;j<15;j++)
{
WriteDTMF_Decord(i,j,0);
}
return;
}
}
}
void ConnectTowPoint_CD22100(UCHAR x,UCHAR y)
{
idata UCHAR add;
add=(x-1)+((y-1)<<2);
///if(add>=16){rs232write(0xfe);return;} //地址出错
CD22100_DataIn=CD_1; //接点连接
add=add&0x0f;
switch(add)
{
case 0 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 1 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 2 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 3 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 4 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 5 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 6 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 7 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 8 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 9 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 10:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 11:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 12:CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 13:CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 14:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 15:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
default: break;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_1;
}
void CutTowPoint_CD22100(UCHAR x,UCHAR y)
{
idata UCHAR add;
add=(x-1)+((y-1)<<2);
///if(add>=16){rs232write(0xfe);return;} //地址出错
CD22100_DataIn=CD_0; //断开连接
add=add&0x0f;
switch(add)
{
case 0 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 1 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 2 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 3 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
case 4 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 5 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 6 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 7 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
case 8 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 9 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 10:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 11:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
case 12:CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 13:CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 14:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
case 15:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
default: break;
}
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
CD22100_Storbe=CD_1;
}
void DTMFSend()
{
idata UCHAR i;
if(DTMFSendStep==0)
{//检查是否有发送任务
if(ReadCID(CID_state)==CID_STATE_ENREAD)
{//允许发送
if(ReadCID(CID_length)==0)
{//发送完毕 允许重新写入
for(i=0;i<CIDLENGTH;i++)
{
WriteCID(i,0x00);
}
WriteCID(CID_state,CID_STATE_SENDOVER); //发送完毕
WriteCID(CID_ptr,(CID_ptr+1));//初始化指针
return;
}
DTMFData=ReadCID(ReadCID(CID_ptr));
if(DTMFData==0){DTMFData=0x0a;}
DTMFSendStep=1; //启动发送过程
WriteCID(CID_ptr,(ReadCID(CID_ptr)+1)); //指向下一个数据
WriteCID(CID_length,(ReadCID(CID_length)-1)); //长度
}
return;
}
if(DTMFSendStep==1)
{//控制产生DTMF信号
EnDTMFCreate=0;
//DTMF信号产生
DTMFData=DTMFData&0x0f;
for(i=0;i<5;i++)
{
DTMF_Data=(bit)((DTMFData>>i)&0x01);
_nop_();
DTMF_Clk=0;
_nop_();
_nop_();
DTMF_Clk=1;
}
//调用时间周期为2ms
DTMFStandingTime=40; //持续时间为100ms
DTMFSendStep=2;
return;
}
if(DTMFSendStep==2)
{//持续发送时间
DTMFStandingTime--;
if(DTMFStandingTime==0)
{
DTMFSendStep=3; //调用时间周期为2ms
EnDTMFCreate=1;
DTMFStandingTime=20;//空白间隔时间
}
return;
}
if(DTMFSendStep==3)
{//间隙时间
DTMFStandingTime--;
if(DTMFStandingTime==0)
{//完成一个信号的发送,恢复正常状态
EnDTMFCreate=0;
DTMFData=0xff; //DTMF stop
for(i=0;i<5;i++)
{
DTMF_Data=(bit)((DTMFData>>i)&0x01);
_nop_();
DTMF_Clk=0;
_nop_();
_nop_();
DTMF_Clk=1;
}
DTMFSendStep=0;
EnDTMFCreate=1;
DTMF_Data=1;
DTMF_Clk=1;
DTMFStandingTime=0;
}
return;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -