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

📄 modem.dt

📁 em78806单片机的汇编源程序
💻 DT
📖 第 1 页 / 共 2 页
字号:
;************************
;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 + -