📄 dialer.asm
字号:
Sub_Keep:
MOV Get_Total,Read_Data
ANL Get_Total,#0fh
MOV A,Get_Total
MOV TEMP,A
jnz Keep_Begin
RET
KEEP_BEGIN: setb DTMF_DV
WAIT_F_DV2: jnb DTMF_DV,WAIT_F_DV2
clr DisConnect
SETB off_hook
ACALL GET_DTMF
JB DTMF_TIME_OUT,JMPEND2
MOV A,GET_TOTAL
CLR C
SUBB A,DTMF_INPUT
JC JMPEND2
MOV GET_TOTAL,DTMF_INPUT
PUSH GET_TOTAL
MOV BITS_TO_SEND,#EWEN_Inst
acall Send_Instruction
acall Short_Delay
mov Write_Data,Get_Total
orl Write_Data,#40h
acall Sub_ResetBuff
acall Read_eeprom
mov Run_Address,Read_Data
; DEC RUN_ADDRESS ;?***
; acall Read_EEPROM
; MOV Temp,READ_DATA
; DEC RUN_ADDRESS
ACALL Write_EEPROM
INC Run_Address
Keep_Next:
acall Get_Dtmf
jb DTMF_TIME_OUT,JMPEND2
jb input_len.0,Keep_Odd
mov R0,Save_Buffer
dec R0
mov write_data,@R0
acall Write_EEPROM
INC RUN_ADDRESS
SJMP KEEP_OVER
kEEP_ODD: mov R0,Save_Buffer
MOV Write_Data,@R0
acall Write_EEPROM
KEEP_OVER:
ACALL Write_EEPROM
DJNZ GET_tOTAL,kEEP_NEXT
MOV A,TEMP
ANL A,#0FH
MOV TEMP,A
POP Get_Total
SETB C
SUBB A,Get_Total
JC JMPEND2
MOV A,TEMP
CLR C
SUBB A,GET_Total
clr c
rrc A
jz JMPEND2
MOV TEMP,A
ACALL DELAY_10MS
Add_Nop:
INC Run_Address
mov Write_Data,#0d0h
acall Write_EEPROM
ACALL DELAY_10MS
DJNZ TEMP,ADD_NOP
JMPEND2: LJMP PROGRAM_END
;/*********************************************************
Write_EEPROM:
;Parameters Write_Data,Bit_Len,Bits_to_Send
;Private Bit_count
MOV FLAG_GREEN,#20
SETB GREEN_LED
CLR EEPROM_CS
NOP
NOP
NOP
SETB EEPROM_CS
Send_Write_Inst:
MOV Bit_Len,#RDWR_Inst_Len
MOV Bits_to_Send,#Write_Inst
acall Send_Bits
Send_Write_Address: MOV Bit_Len,#EEPROM_Add_Len
MOV Bits_to_Send,Run_Address
ACALL Send_Bits
MOV Bit_Len,#Byte_Len
MOV Bits_to_Send,Write_Data
ACALL Send_Bits
CLR EEPROM_CS
RET
;/*************************************************************
Send_Bits:
;Parameters Bit_Len,Bits_to_Send
CLR EEPROM_SK
CLR C
CLR EEPROM_DI
MOV A,Bits_to_Send
RLC A
MOV Bits_to_Send,A
JNC Send_Out
SETB EEPROM_DI
Send_Out: SETB EEPROM_SK
DJNZ Bit_Len,Send_Bits
RET
;/*************************************************************
Send_Instruction:
;Parameters Write_Data,Bit_Len,Bits_to_Send
CLR EEPROM_CS
NOP
NOP
SETB EEPROM_CS
MOV Bit_Len,#EEPROM_Add_Len
acall Send_Bits
nop
nop
MOV Bit_Len,#Access_Inst_Len
acall Send_Bits
nop
CLR EEPROM_CS
RET
;***************************************************************
;Detect_Line_Status:
; ret
;*********************************************
;DETECT_TONE_MUTE
;*********************************************
DETECT_Line_Status:
Setb Tone_Detect
; CLR FTone1
; clr FTone2
; clr FTone3
; clr FTone4
MOV A,FLAG_BYTE
ANL A,#0F0H
MOV FLAG_BYTE,A
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,Tone1
Mute1: mov A,MuteTime
; cjne a,#250,Mute2
MOV A,#50
CLR C
SUBB A,mS_Counter
JNC Mute2
MOV mS_Counter,#0
INC Second_Counter
MOV A,Second_Counter
CJNE A,Ring_LTD,MUTe2
ret
Mute2: jb Tone_Detect,Mute1
mov MuteTime2,MuteTime
acall Tonecmp
jz Toneend
mov ToneTime,#0
Tone1: mov A,ToneTime
; cjne A,#250,Tone2
MOV A,#50
CLR C
SUBB A,mS_Counter
JNC Tone2
MOV mS_Counter,#0
INC Second_Counter
MOV A,Second_Counter
CJNE A,Ring_LTD,Tone2
ret
Tone2: jnb Tone_Detect,Tone1
mov ToneTime2,Tonetime
acall Tonecmp
jz Toneend
mov MuteTime,#0
sjmp Mute1
Toneend: mov A,Flag_Byte
ANL A,#0fh
ANL A,Read_Data
JnZ TERMINAL
acall DELAY_10MS
INC Run_Address
acall read_EEPROM
mov A,Read_Data
ANL A,#0F0H
CLR C
SUBB A,#0C0H
JZ Toneend
DEC Run_Address
ret
TERMINAL:
acall Read_EEPROM
MOV Run_Address,Read_Data
JB FLAG_BUSY,DISPBUSY
MOV FLAG_RED,#50
CLR RED_LED
RET
DISPBUSY: MOV FLAG_RED,#10
CLR RED_LED
WAITNORED1: MOV A,FLAG_RED
JNZ WAITNORED1
WAITNORED2: MOV FLAG_RED,#10
JNZ WAITNORED2
CLR RED_LED
ret
;*************************************
Tonecmp:
inc AgainCMP
mov A,AgainCmp
Cjne A,#15,Tonecmp1
SETB FTone4
SETB FLAG_UNKNOW
mov A,#0h
RET
ToneCmp1:
mov A,ToneTime2
clr c
subb A,#10
jc Findnext1
mov A,ToneTime2
setb c
subb A,Ring_Tone ;35
jnc Findnext1
mov A,MuteTime2
clr c
subb A,#7
jc Findnext1
mov A,MuteTime2 ;40
setb c
subb A,Ring_Mute
jnc Findnext1
Setb FTone1
SETB FLAG_BUSY
mov A,#0
ret
Findnext1: sjmp Findnext2
mov A,ToneTime2
clr c
subb A,#25
jc Findnext2
mov A,ToneTime2
setb c
subb A,#35
jnc Findnext2
mov A,MuteTime2
clr c
subb A,#30
jc Findnext2
mov A,MuteTime2
setb c
subb A,#40
jnc Findnext2
Setb FTone2
SETB FLAG_BUSY
mov A,#0
ret
Findnext2:
mov A,ToneTime2
clr c
subb A,pickup_Tone
jc Findnext3
mov A,ToneTime2
setb c
subb A,Line_LTD ;75
jnc Findnext3
mov A,MuteTime2
clr c
subb A,pickup_mute ;#100
jc Findnext3
mov A,MuteTime2
setb c
subb A,#240 ;240
jnc Findnext3
Setb FTone3
SETB FLAG_CONNECT
mov A,#0
ret
Findnext3: mov A,#1
ret
;/**************************************************************
Sub_Compare:
ACALL Get_DTMF
JB DTMF_Time_Out,JMP_END
Compare_Next: MOV A,Read_Data
ANL A,#0FH
CJNE A,DTMF_Input,Compare_Failed
acall Read_EEPROM
MOV Run_Address,Read_Data
RET
JMP_END: LJMP Program_End
Compare_Failed: INC Run_Address
acall Read_EEPROM
MOV A,Read_Data
ANL A,#0F0H
CJNE A,#10H,Compare_Over
SJMP Compare_Next
Compare_Over: DEC Run_Address
RET
;****************************************************************
Sub_Jump:
acall Read_EEPROM
MOV Run_Address,Read_Data
RET
;****************************************************************
Sub_Dial:
MOV A,Read_data
ANL A,#0FH
MOV Dial_Total,A
MOV Dial_From,#0
Read_Dial_Data:
acall Read_EEPROM
Dial_Next:
MOV A,Read_Data
SWAP A
MOV Read_Data,A
MOV DTMF_Out,Read_Data
acall Dial_DTMF
DJNZ Dial_Total,Dial_Continue
RET
Dial_Continue: INC Dial_From
MOV A,Dial_From
RRC A
JC Dial_Next
SJMP Read_Dial_Data
RET
;*************************************************************
Sub_Off_Hook:
clr Off_Hook
MOV Delay_Counter,Read_Data
ACALL Delay_Seconds
RET
;**************************************************************
Sub_On_Hook:
setb Off_Hook
setb DTMF_DV
WAIT_FOR_DV: Jnb DTMF_DV,WAIT_FOR_DV
clr DisConnect
MOV Delay_Counter,Read_Data
ACALL Delay_Seconds
RET
;*************************************************************
Sub_Expand:
MOV A,Read_Data
ANL A,#0fh
CJNE A,#01h,Link_Here
nop
MOV Input_Len,#0
MOV Save_Buffer,#Buffer_Add
RET
Link_Here:
setb DisConnect
acall Delay_10mS
setb Off_Hook
RET
;**************************************************************
Sub_ResetBuff:
mov Input_Len,#0
mov Save_Buffer,#Buffer_Add
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -