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

📄 dtmf.dt

📁 在8位机
💻 DT
📖 第 1 页 / 共 2 页
字号:
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状态寄存器
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 ;高频组反向查表标志
                       ;#DEFINE     L_DEC    DTMF_STATUS.1 ;低频组反向查表标志
                       ;#DEFINE     H_CPL    DTMF_STATUS.2 ;高频组取反查表标志
                       ;#DEFINE     L_CPL    DTMF_STATUS.3 ;低频组取反查表标志
                       ;#DEFINE     DTMF_SWITCH DTMF_STATUS.4 ;DTMF启动标志
                       ;#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)采样点的值
 ADD  PC,A
 RETL @0               ;              RETURN 0 ,1 ,1 ,2 ,3 ,3 ,4 ,5 ,5 ,6    ;0-9点
 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               ;清除标志位
 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高低频率合成数据
 MOV NO_ACC,A          ;       NO_ACC=A
 AND A,@15             ;       H_DTMF=A&0XF                ;分离高频数据
 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                 ;分离低频数据
 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                 ;转向反向查表
 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                 ;转向反向查表
 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

⌨️ 快捷键说明

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