📄 channel_mana.asm_bak
字号:
INCLUDE DONGLE.INC
PUBLIC INIT_CHANNEL_MANA
PUBLIC CHANNEL_SCAN
PUBLIC RSSI_CHECK
PUBLIC GET_NEXT_CHANNEL
PUBLIC GET_NEXT_2CHANNELS
PUBLIC NEXT_1_CHANNEL
PUBLIC NEXT_2_CHANNEL
PUBLIC NEXT_3_CHANNEL
PUBLIC NEXT_4_CHANNEL
PUBLIC NEXT_5_CHANNEL
EXTERN RF_CHANNEL :BYTE
EXTERN RF_REG_ADDRESS :BYTE
EXTERN RF_REG_DATA :BYTE
EXTERN CHANNEL_INDEX :BYTE
EXTERN RF_REG_READ :NEAR
EXTERN RF_REG_WRITE :NEAR
CHANNEL_MANA .SECTION 'DATA'
BIT_MASK_INDEX DB ?
CHANNEL_BIT_MASK DB ?
RSSI_LIMIT DB ?
SAFE_CHANNEL_CNT DB ?
CHANNEL_IDX_TEMP DB ?
NEXT_1_CHANNEL DB ?
NEXT_2_CHANNEL DB ?
NEXT_3_CHANNEL DB ?
NEXT_4_CHANNEL DB ?
NEXT_5_CHANNEL DB ?
RF_CHANNEL_RSSI DB ?
CHANNEL_IDX_RSSI DB ?
RSSI_ACC_TEMP DB ?
RSSI_ACC_LIMIT DB ?
RSSI_RB_TEMP DB ?
RSSI_RB_CNT DB ?
RSSI_RB_1 DB ?
RSSI_RB_2 DB ?
RSSI_RB_3 DB ?
RSSI_INC_FLAG DBIT
CHANNEL_MANA_CODE .SECTION 'CODE'
INIT_CHANNEL_MANA:
MOV A, 80
MOV SAFE_CHANNEL_CNT, A
MOV A, 0
MOV RSSI_LIMIT, A
MOV A, 1
MOV RSSI_ACC_LIMIT, A
CLR CHANNEL_IDX_RSSI
RET
CHANNEL_SCAN:
RET
RSSI_CHECK:
SET PC.2
RSSI_CA:
MOV A, CHANNEL_IDX_RSSI
MOV CHANNEL_IDX_TEMP, A
CALL GET_RF_CHANNEL_RSSI
; CHANGE TO RX MODE
CLR RF_REG_ADDRESS
MOV A, RF_CHANNEL_RSSI
MOV RF_REG_DATA, A
CALL RF_REG_WRITE
; CHANGE TO DIRECT MODE
MOV A, 002H
MOV RF_REG_ADDRESS, A
MOV A, 028H
MOV RF_REG_DATA, A
CALL RF_REG_WRITE
;ENABLE RSSI REFRESH BY ASSIGN RSSI_CCA=1
MOV A, 003H
MOV RF_REG_ADDRESS, A
MOV A, 090H
MOV RF_REG_DATA, A
CALL RF_REG_WRITE
;POWER-UP RF FRONT
;SET TRRDY
WAIT_RSSI_REFRESH_DONE:
CALL RF_REG_READ
SZ RF_REG_DATA.4
JMP WAIT_RSSI_REFRESH_DONE
;CLR TRRDY
MOV A, 004H
MOV RF_REG_ADDRESS, A
CALL RF_REG_READ
MOV A, RF_REG_DATA
AND A, 00FH
;CHECK READED RSSI VALUE, IF RSSIVAL > RSSI_LIMIT THEN ACC = 0XFF
; SUB A, RSSI_LIMIT
; SZ ACC.7
; JMP ACC_TO_ZERO
;
; SET ACC
; JMP GOTO_REFRESH_RSSI
;
; ACC_TO_ZERO:
;
; CLR ACC
;
; GOTO_REFRESH_RSSI:
; CALL REFRESH_RSSI_ACC_A
; CALL REFRESH_RSSI_ACC
; CHANGE BACK TO BURST MODE
MOV A, 002H
MOV RF_REG_ADDRESS, A
MOV A, 068H
MOV RF_REG_DATA, A
CALL RF_REG_WRITE
INC RSSI_RB_CNT
MOV A, 3
XOR A, RSSI_RB_CNT
SZ ACC
JMP NOT_INC_RSSI_CHANNEL
INC CHANNEL_IDX_RSSI
MOV A, 80
XOR A, CHANNEL_IDX_RSSI
SZ ACC
JMP NOT_RST_CIR
CLR CHANNEL_IDX_RSSI
JMP EXIT_RSSI_CHECK
NOT_RST_CIR:
; SZ CHANNEL_IDX_RSSI.0
; JMP RSSI_CA
EXIT_RSSI_CHECK:
CLR PC.2
RET
REFRESH_RSSI_ACC_A:
MOV RSSI_RB_TEMP, A
MOV A, CHANNEL_IDX_RSSI
RR ACC
AND A, 07FH
ADD A, RF_RSSI_STATUS
MOV MP0, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP LOW_BYTE_RSSI_A
RR ACC
RR ACC
RR ACC
RR ACC
LOW_BYTE_RSSI_A:
AND A, 00FH
ADD A, RSSI_RB_TEMP
RR ACC
AND A, 07FH
PUT_RSSI_ACC_BACK_A:
MOV RSSI_ACC_TEMP, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP PUT_RSSI_LOW_BYTE_A
MOV A, 00FH
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
RL ACC
RL ACC
RL ACC
RL ACC
ORM A, ID0
JMP PUT_RSSI_BACK_DONE_A
PUT_RSSI_LOW_BYTE_A:
MOV A, 0F0H
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
ORM A, ID0
PUT_RSSI_BACK_DONE_A:
; IF RSSI_ACC_TEMP > RSSI_ACC_LIMIT THEN MARK THIS CHANNEL AS "DON'T BROTHER"
MOV A, RSSI_LIMIT
SUB A, RSSI_ACC_TEMP
SNZ ACC.7
JMP CLEAR_MARK_THIS_CHANNEL_A
CALL MARK_CHANNEL
JMP EXIT_REFRESH_RSSI_ACC_A
CLEAR_MARK_THIS_CHANNEL_A:
CALL CLEAR_MARKED_CHANNEL
EXIT_REFRESH_RSSI_ACC_A:
RET
REFRESH_RSSI_ACC:
CLR RSSI_INC_FLAG
SZ ACC
SET RSSI_INC_FLAG
MOV A, CHANNEL_IDX_RSSI
RR ACC
AND A, 07FH
ADD A, RF_RSSI_STATUS
MOV MP0, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP LOW_BYTE_RSSI
RR ACC
RR ACC
RR ACC
RR ACC
LOW_BYTE_RSSI:
AND A, 00FH
SZ RSSI_INC_FLAG
JMP INC_RSSI_ACC
SZ ACC
DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
; SZ ACC
; DEC ACC
JMP PUT_RSSI_ACC_BACK
INC_RSSI_ACC:
INC ACC
AND A, 00FH
SZ ACC
JMP PUT_RSSI_ACC_BACK
SET ACC
AND A, 00FH
JMP PUT_RSSI_ACC_BACK
; INC_A0:
; INC ACC
; AND A, 00FH
; SZ ACC
; JMP PUT_RSSI_ACC_BACK
;
; SET ACC
; AND A, 00FH
; JMP PUT_RSSI_ACC_BACK
;
; INC_A1:
; INC ACC
; AND A, 00FH
; SZ ACC
; JMP INC_A2;PUT_RSSI_ACC_BACK
;
; SET ACC
; AND A, 00FH
; JMP PUT_RSSI_ACC_BACK
;
; INC_A2:
;
; INC ACC
; AND A, 00FH
; SZ ACC
; JMP INC_A3;PUT_RSSI_ACC_BACK
;
; SET ACC
; AND A, 00FH
; JMP PUT_RSSI_ACC_BACK
;
; INC_A3:
; INC ACC
; AND A, 00FH
; SZ ACC
; JMP INC_A4;PUT_RSSI_ACC_BACK
;
; SET ACC
; AND A, 00FH
; JMP PUT_RSSI_ACC_BACK
;
; INC_A4:
; INC ACC
; AND A, 00FH
; SZ ACC
; JMP PUT_RSSI_ACC_BACK
;
; SET ACC
; AND A, 00FH
; ;JMP PUT_RSSI_ACC_BACK
;
PUT_RSSI_ACC_BACK:
MOV RSSI_ACC_TEMP, A
MOV A, ID0
SZ CHANNEL_IDX_RSSI.0
JMP PUT_RSSI_LOW_BYTE
MOV A, 00FH
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
RL ACC
RL ACC
RL ACC
RL ACC
ORM A, ID0
JMP PUT_RSSI_BACK_DONE
PUT_RSSI_LOW_BYTE:
MOV A, 0F0H
ANDM A, ID0
MOV A, RSSI_ACC_TEMP
ORM A, ID0
PUT_RSSI_BACK_DONE:
; IF RSSI_ACC_TEMP > RSSI_ACC_LIMIT THEN MARK THIS CHANNEL AS "DON'T BROTHER"
MOV A, RSSI_ACC_LIMIT
SUB A, RSSI_ACC_TEMP
SNZ ACC.7
JMP CLEAR_MARK_THIS_CHANNEL
; CPL ACC
; AND A, 00FH
; SZ ACC
; JMP CLEAR_MARK_THIS_CHANNEL
CALL MARK_CHANNEL
JMP EXIT_REFRESH_RSSI_ACC
CLEAR_MARK_THIS_CHANNEL:
CALL CLEAR_MARKED_CHANNEL
EXIT_REFRESH_RSSI_ACC:
RET
RF_REG_VALUE .SECTION AT 0300H 'CODE'
MARK_CHANNEL:
MOV A, CHANNEL_IDX_RSSI
RR ACC
RR ACC
RR ACC
AND A, 01FH
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, CHANNEL_IDX_RSSI
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, BIT_MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP NOTDECCNT
DEC SAFE_CHANNEL_CNT
NOTDECCNT:
MOV A, ID0
OR A, CHANNEL_BIT_MASK
MOV ID0, A
MOV A, 30
SUB A, SAFE_CHANNEL_CNT
SZ ACC.7
JMP CHANNEL_ENOUGH
INC RSSI_ACC_LIMIT
MOV A, 7
XOR A, RSSI_ACC_LIMIT
SZ ACC
JMP CHANNEL_ENOUGH
MOV A, 7
MOV RSSI_ACC_LIMIT, A
CHANNEL_ENOUGH:
RET
CLEAR_MARKED_CHANNEL:
MOV A, CHANNEL_IDX_RSSI
RR ACC
RR ACC
RR ACC
AND A, 01FH
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, CHANNEL_IDX_RSSI
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, BIT_MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP INC_SCHN_CNT;
JMP NOT_INC_SCHN_CNT
INC_SCHN_CNT:
INC SAFE_CHANNEL_CNT
MOV A, 70
SUB A, SAFE_CHANNEL_CNT
SNZ ACC.7
JMP CHANNEL_NOT_FULL
DEC RSSI_ACC_LIMIT
MOV A, 1
XOR A, RSSI_ACC_LIMIT
SZ ACC
JMP CHANNEL_NOT_FULL
MOV A, 1
MOV RSSI_ACC_LIMIT, A
CHANNEL_NOT_FULL:
NOT_INC_SCHN_CNT:
MOV A, CHANNEL_IDX_RSSI
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, BIT_CLEAR_MASKED_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
MOV ID0, A
RET
BIT_MASK_TABLE:
DC 001H, 002H, 004H, 008H, 010H, 020H, 040H, 080H
BIT_CLEAR_MASKED_TABLE:
DC 0FEH, 0FDH, 0FBH, 0F7H, 0EFH, 0DFH, 0BFH, 07FH
CHN_CODE .SECTION AT 0400H 'CODE'
GET_RF_CHANNEL_RSSI:
MOV A, CHN_LIST
ADD A, CHANNEL_IDX_TEMP
MOV TBLP, A
TABRDC RF_CHANNEL_RSSI
RET
GET_RF_CHANNEL:
MOV A, CHN_LIST
ADD A, CHANNEL_INDEX
MOV TBLP, A
TABRDC RF_CHANNEL
RET
GET_NEXT_CHANNEL:
MOV A, NEXT_1_CHANNEL
MOV CHANNEL_INDEX, A
SZ CHANNEL_INDEX
DEC CHANNEL_INDEX
MOV A, NEXT_2_CHANNEL
MOV NEXT_1_CHANNEL, A
MOV A, NEXT_3_CHANNEL
MOV NEXT_2_CHANNEL, A
MOV A, NEXT_4_CHANNEL
MOV NEXT_3_CHANNEL, A
;MOV A, NEXT_5_CHANNEL
;MOV NEXT_4_CHANNEL, A
;MOV A, CHANNEL_INDEX
;MOV CHANNEL_IDX_TEMP, A
CALL GET_RF_CHANNEL
RET
GET_NEXT_2CHANNELS:
;MOV A, NEXT_2_CHANNEL
;MOV A, NEXT_3_CHANNEL
MOV A, NEXT_4_CHANNEL
;MOV A, NEXT_5_CHANNEL
MOV CHANNEL_IDX_TEMP, A
DEC CHANNEL_IDX_TEMP
CHECK_AGAIN_1:
INC CHANNEL_IDX_TEMP
MOV A, 80
XOR A, CHANNEL_IDX_TEMP
SZ ACC
JMP NRSTIDX2
CLR CHANNEL_IDX_TEMP
NRSTIDX2:
MOV A, CHANNEL_IDX_TEMP
RR ACC
RR ACC
RR ACC
AND A, 01FH
ADD A, RF_CHANNEL_STATUS
MOV MP0, A
MOV A, CHANNEL_IDX_TEMP
AND A, 007H
MOV BIT_MASK_INDEX, A
MOV A, MASK_TABLE
ADD A, BIT_MASK_INDEX
MOV TBLP, A
TABRDC CHANNEL_BIT_MASK
MOV A, ID0
AND A, CHANNEL_BIT_MASK
SZ ACC
JMP CHECK_AGAIN_1
MOV A, CHANNEL_IDX_TEMP
;MOV NEXT_2_CHANNEL, A
;INC NEXT_2_CHANNEL
;MOV NEXT_3_CHANNEL, A
;INC NEXT_3_CHANNEL
MOV NEXT_4_CHANNEL, A
INC NEXT_4_CHANNEL
;MOV NEXT_5_CHANNEL, A
;INC NEXT_5_CHANNEL
RET
CHN_LIST:
DC 2, 22, 42, 62
DC 3, 23, 43, 63
DC 4, 24, 44, 64
DC 5, 25, 45, 65
DC 6, 26, 46, 66
DC 7, 27, 47, 67
DC 8, 28, 48, 68
DC 9, 29, 49, 69
DC 10, 30, 50, 70
DC 11, 31, 51, 71
DC 12, 32, 52, 72
DC 13, 33, 53, 73
DC 14, 34, 54, 74
DC 15, 35, 55, 75
DC 16, 36, 56, 76
DC 17, 37, 57, 77
DC 18, 38, 58, 78
DC 19, 39, 59, 79
DC 20, 40, 60, 80
DC 21, 41, 61, 81
;CHN_LIST:
;DC 2, 3, 4, 5, 6, 7, 8, 9
;DC 10, 11, 12, 13, 14, 15, 16, 17
;DC 18, 19, 20, 21, 22, 23, 24, 25
;DC 26, 27, 28, 29, 30, 31, 32, 33
;DC 34, 35, 36, 37, 38, 39, 40, 41
;DC 42, 43, 44, 45, 46, 47, 48, 49
;DC 50, 51, 52, 53, 54, 55, 56, 57
;DC 58, 59, 60, 61, 62, 63, 64, 65
;DC 66, 67, 68, 69, 70, 71, 72, 73
;DC 74, 75, 76, 77, 78, 79, 80, 81
MASK_TABLE:
DC 1, 2, 4, 8, 16, 32, 64, 128
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -