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

📄 sensor_oper.asm

📁 holtek mouse .asm firewave
💻 ASM
字号:
INCLUDE REG_DEF.INC

PUBLIC	SEN_INIT
PUBLIC	SEN_READ_MONTION
PUBLIC	SEN_ENTRY_SLEEP_MODE
PUBLIC	SEN_RESUME
PUBLIC	DELAY_100US

SEN_CODE .SECTION 'CODE'


	SEN_INIT:
			;DEFAULT OF CLOCK IS OUTPUT/HIGH
			;DEFAULT OF CLOCK IS OUTPUT/LOW
			
			CLR		SEN_CLK_CTRL
			CLR		SEN_DATA_CTRL
			SET		SEN_CLK
			CLR		SEN_DATA

			MOV		A, PRODUCT_ID1
			MOV		SEN_REGADDR,A 
			CALL	SEN_READ_REG

			MOV		A, PRODUCT_ID2
			MOV		SEN_REGADDR,A 
			CALL	SEN_READ_REG

			MOV		A, OPERATION_MODE
			MOV		SEN_REGADDR,A 
			MOV		A, 0B8H
			MOV		SEN_REGDATA, A
			CALL	SEN_WRITE_REG

			MOV		A, CONFIGURATION
			MOV		SEN_REGADDR,A 
			MOV		A, 4
			MOV		SEN_REGDATA, A
			CALL	SEN_WRITE_REG
			RET

	SEN_READ_MONTION:

			SZ		XYZ_ZERO_FLAG
			JMP		STILL_CHECK_SENSOR

			SNZ		VALID_FSP
			JMP		NOT_READ_MONTION

			SZ		RESEND_DATA_REQUIRED
			JMP		NOT_READ_MONTION

	STILL_CHECK_SENSOR:
			MOV		A, MONTION_STATUS
			MOV		SEN_REGADDR, A
			CALL	SEN_READ_REG

			MOV		A, SEN_REGDATA
			MOV		MONTION_VALUE, A
			SNZ		ACC.7
			JMP		NO_MONTION_EXIT

			;CHECK IF ANY AXIS OVERFLOW
			CLR		MONTION_OVERFLOW
			MOV		A, MONTION_VALUE
			AND		A, 018H
			SZ		ACC
			SET		MONTION_OVERFLOW;		NO_MONTION_EXIT		;OVERFLOW OCCURS, EXIT WITOUT REPORT MONTION
	
			MOV		A, DELTA_X
			MOV		SEN_REGADDR, A
			CALL	SEN_READ_REG

			MOV		A, SEN_REGDATA
			MOV		MONTION_X, A

			MOV		A, DELTA_Y
			MOV		SEN_REGADDR, A
			CALL	SEN_READ_REG
			
			CPL	SEN_REGDATA

			MOV		A, SEN_REGDATA
			CPL		ACC
			INC		ACC
			MOV		MONTION_Y, A

			SET		MOVEMENT.0

			JMP		EXIT_SEN_READ_MONTION

	NO_MONTION_EXIT:
			CLR		MONTION_X
			CLR		MONTION_Y


			JMP		NOT_READ_MONTION

	EXIT_SEN_READ_MONTION:
			
			SNZ		MONTION_OVERFLOW
			JMP		CLR_X_Y

			CLR		MONTION_X
			CLR		MONTION_Y
	NOT_READ_MONTION:
	CLR_X_Y:

			RET

SEN_ENTRY_SLEEP_MODE:
			MOV		A, CONFIGURATION
			MOV		SEN_REGADDR, A
			MOV		A, 12
			MOV		SEN_REGDATA, A
			CALL	SEN_WRITE_REG
			
			RET
SEN_RESUME:
			MOV		A, CONFIGURATION
			MOV		SEN_REGADDR, A
			MOV		A, 4
			MOV		SEN_REGDATA, A
			CALL	SEN_WRITE_REG

			RET	
						
	SEN_READ_REG:

			MOV		A, SEN_REGADDR
			MOV		SEN_SPITEMP, A
			CALL	SEN_WBYTE
			
			;DATA PHASE
			CALL	SEN_RBYTE
			MOV		A, SEN_SPITEMP
			MOV		SEN_REGDATA, A		

			RET
			
	SEN_WRITE_REG:
			;ADDRESS PHASE
			MOV		A, SEN_REGADDR
			OR		A, 080H
			MOV		SEN_SPITEMP, A
			CALL	SEN_WBYTE

			;DATA PHASE
			MOV		A, SEN_REGDATA
			MOV		SEN_SPITEMP, A	
			CALL	SEN_WBYTE

			SET		SEN_CLK
			CLR		SEN_DATA

			RET			
			
	SEN_WBYTE:
			MOV	A, 8		
			
		SEN_WBYTE_LOOP:
			CLR		SEN_CLK
			CLR		SEN_DATA
			SZ		SEN_SPITEMP.7
			SET		SEN_DATA
			NOP
			NOP
			NOP
			NOP
			SET		SEN_CLK
			RL		SEN_SPITEMP
			SDZ		ACC
			JMP		SEN_WBYTE_LOOP

			RET
			
	SEN_RBYTE:
			MOV		A, 8
			CLR		SEN_SPITEMP
			SET		SEN_DATA_CTRL
			
		SEN_RBYTE_LOOP:
			RL		SEN_SPITEMP
			CLR		SEN_CLK
			NOP
			NOP
			NOP
			NOP
			SET		SEN_CLK
			SZ		SEN_DATA
			SET		SEN_SPITEMP.0
			SDZ		ACC
			JMP		SEN_RBYTE_LOOP
			
			CLR		SEN_DATA_CTRL
			SET		SEN_CLK

			RET	
			
	DELAY_2MS:
			CALL	DELAY_100US
			CALL	DELAY_100US
			CALL	DELAY_100US
			CALL	DELAY_100US
			RET
			
	DELAY_100US:
			MOV		A, 255
			MOV		SEN_TEMP, A
	
	D100USLOOP:
			SDZ		SEN_TEMP
			JMP		D100USLOOP

			RET		

⌨️ 快捷键说明

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