📄 tf9925b.src
字号:
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 + -