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

📄 ct0hslcd1.src

📁 用三星MCU实现的完整无绳电话程序,来自三星公司内部资料,供参考.
💻 SRC
📖 第 1 页 / 共 5 页
字号:
                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 + -