📄 ct0hslcd1.src
字号:
CPSE A,#1111B
RET
LD EA,KEYCODE ; KEY RELEASED BEFORE 2sec
KSCN12: BITR F_WAITFLAG
SRET
KSCN3: BTST F_KYSN ; ENTRY @6ms INTERVAL
RET
BITR F_KYSN
LD A,KSEQ
DECS A ; CHECK IF KSEQ = 0
RET ; RETURN IF KSEQ <> 0
CALLS READ_KIN
CPSE A,#1111B
JR KSCN4
RET ; RETURN IF NO KEY DOWN
KSCN4: REF PUSHSB
PUSH HL
PUSH WX
LD WX,#00H
LD L,#0H
REF SEL_15
LD EA,#11111111B
LD P8,EA ; P8.0-P9.2 = HIGH
KSCN10: BITR P8.@L
REF SEL_15
REF SEL_15
REF SEL_15 ; DUMMY WAIT
CALLS READ_KIN
BITS P8.@L
INCS L
CPSE A,#1110B ; CHECK IF BIT0 KEY DOWN
JR KSCN6
LD A,#0
JR KSCN5
KSCN6: CPSE A,#1101B ; CHECK IF BIT1 KEY DOWN
JR KSCN7
LD A,#1
JR KSCN5
KSCN7: CPSE A,#1011B ; CHECK IF BIT2 KEY DOWN
JR KSCN8
LD A,#2
JR KSCN5
KSCN8: CPSE A,#0111B ; CHECK IF BIT3 KEY DOWN
JPS KSCN9
LD A,#3
KSCN5: LD E,#0
ADS EA,WX ; EA = POSITION OF THE KEY
ADS EA,#KCODE ; EA = KCODE + POSITION
REF LODCODE ; EA = REAL KEY CODE
REF SEL_0
LD KEYCODE,EA ; SAVE KEYCODE
LD A,#KEYDEB ; START KEY DEBOUNCING
LD KSEQ,A
REF SEL_15
LD EA,#10000000B
LD P8,EA ; P8.0-P9.0 = LOW
REF SEL_0
LD EA,KEYCODE ; EA=KEYCODE=RETURN VALUE
ADS EA,#256-DELETE
JR KSCN1
BITS F_WAITFLAG ; LDELETE/LSOS KEY
LD EA,#20
LD T_LKCNT,EA ; LOAD 2sec KEY PRESS TIMER
JPS KSCN2
KSCN1: LD EA,KEYCODE
POP WX
POP HL
REF POPSB
SRET ; RETURN SKIP IF KEY IS DETECTED
KSCN9: LD EA,#04H
ADS WX,EA
CPSE L,#7 ; 7 COLUME OF KYOUT
JPS KSCN10
LD EA,#10000000B
LD P8,EA ; P8.0-P9.2 = LOW
KSCN2: POP WX
POP HL
REF POPSB
RET
; INPUT : NONE
; OUTPUT: A=KYIN4,3,2,1
READ_KIN: LD A,#1111B
BTST KYIN4
AND A,#0111B
BTST KYIN3
AND A,#1011B
BTST KYIN2
AND A,#1101B
BTST KYIN1
AND A,#1110B
RET
; SET DIFFERENT POWER-SAVING-MODES ============================================
; MODE_ACTIVE: SET PLL TO TX AND RX ON MODE W/AUDIO, e.g. "REF ACTI_MODE"
; MODE_RT_RF: SET PLL TO TX AND RX ON MODE WO/AUDIO, e.g. "REF RT_RF_MODE"
; MODE_R_RF: SET PLL TO TX OFF AND RX ON MODE, e.g. "REF R_RF_MODE"
; MODE_INACTIVE: SET PLL TO TX AND RX OFF MODE, e.g. "REF INAC_MODE"
; INPUT : NONE
; OUTPUT: F_RXRF,F_TXRF,F_AF,F_BATALM,TXPWR
; NO REGISTER IS CHANGED AT RETURN
RXTM_MODE: BITS TXPWR
BITR F_RXRF
BITR F_AF ; POWER ON AF
BITS F_TXRF
BITR F_BATALM ; POWER ON BATTERY ALARM
JR SETMODE3
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
BITR F_BATALM ; POWER ON BATTERY ALARM
SETMODE3: JR SETMODE2
MODE_RT_RF: BITR TXPWR ; TURN ON TX POWER AMP.
BITR F_RXRF ; POWER ON RXRF
BITS F_AF ; POWER DOWN AF
BITR F_TXRF ; POWER ON TXRF
BITR F_BATALM ; POWER ON BATTERY ALARM
SETMODE2: JR SETMODE0
MODE_R_RF: BITS TXPWR ; TURN OFF TX POWER AMP.
BITR F_RXRF ; POWER ON RXRF
BITS F_AF ; POWER DOWN AF
BITS F_TXRF ; POWER DOWN TXRF
BITR F_BATALM ; POWER ON BATTERY ALARM
SETMODE0: JR SETMODE1
MODE_INACTIVE: BITS TXPWR ; TURN OFF TX POWER AMP.
BITS F_RXRF ; POWER DOWN RXRF
BITS F_AF ; POWER DOWN AF
BITS F_TXRF ; POWER DOWN TXRF
BITS F_BATALM ; POWER OFF BATTERY ALARM
; 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
BTSF F_BATALM ; BA2 BA1 BC LEVEL
LD A,#0011B ; 1 1 0 3.45V
REF CLKDATA ; 1 1 1 BATT SAVE
POP EA
JPS SNDENP ; EI AT HERE
; 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
MUTETXRX: BITS F_RXMUTE ; MUTE RX AUDIO
MUTETX: BITS F_TXMUTE ; MUTE TX AUDIO
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
; NO REGISTER IS CHANGED AT RETURN
UNMUTETXRX: BITR F_TXMUTE ; UNMUTE TX AUDIO
UNMUTERX: BITR F_RXMUTE ; UNMUTE RX AUDIO
UNMU_GO: JPS SETMODE
; UNMUTE DECISION MAKING ROUTINE ==============================================
; INCLUDED THE "PRESS AND HOLD" MUTE KEY FEATURE
; INPUT : F_RELMUTE,T_MUTE,T_IDMUTE,F_KMUTE,F_RXMUTE
; OUTPUT: F_TXMUTE,F_RXMUTE,F_RELMUTE,F_KMUTE
; 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 BACKGROUND 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: JPS UMCHKN
BTST F_KMUTE ; CHECK IF IN MUTE STATUS ?
JPS UMCHK2
LD A,KSEQ ; YES, CHECK IF KEY IS RELEASED ?
DECS A
JPS UMCHK3
BITR F_KMUTE ; CLEAR MUTE STATUS FLAG
BITR F_RELMUTE ; CLEAR MUTE RELEASE FLAG
CALL UNMUTETXRX ; UNMUTE TX & RX
POP EA
SRET
UMCHK2: BITR F_KMUTE ; CLEAR MUTE STATUS FLAG
BITR F_AF ; POWER ON AF
BITR F_RELMUTE ; CLEAR MUTE RELEASE FLAG
BTSF F_DTAMODE
JR UMCHK3 ; UNMUTE RX ONLY FOR DTAM MODE
CALL UNMUTETXRX ; UNMUTE TX & RX FOR TALK MODE
JR UMCHKN
UMCHK3: BTSF F_RXMUTE ; CHECK IF RX IS ALREADY UNMUTED ?
CALL UNMUTERX ; UNMUTE RX ONLY 'COS MUTE KEY IS DOWN
UMCHKN: POP EA
RET
; INCREASE VOLUME BY 1 LEVEL ==================================================
; INPUT : F_VOL0,F_VOL1
; OUTPUT: F_VOL0,F_VOL1 11->10->01->00
SHIFTRECVUP: BTST F_VOL0
JPS INCVOL2
BTST F_VOL1
JR INCVOL1
BITS F_VOL1 ; 11->10
BITR F_VOL0
BITS VOL1
BITR VOL0
RET
INCVOL1: BITR F_VOL1 ; 01->00
BITR F_VOL0
BITR VOL1
BITR VOL0
RET
INCVOL2: BTSF F_VOL1
JR INCVOL3
SRET ; ALREADY IN MAX., GIVE ERROR TONE
INCVOL3: BITR F_VOL1 ; 10->01
BITS F_VOL0
BITR VOL1
BITS VOL0
RET
; DECREASE VOLUME BY 1 LEVEL ==================================================
; INPUT : F_VOL0,F_VOL1
; OUTPUT: F_VOL0,F_VOL1 00->01->10->11
SHIFTRECVDN: BTSF F_VOL0
JPS DECVOL2
BTSF F_VOL1
JR DECVOL1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -