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

📄 main.asm

📁 采用触摸感应板的红外电脑遥控器
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -