?? dtmf.dt
字號:
RAM_DATA == 0X0
TCC == 0X1
PC == 0X2
STATUS == 0X3
RAM_ADDRESS == 0X4
PORT5 == 0X5
PORT6 == 0X6
DAC_PORT == 0X6 ;DTMF OUTPORT
H_step == 0X10 ;高頻步長寄存器
L_step == 0X11 ;低頻步長寄存器
H_ACC == 0X12 ;高頻幅度寄存器
L_ACC == 0X13 ;低頻幅度寄存器
H_DTMF == 0X14 ;高頻頻率寄存器
L_DTMF == 0X15 ;低頻頻率寄存器
DTMF_NO == 0X16 ;DTMF原碼
DTMF_NO_BUF == 0X17 ;DTMF原碼寄存器
DTMF_STATUS == 0X18 ;DTMF狀態(tài)寄存器
NO_ACC == 0X19 ;DTMF占用
H_step_ACC == 0X1A ;高頻步長累加寄存器
L_step_ACC == 0X1B ;低頻步長累加寄存器
STATUS_BUF == 0X1C
A_BUF == 0X1D
keydata == 0x1e
;#DEFINE H_DEC DTMF_STATUS.0 ;高頻組反向查表標(biāo)志
;#DEFINE L_DEC DTMF_STATUS.1 ;低頻組反向查表標(biāo)志
;#DEFINE H_CPL DTMF_STATUS.2 ;高頻組取反查表標(biāo)志
;#DEFINE L_CPL DTMF_STATUS.3 ;低頻組取反查表標(biāo)志
;#DEFINE DTMF_SWITCH DTMF_STATUS.4 ;DTMF啟動標(biāo)志
;#define keyok dtmf_status.4
ORG 0
JMP MAIN
ORG 8
JMP DTMF
;=====================================================
ORG 0X10
DTMF_NO_TAB:
ADD PC,A
RETL @55 ;DTMF_NO_TAB: RETURN 0X37,0X4,0X5,0X6,0X14,0X15,0X16,0X24,0X25,
RETL @4 ;
RETL @5 ;
RETL @6 ;
RETL @20 ;
RETL @21 ;
RETL @22 ;
RETL @36 ;
RETL @37 ;
RETL @38 ; RETURN 0X26,0X35,0X34,0X36,0X7,0X17,0X27
RETL @53 ;
RETL @52 ;
RETL @54 ;
RETL @7 ;
RETL @23 ;
RETL @39 ;
DTMF_STEP_TAB:
ADD PC,A
RETL @26 ;DTMF_STEP_TAB: RETURN 26,29,32,35,45,50,55,61
RETL @29 ;
RETL @32 ;
RETL @35 ;
RETL @45 ;
RETL @50 ;
RETL @55 ;
RETL @61 ;
DTMF_SIN_TAB: ;T=65/(δ=90/144=0.625)采樣點(diǎn)的值
ADD PC,A
RETL @0 ; RETURN 0 ,1 ,1 ,2 ,3 ,3 ,4 ,5 ,5 ,6 ;0-9點(diǎn)
RETL @1 ;
RETL @1 ;
RETL @2 ;
RETL @3 ;
RETL @3 ;
RETL @4 ;
RETL @5 ;
RETL @5 ;
RETL @6 ;
RETL @7 ; RETURN 7 ,8 ,8 ,9 ,10,10,11,12,12,13 ;10-19
RETL @8 ;
RETL @8 ;
RETL @9 ;
RETL @10 ;
RETL @10 ;
RETL @11 ;
RETL @12 ;
RETL @12 ;
RETL @13 ;
RETL @14 ; RETURN 14,14,15,16,16,17,18,18,19,20 ;20-29
RETL @14 ;
RETL @15 ;
RETL @16 ;
RETL @16 ;
RETL @17 ;
RETL @18 ;
RETL @18 ;
RETL @19 ;
RETL @20 ;
RETL @20 ; RETURN 20,21,22,22,23,23,24,25,25,26 ;30-39
RETL @21 ;
RETL @22 ;
RETL @22 ;
RETL @23 ;
RETL @23 ;
RETL @24 ;
RETL @25 ;
RETL @25 ;
RETL @26 ;
RETL @27 ; RETURN 27,27,28,28,29,30,30,31,32,32 ;40-49
RETL @27 ;
RETL @28 ;
RETL @28 ;
RETL @29 ;
RETL @30 ;
RETL @30 ;
RETL @31 ;
RETL @32 ;
RETL @32 ;
RETL @33 ; RETURN 33,33,34,34,35,36,36,37,37,38 ;50-59
RETL @33 ;
RETL @34 ;
RETL @34 ;
RETL @35 ;
RETL @36 ;
RETL @36 ;
RETL @37 ;
RETL @37 ;
RETL @38 ;
RETL @38 ; RETURN 38,39,39,40,40,41,42,42,43,43 ;60-69
RETL @39 ;
RETL @39 ;
RETL @40 ;
RETL @40 ;
RETL @41 ;
RETL @42 ;
RETL @42 ;
RETL @43 ;
RETL @43 ;
RETL @44 ; RETURN 44,44,45,45,46,46,46,47,47,48 ;70-79
RETL @44 ;
RETL @45 ;
RETL @45 ;
RETL @46 ;
RETL @46 ;
RETL @46 ;
RETL @47 ;
RETL @47 ;
RETL @48 ;
RETL @48 ; RETURN 48,49,49,50,50,50,51,51,52,52 ;80-89
RETL @49 ;
RETL @49 ;
RETL @50 ;
RETL @50 ;
RETL @50 ;
RETL @51 ;
RETL @51 ;
RETL @52 ;
RETL @52 ;
RETL @52 ; RETURN 52,53,53,53,54,54,55,55,55,56 ;90-99
RETL @53 ;
RETL @53 ;
RETL @53 ;
RETL @54 ;
RETL @54 ;
RETL @55 ;
RETL @55 ;
RETL @55 ;
RETL @56 ;
RETL @56 ; RETURN 56,56,57,57,57,57,58,58,58,58 ;100-109
RETL @56 ;
RETL @57 ;
RETL @57 ;
RETL @57 ;
RETL @57 ;
RETL @58 ;
RETL @58 ;
RETL @58 ;
RETL @58 ;
RETL @59 ; RETURN 59,59,59,59,60,60,60,60,60,61 ;110-119
RETL @59 ;
RETL @59 ;
RETL @59 ;
RETL @60 ;
RETL @60 ;
RETL @60 ;
RETL @60 ;
RETL @60 ;
RETL @61 ;
RETL @61 ; RETURN 61,61,61,61,62,62,62,62,62,62 ;120-129
RETL @61 ;
RETL @61 ;
RETL @61 ;
RETL @62 ;
RETL @62 ;
RETL @62 ;
RETL @62 ;
RETL @62 ;
RETL @62 ;
RETL @62 ; RETURN 62,62,62,63,63,63,63,63,63,63 ;130-139
RETL @62 ;
RETL @62 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ; RETURN 63,63,63,63,63 ;140-144
RETL @63 ;
RETL @63 ;
RETL @63 ;
RETL @63 ;
;=====================================================
DTMF:
BC 0XF,0
MOV A_BUF,A ; A_BUF=A
MOV A,@195
MOV TCC,A
JBS DTMF_STATUS,4;DTMF: _IF DTMF_SWITCH==0
JMP DTMF_EXIT ; GOTO DTMF_EXIT
MOV A,STATUS ; STATUS_BUF=STATUS
MOV STATUS_BUF,A ;
MOV A,DTMF_NO_BUF ; _IF DTMF_NO==DTMF_NO_BUF
XOR A,DTMF_NO ;
JBC 3,2 ;
JMP SCANTAB ; GOTO SCANTAB
MOV A,@0XF
AND A,DTMF_NO ; DTMF_NO_BUF=DTMF_NO&0XF
MOV DTMF_NO_BUF,A ;
CLR L_step_ACC ; L_step_ACC=0
CLR L_step_ACC ; L_step_ACC=0
BC DTMF_STATUS,1 ; L_DEC=0 ;清除標(biāo)志位
BC DTMF_STATUS,0 ; H_DEC=0
BC DTMF_STATUS,3 ; L_CPL=0
BC DTMF_STATUS,2 ; H_CPL=0
MOV A,DTMF_NO_BUF ; A=DTMF_NO_NUF
CALL DTMF_NO_TAB ; DTMF_NO_TAB() ;查DTMF高低頻率合成數(shù)據(jù)
MOV NO_ACC,A ; NO_ACC=A
AND A,@15 ; H_DTMF=A&0XF ;分離高頻數(shù)據(jù)
MOV H_DTMF,A ;
MOV A,NO_ACC ; A=NO_ACC
AND A,@240 ; L_DTMF=A&0XF0
MOV L_DTMF,A ;
SWAP L_DTMF ;分離低頻數(shù)據(jù)
MOV A,L_DTMF ; A=L_DTMF
CALL DTMF_step_TAB ; DTMF_step_TAB() ;求低頻步長
MOV L_step,A ; L_step=A
MOV A,H_DTMF ; A=H_DTMF ;求高頻步長
CALL DTMF_step_TAB ; DTMF_step_TAB()
MOV H_step,A ; H_step=A
SCANTAB: JBC DTMF_STATUS,1;SCANTAB: _IF L_DEC==1 ;-----------------------------
JMP SUBTABL ; GOTO SUBTABL ;轉(zhuǎn)向反向查表
MOV A,L_step ; L_step_ACC=L_step_ACC+L_step
ADD L_step_ACC,A ;
MOV A,L_step_ACC ; _IF L_step_ACC<=144
SUB A,@144 ;
JBC 3,0 ;
JMP continue_SCANL ; GOTO continue_SCANL
MOV A,@144 ; A=L_step_ACC-144
SUB A,L_step_ACC ;
SUB A,@144 ; L_step_ACC=144-A
MOV L_step_ACC,A ;
BS DTMF_STATUS,1 ; L_DEC=1
JMP continue_SCANL ; GOTO continue_SCANL
SUBTABL: MOV A,L_step ;SUBTABL: L_step_ACC=L_step_ACC-L_step
SUB L_step_ACC,A ;
MOV A,L_step_ACC ; _IF L_step_ACC<=144
SUB A,@144 ;
JBC 3,0 ;
JMP continue_SCANL ; GOTO continue_SCANL ;低頻查表
MOV A,L_step_ACC ; L_step_ACC=256-L_step_ACC
SUB A,@0 ;
MOV L_step_ACC,A ;
BC DTMF_STATUS,1 ; L_DEC=0
JBC DTMF_STATUS,3 ; IF L_CPL==0
JMP _I000 ;
BS DTMF_STATUS,3 ; L_CPL=1
JMP _I001 ; ELSE
_I000: ;
BC DTMF_STATUS,3 ; L_CPL=0
_I001: ; ENDIF
continue_SCANL: MOV A,L_step_ACC;continue_SCANL: A=L_step_ACC
CALL DTMF_SIN_TAB ; DTMF_SIN_TAB()
ADD A,@63 ; L_ACC=A+63
MOV L_ACC,A ;
JBC DTMF_STATUS,3 ; _IF L_CPL==1
COM L_ACC
BC L_ACC,7 ;--------------------------------
JBC DTMF_STATUS,0 ; _IF H_DEC==1 ;----------------------------------
JMP SUBTABH ; GOTO SUBTABH ;轉(zhuǎn)向反向查表
MOV A,H_step ; H_step_ACC=H_step_ACC+H_step
ADD H_step_ACC,A ;
MOV A,H_step_ACC ; _IF H_step_ACC<=144
SUB A,@144 ;
JBC 3,0 ;
JMP continue_SCANH ; GOTO continue_SCANH
MOV A,@144 ; A=H_step_ACC-144
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -