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

📄 t6620.asm

📁 基于NT69P20的遥控PS2键盘处理程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	LDA	IRTEMP
	STA	IRC0
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRC1
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRC2
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRC3
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRD0L	
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRD0H	
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRD1L	
	
	CALL	YK4BIT
	LDA	IRTEMP
	STA	IRD1H	

YK_CHK_1:
	SBI	IRC0,01H
	BC	YK_CHK_2
	SBI	IRC1,01H
	BC	YK_CHK_2
	ADI	IRC2,01H
	BNC	YK_CHK_ERR_1
	ADI	IRC3,01H
	BNC	YK_CHK_ERR_1
		
	LDI	ACCBUF,01H
	LDA	IRD0H
	ADD	IRD1H
	ADD	ACCBUF
	BNC	YK_CHK_ERR_1
	
	LDA	IRD0L
	ADD	IRD1L
	ADD	ACCBUF
	BNC	YK_CHK_ERR_1
	
	LDI	IRRES,01H
	JMP	YK_EX_1

YK_CHK_2:
	SBI	IRC0,0FH	
	BNZ	YK_CHK_ERR
	SBI	IRC1,0FH
	BNZ	YK_CHK_ERR
	SBI	IRC2,0FH	
	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_CHK_ERR_1:		
	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:	
	LDI	PORTB,1111B
	NOP
	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:			;等待低电平结束
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA0	YK4BIT_2
	JMP	YK4BIT_6	
	
YK4BIT_2:
	LDI	PARM,8
	CALL	DELAY_N_100uS	
	LDA	IRTEMP
	SHR
	STA	IRTEMP		;IRTEMP右移
	
	LDI	PORTA,00H
	LDI	PORTB,1111B
	NOP	
	NOP
	LDA	PORTB
	BA0	YK4BIT_3
	JMP	YK4BIT_7
YK4BIT_3:
	ORIM	IRTEMP,1000B
	LDI	PORTA,0FH
YK4BIT_7:			
	SBIM 	IRCNTL,01H 	
	BC	YK4BIT_1	
	
	RTNI	


PS2OUTB:
	LDI	IE,0000B
	ORIM	PBOUT,0110B
	LDI	PS2TEMP,00H

	LDI	PORTB ,1111B
	LDI	ACCBUF,0100B
	AND	PORTB		;检查CLK是否为高电平
	BAZ	PS2OUTB
	
	LDI	PARM,1
	CALL	DELAY_N_10uS	;延时10微秒

	LDI	PORTB ,1111B	
	LDI	ACCBUF,0100B
	AND	PORTB
	BAZ	PS2OUTB		;再次检查CLK是否为高电平
	
	LDI	PORTB ,1111B
	LDI	ACCBUF,0010B
	AND	PORTB
	BAZ	PS2OUTB_ERR	;若数据线为低,放弃
	
	ORIM	PBOUT,0110B
	LDA	PBOUT
	
PS2OUTB_2:			;发送起始位	
	ANDIM	PORTB,1101B
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B     ;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	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:			;SEND  0
	ANDIM	PORTB,1101B	;DATA->0
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	JMP	PS2OUTB_S0_E
		
PS2OUTB_S0_1:			;SEND  1
	ORIM	PORTB,0010B	;DATA->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	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:			;SEND  	0
	ANDIM	PORTB,1101B	;DATA->0
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	JMP	PS2OUTB_S1_E
		
PS2OUTB_S1_1:			;SEND	1
	ORIM	PORTB,0010B	;DATA->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	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,0010B	;DATA->1
	JMP	PS2OUTB_5_2
PS2OUTB_5_1:
	ANDIM	PORTB,1101B	;DATA->0
PS2OUTB_5_2:	
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时100微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时20微秒
	
				
PS2OUTB_6:			;发送停止位	
	ORIM	PORTB,0010B	;DATA->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1011B	;CLK->0
	LDI	PARM,5
	CALL	DELAY_N_10uS	
	ORIM	PORTB,0100B	;CLK->1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	
	LDI	PS2RET,00H
	JMP	PS2OUTB_E
		
PS2OUTB_ERR:
	LDI	PS2RET,01H	
PS2OUTB_E:			;返回值为0-正确发送,1-发送失败

	ORIM	PORTB,0110B
	ANDIM	PBOUT,1001B	
	;LDI	IRQ,0000B
	LDI	IE,0001B	
	RTNI
	

;PortB bit1 = Data  bit2 = CLK
PS2INB:
	LDI	IE,00H
	LDI	PS2RET,00H
	LDI	PS2TEMP,00H
	LDI	PS2INL,00H
	LDI	PS2INH,00H
	LDI	PBOUT,0000B
PS2INB_0:
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	BA1	PS2INB_2_ERR	
PS2INB_1:
	LDI	PORTB,1111B
	NOP	
	LDA	PORTB
	NOP
	BA2	PS2INB_2
	JMP	PS2INB_1	;检查CLK是否为低

PS2INB_2:
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA1	PS2INB_2_ERR	;检查DATA是否为低,事实上是检查Host的起始位
	JMP	PS2INB_S0_S
PS2INB_2_ERR
	LDI	PS2RET,01H
	JMP	PS2INB_ERR
	
PS2INB_S0_S:
	LDI	PBOUT,0100B
	LDI	PS2CNTL,03H
PS2INB_S0:
	LDA	PS2INL		
	SHR
	STA	PS2INL
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1011B	;CLK -> 0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK -> 1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA1	PS2INB_S0_1	;Check Data Line
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,5
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1011B	;CLK -> 0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK -> 1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA1	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,5
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1011B	;CLK -> 0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK -> 1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_P_1
	JMP	PS2INB_3
PS2INB_P_1:
	ADIM	PS2TEMP,01H	
	
PS2INB_3:			;读取停止位
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	ANDIM	PORTB,1011B	;CLK -> 0
	LDI	PARM,10
	CALL	DELAY_N_10uS	;延时130微秒
	ORIM	PORTB,0100B	;CLK -> 1
	LDI	PARM,5
	CALL	DELAY_N_10uS	;延时50微秒
	LDI	PORTB,1111B
	NOP
	LDA	PORTB
	NOP
	BA2	PS2INB_4
	
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,1101B	;Bring Data Line Low
	
	LDI	PARM,2
	CALL	DELAY_N_10uS	;延时10微秒
	ANDIM	PORTB,1011B	;Bring CLK  Low
	
	LDI	PARM,4
	CALL	DELAY_N_10uS	;
	ORIM	PORTB,0100B	;Release CLK
	
	LDI	PARM,1
	CALL	DELAY_N_10uS	;延时10微秒			
	ORIM	PORTB,0010B	;释放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	PORTB,1111B
	LDI	PBOUT,0000B
	LDI	IE,00H		
	RTNI	
	
	
	ORG	TABCH-1
	TJMP
	RTNW	04H,01H		;00	;音乐音量+
	RTNW	05H,0BH		;01	;话筒音量-
	RTNW	04H,0AH		;02     ;中断
	RTNW	04H,09H		;03	;音乐音量-
	RTNW	04H,0CH		;04	;音调+
	RTNW	00H,00H		;05	
	RTNW	00H,05H		;06	;TV
	RTNW	00H,00H		;07
	RTNW	0EH,00H		;08	;上页 
	RTNW	01H,06H		;09	;1
	RTNW	0EH,00H		;0A	;取消	
	RTNW	00H,00H		;0B	
	RTNW	00H,00H		;0C
	RTNW	02H,05H		;0D	;4
	RTNW	0EH,00H		;0E	;左
	RTNW	03H,0AH		;0F	;主目录
	
	RTNW	01H,0BH		;10	;侍应
	RTNW	03H,0DH		;11	;7
	RTNW	00H,00H		;12	
	RTNW	00H,00H		;13
	RTNW	02H,01H		;14	;查已点歌
	RTNW	03H,0EH		;15	;8
	RTNW	04H,05H		;16	;0
	RTNW	04H,06H		;17	;9
	RTNW	00H,00H		;18
	RTNW	02H,0EH		;19	;5
	RTNW	0EH,00H		;1A	;右
	RTNW	03H,06H		;1B	;6
	RTNW	00H,00H		;1C	
	RTNW	01H,0EH		;1D	;2
	RTNW	0EH,00H		;1E	;优先
	RTNW	02H,06H		;1F	;3
	
	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	07H,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 + -