?? ps2.asm
字號:
sbit _data = P3.4
sbit _clock = P3.3
sbit _parity = 0x00
ORG 0x0000
AJMP Main
Main:
MOV SP, #0x60
Loop:
MOV A, #0xe0
MOV C, P
CPL C
MOV _parity,C ;Init reg for parity calc
ACALL CodeOut
MOV A, #0x37
MOV C, P
CPL C
MOV _parity,C ;Init reg for parity calc
ACALL CodeOut
MOV R6, #0
De1:
MOV R5, #0
DJNZ R5, $
DJNZ R6, De1
MOV A, #0xe0
MOV C, P
CPL C
MOV _parity,C ;Init reg for parity calc
ACALL CodeOut
MOV A, #0xf0
MOV C, P
CPL C
MOV _parity,C ;Init reg for parity calc
ACALL CodeOut
MOV A, #0x37
MOV C, P
CPL C
MOV _parity,C ;Init reg for parity calc
ACALL CodeOut
MOV R7, #8
Del:
MOV R6, #0
De:
MOV R5, #0
DJNZ R5, $
DJNZ R6, De
DJNZ R7, Del
AJMP Loop
CodeOut:
MOV R7, #0x08
InhibitLoop:
JNB _clock, InhibitLoop ;Check for inhibit
ACALL Delay50us ;Delay 50 microseconds
JNB _clock, InhibitLoop ;Check again for inhibit
JB _data, EnSend ;Check for request-to-send
CLR C
RET
EnSend:
;Output Start bit (0)
CLR C
ACALL BitOut
;Output Keycode
ByteOutLoop:
RRC A
ACALL BitOut
DJNZ R7, ByteOutLoop
;Output Parity bit (odd parity)
MOV C, _parity
ACALL BitOut
;Output Stop bit (1)
SETB C
MOV _data, C
ACALL Delay20us
CLR _clock
ACALL Delay370us
SETB _data ;data=1
SETB _clock ;clock=1
RET
BitOut:
MOV _data, C
ACALL Delay20us
CLR _clock
ACALL Delay40us
SETB _clock
ACALL Delay20us
RET
Delay370us:
ACALL Delay50us
ACALL Delay50us
ACALL Delay50us
ACALL Delay50us
ACALL Delay50us
ACALL Delay50us
ACALL Delay50us
ACALL Delay20us
RET
Delay50us:
ACALL Delay10us
Delay40us:
ACALL Delay20us
ACALL Delay20us
RET
Delay20us:
ACALL Delay10us
ACALL Delay10us
RET
Delay10us:
NOP
NOP
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -