📄 sensor_oper.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 + -