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

📄 dtmf.dt

📁 在8位机
💻 DT
📖 第 1 页 / 共 2 页
字号:
 SUB A,H_step_ACC      ;
 SUB A,@144            ;       H_step_ACC=144-A
 MOV H_step_ACC,A      ;
 BS DTMF_STATUS,0      ;       H_DEC=1
 JMP continue_SCANH    ;       GOTO continue_SCANH
SUBTABH: MOV A,H_step  ;SUBTABH: H_step_ACC=H_step_ACC-H_step
 SUB 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,H_step_ACC      ;       H_step_ACC=256-H_step_ACC
 SUB A,@0              ;
 MOV H_step_ACC,A      ;
 BC DTMF_STATUS,0      ;       H_DEC=0
 JBC DTMF_STATUS,2     ;       IF H_CPL==0
 JMP _I002             ;
 BS DTMF_STATUS,2      ;          H_CPL=1
 JMP _I003             ;       ELSE
_I002:                 ;
 BC DTMF_STATUS,2      ;          H_CPL=0
_I003:                 ;       ENDIF
continue_SCANH: MOV A,H_step_ACC;continue_SCANH: A=H_step_ACC
 CALL DTMF_SIN_TAB     ;       DTMF_SIN_TAB()
 ADD A,@63             ;       H_ACC=A+63
 MOV H_ACC,A 
 JBC DTMF_STATUS,2     ;       _IF H_CPL==1
       COM H_ACC
       BC H_ACC,7      ;       ;--------------------------------
 MOV A,L_ACC           ;       DAC_PORT=H_ACC+L_ACC           ;DTMF数据合成
 ADD A,H_ACC           ;
 MOV DAC_PORT,A        ;
 MOV A,STATUS_BUF      ;       STATUS=STATUS_BUF
 MOV STATUS,A          ;
DTMF_EXIT:
 MOV A,A_BUF           ;       A=A_BUF
 RETI         ;DTMF_EXIT: RETURN
;==============================================

MAIN:
     DISI
     MOV A,@0XF
     IOW PORT5
     MOV A,@0
     IOW PORT6
     MOV A,@0
     CONTW
     MOV A,@255
     IOW 0XB
     MOV A,@0
     IOW 0XC
     MOV A,@0
     IOW 0XD
     MOV A,@1
     IOW 0XF
     MOV A,@126
     MOV TCC,A
KKK:
     ENI
     WDTC
        
SCANKEY:
 MOV A,@14             ;SCANKEY:  !PORT5=0Xe
 IOW PORT5             ;
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 MOV A,@14             ;          keydata=PORT5&0Xe
 AND A,PORT5           ;
 MOV keydata,A           ;
                       ;          switch keydata
 MOV A,@2              ;          case 2
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK001             ;
 MOV A,@1              ;               keydata=1
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK001:                 ;          case 4
 MOV A,@4              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK002             ;
 MOV A,@2              ;               keydata=2
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK002:                 ;          case 8
 MOV A,@8              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK003             ;
 MOV A,@3             ;               keydata=0x3
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK000:                 ;          ends
_SK003:                 ;
scank1:
/*
 MOV A,@15      ;scank1:   !port5=0xf
 IOW port5             ;
 CALL delay            ;          delay()
 MOV A,@1              ;          _if port5!=1
 XOR A,port5           ;
 JBS 3,2               ;
 JMP scank2            ;            goto scank2
 CLR keydata           ;          keydata=0
 JMP key_ok            ;          goto key_ok
*/
scank2: MOV A,@13      ;scank2:   !PORT5=0Xd
 IOW PORT5             ;
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 MOV A,@13             ;          keydata=PORT5&0Xd
 AND A,PORT5           ;
 MOV keydata,A           ;
                       ;          switch keydata
 MOV A,@1              ;          case 1
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK005             ;
 MOV A,@4              ;               keydata=4
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK005:                 ;          case 4
 MOV A,@4              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK006             ;
 MOV A,@5              ;               keydata=5
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK006:                 ;          case 8
 MOV A,@8              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK007             ;
 MOV A,@6             ;               keydata=0x6
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK004:                 ;          ends
_SK007:                 ;
scank21:
/* MOV A,@15     ;scank21:   !port5=0xf
 IOW port5             ;
 CALL delay            ;          delay()
 MOV A,@2              ;          _if port5!=2
 XOR A,port5           ;
 JBS 3,2               ;
 JMP scank3            ;            goto scank3
 MOV A,@5              ;          keydata=5
 MOV keydata,A         ;
 JMP key_ok            ;          goto key_ok
 */
scank3: MOV A,@11      ;scank3:   !PORT5=0Xb
 IOW PORT5             ;
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 MOV A,@11             ;          keydata=PORT5&0Xb
 AND A,PORT5           ;
 MOV keydata,A           ;
                       ;          switch keydata
 MOV A,@1              ;          case 1
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK009             ;
 MOV A,@7              ;               keydata=7
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK009:                 ;          case 2
 MOV A,@2              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK010             ;
 MOV A,@8              ;               keydata=0x8
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK010:                 ;          case 8
 MOV A,@8              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK011             ;
 MOV A,@9             ;               keydata=0x9
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK008:                 ;          ends
_SK011:                 ;
scank31:
/* MOV A,@15     ;scank31:   !port5=0xf
 IOW port5             ;
 CALL delay            ;          delay()
 MOV A,@4              ;          _if port5!=4
 XOR A,port5           ;
 JBS 3,2               ;
 JMP scank4            ;            goto scank4
 MOV A,@10             ;          keydata=0xa
 MOV keydata,A         ;
 JMP key_ok            ;          goto key_ok
 */
scank4: MOV A,@7       ;scank4:   !PORT5=0X7
 IOW PORT5             ;
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 CALL DELAY            ;          DELAY()
 MOV A,@7              ;          keydata=PORT5&0X7
 AND A,PORT5           ;
 MOV keydata,A           ;
                       ;          switch keydata
 MOV A,@1              ;          case 1
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK013             ;
 MOV A,@0xb              ;               keydata=*
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK013:                 ;          case 2
 MOV A,@2              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK014             ;
 MOV A,@0xa              ;               keydata=0xa
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK014:                 ;          case 4
 MOV A,@4              ;
 XOR A,keydata           ;
 JBS 3,2               ;
 JMP _SK015             ;
 MOV A,@0xc             ;               keydata=#
 MOV keydata,A         ;
 JMP key_ok            ;               goto key_ok
_SK012:                 ;          ends
_SK015:                 ;
scank41:
 jmp no_key
/* MOV A,@15     ;scank41:   !port5=0xf
 IOW port5             ;
 CALL delay            ;          delay()
 MOV A,@8              ;          _if port5!=8
 XOR A,port5           ;
 JBS 3,2               ;
 JMP no_key            ;            goto no_key
 MOV A,@15             ;          keydata=0xf
 MOV keydata,A         ;
 */
key_ok:
 bs 0x18,4             ;key_ok:   key_ok=1
 jmp kkk1              ;          return  
no_key:
 bc 0x18,4             ;on_key:   key_ok=0
 jmp kkk
kkk1: 
 mov a,keydata
 mov dtmf_no,a
 jmp kkk               ;          return
delay: mov a,@15       ;delay:    port5=0xf
 mov port5,a           ;
 mov a,@255             ;          keydata=255
 mov keydata,a         ; 
delay1: djz keydata    ;          do   
 jmp delay1            ;          while --keydata!=0
 ret                   ;          return


;------------------------------------------------------

⌨️ 快捷键说明

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