DAC_PORT=0X80; //初始化輸出口
DTMF_NO_BUF=DTMF_NO&0XF; //導(dǎo)入新數(shù)據(jù)
L_step_ACC=0; //清除數(shù)據(jù)區(qū)
H_step_ACC=0;
L_DEC=0; //清除標(biāo)志位
H_DEC=0;
L_CPL=0;
H_CPL=0;
ACC=CBYTE[DTMF_NO_TAB+DTMF_NO_BUF]; //;查DTMF高低頻率合成數(shù)據(jù)
NO_ACC=ACC;
H_DTMF=ACC&0XF; // ;分離高頻數(shù)據(jù)
L_DTMF=NO_ACC>>4; //;分離低頻數(shù)據(jù)
L_step=CBYTE[DTMF_STEP_TAB+L_DTMF]; //;求低頻步長
H_step=CBYTE[DTMF_STEP_TAB+H_DTMF]; //;求高頻步長
SCANTAB:
if (L_DEC==1) goto SUBTABL; //;轉(zhuǎn)向反向查表
L_step_ACC=L_step_ACC+L_step; //步長累加
if (L_step_ACC<=144) goto continue_SCANL; //未超出由繼續(xù)
L_step_ACC=144-(L_step_ACC-144); //超出就轉(zhuǎn)反向掃描
L_DEC=1; //建立反向標(biāo)志
goto continue_SCANL;
SUBTABL:
L_step_ACC=L_step_ACC-L_step;
if (L_step_ACC<=144) goto continue_SCANL; //;低頻查表
L_step_ACC=256-L_step_ACC;
L_DEC=0;
L_CPL=!L_CPL;
continue_SCANL:
L_ACC=CBYTE[DTMF_SIN_TAB+L_step_ACC]+63; //求低頻幅度
if (L_CPL==1) L_ACC=255-L_ACC; //結(jié)果取反
L_ACC&=0x7f; //修正
if (H_DEC==1) goto SUBTABH; //;轉(zhuǎn)向反向查表
H_step_ACC=H_step_ACC+H_step;
if (H_step_ACC<=144) goto continue_SCANH;
H_step_ACC=144-(H_step_ACC-144);
H_DEC=1;
goto continue_SCANH;
SUBTABH:
H_step_ACC=H_step_ACC-H_step;
if (H_step_ACC<=144) goto continue_SCANH; //;高頻查表
H_step_ACC=256-H_step_ACC;
H_DEC=0;
H_CPL=!H_CPL;
continue_SCANH:
H_ACC=CBYTE[DTMF_SIN_TAB+H_step_ACC]+63;
if (H_CPL==1) H_ACC=255-H_ACC; //結(jié)果取反
H_ACC&=0X7F;
DAC_PORT=H_ACC+L_ACC ; //;DTMF數(shù)據(jù)合成
DTMF_EXIT:
return;
}
TAB(){
#pragma asm
org DTMF_STEP_TAB
DB 26,29,32,35,45,50,55,61;
org DTMF_NO_TAB
DB 0X37,0X4,0X5,0X6,0X14,0X15,0X16,0X24,0X25;
DB 0X26,0X35,0X34,0X36,0X7,0X17,0X27;
org DTMF_SIN_TAB //;T=65/(δ=90/144=0.625)采樣點(diǎn)的值
DB 0 ,1 ,1 ,2 ,3 ,3 ,4 ,5 ,5 ,6 ; //;0-9點(diǎn)
DB 7 ,8 ,8 ,9 ,10,10,11,12,12,13; //;10-19
DB 14,14,15,16,16,17,18,18,19,20; //;20-29
DB 20,21,22,22,23,23,24,25,25,26; //;30-39
DB 27,27,28,28,29,30,30,31,32,32; //;40-49
DB 33,33,34,34,35,36,36,37,37,38; //;50-59
DB 38,39,39,40,40,41,42,42,43,43; //;60-69
DB 44,44,45,45,46,46,46,47,47,48; //;70-79
DB 48,49,49,50,50,50,51,51,52,52; //;80-89
DB 52,53,53,53,54,54,55,55,55,56; //;90-99
DB 56,56,57,57,57,57,58,58,58,58; //;100-109
DB 59,59,59,59,60,60,60,60,60,61; //;110-119
DB 61,61,61,61,62,62,62,62,62,62; //;120-129
DB 62,62,62,63,63,63,63,63,63,63; //;130-139
DB 63,63,63,63,63; //;140-144
#pragma endasm
}





