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

📄 ct0bu05.src

📁 用三星MCU实现的完整无绳电话程序,来自三星公司内部资料,供参考.
💻 SRC
📖 第 1 页 / 共 5 页
字号:
                JPS     LOD_RET

;LOD_UID3:       REF     PUSHSB
;                PUSH    EA
;                REF     SEL_0
;                LD      EA,UID3_H       ; BSC0,1,2,3 <-- UID3
;                LD      TID_H,EA
;                REF     SEL_15
;                LD      BSC2,EA
;                REF     SEL_0
;                LD      EA,UID3_L
;                LD      TID_L,EA
;                REF     SEL_15
;                LD      BSC0,EA
;                JPS     LOD_RET
                ;POP     EA
                ;REF     POPSB
                ;RET

LOD_A5A5:       REF     PUSHSB          ; USED IN ANSWERING REGISTRATION REQUEST
                PUSH    EA
                REF     SEL_0
                LD      EA,#0A5H        ; BSC0,1,2,3 <-- A5A5h
                LD      TID_H,EA
                LD      TID_L,EA
                REF     SEL_15
                LD      BSC2,EA
                LD      BSC0,EA
;                POP     EA
;                REF     POPSB
;                RET
LOD_RET:
                REF     SEL_0
                LD      EA,TID_H
                LD      TBUF_H,EA
                LD      EA,TID_L
                LD      TBUF_L,EA
                POP     EA
                REF     POPSB
                RET

; <<< MARCO 001018 ASSUEM ALL UID1 >>>
CMP_UID1:       ;LD      HL,#RXDBUF+2    ; IF RXDBUF=UID1, LOAD UID1 AS TID
                ;LD      EA,UID1_L
                ;CPSE    EA,@HL
                ;RET
                ;LD      HL,#RXDBUF+4
                ;LD      EA,UID1_H
                ;CPSE    EA,@HL
                ;RET
                CALLS   LOD_UID1        ; SEND FROM HANDSET 1
                SRET

;CMP_UID2:       LD      HL,#RXDBUF+2    ; IF RXDBUF=UID2, LOAD UID2 AS TID
;                LD      EA,UID2_L
;                CPSE    EA,@HL
;                RET
;                LD      HL,#RXDBUF+4
;                LD      EA,UID2_H
;                CPSE    EA,@HL
;                RET
;                CALLS   LOD_UID2        ; SEND FROM HANDSET 2
;                SRET
;
;CMP_UID3:       LD      HL,#RXDBUF+2    ; IF RXDBUF=UID3, LOAD UID3 AS TID
;                LD      EA,UID3_L
;                CPSE    EA,@HL
;                RET
;                LD      HL,#RXDBUF+4
;                LD      EA,UID3_H
;                CPSE    EA,@HL
;                RET
;                CALLS   LOD_UID3        ; SEND FROM HANDSET 3
;                SRET

; WAIT UNTIL TRANSMISSION OVER ================================================
; WAITXOVR: LOCAL WAIT UNTIL DATA PACKET TRANSMISSION IS FINISHED, TMRSDEC IS
;           CALLED SO THAT SYSTEM TIME IS KEPT RUNNING DURING WAIT PERIOD.
; INPUT : NONE
; OUTPUT: F_ENDTX=1
; NO REGISTER IS CHANGED AT RETURN
WAITXOVR:       REF     TIMRDEC         ; KEEP SYSTEM TIME RUNNING
                BTST    F_ENDTX         ; CHECK IF TRANSMISSION OVER
                JR      WAITXOVR
                RET

; KEY PRESS DETECTION =========================================================
; KEY_SCAN: KEY MATRIX SCAN ROUTINE, KEY PRESS DEBOUNCE IS DONE, KEY RELEASE DEBOUNCE IS
;           DONE IN TMRSDEC ROUTINE.  WHEN A VALID KEY IS DETECTED, KEYCODE IS SAVED AT
;           KEYCODE LOCATION AND RETURN SKIP TO MAIN PROGRAM.  OTHERWISE, RETURN.
; e.g.
; CALL KEY_SCAN
; JPS  NO_KEY_PRESS
; PROCESS PAGE KEY EVENT
; :
; INPUT : NONE
; OUTPUT: KSEQ
; A WILL BE CHANGED AT RETURN
KEY_SCAN:       BTST    F_WAITFLAG
                JR      KSCN3
                LD      EA,T_LKCNT      ; CHECK IF KEY IS PRESSED FOR 2sec
                REF     DECSEA
                JR      KSCN11
                JR      KSCN12
KSCN11:         CALLS   READ_KIN
                CPSE    A,#1111B
                RET
KSCN12:         BITR    F_WAITFLAG
                SRET                    ; RETURN SKIP IF KEY IS DETECTED

KSCN3:          LD      A,KSEQ
                DECS    A               ; CHECK IF KSEQ = 0
                RET                     ; RETURN IF KSEQ <> 0
                BTST    F_KYSN          ; ENTRY @6ms INTERVAL
                RET
                BITR    F_KYSN

                CALLS   READ_KIN
                CPSE    A,#1111B
                JR      KSCN4
                RET                     ; RETURN IF NO KEY DOWN

KSCN4:          ;BTST    F_KEYEN
;                RET                     ; IGNORE IF KEY SCAN DISABLED
                LD      A,#KEYDEB       ; START KEY DEBOUNCING
                LD      KSEQ,A
                BITS    F_WAITFLAG
                LD      EA,#50          ; LOAD 5sec KEY PRESS TIMER
                LD      T_LKCNT,EA
                RET

; INPUT : NONE
; OUTPUT: A=1,1,1,KEYIN
READ_KIN:       LD      A,#1111B
                BTST    KEYIN
                AND     A,#1110B
                RET

; SPECIAL KEY SCAN USED IN TEST MODE ONLY
TKEY_SCAN:      LD      A,KSEQ
                DECS    A               ; CHECK IF KSEQ = 0
                RET                     ; RETURN IF KSEQ <> 0
                BTST    F_KYSN          ; ENTRY @6ms INTERVAL
                RET
                BITR    F_KYSN

                CALLS   READ_KIN
                CPSE    A,#1111B
                JR      TKSCN4
                RET                     ; RETURN IF NO KEY DOWN

TKSCN4:         LD      A,#KEYDEB       ; START KEY DEBOUNCING
                LD      KSEQ,A
                SRET

; DO DIALLING IF DIGIT(S) QUEUEING IN DIAL BUFFER =============================
; INPUT : NONE
; OUTPUT: F_TONEEXC,F_PULSEXC,T_IDIGPAU,T_PAUDIG,END_DPTR,F_FLASHING,F_TONMODE,
;         T_MAKCNT,
; EA,HL WILL BE CHANGED AT RETURN
CHK_DIAL:       BTSF    F_TONEEXC
                RET                     ; QUIT IF IN DIALLING TONE
                BTSF    F_PULSEXC
                RET                     ; QUIT IF IN DIALLING PULSE
                LD      EA,T_IDIGPAU
                REF     DECSEA
                RET                     ; QUIT IF IN INTERDIGIT-PAUSE TIME
                LD      EA,T_PAUDIG
                REF     DECSEA
                RET                     ; QUIT IF IN PAUSE TIME
                LD      EA,END_DPTR
                REF     DECSEA
                JR      CKDIAL1
                BTST    F_HOLDNOW
                BITR    DTOUT           ; DTMF OUTPUT COMPLETED
                RET                     ; QUIT IF NO DIGIT TO DIAL

CKDIAL1:        LD      EA,END_DPTR
                REF     DECSEA          ; END_DPTR --
                LD      END_DPTR,EA
                PUSH    WX
                REF     PUSHSB
                REF     SEL_1
                LD      A,DIAL_BUF
                XCH     A,E             ; E=CURRENT DIGIT
                LD      WX,#BUFLEN-2
                LD      HL,#DIAL_BUF+1
CKDIAL2:        LD      A,@HL           ; LEFT SHIFT DIAL BUFFER BY 1 NIBBLE
                DECS    HL
                LD      @HL,A
                INCS    HL
                INCS    HL
                DECS    WX
                JR      CKDIAL2
                LD      A,#0FH
                DECS    HL
                LD      @HL,A           ; KEEP THE LAST DIGIT IN BUFFER BE 0Fh
                XCH     A,E             ; A=CURRENT DIGIT
                REF     POPSB
                POP     WX

                CPSE    A,#PAUSE        ; CHECK IF PAUSE KEY
                JR      CKDIAL8
                LD      EA,#PAUSETM
                LD      T_PAUDIG,EA     ; LOAD PAUSE TIME
                RET

CKDIAL8:        CPSE    A,#FLASH        ; CHECK IF FLASH COMMAND
                JR      CKDIAL4
                BITS    F_FLASHING      ; SET FLASH FLAG
                RET

CKDIAL4:        CPSE    A,#TONE         ; CHECK IF TONE COMMAND
                JR      CKDIAL9
                JPS     CKDIALA         ; CHANGE TO TONE MODE UNCONDITIONALLY

CKDIAL9:        LD      E,A
                ADS     A,#4            ; CHECK IF A <= Bh
                JR      CKDIAL5
                RET                     ; INVALID DIGIT, SKIP IT !!!

CKDIAL5:        BTSF    F_TONMODE       ; 1=TONE, 0=PULSE
                JPS     CKDIAL3

                XCH     A,E
                CPSE    A,#KEYHASH      ; CHECK IF # KEY
                JR      CKDIAL6
                RET                     ; IGNORE BECAUSE IN PULSE MODE

CKDIAL6:        CPSE    A,#KEYSTAR      ; CHECK IF * KEY
                JR      CKDIAL7
CKDIALA:        BITS    F_TONMODE       ; CHANGE TO TONE MODE ONWARD
                RET                     ; AND IGNORE THIS * DIGIT

CKDIAL7:        LD      E,#0H           ; CALCULATE NUMPLUSE VALUE
                LD      HL,#0EH
                XCH     EA,HL
                SBS     EA,HL
                NOP
                LD      NUMPULSE,A
                REF     ZERO2EA
                LD      T_MAKCNT,EA
                BITS    F_PULSEXC       ; SET PULSE BURSTING FLAG
                RET

CKDIAL3:        INCS    E               ; E=1,2,3,...C (DTMF CODE)
                XCH     A,E
CKDIAL3A:
                LD      CURR_DTMF,A     ; SAVE DTMF CODE TO CURR_DTMF
                REF     ZERO2EA
                LD      T_MAKCNT,EA
                BTSF    DTOUT           ; CHECK IF NOT YET IN MUTE STATUS
                JR      CKDIALB
                BITS    DTOUT           ; START SELECT DTMF OUTPUT
                LD      EA,#0FFH
                LD      T_MAKCNT,EA     ; T_MAKCNT MUST BE > T_IDIGPAU
                LD      EA,#PRETNTM     ; LOAD PRE-DTMF MUTE
CKDIALB:        LD      T_IDIGPAU,EA
                BITS    F_TONEEXC       ; SET DTMF BURSTING FLAG
                RET

; HOLD TONE GENERATION ROUTINE ================================================
; INPUT : F_HOLDNOW,F_HTONEON,F_HTNSTAGE,T_IDIGPAU
; OUTPUT: F_HTONEON,F_HTNSTAGE,T_IDIGPAU
;
; (1) F_HTONEON=1,F_HTNSTAGE=0,BURST=500ms
; (2) F_HTONEON=0,F_HTNSTAGE=0,PAUSE=500ms
; (3) F_HTONEON=1,F_HTNSTAGE=1,BURST=500ms
; (4) F_HTONEON=0,F_HTNSTAGE=1,PAUSE=1500ms
HOLDTON:        BTST    F_HOLDNOW
                RET
                LD      EA,T_IDIGPAU
                REF     DECSEA
                RET
                BTST    F_HTNSTAGE
                JPS     HTON3
                BTSF    F_HTONEON
                JR      HTON1
                BITR    F_HTNSTAGE      ; (4) -> (1)
                BITS    F_HTONEON
                LD      EA,#84          ; LOAD 500ms TONE ON TIME
                JPS     HTON7
HTON1:          BITR    F_HTONEON       ; (3) -> (4)
                LD      EA,#250         ; LOAD 1500ms TONE OFF TIME
                JR      HTON4
HTON3:          BTST    F_HTONEON
                JR      HTON5
                BITR    F_HTONEON       ; (1) -> (2)
                LD      EA,#84          ; LOAD 500ms TONE OFF TIME
HTON4:          LD      T_IDIGPAU,EA
                REF     ZERO2EA
                JR      HTON6
HTON5:          BITS    F_HTNSTAGE      ; (2) -> (3)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -