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

📄 dialer.asm

📁 自动拨号器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
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 + -