📄 dialer.asm
字号:
ret
;**************************************************************
Sub_Call:
acall Read_EEPROM
MOV R0,Stack_Pointer
MOV @R0,Run_Address
MOV Run_Address,Read_Data
INC Stack_Pointer
RET
;**************************************************************
Sub_Return:
DEC Stack_Pointer
MOV R0,Stack_Pointer
MOV Run_Address,@R0
RET
;**************************************************************
Sub_Wait:
MOV Delay_Counter,Read_Data
acall Delay_Seconds
RET
;**************************************************************
Sub_Ring:
SETB Call_Back
clr disconnect
setb off_hook
MOV Second_Counter,#0
MOV mS_Counter,#0
Wait_Ring:
JB Call_Back,Wait_No_Ring
MOV A,#50
CLR C
SUBB A,mS_Counter
JNC Wait_Ring
MOV mS_Counter,#0
INC Second_Counter
MOV A,Second_Counter
CJNE A,#Ring_LTD,Wait_Ring
INC Run_Address
SJMP Ring_Over
Wait_No_Ring:
ACALL Delay_10mS
JB Call_Back,Wait_No_Ring
ACALL Read_EEPROM
MOV Run_Address,Read_data
MOV Delay_Counter,#2
ACALL Delay_Seconds
Ring_Over:
RET
;***************************************************************
DETECT_200ms:
Setb Tone_Detect
clr FTone200ms
clr FTone200ms1
mov AgainCmp,#0
MOV ToneTime,#0
mov MuteTime,#0
mov ToneTime2,#0
mov MuteTime2,#0
MOV Second_Counter,#0
MOV mS_Counter,#0
jnb Tone_Detect,Tone11
Mute11: mov A,MuteTime
; cjne a,#45,Mute12
MOV A,#30
CLR C
SUBB A,mS_Counter
JNC Mute12
MOV mS_Counter,#0
INC Second_Counter
MOV A,Second_Counter
CJNE A,Ring_LTD,Mute12
ret
Mute12: jb Tone_Detect,Mute11
mov MuteTime2,MuteTime
acall Tonecmp_1
jz Toneend1
mov ToneTime,#0
Tone11: mov A,ToneTime
; cjne A,#45,Tone12
MOV A,#30
CLR C
SUBB A,mS_Counter
JNC Tone12
MOV mS_Counter,#0
INC Second_Counter
MOV A,Second_Counter
CJNE A,Ring_LTD,Tone12
ret
Tone12: jnb Tone_Detect,Tone11
mov ToneTime2,Tonetime
acall Tonecmp_1
jz Toneend1
mov MuteTime,#0
sjmp Mute11
Toneend1:
ret
TERMINAL1:
ret
;*************************************
Tonecmp_1:
inc AgainCMP
mov A,AgainCmp
Cjne A,#30,Tonecmp11
; MOV DTMF_OUT,#9
; ACALL DIAL_DTMF
; MOV DTMF_OUT,#9
; ACALL DIAL_DTMF
; MOV DTMF_OUT,TONETIME2
; ACALL DIAL_DTMF
; MOV A,TONETIME2
; SWAP A
; MOV DTMF_OUT,A
; ACALL DIAL_DTMF
; MOV DTMF_OUT,MUTETIME2
; ACALL DIAL_DTMF
; MOV A,MUTETIME2
; SWAP A
; MOV DTMF_OUT,A
; ACALL DIAL_DTMF
; SETB FTone4
; SETB FLAG_UNKNOW
mov A,#0h
RET
ToneCmp11:
mov A,ToneTime2
clr c
subb A,#6
jc Findnext11
mov A,ToneTime2
setB c
subb A,#20 ;Ring_Tone ;35
jnc Findnext11
mov A,MuteTime2
clr c
subb A,#6
jc Findnext11
mov A,MuteTime2 ;40
setb c
subb A,#20 ;Ring_Mute
jnc Findnext11
Setb FTone200ms
MOV FLAG_RED,#5
CLR RED_LED
mov A,#0
ret
Findnext11:
mov A,#1
ret
;***************************************************************
Detect_backTone:
Special_Function:
MOv FLAG_GREEN,#80
setB GREEN_LED
Mov Recordnum,#0
Mov RecordTime,#0
MOv TEMP,RING_LTD
Detect_b1: Acall Detect_200ms
Jnb FTone200ms,Detect_b2
mov ring_ltd,#2
inc Recordnum
sjmp Detect_b1
Detect_b2:
Mov A,Recordnum
Clr c
Subb A,#6
Jc Detect_End
Mov A,Recordnum
Setb c
Subb A,#25
Jnc Detect_End
;Detect_ig: Mov Recordnum,#0
; Mov RecordTime,#0
; MOV FLAG_RED,#80
; CLR RED_LED
;Detect_b3: Acall Detect_200ms
; Jb FTone200ms,Detect_B4
; Mov a,RecordTime
; Subb a,#250
; INC RECORDNUM
; MOV A,RECORDNUM
; CJNE A,#100,DETECT_B3
; sJmp Detect_END
;Detect_b4:
; Mov A,RECORDNUM
; CLR C
; Subb A,#3
; Jc Detect_End
; Mov a,RecordNUM
; setb c
; Subb a,#8
; Jnc Detect_End
Mov RecordTime,#0
MOV FLAG_RED,#220
CLR RED_LED
DELAY2S: Mov A,RecordTime
CJNE A,#220,DELAY2S
Mov Recordnum,#0
MOV FLAG_GREEN,#60
SETB GREEN_LED
Detect_B5:
Acall Detect_200ms
Jnb FTone200ms,Detect_B6
inc Recordnum
sjmp Detect_b5
mov recordnum,#0
Detect_b6:
Mov A,Recordnum
Clr c
Subb A,#6
Jc Detect_End
Mov A,Recordnum
Setb c
Subb A,#25
Jnc Detect_End
MOV FLAG_RED,#80
CLR RED_LED
Acall Read_EEPROM
MOV Run_Address,Read_Data
mov ring_ltd,temp
ret
Detect_End:
inc Run_Address
MOV Ring_LTD,TEMP
ret
;***************************************************************
X10Times:
MOV R0,TimesResult
MOV @R0,#0fh
MOV A,@R0
RL A
MOV B,A
RL A
RL A
ADD A,B
MOV @R0,A
RET
;***************************************************************
X20Times:
acall X10Times
MOV R0,TimesResult
MOV A,@R0
RL A
MOV @R0,A
RET
;***************************************************************
Re_Program_EEPROM:
SETB P2.3
clr P2.2
setb DTMF_DV
WAIT_F_DV: Jnb DTMF_DV,WAIT_F_DV
clr DisConnect
setb off_hook
acall Get_dtmf2
ACALL gET_DTMF2
MOV RUN_ADDRESS,#00H
CLR IE.0
MOV Bits_to_Send,#EWEN_Inst
acall Send_Instruction
MOV Run_Address,#00H
CLR Config_Flag
Read_Next_Byte:
ACALL Get_DTMF2
JB DTMF_Time_Out,JMP_END1
MOV Write_Data,DTMF_Input
MOV A,Write_Data
SWAP A
MOV Write_Data,A
acall Get_DTMF2
JB DTMF_Time_Out,JMP_END1
MOV A,Write_Data
ORL A,DTMF_Input
MOV Write_Data,A
acall Write_EEPROM
INC Run_Address
MOV A,Run_Address
JZ Re_Program_Over
Read_Continue0: MOV A,Write_Data
CJNE A,#0FFh,Read_Next_Byte
; JNB Program_CFG,Re_Program_Over
MOV Run_Address,#0f8h
; ORL Config_Flag,#Program_CFG
SJMP Read_Next_Byte
JMP_END1: LJMP Program_END
Re_Program_Over: setb DisConnect
acall Delay_10ms
; MOV Run_Address,#0
; MOV Check_Sum_Low,#0
; MOV Check_Sum_High,#0
;Verify_EEPROM_Data:
; acall Read_EEPROM
; MOV A,Read_data
; CJNE A,#0ffh,Verify_Continue0
; SJMP Display_Check_sum
;Verify_Continue0: ADD A,Check_Sum_Low
; JNC HIGH_BYTE_NO_INC
; INC Check_Sum_High
;HIGH_BYTE_NO_INC: MOV Check_Sum_Low,A
; MOV A,Run_Address
; CJNE A,#0FFh,Verify_C1
; SJMP Display_Check_Sum
;Verify_C1: acall Short_Delay
; SJMP Verify_EEPROM_Data
;Display_Check_Sum:
; MOV hold_Time,#0ah
; clr Off_Hook
; MOV X10mS,#50
; acall Delay_10mS
; MOV A,Check_Sum_High
; SWAP A
; MOV DTMF_Out,A
; acall Dial_DTMF
; MOV DTMF_Out,Check_Sum_High
; acall Dial_DTMF
; MOV A,Check_Sum_Low
; SWAP A
; MOV DTMF_Out,A
; acall Dial_DTMF
; MOV DTMF_Out,Check_Sum_Low
; acall Dial_DTMF
; MOV X10mS,#100
; acall Delay_10mS
;*************************************************************
program_END:
setb disconnect
clr off_hook
; setb red_led
; setb green_led
; acall detect_backtone
; setb green_led
; setb red_led
GG: JMP gg
; acall DETECT_Line_Status
; jnb flag_busy,ne2
; setb p2.3
; clr p2.2
; jmp program_end
;ne2: jnb flag_connect,ne3
; clr p2.3
; setb p2.2
; jmp program_end
;ne3: jnb flag_unknow,ne4
; clr p2.3
; clr p2.2
; jmp program_end
;ne4: setb p2.3
; setb p2.2
; jmp program_end
;Main Program end here
; clr off_hook
; clr disconnecT
; SETB DTMF_INABLE
Program_Compared:
; MOV X10mS,#20
; acall Delay_10mS
; setb DisConnect
; setb Off_Hook
; MOV Bits_to_Send,#EWDS_Inst
; acall Send_Instruction
nop
nop
Halt_Here: SJMP Halt_Here
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -