📄 main.asm
字号:
b0bclr P1M.@BIT(B_KEY4O)
b0bclr P1M.@BIT(B_KEY5O)
;---------------line 1
b0bset P5M.@BIT(B_KEY1O) ;set output
b0bclr B_KEY1O
call Delay10us
incms KeyBuf
b0bts1 B_KEY1I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY2I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY3I
jmp KeyBreak
;---------------line 2
b0bclr P5M.@BIT(B_KEY1O) ;set input
b0bset P5M.@BIT(B_KEY2O) ;set output
b0bclr B_KEY2O
call Delay10us
incms KeyBuf
b0bts1 B_KEY1I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY2I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY3I
jmp KeyBreak
;---------------line 3
b0bclr P5M.@BIT(B_KEY2O) ;set input
b0bset P5M.@BIT(B_KEY3O) ;set output
b0bclr B_KEY3O
call Delay10us
incms KeyBuf
b0bts1 B_KEY1I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY2I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY3I
jmp KeyBreak
;---------------line 4
b0bclr P5M.@BIT(B_KEY3O) ;set input
b0bset P1M.@BIT(B_KEY4O) ;set output
b0bclr B_KEY4O
call Delay10us
incms KeyBuf
b0bts1 B_KEY1I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY2I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY3I
jmp KeyBreak
;---------------line 5
b0bclr P1M.@BIT(B_KEY4O) ;set input
b0bset P1M.@BIT(B_KEY5O) ;set output
b0bclr B_KEY5O
call Delay10us
incms KeyBuf
b0bts1 B_KEY1I
jmp KeyBreak
incms KeyBuf
b0bts1 B_KEY2I
jmp KeyBreak
incms KeyBuf
b0bts0 B_KEY3I
Nokey:
clr KeyBuf ;nokey
KeyBreak:
mov a,KeyBuf
cmprs a,KeyBuf2
jmp KeyUpdate
mov a,KeyBuf ;twice confirm press or putup
b0bts0 FZ
jmp KeyUp
cmprs a,#C_MouseL
jmp $+2
jmp StoreKeyVal
cmprs a,#C_MouseR
jmp $+2
jmp StoreKeyVal
b0bts0 B_KeyState
jmp KeyUpdate
bset B_KeyState
jmp $+2
KeyUp: bclr B_KeyState
StoreKeyVal:
mov KeyCode,a
KeyUpdate:
mov a,KeyBuf ;update key
mov KeyBuf2,a
ExitKeyScan:
ret
;**********************************************
; send command then read data
;**********************************************
SendCommand:
mov a,#(READ_ID>>24)%256
mov TpCom0,a
mov a,#(READ_ID>>16)%256
mov TpCom1,a
mov a,#(READ_ID>>8)%256
mov TpCom2,a
mov a,#READ_ID%256
mov TpCom3,a
DINT
b0bclr B_SS ;already
nop
nop
clr TpCount ;Is low ,start write
WriteLoop:
b0bts0 B_SCK
jmp $-1
rlcm TpCom3
rlcm TpCom2
rlcm TpCom1
rlcm TpCom0
B2P FC,B_SDI
b0bts1 B_SCK
jmp $-1
incms TpCount
mov a,TpCount
cmprs a,#32
jmp WriteLoop
;write ok
b0bset B_SS
nop
nop
;**********************************************
; read 32bit
;**********************************************
ReadSpi32:
DINT
clr TpCount
Read32Loop:
b0bts0 B_SCK
jmp $-1
b0bts1 B_SCK
jmp $-1
B2B B_SDO,FC ;low->high
rlcm TpCom3
rlcm TpCom2
rlcm TpCom1
rlcm TpCom0
incms TpCount
mov a,TpCount
cmprs a,#32
jmp Read32Loop
;---------------Read32bitOk,check right
b0bts0 TpCom0.7
jmp $+3
b0bts0 TpCom3.0
jmp @f
jmp Reset
@@:
clr INTRQ
EINT
ret
;**********************************************
; IR send one byte + verify bit
;**********************************************
M_IrBitL macro
repeat 15
call Delay13usL
endm
endm
M_IrBitH macro
repeat 11
call IrOneCycle ;18us
endm
endm
;**********************************************
; IR Send 8bit
;input: ac
;**********************************************
IrSend8b:
mov Temp0,a
clr Temp1
b0mov R,#9
IrByteLoop:
rlcm Temp0
IrByteLoop2:
b0bts1 FC
jmp IrSend1
;----------send data 1---------
M_IrBitL
M_IrBitH
incms Temp1
jmp Send1bitEnd
;----------send data 0---------
IrSend1:
M_IrBitH
M_IrBitL
Send1bitEnd:
decs R
b0mov R,a
cmprs a,#1
jmp @f
rrc Temp1
jmp IrByteLoop2
@@: cmprs a,#0
jmp IrByteLoop
;-----------------------------------------------
ret
;**********************************************
; Sync Head 1+1+0
;**********************************************
IrOneCycle: ;55kbps of 18us
b0bset B_IR ;5us high
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
Delay13usL:
b0bclr B_IR ;13us low
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
;------------------------------
b0bts1 Read40State
jmp @f
;---------------
b0bclr FT0ENB ; To disable T0 timer
mov A,#00H
b0mov T0C,A ; To set T0C initial value = 00(To set T0 interval = 16 ms
b0bclr FT0IRQ ; To clear T0 interrupt request
b0bset FT0ENB ; To enable T0 timer
;---------------
mov a,#IntoGreenMode$M
b0mov STK0H,a
mov a,#IntoGreenMode$L
b0mov STK0L,a
mov A,#10000110B
b0mov STKP,A
;------------------------------
@@:
ret ;+2
delay10us:
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
jmp $+1
ret
Delay10ms:
mov a,#4
jmp $+2
Delay50ms:
mov a,#200
mov Temp0,a
mov a,#255
mov Temp1,a
decms Temp1
jmp $-1
decms Temp0
jmp $-5
ret
;**********************************************
; initial port
; note: close key output(open out pullup),close Tp
;**********************************************
InitialPort:
mov a,#00000001B
b0mov P0M,a
mov a,#00000000B
b0mov P0UR,a
mov a,#00000000B
b0mov P0,a
mov a,#00000011B
b0mov P1M,a
mov a,#00101111B
b0mov P1UR,a
mov a,#00000000B
b0mov P1,a
mov a,#11110000B
b0mov P5M,a
mov a,#01110000B
b0mov P5UR,a
mov a,#00000000B
b0mov P5,a
ret
;**********************************************
; open tp power
;note: open key output,pullup,open tp
;**********************************************
OpenTpPower:
mov a,#00000000B
b0mov P0M,a
mov a,#00000001B
b0mov P0UR,a
mov a,#00000001B
b0mov P0,a
mov a,#00000000B
b0mov P1M,a
mov a,#00101111B
b0mov P1UR,a
mov a,#00000000B
b0mov P1,a
mov a,#10001011B
b0mov P5M,a
mov a,#01110100B
b0mov P5UR,a
mov a,#00001011B
b0mov P5,a
ret
;==============================================================
;==============================================================
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -