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