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

📄 ct0bu05.src

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