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

📄 dialer.asm

📁 自动拨号器程序
💻 ASM
📖 第 1 页 / 共 4 页
字号:
                        MOV    Temp,Read_Data
                        MOV    A,Read_Data
                        CJNE   A,#0ffh,Run_Pare_Continue1
                        LJMP   Program_END
Run_Pare_Continue1:
                        SWAP   A
                        ANL    A,#0FH
                        MOV    Temp,a
                        RL     A
                        MOV    DPTR,#JMPTAB
                        JMP    @A+DPTR
JMPTAB:                 AJMP    JMPEND                      ;0
Compare_P:              AJMP    Compare_Para                ;1
Jump_P:                 AJMP    Jump_Para                   ;2
Get_Rest_P:             AJMP    Get_Rest_Para               ;3
Dial_P:                 AJMP    Dial_Para                   ;4
Off_Hook_P:             AJMP    Off_Hook_Para               ;5
On_Hook_P:              AJMP    On_Hook_Para                ;6
Dial_In_P:              AJMP    Dial_Input_Para             ;7
Wait_P:                 AJMP    Wait_Para                   ;8
Expand_P:               AJMP    Expand_Para                 ;9
Call_P:                 AJMP    Call_Para                   ;A
Return_P:               AJMP    Return_Para                 ;B
Detect_P:               AJMP    Detect_Para                 ;C
Keep_P:                 AJMP    Keep_Para                   ;D
Ring_P:                 AJMP    Ring_Para                   ;E
Special_P:              AJMP    Special_Para                ;F
JMPEND:                 LJMP    Program_End
;*******************************************
Expand_Para:
;                        acall   Sub_Expand
                        LJMP    Run_EEPROM_Para
 ;*******************************************
Special_Para:
                       acall   Special_Function
                        LJMP    Run_EEPROM_Para
;*******************************************
Compare_Para:
                        acall   Sub_Compare
                        LJMP    Run_EEPROM_Para
;*******************************************
Jump_Para:
                        acall   Sub_Jump
                        LJMP    Run_EEPROM_Para
;*******************************************
Detect_Para:
                        acall   Detect_Line_Status
                        LJMP    Run_EEPROM_Para
;*******************************************
Get_Rest_Para:



                        INC     Run_Address
                        MOV     Config_Flag,#0fh
;                       SETB    IE.0
;                       SETB    IE.7
                        LJMP    Run_EEPROM_Para
;*******************************************
Dial_Para:
                        ACALL   Sub_Dial
                        nop
                        LJMP    Run_EEPROM_Para
;*******************************************
;link under below conditions:
;1. Input_Len <=Dial_From
  
Dial_Input_Para:
                        ACALL   Read_EEPROM
                        CLR     DTMF_CS
                        MOV     Dial_From,Read_Data
                        MOV     A,Dial_From
                        ANL     A,#0FH
                        MOV     R1,A
                        MOV     A,Dial_From
                        SWAP    A
                        ANL     A,#0FH
                        MOV     Dial_From,A
                        MOV     A,Input_Len
                        CLR     C
                        SUBB    A,Dial_From
                        JC      Dial_Input_Over_P
                        DJNZ    Dial_From,Cal_Dial_From_P
                        MOV     Dial_Buffer,#Buffer_Add
                        SJMP    Dial_Next_Loop_P
Cal_Dial_From_P:
                        MOV     A,Dial_From
                        CLR     C
                        RRC     A
                        MOV     Dial_Buffer,#Buffer_Add
                        ADD     A,Dial_Buffer
                        MOV     Dial_Buffer,A
				
Dial_Next_Loop_P:		
                        MOV     R0,Dial_Buffer
                        MOV     DTMF_Out,@R0
                        MOV     A,Dial_From
                        JB      ACC.0,Dial_Even_Para
                        MOV     A,DTMF_Out
                        SWAP    A
                        MOV     DTMF_Out,A
Dial_Even_Para:
                        acall   Dial_DTMF
                        INC     Dial_From
                        MOV     A,Input_Len
                        SETB    C
                        SUBB    A,Dial_From
                        JC      Dial_Input_Over_P
                        MOV     A,Dial_From
                        JB      ACC.0,Dial_Next_Input_P
                        INC     Dial_Buffer
Dial_Next_Input_P:      DJNZ    R1,DiaL_Next_Loop_P
Dial_Input_Over_P:
DV_Low_Over:
                        LJMP    Run_EEPROM_Para
;                       LJMP    Program_END
;*****************************************
On_Hook_Para:
                        acall   Sub_On_Hook
                        LJMP    Run_EEPROM_Para
;*****************************************
Off_Hook_Para:
                        acall   Sub_Off_Hook
                        LJMP    Run_EEPROM_Para
;*****************************************
Wait_Para:
                        acall   Sub_Wait
                        LJMP    Run_EEPROM_Para
;*****************************************
Call_Para:
                        acall   Sub_Call
                        LJMP    Run_EEPROM_Para
;*****************************************
Return_Para:
                        acall   Sub_Return
                        LJMP    Run_EEPROM_Para
;*****************************************
Keep_Para:
                        acall   Sub_Keep
                        LJMP    Run_EEPROM_Para
;*****************************************
Ring_Para:
                        acall   Sub_Ring
                        LJMP    Run_EEPROM_Para
;*****************************************
Data_Valid:
;/*****************************************
;/*   			Sub  Program Begins here
;/*****************************************
Delay_10mS:
;Parameters		X10mS
;Private		Delay_Count1,Delay_Count2
                        MOV     Delay_Count1,#100
                        MOV     Delay_Count2,#100

Sub_Delay_Loop:
                        DJNZ    Delay_Count1,Sub_Delay_Loop
                        MOV     Delay_Count1,#100
                        DJNZ    Delay_Count2,Sub_Delay_Loop
                        DJNZ    X10mS,Delay_10mS
                        INC     X10mS
                        RET
;/******************************************
Delay_Seconds:
;Parameters		Delay_Counter
                        MOV     A,Delay_Counter
                        ANL     A,#0Fh
                        MOV     Delay_Counter,A
                        JZ      No_Time_Left
Next_Second:
                        MOV     mS_Counter,#0
Wait_For_1S:
                        MOV     A,mS_Counter
                        CJNE    A,#50,Wait_For_1S                                                     ;mS_Counter < 50
                        DJNZ    Delay_Counter,Next_Second
No_Time_Left:           RET
				


;/******************************************
Dial_DTMF:
;Patameters             DTMF_Out,  Temp
;Private
                        CLR    IE.0
                        MOV    FLAG_RED,#4
                        CLR    RED_LED
                        CLR    DTMF_CS
                        SETB   DTMF_RS0
                        MOV    X10mS,#2
                        ACALL  Delay_10mS
                        MOV    A,#05h         ;/*0101   Control Register A
                        MOV    R0,#00h
                        MOVX   @R0,A

                        MOV    A,DTMF_Out
                        ANL    A,#0FH
                        CLR    DTMF_RS0
                        MOV    R0,#0H
                        MOVX   @R0,A
                        MOV    X10mS,#10
                        ACALL  Delay_10mS

                        CLR    DTMF_CS
                        SETB   DTMF_RS0
                        MOV    A,#04h         ;/*0100   Control Register A
                        MOV    R0,#00h
                        MOVX   @R0,A


;                       SETB    DTMF_RS0
WAIT_SEND_END:
;                       MOVX    A,@R0
;                       JNB     ACC.1,WAIT_SEND_END
;                       JNB     MT8888C_FLAG.1,WAIT_SEND_END
;                       CLR     MT8888C_FLAG.1
                        SETB    IE.0
                        RET
;******************************************
short_Delay:
                        MOV     Delay_Count1,#5
Short_Loop:
                        DJNZ    Delay_Count1,Short_Loop
                        RET
;/******************************************
Get_DTMF:
;Glode   	Flag_Byte, Input_Len, Temp_Buff,Next_Buff_Add,Temp
;Private	Get_Wait_Time,Time_Out_Limit
;return   	DTMF_Input

                        MOV     Second_Counter,#0
                        MOV     mS_Counter,#0
                        CLR    DTMF_Time_Out
;                        SETB    DTMF_RS0
;                        MOV     R0,#0
;                        MOVX    A,@R0
;WAIT_FOR_REDAY:         MOVX    A,@R0
;                        JB      ACC.2,RECIEVE_OK
WAIT_FOR_READY:
                        MOV     A,INPUT_B
                        CJNE    A,INPUT_E,RECIEVE_OK
                        MOV     A,mS_Counter
                        CJNE    A,#50,WAIT_FOR_READY
                        MOV     mS_Counter,#0
                        INC     Second_Counter
                        MOV     A,Second_Counter
                        CJNE    A,Time_Out_Limit,WAIT_FOR_READY
                        SETB    DTMF_Time_Out
                        RET
				
RECIEVE_OK:             MOV     A,INPUT_B
                        CLR     C
                        RRC     A
                        JC     HI_B
                        ADD     A,#BUFFER_ADD
                        MOV     R0,A
                        MOV     A,@R0
                        SWAP    A
                        ANL     A,#0FH
                        MOV     DTMF_INPUT,A
                        INC     INPUT_B
                        MOV     FLAG_RED,#10
                        CLR     RED_LED
                        RET
HI_B:
                        ADD     A,#BUFFER_ADD
                        MOV     R0,A
                        MOV     A,@R0
                        ANL     A,#0FH
                        MOV     DTMF_INPUT,A
                        INC     INPUT_B
                        MOV     FLAG_RED,#10
                        CLR     RED_LED
                        RET

;                        CLR     DTMF_RS0
;                        MOVX    A,@R0
;                        ANL     A,#0FH
;                        MOV     DTMF_Input,A
;                        INC     Input_Len
;                        Setb    DTMF_DV_Low
;                        MOV     A,Input_Len
;                        RRC     A
;                        JC      Input_Odd
;                        MOV     R1,Save_Buffer
;                        MOV     A,@R1
;                        ORL     A,DTMF_Input
;                        MOV     @R1,A
;                        MOV     A,Save_Buffer
;                        CJNE    A,#Buffer_End,Input_No_Over
;                        SJMP    Get_DTMF_Over
;Input_No_Over:          INC     Save_Buffer
;                        SETB    RED_LED
;                        RET


;*******************************************
Get_DTMF2:
;Glode   	Flag_Byte, Input_Len, Temp_Buff,Next_Buff_Add,Temp
;Private	Get_Wait_Time,Time_Out_Limit
;return   	DTMF_Input

                                MOV     Second_Counter,#0
                                MOV     mS_Counter,#0
                                CLR     DTMF_Time_Out
                                SETB    DTMF_RS0
				MOV     R0,#0
                                MOVX    A,@R0
WAIT_FOR_DTMF:                 MOVX    A,@R0
                                JB      ACC.2,REC_DTMF_OK
                                MOV     A,mS_Counter
                                CJNE    A,#50,WAIT_FOR_DTMF
				MOV    	mS_Counter,#0
                                INC     Second_Counter
				MOV	A,Second_Counter
                                CJNE    A,Time_Out_Limit,WAIT_FOR_DTMF
				SETB    DTMF_Time_Out
                                RET
				
REC_DTMF_OK:
				CLR     DTMF_RS0
				MOVX    A,@R0
                                ANL     A,#0FH
				MOV     DTMF_Input,A
                                RET


                                INC     Input_Len
                                SETB    DTMF_DV_Low
                                MOV     A,Input_Len
                                RRC     A
                                JC            Input_Odd_D
				MOV		R1,Save_Buffer
				MOV		A,@R1
				ORL		A,DTMF_Input
				MOV		@R1,A
                                MOV             A,Save_Buffer
                                CJNE    A,#Buffer_End,Input_N_Over
				SJMP	Get_DTMF_Over
Input_N_Over:                  INC     Save_Buffer
				SJMP	Get_DTMF_Over

Input_Odd_D:
                                MOV     A,DTMF_Input
				SWAP	A
				MOV	R1,Save_Buffer
				MOV     @R1,A

Get_DTMF_OVER:                 RET
Quit_Get_DTMF:			RET							
				

;/******************************************				

;/******************************************				
Read_EEPROM:
;Parameters  	Read_Data, Bit_len,Bits_to_Send

                        SETB    EEPROM_DO
                        CLR     EEPROM_CS
                        NOP
                        NOP
                        NOP
                        NOP
                        SETB    EEPROM_CS
                        MOV     Bit_len,#RDWR_Inst_Len
                        MOV     Bits_to_send,#Read_Inst
                        acall   Send_Bits
				
                        MOV     Bit_Len,#EEPROM_Add_Len
                        MOV     Bits_To_Send,Run_Address
                        Acall   Send_Bits
				
                        MOV     Read_Data,#0
                        MOV     Bit_Len,#Byte_Len
Read_Next_Bit:
                        CLR     EEPROM_SK
                        NOP
                        NOP
                        NOP
                        NOP
                        SETB    EEPROM_SK
                        CLR     C
                        JNB     EEPROM_DO,Bit_Got
                        SETB    C
Bit_Got:		MOV     A,Read_Data
                        RLC     A
                        MOV     Read_Data,A
                        DJNZ    Bit_Len,Read_Next_Bit
                        INC     Run_Address
                        MOV     A,Run_Address
                        JZ      JMP_Program_END
                        CLR     EEPROM_CS

                        RET
JMP_Program_END:
                        LJMP    Program_END

;***************************************************************

⌨️ 快捷键说明

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