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

📄 tf9925b.src

📁 2.4GH 无绳电话源代码(三星MCU), 8825 P
💻 SRC
📖 第 1 页 / 共 5 页
字号:
	JR	PAGEJOB5
PAGEJOB8:
	CALLS	SEND_C_CODE		; init. send PAGE command continuously
        LD      EA,#200
        CALLS   SET_LPTOC               ; set loop timeout count
        LD      A,#16-3
        LD      PAGE_CNT,A
PAGE_QUIT:
        REF     SMB0
	RET
	;
PAGEJOB5:
	BTSF	TIMERFGH.LPTMR_EN	; loop timer expired ?
        JR      PAGE_QUIT
        INCS    PAGE_CNT
        JR      PAGEJOB7
        JR      END_PAGE
PAGEJOB7:
        LD      EA,#200
        CALLS   SET_LPTOC
	RET
        ;
END_PAGE:
	CALLS	STOP_PAGE		; yes, quit page mode
	JPS	BACK_2_STDBY            ; off TX power, stop data sending, enable channel scan
	;
;********************
; Stop PAGE routine
;********************
STOP_PAGE:
        REF     STOP_TX                 ; stop PAGE or CONNECT code sending
	BITR	MODEFG.PAGE_MODE	; quit PAGE mode
        ;
	BTSF	CHGDETPORT.CHARGE_DET	; if on charge, only stop led blink
        JPS     OFF_TALKLED
	BITR	TIMERFG.BLK_CHLED	; stop CHARGE led blink
	RET
	;
;*******************************************************************
; Dial digit routine ( Dial tone digit & prepare dial pulse digit )
; i/p : A - dial digit
;     :	DIALMODE - tone/pulse status
; o/p : DIALLING is set if pulse key is pressed
; ram : PULSE_CNT - store number of dial pulse
; flag: DIALLING - set if pulse dialing is in process	
;********************************************************************
DIAL_DIGIT:
	LD	A,#0
	XCH	A,REDIAL_BUF
        LD      E,A
        ADS     A,#0FH
	JPS	DIAL_DIGIT_END		; if buffer empty -> exit
	;
        LD      A,E
        BTST    STSFG1.F_TONESOFT
	JR	DIAL_PULSE
	;
        CALL    DTMFGEN                 ; generate 100ms DTMF tone
	JPS	DIAL_SET
	;
DIAL_PULSE:
	CPSE	A,#STAR_KEY		; Press "*" key ?
	JR	DIAL_PULSE1
	;
        BITS    STSFG1.F_TONESOFT       ; pulse -> tone mode
	BITS	TIME_FLAG.PAUSE		; pause function is activated
	BITS	LINEFG.OFF_HOOK
	RET
	;
DIAL_PULSE1:
	CPSE	A,#PALM_KEY
	JR	DIAL_PULSE2
	JR	DIAL_PULSE_QUIT		; if "#" key, ignore
	;
DIAL_PULSE2:
	INCS	A
	LD	E,#0H
	LD	PULSE_CNT,EA		
	BITS	LINEFG.OFF_HOOK
	;
DIAL_SET:
	BITS	LINEFG.DIALLING
	;
DIAL_PULSE_QUIT:
	RET
	;
DIAL_DIGIT_END:
	BITR	COMBO_FG.MUTE_REQ
	BITR	LINEFG.DIALLING
	RET
	;
;***************************************************************************
; Dial check routine (process pulse dialing, inter-digit & pre-digit pause)
; i/p :
; o/p :
; ram : TIMER1 - inter-digit pause or make/break timer buffer
; flag: OFF_HOOK - offhook status
;***************************************************************************
DIAL_CHK:
	BTST	MODEFG.TALK_MODE
        RET
        ;
DIAL_CHK5:
	LD	EA,TIMER1		; inter-tone pause or M/B time check
        REF     DECSEA
        RET                             ; not timeout -> quit
	;
	LD	EA,PULSE_CNT
        REF     EAEQZERO
	JPS	DIAL_DIGIT		; inter-pause timeout, dial next digit
	;
	BTSF	LINEFG.OFF_HOOK
	JPS	DIAL_CHK1
	;
	BITS	LINEFG.OFF_HOOK
        LD      EA,#MAKE_TIME1
        BTST    OPTION_FG.MKBRK_OPT
        LD      EA,#MAKE_TIME2
	LD	TIMER1,EA
DIAL_CHK3:
	BTSF	TIME_FLAG.PAUSE		; for flash
        RET                             ; for flash
;       BITS    RELAYPORT.LINE_SEIZE    ; break -> make
        BITR    RELAYPORT.LINE_SEIZE    ; break -> make
	RET
	;
DIAL_CHK1:
	LD	EA,PULSE_CNT		; dec. num. of pulses
        REF     DECSEA
	LD	PULSE_CNT,EA
        REF     EAEQZERO 
	JPS	DIAL_CHK_END		; current pulse digit dial finish
	;
	BITR	LINEFG.OFF_HOOK
        LD      EA,#BREAK_TIME1
        BTST    OPTION_FG.MKBRK_OPT
        LD      EA,#BREAK_TIME2
	LD	TIMER1,EA
	;
DIAL_CHK4:
	BTSF	LINEFG.FLASH_LINE	; for flash
	JR	DIAL_FLASH            	; for flash
	BTSF	TIME_FLAG.PAUSE		; if pause period, skip break line
	JR 	DIAL_CHK_QUIT
DIAL_FLASH:
;       BITR    RELAYPORT.LINE_SEIZE    ; make -> break
        BITS    RELAYPORT.LINE_SEIZE    ; make -> break
DIAL_CHK_QUIT:
	RET
	;
DIAL_CHK_END:
        LD      H,#TIME_FLAG>>4
	LDB	C,@H+TIME_FLAG.PAUSE
	CCF
	LDB	@H+TIME_FLAG.PAUSE,C
	BTST	C
	JR	DIAL_CHK2         	; if pause, skip insert inter-pause
	;
	BITR	LINEFG.DIALLING
	LD	EA,#INTPUL_TIME 	
	LD	PULSE_CNT,EA		; insert inter-pulse pause = 800ms
	;
DIAL_CHK2:
;       BITS    RELAYPORT.LINE_SEIZE    ; for flash
        BITR    RELAYPORT.LINE_SEIZE    ; for flash
        BITR    LINEFG.FLASH_LINE       ; for flash
	RET
	;
;*****************
; Flash routine	
;*****************
FLASH_JOB:
	BTST	MODEFG.TALK_MODE	; skip if standby mode
        RET
	;
	BTSF	LINEFG.FLASH_LINE	; skip flash line
        RET
	;
        LD      EA,#FLASH_TIME1         ; insert 600ms flash
        BTST    OPTION_FG.FLASH_OPT
        LD      EA,#FLASH_TIME3         ; insert 300ms flash
        LD      PULSE_CNT,EA
FLASH_JOB1:
	BITS	TIME_FLAG.PAUSE
	;
	LD	EA,#ACK_FLASH
	CALLS	SEND_SYNC_CMD		; send ACK to H/S
	;
FLASH_JOB2:
	BTSF	TXFG.TXEN
        JR      FLASH_JOB2
	;
;       LD      EA,WDIAL_PTR
;       LD      RDIAL_PTR,EA            ; stop dialling
;       ;
	BITS	LINEFG.OFF_HOOK
	BITS	LINEFG.FLASH_LINE
        LD      H,#STSFG1>>4
        LDB     C,@H+STSFG1.F_TONEMODE     ; set T/P flag to original status
        LDB     @H+STSFG1.F_TONESOFT,C     ; F_TONESOFT <-- F_TONEMODE
	;	
FLASH_JOB_QUIT:
	RET
	;
;******************************************
; Reset dial parameter to restart new dial
;******************************************
RESET_DIAL_PAR:
;       PUSH    EA
;       REF     ZERO2EA
;       LD      RDIAL_PTR,EA
;       LD      WDIAL_PTR,EA            ; clr. dial buffer
;       BITR    DIAL_FG.BUFFERFULL
;       BITR    DIAL_FG.DIAL_OVER
;       POP     EA
        ;
        RET
        ;
;============================================================================
; PREPARE THE SERIAL COMMAND OF OPTION CONTROL 1
; INPUT : F_TXRF,F_RXRF,F_REFOSC,F_CPUMP,F_AF,F_BATT
; OUTPUT: DWA
; REGISTER D,W,A WILL BE CHANGED AT RETURN
;============================================================================
SET_COMMAND:
        BTSF    FLAG1.F_RXMUTE          ; RXMUTE
        JR      SETCMD1
        BITS    RXMUTEPORT.RXMUTE
        JR      SETCMD2
SETCMD1:
        BITR    RXMUTEPORT.RXMUTE       ; mute RX audio
SETCMD2:
        ;
        BTSF    FLAG1.F_TXMUTE          ; TXMUTE
        JR      SETCMD3
        BITS    TXMUTEPORT.TXMUTE
        JR      SETCMD4
SETCMD3:
        BITR    TXMUTEPORT.TXMUTE       ; mute TX audio
SETCMD4:
        RET
	;
;*****************************
; Mute / Unmute check routine
;*****************************
MUTE_CHK:
	BTST    MODEFG.TALK_MODE      	; TALK mode ?
        JPS     MUTE_TXRX
	;
	BTSF    TXFG.TXEN             	; sending data ?
        JPS     MUTE_TXRX
	;
	LD      EA,RXFG			; preamble-sync received ?
	LD	HL,#00010100B 		; Unmute preamble for 1KHz singal test
	AND	EA,HL
        REF     DECSEA
        JPS     MUTE_TXRX
	;
        BTSF    LINEFG.FLASH_LINE       ; if flashing line, mute audio
        JPS     MUTE_TXRX
	;
        LD      EA,MUTE_TMR             ; if mute timer is enabled,
        REF     DECSEA
        JPS     MUTE_QUIT
        ;
;============================================================================
; UNMUTE COMBO CHIP TX & RX AUDIO
; INPUT : F_RXMUTE,F_TXMUTE
; OUTPUT: F_RXMUTE,F_TXMUTE,F_MUTED
; NO REGISTER IS CHANGED AT RETURN (THIS ROUTINE ONLY)
;============================================================================
UNMU_TXRX:
        BTSF    FLAG1.F_RXMUTE
        JR      MUTE_PROC1
        BTST    FLAG1.F_TXMUTE
        JR      MUTE_PROC3
MUTE_PROC1:
        BITR    FLAG1.F_RXMUTE          ; UNMUTE RX AUDIO
        BITR    FLAG1.F_TXMUTE          ; UNMUTE TX AUDIO
MUTE_PROC2:
        CALLS   SET_COMMAND
MUTE_PROC3:
        RET
	;
;============================================================================
; MUTE COMBO CHIP TX & RX AUDIO
; INPUT : F_RXMUTE,F_TXMUTE
; OUTPUT: F_RXMUTE,F_TXMUTE,F_MUTED
; NO REGISTER IS CHANGED AT RETURN (THIS ROUTINE ONLY)
;============================================================================
MUTE_TXRX:
        BTST    FLAG1.F_RXMUTE
        JR      MUTE_PROC4
        BTSF    FLAG1.F_TXMUTE
        JPS     MUTE_PROC3
MUTE_PROC4:
        BITS    FLAG1.F_RXMUTE        ; MUTE RX AUDIO
        BITS    FLAG1.F_TXMUTE        ; MUTE TX AUDIO
        JPS     MUTE_PROC2
        ;
;*********************
; mute rx audio only
;*********************
RXMUTE_CHK:
        BTST    FLAG1.F_RXMUTE
        JR      MUTE_RX
        BTST    FLAG1.F_TXMUTE
        JR      MUTE_QUIT
MUTE_RX:
        BITS    FLAG1.F_RXMUTE
        BITR    FLAG1.F_TXMUTE
        JPS     MUTE_PROC2
MUTE_QUIT:
	RET
	;
;************************************
; turn on TX & RX w/high charge pump
;************************************
TXRX_HIGH_INIT:
        LD      HL,#06H
        LD      WX,#6CH                 ; set charge pump to 800uA
        LD      YZ,#13
        CALLS   PROG_COMBO
        RET
	;
;**************************************
; turn on TX & RX w/normal charge pump
;**************************************
TXRX_ON_INIT:
        LD      HL,#06H
        LD      WX,#48H                 ; set charge pump to 200uA
        LD      YZ,#13
        CALLS   PROG_COMBO
        RET
	;
;***********************
; Init. PLL routine
;***********************
INIT_PLL:
        LD      HL,#31H                 ; OSC = 11.150MHz
        LD      WX,#0BEH                ; ref. freq. = 12.5kHz
        LD      YZ,#13
        CALLS   PROG_COMBO
        RET
	;
;**********************************************
; Program combo Tx & Rx frequency (B/U)
; i/p : CURCH - current channel
; o/p : combo PLL is set to current chan. freq.
;**********************************************
FIRSTTXFREQ     EQU     902100000
DIVIDSOR        EQU     2*2*12500
BASET           EQU     FIRSTTXFREQ/DIVIDSOR
FIRSTRXFREQ     EQU     936200000
BASER           EQU     FIRSTRXFREQ/DIVIDSOR
PROG_PLL:
	LD	EA,CURCH
PROG_PLL1:
        PUSH    EA
        LD      HL,#BASET>>8
        LD      WX,#BASET&0FFH
        DECS    EA
        RCF
        ADC     WX,EA
        LD      EA,#0
        ADC     HL,EA
        LD      YZ,#18
        LD      E,#0010B
        CALLS   PROG_COMBO
	;
        POP     EA
        ;
PROG_PLLRX:
        LD      HL,#BASER>>8
        LD      WX,#BASER&0FFH
        DECS    EA
        RCF
        ADC     WX,EA
        LD      EA,#0
        ADC     HL,EA
        LD      YZ,#18
        LD      E,#0100B
        ;
;******************************************************
; Program combo chip common routine (using IO)
; i/p : WX - register high byte data
;       HL - register low byte data
;        E - 2 bits group code
; o/p : none
; reg.: YZ - data bit count
;******************************************************
PROG_COMBO:
        BITR    COMBOPORT.COMBO_STB
        NOP
        NOP
TRANSCOMBO:
        BITR    COMBOPORT.COMBO_CLK
        CALLS   SHIFT_EHLWX
	LDB	COMBOPORT.COMBO_DATA,C
        NOP
        NOP
        BITS    COMBOPORT.COMBO_CLK     ; read data by combo chip
        NOP
        DECS    YZ
	JR	TRANSCOMBO		; loop if carry clear
        ;
        BITR    COMBOPORT.COMBO_CLK
	BITR	COMBOPORT.COMBO_DATA
        ;
        BITS    COMBOPORT.COMBO_STB	; STB:	   ___
	NOP				; 	  |   | 
	NOP				;      ___|   |___
        BITR    COMBOPORT.COMBO_STB   	; latch data by combo
        NOP
        NOP
	RET
	;
;********************************************************
; shift E -> H -> L -> W -> X -> CF one bit to the right
;********************************************************
SHIFT_EHLWX:
        XCH     A,E
        RRC     A
        XCH     A,E
        ;
        XCH     A,H
        RRC     A
        XCH     A,H
        ;
        XCH     A,L
        RRC     A
        XCH     A,L
        ;
        XCH     A,W

⌨️ 快捷键说明

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