📄 tf9925h.src
字号:
MMW EQU 82H ; multiple message waiting (VMWI)
MDMF_CAN EQU 81H
;
;-----------------------
; MDMF parameter type
;-----------------------
P_DATE_TIME EQU 01H ; date & time
P_CALL_NUM EQU 02H ; calling number
P_DDN_NUM EQU 03H ; dialable directory number (DDN)
P_NUM_ABS EQU 04H ; calling number absence reason
P_REDIRECT EQU 05H ; redirection reason
P_CALL_QLF EQU 06H ; call qualifier
P_CALL_NAME EQU 07H ; calling name
P_NAME_ABS EQU 08H ; calling name absence reason
;
;---------------------------------------------
; Storage size constant definition ( bytes )
;---------------------------------------------
MAX_CID EQU 40 ; maximum # of CID storage
MSGTBL_SIZE EQU 42 ; CID message table size
NUM_MLN EQU 20/2 ; indirect memory number length
MEM_LEN EQU NUM_MLN ; indirect memory size per location
NAM_CLN EQU 24 ; CID name length
NUM_CLN EQU 20/2 ; CID number length
MAX_NUM EQU 20
CID_LEN EQU NUM_CLN+4 ; CID time and number length
MAX_DOUT EQU 10 ; maximum # of dialed calls storage
DOUTTBL_SIZE EQU 12 ; dialed calls message table size
LCD_SIZE EQU 14 ; LCD digit size
;
;----------------------------
; EEPROM address declaration
;----------------------------
CIDDATA_ADR EQU 00H ; caller id start address
MSGTBL_ADR EQU CIDDATA_ADR+15*MAX_CID ; message table start address
NEW_ADR EQU MSGTBL_ADR+MSGTBL_SIZE ; 1 byte new call number
AMPM_ADR EQU NEW_ADR+1 ; 1 byte ringer status
KYTONE_ADR EQU AMPM_ADR+1
ACODE_ADR EQU KYTONE_ADR+1 ; 1 bytes area code digits
LCODE_ADR EQU ACODE_ADR+1
MEMORY_ADR EQU LCODE_ADR+1 ; indirect memory start address
MEM1 EQU MEMORY_ADR ; 10 indirect memory address
MEM2 EQU MEM1+MEM_LEN
MEM3 EQU MEM2+MEM_LEN
MEM4 EQU MEM3+MEM_LEN
MEM5 EQU MEM4+MEM_LEN
MEM6 EQU MEM5+MEM_LEN
MEM7 EQU MEM6+MEM_LEN
MEM8 EQU MEM7+MEM_LEN
MEM9 EQU MEM8+MEM_LEN
MEM10 EQU MEM9+MEM_LEN
MEM11 EQU MEM10+MEM_LEN
MEM12 EQU MEM11+MEM_LEN
MEM13 EQU MEM12+MEM_LEN
VOL_ADR EQU MEM13+MEM_LEN ; 1 byte volume level
DOUTTBL_ADR EQU VOL_ADR+1 ; dial out record table start address
DOUTDATA_ADR EQU DOUTTBL_ADR+12 ; dial out calls start address
;
;-------------------------------
; Prompt message number index
;-------------------------------
;M_STANDBY EQU 0 ; '-On-'
;M_RNGER_OFF EQU 1 ; 'ring oFF'
;M_ENT_NUM EQU 2 ; 'EntEr no'
;M_RING_HI EQU 3 ; 'SEt ring on'
;M_RING_LO EQU 4 ; 'SEt ring oFF'
;M_DIAL_TONE EQU 5 ; 'SEt diAL tonE'
;M_DIAL_PULSE EQU 6 ; 'SEt diAL PULSE'
;M_KYTONE_ON EQU 7 ; 'kEy tonE on'
;M_KYTONE_OFF EQU 8 ; 'kEy tonE oFF'
;M_ERROR EQU 10 ; 'Error'
;M_BLK_CALL EQU 11 ; 'PriVAtE'
;M_UNK_CALL EQU 12 ; 'out oF ArEA'
;M_NO_DATA EQU 13 ; 'no dAtA'
;M_START_END EQU 14 ; 'End oF LiSt'
;M_PAGE_YOU EQU 15 ; 'PAgE'
;M_DELETED EQU 16 ; 'dELEtEd'
;M_DEL_ALL EQU 17 ; 'dELEtE ALL'
;M_NO_CALL EQU 18 ; ' no CALL'
;M_NO_PHONE EQU 19 ; 'no PHonEbook'
;M_MSG_WAIT EQU 20 ; ' VoiCE on'
;M_MSGWT_OFF EQU 21 ; ' VoiCE oFF '
;
; keypad matrix configuration
; +------------+------------+------------+------------+
; | KEYOUT1 | KEYOUT2 | KEYOUT3 | KEYOUT4 |
; +--------+------------+------------+------------+------------+
; | KEYIN1 | Talk/Flash | Memory | Program | Delete |
; +--------+------------+------------+------------+------------+
; | KEYIN2 | 1 | 2 | 3 | 4 |
; +--------+------------+------------+------------+------------+
; | KEYIN3 | 5 | 6 | 7 | 8 |
; +--------+------------+------------+------------+------------+
; | KEYIN4 | 9 | * | 0 | # |
; +--------+------------+------------+------------+------------+
; | KEYIN5 |Redial/Pause| UP | Down | OFF |
; +--------+------------+------------+------------+------------+
; | KEYIN6 | | Mute | Channel | |
; +--------+------------+------------+------------+------------+
; | KEYIN6 | M1 | M2 | M3 | |
; +--------+------------+------------+------------+------------+
;
;**********************
; I/O pin declaration
;**********************
EPCLKPORT EQU P0
EPSDAPORT EQU P0
BCKLEDPORT EQU P0
NEWLEDPORT EQU P0
EP_CLK EQU 0 ; 24C16A's serial clock
EP_SDA EQU 1 ; 24C16A's serial data bus
BACKLED EQU 2 ; background light led H: LED ON
NEW_LED EQU 3
;
RINGSWPORT EQU P1
CHGDETPORT EQU P1
LOWBATPORT EQU P1
SIGOUTPORT EQU P1
RINGSW EQU 0 ; ring ON/OFF switch L:ringer off
CHARGE_DET EQU 1 ; charge detect L:charge
LOWBAT_DET EQU 2 ; low battery detect L:BATT. low
SIGOUT EQU 3 ; RSSI input(carrier detect) H:busy
;
TXPWRPORT EQU P2
RXPWRPORT EQU P2
RNGVOLPORT EQU P2
TX_PWR EQU 0 ; tx power control (L:tx power on)
RX_PWR EQU 1 ; rx power control (L:rx power on)
RING_VOL EQU 2 ; ring volume control (0:Lo 1:Hi)
;
BUZZERPORT EQU P3
TXDATAPORT EQU P3
TALKLEDPORT EQU P3
LBLEDPORT EQU P3
RXDATAPORT EQU P3
BUZZER_OUT EQU 0 ; beep tone output
TX_DATA EQU 1 ; tx data output (keep HiZ while no output)
LOWBAT_LED EQU 2
MUTE_LED EQU 2
TALK_LED EQU 2 ; TALK LED L:LED ON
RX_DATA EQU 3 ; receive data
;
VOLUMEPORT EQU P4
TXMUTEPORT EQU P4
RXMUTEPORT EQU P4
VOLUMEL EQU 0
VOLUMEH EQU 1
TXMUTE EQU 2 ; tx path mute control (L: mute)
RXMUTE EQU 3 ; rx path mute control (L: mute)
;
COMBOPORT EQU P5
MODSELPORT EQU P5
COMBO_DATA EQU 0 ; combo data
COMBO_CLK EQU 1 ; combo clock
COMBO_STB EQU 2 ; combo strobe H:enable
MODEL_SEL EQU 3 ; model select (H: 900MHz)
;
PWRDETPORT EQU P6
KEYINHPORT EQU P6
POWER_DET EQU 0
KEYIN1 EQU 1 ; keypad row 1 (L:key pressed)
KEYIN2 EQU 2 ; keypad row 2
KEYIN3 EQU 3 ; keypad row 3
;
KEYINPORT EQU P7
KEYIN4 EQU 0 ; keypad row 4 (L:key pressed)
KEYIN5 EQU 1 ; keypad row 5
KEYIN6 EQU 2 ; keypad row 6
KEYIN7 EQU 3 ; keypad row 7
;
KEYOUTPORT EQU P8
KEYOUT1 EQU 0 ; keypad column 1
KEYOUT2 EQU 1 ; keypad column 2
KEYOUT3 EQU 2 ; keypad column 3
KEYOUT4 EQU 3 ; keypad column 4
;
CNTRYPORT EQU P9
COUNTRY EQU 0 ; country option (H:brazil L:normal)
.list on
.ORG 0000H
VENT0 1,1,RESET ; EMB <-- 1,ERB <-- 1,branch START
VENT1 1,1,TBTINT ; timer int. (int. interval = 2.048ms)
VENT2 0,0,UNUSED ; INT0
VENT3 0,0,UNUSED ; INT1
VENT4 0,0,UNUSED ; INTS
VENT5 0,0,UNUSED ; INTT0
VENT6 1,1,TC1INT ; timer int. (int. interval = 210us)
VENT7 0,0,UNUSED ; INTK
;
.ORG 0010H
RESET:
DI ; All interrupt disable
SRB 0
SMB 15
LD A,#3 ; Enable normal CPU operating mode
LD PCON,A ; and set clock gear = fx/4
;
LD EA,#00H
LD SP,EA ; Init. stack pointer
JP START
;
;***********************************
; Start blink led routine
; i/p : A - led blink time (@20ms)
;***********************************
BLINK_MUTLED:
BLINK_BATLED:
BLINK_TKLED:
LD BLK_TKTIME,EA
LD BLK_TKCNT,EA
BITS TIMERFG.BLK_TKLED ; enable TALK led blink
RET
;
;***************************
; Blink "TALK" icon routine
;***************************
BLINK_TKICN:
BITS TIMERFG.BLK_TKICN ; enable "TALK" icon blink
JR OFF_TKICN
;
;**********************
; turn off "TALK" icon
;**********************
OFF_TALK_ICON:
BITR TIMERFG.BLK_TKICN ; stop "TALK" icon blink
;
OFF_TKICN:
SMB 2
BITR ICON_FLAG2.I_TALK
BITR ICON_ADR2.ON_TALK
SMB 0
RET
;
;**********************
; turn off "INT" icon
;**********************
OFF_INT_ICON:
SMB 2
BITR ICON_ADR8.ON_INT
SMB 0
RET
;
;**********************
; Led control routine
;**********************
OFF_MUTLED:
OFF_BATLED:
OFF_TLKLED:
BITS TALKLEDPORT.TALK_LED
BITR TIMERFG.BLK_TKLED ; stop TALK led blink
RET
;
ON_TLKLED:
BITR TALKLEDPORT.TALK_LED ; steady on TALK led
BITR TIMERFG.BLK_TKLED
RET
;
;*********************
; turn on "TALK" icon
;*********************
ON_TALK_ICON:
SMB 2
BITS ICON_FLAG2.I_TALK
BITS ICON_ADR2.ON_TALK ; steady on "TALK" icon
SMB 0
BITR TIMERFG.BLK_TKICN
RET
;
;********************************
; Init. on back LED for 11 sec.
;********************************
ON_BACKLED:
SMB 0
LD EA,#21-1 ; set on time
LD BCKLED_CNT,EA
ON_BACKLED1:
BITS TIMERFGH.BCKLED_EN ; turn on timer
BITS BCKLEDPORT.BACKLED ; turn on back LED
ONBKLD_QUIT:
RET
;
;***************
; Off back LED
;***************
OFF_BACKLED:
BITR TIMERFGH.BCKLED_EN ; turn off on-LED timer
BITR BCKLEDPORT.BACKLED ; turn off back LED
RET
;
;*********************
; Led control routine
;*********************
LED_JOB:
BTSF TIMERFG.BLK_TKLED ; ignore if blink TALK led
RET
;
BTSF MODEFG.TALK_MODE
JPS LED_JOB1
;
SMB 1
BTSF PROG_FLAG.PROG_MODE ; program memory,LAC & ringer ?
JR LED_JOB_QUIT
SMB 0
BTSF TIME_FLAG.RINGBLK
JR LED_JOB_QUIT
BITS TALKLEDPORT.TALK_LED
RET
LED_JOB1:
BITR TALKLEDPORT.TALK_LED
LED_JOB_QUIT:
SMB 0
RET
;
;******************************
; Update led blinking (@45ms)
;******************************
UPD_LED_BLINK:
SMB 1
BTSF PROG_FLAG.PROG_MODE ; program memory,LAC & ringer ?
JR UPD_LED2
;
UPD_LED1:
SMB 0
BTST LINKFG.LINKREQ
RET
;
UPD_LED2:
SMB 0
LD EA,LED_CNT
ADS EA,#0FFH
JPS UPD_LED3
LD LED_CNT,EA
RET
;
UPD_LED3:
BTSTZ TALKLEDPORT.TALK_LED
BITS TALKLEDPORT.TALK_LED
SMB 1
LD EA,#4-1 ; link request : blink 180ms/180ms
BTST PROG_FLAG.PROG_MODE
JPS UPD_LED4
SMB 2
LD H,#ICON_FLAG4>>4
LDB C,@H+ICON_FLAG4.I_PROG ; blink "PROG" icon 270ms/270ms
CCF
LDB @H+ICON_FLAG4.I_PROG,C
;
LDB C,@H+ICON_ADR4.ON_PROG
CCF
LDB @H+ICON_ADR4.ON_PROG,C
LD EA,#6-1 ; memory program : blink 270ms/270ms
UPD_LED4:
SMB 0
LD LED_CNT,EA
UPD_LED_QUIT:
RET
;
;**********************************************************************
; Check if reset dial parameter (clear dial buffer & buffer full flag)
;**********************************************************************
CHK_RST_DIAL:
BTSF DIAL_FG.FIRSTKEY
JR CK_RDIAL_QUIT
BITS DIAL_FG.FIRSTKEY
RST_DIAL_PAR:
SMB 0
LD EA,#0
LD RDIAL_PTR,EA
LD WDIAL_PTR,EA
BITR DIAL_FG.BUFFERFULL
BITR DIAL_FG.DIAL_OVER
CK_RDIAL_QUIT:
RET
;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -