📄 ct0bu05.src
字号:
BITS F_HTONEON
LD EA,#84 ; LOAD 500ms TONE ON TIME
HTON7: BITS DTOUT
LD T_IDIGPAU,EA
LD EA,#00010111B ; START 697Hz TONE
HTON6: REF PUSHSB
REF SEL_15
LD DTMR,EA
REF POPSB
RET
; TONE DIALLING ROUTINE =======================================================
; STOP TONE DIALLING IF TONE BURST PERIOD IS OVER
; INPUT : F_TONEEXC,T_IDIGPAU
; OUTPUT: F_TONEEXC,T_MAKCNT,T_IDIGPAU
; EA WILL BE CHANGED AT RETURN
DIALTON: BTST F_TONEEXC
RET
LD EA,T_IDIGPAU
REF DECSEA ; CHECK IF PRE-DTMF TIME OUT ?
JPS CHKTONE1
LD A,CURR_DTMF
XCH A,E
LD A,#0101B
REF PUSHSB
REF SEL_15
LD DTMR,EA ; START DTMF TONE OUTPUT
REF POPSB
LD EA,#TONETM
LD T_MAKCNT,EA ; LOAD DTMF BURST TIME
LD EA,#0FFH
LD T_IDIGPAU,EA ; T_IDIGPAU MUST BE > T_MAKCNT
RET
CHKTONE1: LD EA,T_MAKCNT
REF DECSEA
RET
CLEARTONE: REF PUSHSB
REF SEL_15
REF ZERO2EA
LD DTMR,EA ; STOP DTMF TONE OUTPUT
REF POPSB
BITR F_TONEEXC ; DTMF OUTPUT COMPLETED
LD EA,#TINTERPAUTM ; LOAD INTER-DTMF-DIGIT PAUSE
LD T_IDIGPAU,EA
RET
; PULSE DIALLING ROUTINE ======================================================
; INPUT : F_FLASHING,F_PULSEXC
; OUTPUT:
; EA WILL BE CHANGED AT RETURN
DIALPUL: BTSF F_FLASHING
JPS DIALFLAH ; JUMP TO DIAL FLASH ROUTINE
BTST F_PULSEXC
RET
LD EA,T_MAKCNT
REF DECSEA
RET
BTST LSEIZE
JR DLPLMK
INCS NUMPULSE ; SKIP MEANS ALL PULSES HAD BEEN DIALLED
JR DLPLBK
NDIAL: BITR F_PULSEXC
LD EA,#PINTERPAUTM ; GIVE INTER-PULSE-DIGIT PAUSE
LD T_IDIGPAU,EA
RET
DLPLMK: BITS LSEIZE ; SET MAKE
LD EA,#MAKETM ; 40ms MAKE TIME
JR DLPLN
DLPLBK: BITR LSEIZE ; SET BREAK
LD EA,#BREAKTM ; 60ms BREAK TIME
DLPLN: LD T_MAKCNT,EA
RET
DIALFLAH: LD EA,T_IDIGPAU ; WAIT UNTIL PREVIOUS INTERDIGIT
REF DECSEA ; PAUSE PERIOD IS FINISHED
RET
BTST LSEIZE
JR DLFLAH1
BITR LSEIZE ; BREAK THE TELEPHONE LOOP
BITS F_PULSEXC
LD EA,#FLASHTM
LD T_IDIGPAU,EA ; LOAD TIME-LINE-BREAK FLASH TIME
BITS F_TONMODE
BTST TPSW ; RENEW TONE/PULSE STATUS
BITR F_TONMODE
RET
DLFLAH1: BITS LSEIZE ; RESUME THE TELEPHONE LOOP
BITR F_FLASHING ; END THE FLASH PERIOD
JPS NDIAL ; START AN INTERDIGIT PAUSE PERIOD
; SET DIFFERENT POWER-SAVING-MODES ============================================
; MODE_ACTIVE: SET PLL TO TX AND RX MODE, e.g. "REF ACTI_MODE"
; MODE_R_RF: SET PLL TO TX OFF AND RX ON WITH AUDIO ON MODE, e.g. "REF R_RF_MODE"
; MODE_RT_RF: SET PLL TO TX ON AND RX ON WITH AUDIO ON MODE, e.g. "REF RT_RF_MODE"
; INPUT : F_CARRIER,F_TXMUTE,F_RXMUTE
; OUTPUT: F_RXRF,F_TXRF,F_AF,TXPWR
; NO REGISTER IS CHANGED AT RETURN
MODE_ACTIVE: BITR TXPWR ; TURN ON TX POWER AMP.
BITR F_RXRF ; POWER ON RXRF
BITR F_AF ; POWER ON AF
BITR F_TXRF ; POWER ON TXRF
JPS SETMODE1
MODE_RT_RF: BITR TXPWR ; TURN ON TX POWER AMP.
BITR F_RXRF ; POWER ON RXRF
BITR F_AF ; POWER ON AF
BITR F_TXRF ; POWER ON TXRF
JPS SETMODE1
MODE_R_RF: BITS TXPWR ; TURN OFF TX POWER AMP.
BITR F_RXRF ; POWER ON RXRF
BITR F_AF ; POWER ON AF
BITS F_TXRF ; POWER DOWN TXRF
; SETMODE1 IS DIFFER FROM SETMODE BY DISABLE/ENABLE OF MASTER INTERRUPT FLAG,
; USE SETMODE IF JUST WANT TO CHANGE THE MUTE/UNMUTE VALUE DURING TALK,
; USE SETMODE1 IF WANT TO CHANGE THE RF OPERATION MODE, AT THAT TIME, NO DATA
; TX/RX/TIMING IS NEEDED, SO DISABLE INTERRUPT WILL SAVE SOME PROGRAMMING TIME.
SETMODE1: DI ; NO NEED TO HAVE INTT1 FOR TX/RX/TIMING
SETMODE: PUSH EA
LD A,#0000B ; ND,RSSI,RXLD=0,TXLD=0
BTSF F_CARRIER
OR A,#0100B ; SELECT RSSI IF F_CARRIER=1
BTST F_CARRIER
OR A,#1000B ; SELECT NOISE IF F_CARRIER=0
REF CLKDATA
LD A,#0000B ; TXMUTE,TXCP=0=200uA,TXAF,TXRF
BTSF F_TXMUTE
OR A,#1000B
BTSF F_AF
OR A,#0010B
BTSF F_TXRF
OR A,#0001B
REF CLKDATA
LD A,#0000B ; RXMUTE,RXCP=0=200uA,RXAF,RXRF
BTSF F_RXMUTE
OR A,#1000B
BTSF F_AF
OR A,#0010B
BTSF F_RXRF
OR A,#0001B
REF CLKDATA
LD A,#0011B ; 0,0,BA2=BA1=1
REF CLKDATA ; BA2 BA1 BC LEVEL
BITS PLLEN ; 1 1 1 BATT SAVE
NOP
NOP
NOP
BITR PLLEN
POP EA
NOP
NOP
BITR PLLCLK
EI ; RESUME INTT1
RET
; MUTE TRANSMIT & RECEIVE PATH ================================================
; MUTETXRX: MUTE COMPRESSOR AND EXPANDER OF COMBO CHIP
; MUTETX: MUTE COMPRESSOR ONLY, LEAVE EXPANDER UNCHANGED
; INPUT : NONE
; OUTPUT: F_RXMUTE,F_TXMUTE,F_RELMUTE
; NO REGISTER IS CHANGED AT RETURN
MUTERX: BITS F_RXMUTE ; MUTE RX AUDIO
JR MU_GO
MUTETXRX: BITS F_RXMUTE ; MUTE RX AUDIO
MUTETX: BITS F_TXMUTE ; MUTE TX AUDIO
MU_GO: BITS F_RELMUTE ; SET MUTE RELEASE FLAG
JR UNMU_GO
; UNMUTE TRANSMIT & RECEIVE PATH ==============================================
; UNMUTETXRX: UNMUTE COMPRESSOR AND EXPANDER OF COMBO CHIP
; UNMUTERX: UNMUTE EXPANDER ONLY, LEAVE COMPRESSOR UNCHANGED
; INPUT : NONE
; OUTPUT: F_TXMUTE,F_RXMUTE,F_GRPLON
; NO REGISTER IS CHANGED AT RETURN
UNMUTETXRX: BITR F_TXMUTE ; UNMUTE TX AUDIO
UNMUTERX: BITR F_RXMUTE ; UNMUTE RX AUDIO
UNMU_GO:
JPS SETMODE
UNMUTETX: BITR F_TXMUTE
JR UNMU_GO
; UNMUTE DECISION MAKING ROUTINE ==============================================
; INPUT : F_RELMUTE,T_MUTE,T_IDMUTE,F_FLASHING,F_TONEXC,F_PULSEXC,T_IDIGPAU,F_HOLDNOW
; OUTPUT: F_TXMUTE,F_RXMUTE,F_RELMUTE
; NO REGISTER IS CHANGED AT RETURN
UNMU_CHK: PUSH EA
BTST F_RELMUTE ; RELEASE MUTE IF CONDITION FULFILL
JR UMCHK1
LD EA,T_IDMUTE
REF DECSEA ; CHECK IF I.D. MUTE TIME VANISHED ?
JR UMCHK1
REF T_MUTE2EA
REF DECSEA ; CHECK IF FOREGROUND MUTE TIME VANISHED ?
JR UMCHK1
BTSF F_TXMODE ; CHECK IF IN DATA TRANSMISSION ?
UMCHK1: JR UMCHK2
BTSF F_FLASHING ; CHECK IF IN DOING FLASH ?
JR UMCHK2
BTSF F_TONEEXC ; CHECK IF IN TONE DIALLING ?
JR UMCHK2
BTSF F_PULSEXC ; CHECK IF IN PULSE DIALLING ?
JR UMCHK2
LD EA,T_IDIGPAU
REF DECSEA ; CHECK IF IN INTERDIGIT PAUSE ?
UMCHK2: JPS UMCHKN
BTSF F_HOLDNOW ; CHECK IF ON HOLD NOW
JR UMCHKN
LD EA,END_DPTR
REF DECSEA ; CHECK IF SOME DIGITS TO DIAL ?
JR UMCHKN
BITR F_RELMUTE ; CLEAR MUTE RELEASE FLAG
CALLS UNMUTETXRX ; UNMUTE TX & RX
UMCHKN: POP EA
RET
; SETUP COMBO PLL TRANSMIT AND RECEIVE CHANNEL ================================
; SET_CHAN: LOCK PLL AT A SPECIFIED RF CHANNEL
; e.g.
; LD A,#x <- x RANGED FROM 0 TO 14
; LD CHAN_NUM,A
; CALL SET_CHAN
; INPUT : CHAN_NUM (0 ~ 14)
; OUTPUT: NONE
; NO REGISTER IS CHANGED AT RETURN
SET_CHAN: DI ; NO NEED TO HAVE INTT1 FOR TX/RX/TIMING
PUSH EA
PUSH WX
PUSH HL
LD A,CHAN_NUM
XCH A,L ; L = 0 TO 14
LD EA,#PLLTXRX-4
CALPLL: ADS EA,#4 ; CAL. ADDR. OF PLL VALUE
DECS L
JR CALPLL
LD WX,EA ; SAVE ADDR. TO WX
LD EA,WX
REF LODCODE
REF CLKDATA
XCH A,E
REF CLKDATA
INCS WX
LD EA,WX
REF LODCODE
REF CLKDATA
XCH A,E
OR A,#0100B ; SET TX DIVIDER
REF CLKDATA
BITS PLLEN
NOP
NOP
NOP
BITR PLLEN
INCS WX
LD EA,WX
BITR PLLCLK
REF LODCODE
REF CLKDATA
XCH A,E
REF CLKDATA
INCS WX
LD EA,WX
REF LODCODE
REF CLKDATA
XCH A,E
OR A,#1000B ; SET RX DIVIDER
REF CLKDATA
BITS PLLEN
NOP
NOP
NOP
BITR PLLEN
POP HL
POP WX
POP EA
BITR PLLCLK
EI ; RESUME INTT1
RET
; SET REFERENCE REGISTER VALUE ================================================
; SET_REF: PROGRAM PLL REFERENCE REGISTER, DO ONCE DURING BOOT UP ONLY
; INPUT : NONE
; OUTPUT: NONE
; NO REGISTER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -