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

📄 channel_mana.asm_bak

📁 holtek mouse usb asm. FW
💻 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 + -