?? dtmf.dt
字號:
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 + -