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

📄 dying.asm

📁 该设计使用AT89C2051方便的完成
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;******************************************************************
;  RS232-> PS/2  Code 
;		V1.0  Dying ----- 2004.11.20
;*******************************************************************
        ORG 0000H

	baud 		DATA 	0FEH	; 9600baudrate/second
	BufferTail	DATA	7BH	;UART Buffer form (BurrerHead) to (BufferTail-1)
	BufferHead	DATA	28H
	
	KeysMakeBit 	BIT 	17H
	KeyboardUsed 	BIT 	16H
	ReCommandBit	BIT	15H

	SecKey	BIT	P1.7
	SDA	BIT	P1.6
	SCL	BIT	P1.5
	Num	BIT	P1.4
	Scroll	BIT	P1.3
	Caps	BIT	P1.2
	
	Flag	EQU	22H
	Count	EQU	23H
	ODDBIT	EQU	24H
;	25H--27H		; no used
;	28H--7AH		; RS232 Recive Ring Buffer and 83 bytes
;	7BH--7CH		; no used
	Tail	EQU	7DH	
	Current EQU	7EH
	Head	EQU	7FH
	
;
;*********************************************************************
;
	AJMP 	STAR
;
	ORG 	0003H
	AJMP	INT_Int0
;
	ORG 	000BH
	AJMP 	INT_T0
;
	ORG	0013H
	AJMP	INT_Int1
;
	ORG 	0023H
	AJMP  	INT_UART
;-----------------------------------------------------
	ORG 	0030H
STAR:
	SETB	SecKey			;Close Keyboard
	CLR	Caps
	CLR	Scroll
	CLR	Num
	SETB	SDA
	SETB	SCL

        CLR   	A      			;clean RAM            
        MOV   	R0,#7FH                 
CLRAM:  MOV   	@R0,A                   
        DJNZ  	R0,CLRAM                 
;------------------------------------------------------
Initialization:
	MOV	SCON,#50H
	MOV	TH1,#baud
	MOV	TL1,#baud
	MOV	TMOD,#21H
	MOV	TCON,#07H
	MOV	SP,#09H
	MOV	TH0,#76 		;WatchDog
	MOV	TL0,#00H
	MOV	IP,#02H
	MOV	IE,#14H  ;????T0 INT0
;
	SETB	TR1
;	SETB	TR0
	CLR	TI
	CLR 	RI
	SETB	EA

;;	ACALL	InitializationKey
	CLR	SecKey			;Open Keyboard	
	MOV	Head,#BufferHead
	MOV	Current,#BufferHead
	MOV	Tail,#BufferHead	
	SETB	Num	
;*************************************************************************
MainLoop:

ajmp ReadyTransmit
	JB	KeyboardUsed,ReadyTransmit		;如果标准键盘存在则不接收命令
;	SETB	SCL
	JB	SCL,ReadyTransmit
DealWithCommand:
cpl Num 
	ACALL	ReceiveByte
	CJNE	A,#55H,ReceiveGoodData
	AJMP	ReadyTransmit

ReceiveGoodData:	
	CJNE	A,#0FEH,NotResendCommand
	DEC	Tail					;Resend Command
	MOV	A,Tail
	CJNE	A,#H,ReadyTransmit   ??????
	MOV	Tail,#H
	SJMP	ReadyTransmit

NotResendCommand:
	CJNE	A,#0EEH,NotEchoCommand
	MOV	A,#0EEH					;Echo Command
	ACALL	TransmitByte
	SJMP	ReadyTransmit

NotEchoCommand:
	CJNE	A,#0FFH,NotResetCommand
	MOV	A,#0FAH					
	ACALL	TransmitByte
	SJMP	STAR					;Reset Keyboard

NotResetCommand:
	CJNE	A,#0F9H,NotKeysMake			
	SETB	KeysMakeBit				;Set All keys Make
	SJMP	NotAll

NotKeysMake:
	CJNE	A,#0F8H,NotSetMakeBreak
	CLR	KeysMakeBit
	SJMP	NotAll

NotSetMakeBreak:
	CJNE	A,#0F7H,NotSetTypematic
	SETB	KeysMakeBit
	SJMP	NotAll

NotSetTypematic:
	CJNE	A,#0FAH,NotSetTMB
	CLR	KeysMakeBit
	SJMP	NotAll

NotSetTMB:
	CJNE	A,#0F2H,NotAll	
	MOV	A,#0FAH
	ACALL	TransmitByte
	MOV	A,#0ABH					;Read Keyborad ID
	ACALL	TransmitByte				;Keyboard ID =0xAB,0x83
	MOV	A,#83H
	ACALL	TransmitByte
	SJMP	ReadyTransmit

NotALL:
	MOV	A,#0FAH					;Other Commands answer the 0xFAH
	ACALL	TransmitByte
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
ReadyTransmit:
	MOV	A,Tail
	CJNE	A,Current,StartPS2Transmit
	SJMP	MainLoop

StartPS2Transmit:
;	SETB	SCL
	JNB	SCL,MainLoop
	SETB	SecKey			;close Keyboard 2
	MOV	R0,A
	MOV	A,@R0
	ACALL	PS2Transmit
	INC	R0
	CJNE	R0,#BufferTail,NotArriveEnd
	MOV	R0,#BufferHead
NotArriveEnd:
	MOV	Tail,R0
	CLR	SecKey			;Open Keyboard 2
	AJMP	MainLoop

;***************************************************************************
WatchDog:
	
	RET

;--------------------------------------------------------
; Input A=ACSII   OutPut A  Use R2
;--------------------------------------------------------
PS2Transmit:
	CJNE	A,#140,NotLongTab1
	MOV	DPTR,#LongTab1			;Pause Break
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	RET

NotLongTab1:
	CJNE	A,#141,NotLongTab2
	MOV	DPTR,#LongTab2			;Print Screen
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	JB	KeysMakeBit,DonotPrintBreak		;不发送断码
	
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
DonotPrintBreak:
	RET

NotLongTab2:
	CJNE	A,#142,NotLongTab3
	MOV	DPTR,#LongTab3			;Ctrl+Alt+Del
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	JB	KeysMakeBit,DonotResetBreak	;不发送断码
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	ACALL	TransmitByte
DonotResetBreak:
	RET


NotLongTab3:
	MOV	R2,A
	MOV	DPTR,#Table
	ADD	A,DPL
	JNC	NoCarry1
	INC	DPH
	CLR	C
NoCarry1:
	ADD	A,R2
	JNC	NoCarry2
	INC	DPH
NoCarry2:
	MOV	DPL,A
	CLR	A
	MOVC	A,@A+DPTR
	CJNE	A,#0E0H,NoTwoBreakCode
	ACALL	TransmitByte			;Two code Make
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	R2,A
	ACALL	TransmitByte
	JB	KeysMakeBit,DonotTwocodeBreak	;不发送断码
	MOV	A,#0E0H
	ACALL	TransmitByte
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,R2
	ACALL	TransmitByte
DonotTwocodeBreak:
	RET

NoTwoBreakCode:
	CJNE	A,#12H,NoShiftCode
	ACALL	TransmitByte			;Shift组合键
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	R2,A
	ACALL	TransmitByte
	JB	KeysMakeBit,DonotShiftBreak	;不发送断码
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,R2
	ACALL	TransmitByte
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,#12H
	ACALL	TransmitByte
DonotShiftBreak:
	RET

NoShiftCode:
	CJNE	A,#14H,NoCtrlCode		;Ctrl组合健
	ACALL	TransmitByte
	INC	DPTR
	CLR	A
	MOVC	A,@A+DPTR
	MOV	R2,A
	ACALL	TransmitByte
	JB	KeysMakeBit,DonotCtrlBreak	;不发送断码
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,R2
	ACALL	TransmitByte
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,#14H
	ACALL	TransmitByte
DonotCtrlBreak:
	RET

NoCtrlCode:
	MOV	R2,A
	ACALL	TransmitByte
	MOV	A,#0F0H
	ACALL	TransmitByte
	MOV	A,R2
	JB	KeysMakeBit,DonotBreak	;不发送断码
	ACALL	TransmitByte
DonotBreak:
	CJNE	R2,#58H,NoCapsLock
	CPL	Caps
	RET
NoCapsLock:
	CJNE	R2,#77H,NoNumLock
	CPL	Num
	RET
NoNumLock:
	CJNE	R2,#7EH,NoScrollLock
	CPL	Scroll
	RET
NoScrollLock:
	RET
;----------------------------------------------------------
;	Input A=data , Used R1
;----------------------------------------------------------
TransmitByte:
;	SETB	SCL
	JNB	SCL,$
	ACALL	Delay50uS
	JNB	SCL,TransmitByte
;	SETB	SDA
	JB	SDA,TransmitAllow
;	MOV	A,#77H
	RET

TransmitAllow:
	ACALL	Delay20uS
	CLR	SDA			;START
	MOV	ODDBIT,#01H
	ACALL	Delay20uS
	CLR	SCL
	ACALL	DelayPluse
	SETB	SCL
	ACALL	Delay20uS
	XRL	ODDBIT,A
	RRC	A
	MOV	SDA,C			;BIT0
	ACALL	Delay20uS
	CLR	SCL
	ACALL	DelayPluse
	SETB	SCL
	ACALL	Delay20uS
	XRL	ODDBIT,A

⌨️ 快捷键说明

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