📄 t6620.asm
字号:
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 + -