📄 dialer.asm
字号:
;/*********************************************************;/* Program define/settings here
;/*********************************************************
;Chip Settings
ACC EQU 0E0H
B EQU 0F0H
PSW EQU 0D0H
SP EQU 81H
IP EQU 0B8H
IE EQU 0A8H
TMOD EQU 89H
TCON EQU 88H
TH0 EQU 08CH
TL0 EQU 08AH
P0 EQU 80H
P1 EQU 90H
P2 EQU 0A0H
P3 EQU 0B0H
TF0 BIT TCON.5
IE0 BIT TCON.1
Stack EQU 10H
TMOD_status EQU 01H
TCON_status EQU 11H
IE_status EQU 03H
IP_status EQU 00H
T0_INT_ADDR EQU 000BH
INT0_ADDR EQU 0003H
P0_status EQU 00H
P1_status EQU 00H
P2_status EQU 00H
;Port Flags setting
DTMF_CS BIT P2.7
DTMF_D0 BIT P0.0
DTMF_D1 BIT P0.1
DTMF_D2 BIT P0.2
DTMF_D3 BIT P0.3
DTMF_RS0 BIT P2.0
;Eeprom
EEPROM_CS BIT P1.3
EEPROM_SK BIT P1.4
EEPROM_DI BIT P1.5
EEPROM_DO BIT P1.6
;Else
DisConnect BIT P2.6
Off_Hook BIT P2.5
Tone_Detect BIT P2.4
Call_Back BIT P1.2
DTMF_DV BIT P2.1
DTMF_INABLE BIT P1.7
GREEN_LED BIT P2.3
RED_LED BIT P2.2
;********************************************************
Short_LTD1 EQU 8
Short_LTD2 EQU 5
D_Pickup_Mute EQU 100
D_Pickup_Tone EQU 40
D_Unknow_Tone EQU 80
D_Ring_Tone EQU 40
D_Ring_Mute EQU 40
D_Line_LTD EQU 75
D_Ring_LTD EQU 15
D_Input_TimeOut EQU 6
;*********************************************************
;Config_BGN EQU 26H
;*********************************************************
DTMF_1 EQU 01H
DTMF_2 EQU 02H
DTMF_3 EQU 03H
DTMF_4 EQU 04H
DTMF_5 EQU 05H
DTMF_6 EQU 06H
DTMF_7 EQU 07H
DTMF_8 EQU 08H
DTMF_9 EQU 09H
DTMF_0 EQU 0AH
DTMF_Star EQU 0BH
DTMF_Cross EQU 0CH
DTMF_A EQU 0DH
DTMF_B EQU 0EH
DTMF_C EQU 0FH
DTMF_D EQU 00H
DTMF_Stop EQU 38H
Byte_Len EQU 8
EEPROM_Add_Len EQU 8
DTMF_Length EQU 5
Access_Inst_Len EQU 5
RDWR_Inst_Len EQU 5
;EEPROM INSTRUCTIONS
Read_Inst EQU 60H
Write_Inst EQU 50H
EWEN_Inst EQU 4CH
EWDS_Inst EQU 40H
;FLAG BIT
Flag_Byte equ 24H
Flag_Byte2 equ 25H
Config_Bytes equ 26H
PROG_COUNTER EQU 27H
Read_Data equ 28h
MT8888C_FLAG EQU 29H
input_len equ 2ah
;flag byte settings
DTMF_DV_Low equ Flag_Byte.6
DTMF_Time_Out equ Flag_Byte.5
Not_Special equ Flag_Byte.4
Flag_Connect equ Flag_Byte.3
Flag_Busy equ Flag_Byte.2
Flag_PickUp equ Flag_Byte.1
Flag_Unknow equ Flag_Byte.0
;flag 2 byte settings
Program_CFG equ Config_Bytes.4
DIAL_FLAG EQU FLAG_BYTE2.7
FTone1 equ FLAG_BYTE2.6
FTone2 equ FLAG_BYTE2.5
FTone3 equ FLAG_BYTE2.4
FTone4 equ FLAG_BYTE2.3
FTone200ms equ FLAG_BYTE2.2
FTone200ms1 equ FLag_Byte2.1
;GENERAL PURPOSE REGISTER SETTING
Run_Address equ 41H
X10ms equ 42H
Bit_Len equ 43H
EEPROM equ 44H
Delay_Count1 equ 45H
TimesResult equ 46H
Config_Loop equ 47H
mS_Counter equ 48H
Dial_Total equ 49H
Config_Pointer equ 4aH
Delay_Counter equ 4bH
Get_Total equ 4cH
Check_Sum_Low equ 4dH
Check_Sum_High equ 4eH
Temp equ 50H
Dial_From equ 51H
Stack_Pointer equ 52H
DTMF_Out equ 53H
DTMF_Input equ 54H
Write_Data equ 55H
Bits_to_Send equ 57H
;Input_Len equ 58H
Config_Flag equ 59H
Dial_Buffer equ 5aH
Save_Buffer equ 5bH
Prg_Code_Cmp equ 5cH
Hold_time equ 5dH
MuteTime equ 5eH
ToneTime equ 5fH
Second_Counter equ 60H
;RetryTimes equ 61h
;Busy_Counter equ 63H
Ring_Tone equ 64H
Ring_Mute equ 65H
PickUp_Tone equ 66H
PickUp_Mute equ 67H
Line_LTD equ 68H
Ring_LTD equ 69H
Time_Out_Limit equ 6aH
Unknow_Tone equ 6bH
INPUT_B EQU 6CH
INPUT_E EQU 6DH
Prg_Code_Bgn equ 6FH
config_BNG equ 70H
EEPROM_Config equ 71H
Delay_Count2 equ 72H
ToneTime2 equ 73h
MuteTime2 equ 74h
AgainCMP equ 75h
Recordnum equ 76h
RecordTime equ 77h
FLAG_RED EQU 78H
FLAG_GREEN EQU 79H
Buffer_Add equ 2bH
Buffer_End equ 3FH
Stack_Begin equ 7AH
stack_Top equ 7fH
;***************************************************
; Main Program Begins here
;***************************************************
ORG 0000h
LJMP Program_Start
ORG 0003h
LJMP EX0_INT_ENTER
ORG 000Bh
LJMP T0_TIME_ENTER
PROG_CODE:
DB DTMF_C
DB DTMF_C
DB DTMF_star
DB DTMF_Cross
DB DTMF_A
DB DTMF_Cross
ORG 50H
EX0_INT_ENTER:
clr ie.7
push psw
push Acc
SETB PSW.3
SETB DTMF_RS0
MOV R0,#0
RE_OK: MOVX A,@R0
; JNB ACC.2,RE_OK
ORL A,MT8888C_FLAG
MOV MT8888C_FLAG,A
JNB ACC.2,EXIT_EX1
CLR DTMF_RS0
MOVX A,@R0
ANL A,#0FH
MOV DTMF_Input,A
INC Input_Len
MOV A,Input_Len
RRC A
JC Input_O
MOV R1,Save_Buffer
MOV A,@R1
ORL A,DTMF_Input
MOV @R1,A
MOV A,Save_Buffer
INC INPUT_E
CJNE A,#Buffer_End,Input_No
MOV Save_Buffer,#Buffer_Add
MOV INPUT_E,#00H
SJMP EXIT_EX0
Input_No: INC Save_Buffer
sjmp exit_ex0
Input_O:
MOV A,DTMF_Input
SWAP A
MOV R1,Save_Buffer
MOV @R1,A
INC INPUT_E
EXIT_EX0:
MOV DPTR,#PROG_CODE
MOV A,PROG_COUNTER
MOVC A,@A+DPTR
ANL A,#0FH
CJNE A,DTMF_INPUT,NO_SAME
INC PROG_COUNTER
MOV A,PROG_COUNTER
CJNE A,#6,EXIT_EX1
POP Acc
POP PSW
POP Acc
POP Acc
CLR IE.0
LJMP RE_PROGRAM_EEPROM
NO_SAME: MOV PROG_COUNTER,#0
EXIT_EX1: CLR MT8888C_FLAG.2
pop Acc
POP PSW
SETB IE.7
reti
T0_TIME_ENTER: clr ie.7
push psw
jb flag_byte.7,out_put1
setb P3.4
setb flag_byte.7
MOV TH0,#0D9h
MOV TL0,#00h
POP PSW
setb ie.7
reti
out_put1:
clr P3.4
clr flag_byte.7
INC mS_Counter
INC ToneTime
INC MuteTime
INC RecordTime
DJNZ FLAG_RED,CMPGREEN
SETB RED_LED
CMPGREEN: DJNZ FLAG_GREEN,CMPLEDOVER
CLR GREEN_LED
CMPLEDOVER:
MOV TH0,#0D9H
MOV TL0,#00H
POP PSW
setb ie.7
reti
Program_Start:
MOV P0,#P0_status
MOV P1,#P1_status
MOV P2,#P2_status
setb off_hook
setb Disconnect
SETB DTMF_INABLE
MOV R0,#7fH
CLEAR_BUF:
MOV A,#0
MOV @R0,A
DJNZ R0,CLEAR_BUF
CLR IE.7
SETB IE.1
SETB IE.0
MOV SP,#Stack
MOV TMOD,#TMOD_status
MOV TCON,#TCON_status
MOV IP,#IP_status
SETB DTMF_CS
MOV Time_Out_Limit,#D_Input_TimeOut
MOV PickUp_Mute,#D_Pickup_Mute
MOV PickUP_Tone,#D_Pickup_Tone
MOV Unknow_Tone,#D_Unknow_Tone
MOV Ring_Tone,#D_Ring_Tone
MOV Ring_Mute,#D_Ring_Mute
MOV Line_LTD,#D_Line_LTD
MOV Ring_LTD,#D_Ring_LTD
mov Run_Address,#0
acall Read_EEPROM
MOV A,READ_DATA
CJNE A,#01,NO_READ_CONFIG
MOV Run_Address,#0f8h
MOV Config_Loop,#7
MOV Config_Pointer,#Ring_Tone
MOV R0,Config_Pointer
Get_Next_Config:
ACALL Read_EEPROM
MOV A,Read_Data
mov @R0,A
inc R0
DJNZ Config_Loop,Get_Next_config
; MOV TimeResult,#Ring_Tone
; acall X10Times
;Read_Hold:
; MOV Run_Address,#0
; ACALL Read_EEPROM
; MOV Hold_Time,Read_Data
NO_READ_CONFIG: MOV Stack_Pointer,#Stack_Begin
MOV Prg_Code_Cmp,#0
MOV X10mS,#1
acall Sub_ResetBuff
MOV INPUT_B,#00H
MOV INPUT_E,#00H
MOV PROG_COUNTER,#0H
; MOV A,Hold_Time
; MOV Temp,A
; ANL A,#1FH
; MOV Hold_Time,a
CLR DTMF_CS
SETB DTMF_RS0
MOV X10mS,#10
ACALL Delay_10mS
MOV A,#0ch ;/*1100 Control Register A
MOV R0,#00h
MOVX @R0,A
MOV A,#01h ;/*0001 Control Register B
MOVX @R0,A
; ACALL Delay_10mS
; MOV A,#0Dh ;/*1101 B3B2B1B0
; MOV R0,#00h
; MOVX @R0,A
; MOV A,#0
; MOVX @R0,A
MOV bits_to_send,#EWEN_Inst
acall Send_Instruction
mov A, #0ffh
mov Temp, A
MOV Run_Address,#01H
mov x10ms,#10
acall DELAY_10MS
SETB DTMF_RS0
MOV R0,#0
MOVX A,@R0
CLR TF0
CLR IE0
SETB IE.7
CLR GREEN_LED
SETB RED_LED
; LJMP Re_Program_EEPROM
;****************************************************************************
; Main Program Begins Here
; Run in Parallel mode
;****************************************************************************
Run_EEPROM_Para:
acall Read_EEPROM
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -