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

📄 t6620.asm

📁 基于NT69P20的遥控PS2键盘处理程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	BNZ	YK_CHK_ERR
	SBI	IRC3,0FH
	BNZ	YK_CHK_ERR
	SBI	IRD0L,0FH	
	BNZ	YK_CHK_ERR
	SBI	IRD1L,0FH
	BNZ	YK_CHK_ERR
	SBI	IRD0H,0FH	
	BNZ	YK_CHK_ERR
	SBI	IRD1H,0FH
	BNZ	YK_CHK_ERR
	
	LDI	IRRES,02H
	JMP	YK_EX_1

YK_CHK_ERR:
	LDI	IRRES,00H	;校检错
	JMP	YK_EX_1
		
		
YK_EX_1:
	LDI	IE,0001B
	RTNI	
	
YK4BIT:
	LDI	IRTEMP,00H
	LDI	IRCNTL,03H
YK4BIT_1:
	LDI	CT0,0FH		;配置计数器低位	CT0=16
	LDI	CT1,0FH		;配置计数器高位	CT1=16
	LDI	CT2,04H
YK4BIT_4:	
	LDA	PORTB
	NOP
	BA0	YK4BIT_5
	JMP	YK4BIT_6	
YK4BIT_5:
	SBIM	CT0,01H
	BC	YK4BIT_4
	SBIM	CT1,01H
	BC	YK4BIT_4
	SBIM	CT2,01H		
	BC	YK4BIT_4

YK4BIT_6:			;等待低电平结束
	LDA	PORTB
	NOP
	BA0	YK4BIT_2
	JMP	YK4BIT_6	
	
YK4BIT_2:
	LDI	PARM,8
	CALL	DELAY_N_100uS	
	LDA	IRTEMP
	SHR
	STA	IRTEMP		;IRTEMP右移
	
	LDA	PORTB
	NOP
	NOP
	LDA	PORTB
	BA0	YK4BIT_3
	JMP	YK4BIT_7
YK4BIT_3:
	ORIM	IRTEMP,1000B
YK4BIT_7:			
	SBIM 	IRCNTL,01H 	
	BC	YK4BIT_1	
	
	RTNI	


PS2OUTB:
	LDI	IE,0000B
	ORIM	PBOUT,0110B
	NOP
	NOP
	LDI	PS2TEMP,00H
	LDI	ACCBUF,0010B
	AND	PORTB		;检查CLK是否为高电平
	BAZ	PS2OUTB
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	LDI	ACCBUF,0100B
	AND	PORTB
	BAZ	PS2OUTB		;再次检查CLK是否为高电平
	
	NOP
	LDI	ACCBUF,0010B
	AND	PORTB
	NOP
	BAZ	PS2OUTB_ERR	;若数据线为低,放弃
	
	ORIM	PBOUT,0110B
	NOP
	NOP
	LDA	PBOUT
PS2OUTB_2:			;发送起始位	
	ANDIM	PORTB,1011B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	
	LDI	PS2CNTL,03H
	LDA	PS2SNDL
	STA	PS2BUF
PS2OUTB_3:	
	LDA	PS2BUF
	SHR	
	STA	PS2BUF
	BC	PS2OUTB_S0_1

PS2OUTB_S0_0:		
	ANDIM	PORTB,1011B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	JMP	PS2OUTB_S0_E
		
PS2OUTB_S0_1:
	ORIM	PORTB,0100B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	ADIM	PS2TEMP,01H
	
PS2OUTB_S0_E:
	SBIM	PS2CNTL,01H	
	BC	PS2OUTB_3
	
	LDI	PS2CNTL,03H
	LDA	PS2SNDH
	STA	PS2BUF
PS2OUTB_4:	
	LDA	PS2BUF
	SHR
	STA	PS2BUF
	BC	PS2OUTB_S1_1

PS2OUTB_S1_0:		
	ANDIM	PORTB,1011B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	JMP	PS2OUTB_S1_E
		
PS2OUTB_S1_1:
	ORIM	PORTB,0100B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	ADIM	PS2TEMP,01H
	
PS2OUTB_S1_E:
	SBIM	PS2CNTL,01H	
	BC	PS2OUTB_4

PS2OUTB_5:
	LDA	PS2TEMP
	NOP
	;比较PS2TEMP是否为1,若是校检位为0
	BA0	PS2OUTB_5_1
	ORIM	PORTB,0100B
	JMP	PS2OUTB_5_2
PS2OUTB_5_1:
	ANDIM	PORTB,1011B
PS2OUTB_5_2:	
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	
				
PS2OUTB_6:			;发送停止位	
	ORIM	PORTB,0100B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1101B
	LDI	PARM,5
	CALL	DELAY_N_10uS	
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时200微秒
	ORIM	PORTB,0010B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	
	LDI	PS2RET,00H
	JMP	PS2OUTB_E
		
PS2OUTB_ERR:
	LDI	PS2RET,01H	
PS2OUTB_E:			;返回值为0-正确发送,1-发送失败
	ANDIM	PBOUT,1001B
	LDI	PORTB,0FH
	;LDI	IRQ,0000B
	LDI	IE,0001B	
	RTNI

PS2HOOK:
	LDI	IE,0000B
	LDI	PBOUT,00H	
	LDI	PORTB,0FH
	LDI	PS2RET,01H
	LDI	ACCBUF,0110B
	AND	PORTB
	BNZ	PS2HOOK_E
PS2HOOK_1:	
	LDA	PORTB
	NOP
	BA1	PS2HOOK_2	
	JMP	PS2HOOK_1
PS2HOOK_2:
	NOP
	NOP
	NOP
	LDA	PORTB
	BA2	PS2HOOK_E

PS2HOOK_3:
	NOP
	NOP
	LDA	PORTB
	BA2	PS2HOOK_S0
	JMP	PS2HOOK_3

PS2HOOK_S0:
				
PS2HOOK_E:	
	RTNI
	

PS2INB:
	LDI	IE,00H
	LDI	PS2RET,00H
	LDI	PS2TEMP,00H
	LDI	PS2INL,00H
	LDI	PS2INH,00H
	LDI	PBOUT,0000B
PS2INB_0:
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	;BA1	PS2INB_2_ERR
	;LDI	PARM,03H
	;CALL	DELAY_N_mS
	;LDA	PORTB
	;NOP
	LDA	PORTB
	BA1	PS2INB_2_ERR	
PS2INB_1:
	LDA	PORTB
	NOP	
	LDA	PORTB
	NOP
	BA1	PS2INB_2
	JMP	PS2INB_1	;检查CLK是否为低

PS2INB_2:
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_2_ERR	;检查DATA是否为低,事实上是检查Host的起始位
	JMP	PS2INB_S0_S
PS2INB_2_ERR
	LDI	PS2RET,01H
	JMP	PS2INB_ERR
	
PS2INB_S0_S:
	;LDI	PARM,03H
	;CALL	DELAY_N_mS	
	LDI	PBOUT,0010B
	LDI	PS2CNTL,03H
PS2INB_S0:
	LDA	PS2INL		
	SHR
	STA	PS2INL
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1101B	;CLK -> 0
	LDI	PARM,4
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B	;CLK -> 1
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_S0_1
PS2INB_S0_0:		
	JMP	PS2INB_S0_E
PS2INB_S0_1:
	ORIM	PS2INL,1000B
	ADIM	PS2TEMP,01H
PS2INB_S0_E:
	SBIM	PS2CNTL,01H	
	BC	PS2INB_S0
			

	LDI	PS2CNTL,03H
PS2INB_S1:
	LDA	PS2INH		
	SHR
	STA	PS2INH
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1101B	;CLK -> 0
	LDI	PARM,4
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B	;CLK -> 1
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_S1_1
PS2INB_S1_0:		
	JMP	PS2INB_S1_E
PS2INB_S1_1:
	ORIM	PS2INH,1000B
	ADIM	PS2TEMP,01H
PS2INB_S1_E:
	SBIM	PS2CNTL,01H	
	BC	PS2INB_S1		

PS2INB_P:			;读取校验位
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1101B	;CLK -> 0
	LDI	PARM,4
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B	;CLK -> 1
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_P_1
	JMP	PS2INB_3
PS2INB_P_1:
	ADIM	PS2TEMP,01H	
	
PS2INB_3:			;读取停止位
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1101B	;CLK -> 0
	LDI	PARM,4
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0010B	;CLK -> 1
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时50微秒
	LDA	PORTB
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_4
	
PS2INB_3_ERR:			;停止位接收出错,退出并生成出错信息
	;LDA	PORTB
	;NOP
	;LDA	PORTB
	;NOP
	;BA1	PS2INB_3_ERR
	LDI	PS2RET,02H
	JMP	PS2INB_ERR
			
PS2INB_4:			;发送应答位
	LDI	PBOUT,0110B
	NOP
	NOP
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时20微秒
	ANDIM	PORTB,1011B	;Bring Data Line Low
	
	LDI	PARM,1
	CALL	DELAY_N_10uS	;延时10微秒
	ANDIM	PORTB,1101B	;Bring CLK  Low
	
	LDI	PARM,4
	CALL	DELAY_N_10uS	;
	ORIM	PORTB,0010B	;Release CLK
	
	LDI	PARM,1
	CALL	DELAY_N_10uS	;延时10微秒			
	ORIM	PORTB,0100B	;释放Data线
	
	LDI	PARM,4
	CALL	DELAY_N_10uS	;额外延时40微秒,供主机进行处理
	
PS2INB_CHK:			;处理校验位
	LDA	PS2TEMP
	BA0	PS2INB_E
	LDI	PS2RET,04H	;PS2TEMP.0=0校验出错
PS2INB_ERR:
	;LDI	PS2RET,0FH
PS2INB_E:
	LDI	PBOUT,0000B
	LDI	PORTB,0FH
	LDI	IE,00H		
	RTNI	
	ORG	TABCH-1
	TJMP
	RTNW	04H,01H		;00
	RTNW	05H,0BH		;01
	RTNW	05H,0DH		;02
	RTNW	04H,09H		;03
	RTNW	04H,0CH		;04
	RTNW	00H,00H		;05
	RTNW	00H,05H		;06
	RTNW	00H,00H		;07
	RTNW	0EH,00H		;08
	RTNW	01H,06H		;09
	RTNW	0EH,00H		;0A
	RTNW	00H,00H		;0B
	RTNW	00H,00H		;0C
	RTNW	02H,05H		;0D
	RTNW	0EH,00H		;0E
	RTNW	03H,0AH		;0F
	
	RTNW	01H,0BH		;10
	RTNW	03H,0DH		;11
	RTNW	00H,00H		;12
	RTNW	00H,00H		;13
	RTNW	02H,01H		;14
	RTNW	03H,0EH		;15
	RTNW	04H,05H		;16
	RTNW	04H,06H		;17
	RTNW	00H,00H		;18
	RTNW	02H,0EH		;19
	RTNW	0EH,00H		;1A
	RTNW	03H,06H		;1B
	RTNW	00H,00H		;1C
	RTNW	01H,0EH		;1D
	RTNW	04H,0BH		;1E
	RTNW	02H,06H		;1F
	
	RTNW	00H,00H		;20
	RTNW	00H,00H		
	RTNW	00H,00H		
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	
	RTNW	00H,00H		;30
	RTNW	00H,00H		
	RTNW	00H,00H		
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	
	RTNW	0EH,00H		;40
	RTNW	00H,00H		;41
	RTNW	0EH,00H		;42
	RTNW	05H,0AH		;43
	RTNW	0EH,00H		;44
	RTNW	03H,05H		;45
	RTNW	00H,00H		;46
	RTNW	00H,00H		;47
	RTNW	0EH,00H		;48
	RTNW	0EH,00H		;49
	RTNW	04H,0EH		;4A
	RTNW	00H,00H		;4B
	RTNW	06H,06H		;4C
	RTNW	00H,00H		;4D
	RTNW	00H,00H		;4E
	RTNW	00H,00H		;4F

	RTNW	05H,02H		;50
	RTNW	00H,00H		;51
	RTNW	00H,00H		;52
	RTNW	05H,0AH		;53
	RTNW	00H,00H		;54
	RTNW	00H,00H		;55
	RTNW	00H,00H		;56
	RTNW	00H,00H		;57
	RTNW	00H,00H		;58
	RTNW	00H,00H		;59
	RTNW	00H,00H		;5A
	RTNW	00H,00H		;5B
	RTNW	00H,00H		;5C
	RTNW	05H,04H		;5D
	RTNW	07H,0CH		;5E
	RTNW	00H,00H		;5F
	
	ORG	TABFN-1
	TJMP
	RTNW	00H,00H		;00
	RTNW	00H,00H		;01
	RTNW	00H,00H		;02
	RTNW	00H,00H		;03
	RTNW	00H,00H		;04
	RTNW	00H,00H		;05
	RTNW	00H,00H		;06
	RTNW	00H,00H		;07
	RTNW	07H,0DH		;08
	RTNW	00H,00H		;09
	RTNW	07H,01H		;0A
	RTNW	07H,0DH		;0B
	RTNW	00H,00H		;0C
	RTNW	00H,00H		;0D
	RTNW	06H,0BH		;0E
	RTNW	00H,00H		;0F
	
	RTNW	00H,00H		;10
	RTNW	00H,00H		;11
	RTNW	00H,00H		;12
	RTNW	00H,00H		;13
	RTNW	00H,00H		;14
	RTNW	00H,00H		;15
	RTNW	00H,00H		;16
	RTNW	00H,00H		;17
	RTNW	00H,00H		;18
	RTNW	00H,00H		;19
	RTNW	07H,04H		;1A
	RTNW	00H,00H		;1B
	RTNW	00H,00H		;1C
	RTNW	00H,00H		;1D
	RTNW	00H,00H		;1E
	RTNW	00H,00H		;1F
	
	RTNW	00H,00H		;20
	RTNW	00H,00H		
	RTNW	00H,00H		
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	
	RTNW	00H,00H		;30
	RTNW	00H,00H		
	RTNW	00H,00H		
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	RTNW	00H,00H
	
	RTNW	07H,0AH		;40
	RTNW	00H,00H		;41
	RTNW	07H,0AH		;42
	RTNW	00H,00H		;43
	RTNW	07H,0DH		;44
	RTNW	00H,00H		;45
	RTNW	00H,00H		;46
	RTNW	00H,00H		;47
	RTNW	07H,02H		;48
	RTNW	07H,05H		;49
	RTNW	00H,00H		;4A
	RTNW	00H,00H		;4B
	RTNW	00H,00H		;4C
	RTNW	00H,00H		;4D
	RTNW	00H,00H		;4E
	RTNW	00H,00H		;4F

	RTNW	00H,00H		;50
	RTNW	00H,00H		;51
	RTNW	00H,00H		;52
	RTNW	00H,00H		;53
	RTNW	00H,00H		;54
	RTNW	00H,00H		;55
	RTNW	00H,00H		;56
	RTNW	00H,00H		;57
	RTNW	00H,00H		;58
	RTNW	00H,00H		;59
	RTNW	00H,00H		;5A
	RTNW	00H,00H		;5B
	RTNW	00H,00H		;5C
	RTNW	00H,00H		;5D
	RTNW	00H,00H		;5E
	RTNW	00H,00H		;5F	
	END	
	

⌨️ 快捷键说明

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