📄 modem.dt
字号:
;************************
;start at:March 3, 2006
;************************
R5_TEMP==0X1F
A_TEMP==0X1E
R3_TEMP==0X1D
R4_TEMP==0X1C
RC_TEMP==0X1B
;=====PORT9===== ;0 OUTPUT ; 1 INPUT
STD_9170==4
EN_9170==5
HKS_1==6
HKS_2==7
;=====PORT7=====
DSR==0
BUSY==1
CLOCK==2
DATA==3
;=====PORT6=====
;NORMAL IO PORT
;===============
REC_BUF_ADDR==0X02
I2C_SEND_ADDR==0X00
I2C_REC_ADDR==0X40
STA_FLAG==0X20
IN_REC_FSK==0
IN_REC_DTMF==1
; IN_REC_9170==2
IN_SEND_FSK==3
IN_SEND_DTMF==4
IN_I2C_SEND==5
IN_I2C_REC==6
OPT_FLAG==0X21
OPT_RING==0
OPT_RING_START==1
OPT_RING_END==2
OPT_100MS_START==4
OPT_100MS_OK==5
OPT_TEMP1==0X22
OPT_TEMP2==0X23
OPT_100MS_COUNT==0X24
OPT_CONT==0X25
RING_TIMES==0X26
COUNTER_5MS==0X27
C2_1S_COUNTER==0X28
COUNTER_1S==0X29
I2C_TOTAL==0X2A
i2c_temp==0x14
i2c_bit_cont==0x12
i2c_send_total==0x13
i2c_rec_total==0x13
i2c_checksum==0X15
I2C_FLAG==0X2b
WAIT_BUSY==0
WAIT_START==1
MCU_OVER_TIME==2 ;WAIT BUSY OR START ,OVERTIME
NO_ACK==3 ;
end_bit==4
dtmf_flag==0x2c
dtmf_send_start==0
FSK_SEND_ADD==0X2d ;FSK SEND 复用
FSK_BYTE_TOTAL==0X2e
FSK_SEND_TOTAL==0X2f
fsk_bit_cont==0x31
;INT_TEMP==0X26
;==================CID RAM==================
;00-01 SEND COMMAND : instruction,data_total
;02-3F FSK/DTMF REC BUF,OPT STA,9170 OUTPUT
;40-7F I2C RECEIVE BUF
;80-8F I2C SEND BUF
;90 806 ADD
;=============================
;=======PROG START HERE=======
;=============================
ORG 0X000
DISI
PAGE @01
JMP _RESET
ORG 0X008
DISI
MOV A_TEMP,A ;protect local
MOV A,0X05
MOV R5_TEMP,A
MOV A,0X03
MOV R3_TEMP,A
MOV A,0X04
MOV R4_TEMP,A
MOV A,0X0C
MOV RC_TEMP,A
PAGE @00
CLR 0X04
JBC 0X0F,0
JMP _INT_TCC
JBC 0X0F,1
JMP _INT_INT0
JBC 0X0F,2
JMP _INT_INT1
JBC 0X0F,3
JMP _INT_INT23
JBC 0X0F,4
JMP _INT_C1
JBC 0X0F,5
JMP _INT_C2
JBC 0X0F,6
JMP _INT_FSK
JBC 0X0F,7
JMP _INT_DTMF
JMP _INT_EXIT
_INT_TCC:
BC 0X0F,0
JMP _INT_EXIT
_INT_INT0:
BC 0X0F,1
JMP _INT_EXIT
_INT_INT1:
BC 0X0F,2
JMP _INT_EXIT
_INT_INT23:
BC 0X0F,3
JMP _INT_EXIT
_INT_C1:
BC 0X0F,4
JMP _INT_EXIT
_INT_C2:
BC 0X0F,5 ;5MS CHECK OPT
BS 0X03,7 ;IOCE PAGE 1
MOV A,@91 ;5ms
IOW 0X0C
jbc sta_flag,in_send_dtmf
jmp _dtmf_send_80ms
JBC I2C_FLAG,WAIT_BUSY
JMP _BUSY_START_OVER_COUNT
JBC I2C_FLAG,WAIT_START
JMP _BUSY_START_OVER_COUNT
JMP _C2_OPT
_dtmf_send_80ms:
inc counter_5ms
mov a,@0x45
mov 0x0c,a
bc 0x03,0
rlca 0x0d
sub a,counter_5ms
jbs 0x03,0
jmp _C2_OPT
CLR COUNTER_5MS
bc sta_flag,in_send_dtmf
jmp _C2_OPT
_BUSY_START_OVER_COUNT:
INC COUNTER_5MS
MOV A,COUNTER_5MS
SUB A,@29
JBC 0X03,0
JMP _C2_OPT
CLR COUNTER_5MS
BC I2C_FLAG,WAIT_BUSY
BC I2C_FLAG,WAIT_START
BS I2C_FLAG,MCU_OVER_TIME
JMP _C2_OPT
_C2_OPT:
JBS OPT_FLAG,OPT_RING_END
JMP _C2_OPT_MS
INC C2_1S_COUNTER
MOV A,C2_1S_COUNTER
SUB A,@199
JBC 0X03,0
JMP _C2_OPT_MS
CLR C2_1S_COUNTER
INC COUNTER_1S
SUB A,@0X05
JBC 0X03,0
JMP _C2_OPT_MS
CLR OPT_FLAG
CLR OPT_100MS_COUNT
CALL RESET_SEND_06 ;RING_END
INC 0X0C
MOV A,@0X90
MOV 0X0D,A
JMP _OPT_WRITE_CHECK_SUM
_C2_OPT_MS:
JBS OPT_FLAG,OPT_100MS_START
JMP _INT_GET_OPT
INC OPT_100MS_COUNT
SUB A,@19
JBC 0X03,0
JMP _INT_GET_OPT
CLR OPT_100MS_COUNT
BC OPT_FLAG,OPT_100MS_START
BS OPT_FLAG,OPT_100MS_OK
_INT_GET_OPT:
CLR OPT_TEMP2 ;GET OPT_TEMP2
BC OPT_TEMP2,0 ;OPT1
JBC 0X09,HKS_1
BS OPT_TEMP2,0
BC OPT_TEMP2,4 ;OPT2
JBC 0X09,HKS_2
BS OPT_TEMP2,4
MOV A,OPT_TEMP1
XOR A,OPT_TEMP2
JBS 0X03,2
INC OPT_CONT ;OPT STA CHANG TIMES
JBS OPT_FLAG,OPT_RING ;if opt_ring,go on counte change
JMP _OPT_CHECK_EXIT
JBC OPT_FLAG,OPT_100MS_START
JMP _JUDGE_OPT_COUNT_OK
CLR OPT_100MS_COUNT ;100MS RESET
BS OPT_FLAG,OPT_100MS_START
JMP _OPT_CHECK_EXIT
_JUDGE_OPT_COUNT_OK:
JBC OPT_FLAG,OPT_100MS_OK
JMP _OPT_CHECK
JMP _OPT_CHECK_EXIT
_OPT_CHECK:
CLR OPT_100MS_COUNT
MOV A,OPT_CONT
JBS 0X03,2
JMP _OPT_STA_RING
MOV A,OPT_TEMP2
XOR A,@0X11
JBS 0X03,2
JMP _OPT_STA_UP_REV
_OPT_STA_DOWN:
JBC OPT_FLAG,OPT_RING ;1S:4S(RING SIGNAL)
JMP _RING_NOT_DOWN
_SET_OPT_DOWN:
CALL RESET_SEND_06 ;DOWN
INC 0X0C
CLR 0X0D
_OPT_WRITE_CHECK_SUM:
INC 0X0C
MOV A,I2C_CHECKSUM
MOV 0X0D,A
BS STA_FLAG,IN_I2C_SEND
MOV A,@0X04
MOV I2C_TOTAL,A
JMP _OPT_CHECK_EXIT
_RING_NOT_DOWN:
JBC OPT_FLAG,OPT_RING_END ;ONLY FIRST TIME,"SEND_COMMAND_06"
JMP _OPT_CHECK_EXIT
BS OPT_FLAG,OPT_RING_END
BC OPT_FLAG,OPT_RING_START
CALL RESET_SEND_06 ;RING_END
INC 0X0C
MOV A,RING_TIMES
ADD A,@0X60
MOV 0X0D,A
JMP _OPT_WRITE_CHECK_SUM
_OPT_STA_UP_REV:
MOV A,OPT_TEMP2
XOR A,OPT_TEMP1
JBS 0X03,2
JMP _OPT_STA_UP
CALL RESET_SEND_06 ;REV
INC 0X0C
MOV A,@0X55
MOV 0X0D,A
JMP _OPT_WRITE_CHECK_SUM
_OPT_STA_UP:
CALL RESET_SEND_06 ;UP
INC 0X0C
MOV A,@0X01
MOV 0X0D,A
JMP _OPT_WRITE_CHECK_SUM
_OPT_STA_RING:
MOV A,OPT_CONT
SUB A,@04
JBC 0X03,2
JMP _OPT_CHECK_EXIT
MOV A,OPT_CONT
SUB A,@16
JBS 0X03,2
JMP _OPT_CHECK_EXIT
JBC OPT_FLAG,OPT_RING_START ;ONLY FIRST TIME,"SEND_COMMAND_06"
JMP _OPT_CHECK_EXIT
BS OPT_FLAG,OPT_RING_START
BC OPT_FLAG,OPT_RING_END
CALL RESET_SEND_06 ;RING_START
INC 0X0C
INC RING_TIMES
MOV A,RING_TIMES
ADD A,@0X60
MOV 0X0D,A
JMP _OPT_WRITE_CHECK_SUM
_OPT_CHECK_EXIT:
MOV A,OPT_TEMP2 ;OPT_TEMP1=OPT_TEMP2
MOV OPT_TEMP1,A
JMP _INT_EXIT
_INT_FSK:
BC 0X0F,6
JMP _INT_EXIT
_INT_DTMF:
BC 0X0F,7
JMP _INT_EXIT
_INT_EXIT:
MOV A,R5_TEMP ;RETURN
MOV 0X05,A
MOV A,R3_TEMP
MOV 0X03,A
MOV A,R4_TEMP
MOV 0X04,A
MOV A,RC_TEMP
MOV 0X0C,A
MOV A,A_TEMP
RETI
;SUB:PREPARE DATA OF "SEND_COMMAND_06"
RESET_SEND_06:
CLR I2C_CHECKSUM
CLR 0X0C
MOV A,@0X06
MOV 0X0D,A
ADD I2C_CHECKSUM,A
INC 0X0C
MOV A,@0X01
MOV 0X0D,A
ADD I2C_CHECKSUM,A
RET
;======================================
;==============PAGE 1==================
;======================================
ORG 0X400
_RESET:
MOV A,@0XF0
MOV 0X0A,A ;inner timmer/counter
MOV A,@0B11100000 ;P8 SEG,LOW BAT DISABLE,CID RAM PAGE 0,
MOV 0X0B,A ;TPD(DTMF EST DELAY) 10MS
MOV A,@0X07
MOV 0X0E,A ;LCD DISABLE
IOR 0X05
AND A,@0X0F ;P5,OUT PUT, ;0 OUTPUT ;1 INPUT
IOW 0X05
MOV A,@0XFF ;P6,OUTPUT
IOW 0X06
MOV A,@0XFE ;P7,11111110
IOW 0X07
MOV A,@0X00 ;P8,OUTPUT
IOW 0X08
MOV A,@0XDF ;P9,1101 1111
IOW 0X09
MOV A,@0B00010000 ;lcd vdd 000
IOW 0X0A ;P5 SEG,P6 P9 I/O
BS 0X03,7 ;IOCx,PAGE 1
MOV A,@0XFF ;P7 pull high
IOW 0X0D
BC 0X03,7
MOV A,@0B10000111 ;P70 FALLING EDGE,TCC SETTING
CONTW ;PAB 0,TCC:PRESCALE 1:128
MOV A,@0B00100000 ;R4 RAM PAGE 0 1 CLR
MOV 0X04,A
MOV A,@0X02
MOV 0X11,A
_RAM_CLR_LOOP2:
MOV A,@0X20
MOV 0X10,A
_RAM_CLR_LOOP1:
CLR 0X00
INC 0X04
DJZ 0X10
JMP _RAM_CLR_LOOP1
BS 0X04,6
BS 0X04,5
DJZ 0X11
JMP _RAM_CLR_LOOP2
CLR 0X04
MOV A,@0X90 ;GET 806 ADD
MOV 0X0C,A
SWAPA 0X07
AND A,@0XF0
MOV 0X0D,A
BC OPT_TEMP1,0 ;RESET OPT STA
JBC 0X09,HKS_1 ;OPT1
BS OPT_TEMP1,0
BC OPT_TEMP1,4 ;OPT2
JBC 0X09,HKS_2
BS OPT_TEMP1,4
; MOV A,OPT_TEMP1 ;RESET OPT_FLAG
; XOR A,@0X11
; JBS 0X03,2
; JMP _RESET_HK_UP
; BS OPT_FLAG,HK_DOWN
; JMP _RESET_C2
;_RESET_HK_UP:
; BS OPT_FLAG,HK_UP
;============SET C2 FOR CLOCK=============
;C2 for clock 32768hz
;c1 fsk send 3579mhz,
_RESET_C2:
BS 0X03,7 ;IOCE PAGE 1
MOV A,@0B00011001 ;counter2,32768hz,RAW DATA
IOW 0X0E
MOV A,@91 ;163/32768=0.005005
IOW 0X0C
BC 0X03,7 ;IOCE PAGE 0
IOR 0X0F ;enable couter2
OR A,@0B00100000
IOW 0X0F
ENI
JMP MAIN
;===================================
;================MAIN===============
;===================================
MAIN:
JBC STA_FLAG,IN_I2C_SEND
JMP _I2C_SEND_MCU
JBC STA_FLAG,IN_I2C_REC
JMP _I2C_REC_MCU
JBC STA_FLAG,IN_REC_FSK
JMP _REC_FSK
JBC STA_FLAG,IN_REC_DTMF
JMP _REC_DTMF
; JBC STA_FLAG,IN_REC_9170
; JMP _REC_9170
JBC STA_FLAG,IN_SEND_FSK
JMP _SEND_FSK
JBC STA_FLAG,IN_SEND_DTMF
JMP _SEND_DTMF
_IN_IDLE:
; JBC 0X07,
jbc 0x07,busy
jmp main
mov a,sta_flag
jbs 0x03,2
jmp main
nop
bc 0x07,dsr
bs sta_flag,in_i2c_rec
jmp _I2C_REC_MCU
_REC_FSK:
JMP MAIN
_REC_DTMF:
JMP MAIN
_REC_9170:
JMP MAIN
_SEND_FSK:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -