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

📄 200.asm

📁 用8051实现的PS2协议的PC键盘
💻 ASM
📖 第 1 页 / 共 4 页
字号:
	DJNZ R0,SETRP2         ; calculate 2**B (SHOULD BE 1, 2, 4 OR 8)
        MUL AB                 ; (A+8) * 2**B
	MOV B,A                ; save the result
        CLR C
        SUBB A,#64
	JC SETRP3              ; jump if intermediate result < 64
	MOV A,B                ; otherwise get back the result
        MOV B,#10
	DIV AB                 ; divide by 10
        MOV B,#4
	MUL AB                 ; we now have (((A+8) * 2**B) / 10) * 4
        JMP SETRP4
SETRP3:
        MOV A,#4
	MUL AB                 ; now its ((A+8) * 2**B) * 4
        MOV B,#10
	DIV AB                 ; now its (((A+8) * 2**B) * 4) / 10
SETRP4:
        MOV RepeatRate,A       ; and finally done, save repeat rate
	JMP RXEXIT
SETRP5:
        CLR C                  ; test to see if byte is a new command
	SUBB A,#0ECH
	JC SETRP6
	JMP AT_COMMAND         ; go process,
SETRP6:
        MOV A,#0FEH            ; else, send RESEND command and try again
	CALL SendResponse
	JNC SETRP0             ; try to get data again
	SETB ClockOut
	SETB DataOut
	SETB ClkIn
	SETB DataIn
	JNB ClkIn,SETRP6       ; if clock high and data low
	JB DataIn,SETRP6
	JMP FromHost?          ; new command being sent
; SetScan sets the keyboard enable flag
SetScan:
	POP DPL
        POP DPH
	SETB KbIsAble
; from here to jmp rxexit is used to control power up case
        MOV A,#0FFH
	JMP RXEXIT             ; acknowledge was sent, so leave
; Setoff stops keyboard scanning, sets keyboard defaults and clears the fifos.
SetOff:
	CLR KbIsAble           ; stop keyboard scanning
	CLR REPEATING
	MOV LastDown,#0FFH     ; stop any autorepeating
; SetDefa does the same thing as setoff, while scanning continues as it was.
SetDefa:
	POP DPL
        POP DPH
	MOV RepeatRate,#10     ; set Default repeat rate
	MOV RepeatDelay,#50    ; set Default repeat delay
	MOV HeadPntr,#BufrLow  ; clear FIFO
	MOV TailPntr,#BufrLow     
	MOV DebncPtr,#DebncBot ; reset key debounce delay que
	JMP RXEXIT
; DoReset performs a reset on the keyboard after the host gets un-busy
; the process can be interrupted by the host, if it does not release
; the clock line before it sends the data line low to send another command.
DoReset:
	POP DPL
	POP DPH                   
; let led on for diag purpose
        SETB HostReset
        CLR  P1.0  
	MOV RptCtr,#127        ; make timer watchdog happy
LP3:
        SETB ClockOut          ; software watch
	SETB DataOut
	SETB ClkIn
	SETB DataIn
	JNB ClkIn,LP3          ; wait until Host sends clock line high
	JB DataIn,RSET1        ; if data line low, host wants to send
	JMP FromHost?          ; so forget reset, process new command
RSET1:
        CLR EA                 ; else, perform power up reset
	MOV RepeatRate,#10     ; set Default repeat rate
	MOV RepeatDelay,#50    ; set Default repeat delay
	MOV HeadPntr,#BufrLow  ; clear FIFO
	MOV TailPntr,#BufrLow
	MOV DebncPtr,#DebncBot ; reset key debounce delay que
	SETB DoAAH             ; tell initial to send power up code
;  Add send echo #0AAH here to meet 486DX speed
	JMP MAIN               ; go do warm boot from initial
; SendOut is used by the AT message routines to send the last response 
; byte and exit its function.
SendOut:
	CALL SendResponse
	JC SNDIT1
	JMP RXEXIT
SNDIT1:
        JNB ClkIn,SendOut
	JB DataIn,SendOut
	JMP FromHost?
;*****************************************
;(9) sends an acknowledge to the IBM AT
ACK: ; background
        MOV A,#0FAH
	CALL SendResponse
        JNC ACK1
	SETB ClockOut          ; software watch
	SETB DataOut
	SETB ClkIn
	SETB DataIn
	JB ClkIn,ACK
	JB DataIn,ACK
ACK1:
        RET
;********************
;(10)   Watch dog
;********************
WatchDog:
	MOV PSW,#0             ; bank 0
	DJNZ WatchCtr,W1       ; if watch count is 0
	MOV A,WchDogByte
	CJNE A,#0AAH,IV        ; if timer modified watchdog memory
	MOV WchDogByte,#55H    ; then do: Reset watchdog memory
	MOV WatchCtr,#100
W1:
	RET
IV:
        SETB WarmStart         ; else, warm Boot Keyboard
	JMP MAIN
;**************************************
;(11)   test column for Key changes
;**************************************
; background, by Mark Chen
ScanColumn:
        PUSH DPH
        PUSH DPL

        MOV DPTR,#Xmem
        MOV A,#0FFH
        MOVX @DPTR,A           ; pull driver lines all high 
 	MOV A,R1               ; get current Image address
 	ANL A,#7               ; get right digit
 	INC A
 	MOV R0,A               ; store in temporary
        MOV A,#80H
AdjustColumn:
        RL A                   ; shift drive line bit into
 	DJNZ R0,AdjustColumn   ; correct position, then
 	CPL A                  ; complement it
        MOVX @DPTR,A           ; zero column
 	CALL Clock20           ; delay for MATRIX to stabilize
 	MOVX A,@DPTR           ; read rows
	MOV R0,A               ; store snapshot
 	CALL Clock20           ; delay again for a second look
 	MOVX A,@DPTR           ; read again
 	ORL A,R0               ; combine the two snapshots
 	CPL A                  ; complement results so 1 is down key, 0 is up
 	XRL A,@R1              ; compare column data to previous status

        POP DPL
        POP DPH
 	RET
;*****************
KeyBase:
;           A     S    L      KEY
;           T     P    O    OFFSET    LEGEND
; COLUMN 0
     DB    6BH ,00100000B     ;       LEFT  ARROW 	;01H ,00000001B     ;7        MENU(F9)        row 7
     DB    5AH ,00000000B     ;       ENTER		;0AH ,00000001B     ;6        HELP(F8)        row 6
     DB    72H ,00100000B     ;       DOWN ARROW	;83H ,00000001B     ;5        F7              row 5
     DB    12H ,00000000B     ;64       SHIFT 
     DB    49H ,00000001B     ;38       .		;1AH ,00000000B     ;55       Z               row 7
     DB    1AH ,00000000B     ;2       Z		;0CH ,00000001B     ;2        F4              row 2
     DB    35H ,00000000B     ;1       Y 		;04H ,00000001B     ;1        F3              row 1
     DB    22H ,00000000B     ;0       X              	;06H ,00000001B     ;0        F2              row 0
; COLUMN 1
     DB    75H ,00100000B     ;27       UP ARROW	;6CH ,00100000B     ;15       HOME            row 7
     DB    74H ,00100000B     ;36       RIGHT ARROW	;46H ,00000001B     ;14       9               row 6
     DB    1DH ,00000000B     ;45       W		;3EH ,00000001B     ;13       8               row 5
     DB    2AH ,00000000B     ;62       V		;3DH ,00000001B     ;12       7               row 4
     DB    3CH ,00000000B     ;8        U 		;4DH ,00000000B     ;11       P               row 3
     DB    2CH ,00000000B     ;42       T		;44H ,00000000B     ;10       O               row 2
     DB    1BH ,00000000B     ;52       S		;43H ,00000000B     ;9        I               row 1
     DB    2DH ,00000000B     ;43       R		;3CH ,00000000B     ;8        U               row 0
; COLUMN 2
     DB    45H ,00000001B     ;37       0		;69H ,00100000B     ;23       END             row 7
     DB    4EH ,00000001B     ;19       -		;36H ,00000001B     ;22       6               row 6
     DB    15H ,00000000B     ;46       Q		;2EH ,00000001B     ;21       5               row 5
     DB    4DH ,00000000B     ;11       P		;25H ,00000001B     ;20       4               row 4
     DB    44H ,00000000B     ;10       O		;4EH ,00000001B     ;19       -               row 3
     DB    31H ,00000000B     ;60       N		;4BH ,00000000B     ;18       L               row 2
     DB    3AH ,00000000B     ;24       M		;42H ,00000000B     ;17       K               row 1
     DB    4BH ,00000000B     ;18       L		;3BH ,00000000B     ;16       J               row 0
; COLUMN 3
     DB    1EH ,00000001B     ;29       2		;4CH ,00000001B     ;31       ;               row 7
     DB    16H ,00000001B     ;28       1 		;26H ,00000001B     ;30       3               row 6
     DB    42H ,00000000B     ;17       K		;1EH ,00000001B     ;29       2               row 5
     DB    3BH ,00000000B     ;16       J		;16H ,00000001B     ;28       1               row 4
     DB    43H ,00000000B     ;9        I		;75H ,00100000B     ;27       UP ARROW        row 3
     DB    33H ,00000000B     ;48       H		;70H ,00100000B     ;26       INSERT          row 2
     DB    34H ,00000000B     ;49       G		;71H ,00100000B     ;25       DELETE          row 1
     DB    2BH ,00000000B     ;50       F 		;3AH ,00000000B     ;24       M               row 0
; COLUMN 4
     DB    2EH ,00000001B     ;21       5		;5AH ,00000000B     ;39       ENTER           row 7
     DB    25H ,00000001B     ;20       4		;49H ,00000001B     ;38       .               row 6
     DB    24H ,00000000B     ;44       E		;45H ,00000001B     ;37       0               row 5
     DB    23H ,00000000B     ;51       D 		;74H ,00100000B     ;36       RIGHT ARROW     row 4
     DB    21H ,00000000B     ;53       C 		;72H ,00100000B     ;35       DOWN ARROW      row 3
     DB    32H ,00000000B     ;61       B		;6BH ,00100000B     ;34       LEFT  ARROW     row 2
     DB    1CH ,00000000B     ;47       A 		;12H ,00000000B     ;33       SHIFT           row 1
     DB    4AH ,00000001B     ;         /		;7AH ,00100000B     ;32       PAGE DOWN       row 0
; COLUMN 5
     DB    36H ,00000001B     ;22       6		;1CH ,00000000B     ;47       A               row 7
     DB    46H ,00000001B     ;14       9		;15H ,00000000B     ;46       Q               row 6
     DB    3EH ,00000001B     ;13       8		;1DH ,00000000B     ;45       W               row 5
     DB    3DH ,00000001B     ;12       7		;24H ,00000000B     ;44       E               row 4
     DB    7AH ,00100000B     ;32       PAGE DOWN	;2DH ,00000000B     ;43       R               row 3
     DB    3EH ,00000000B     ;         * 		;2EH ,00000000B     ;         %               row 5
     DB    71H ,00100000B     ;25       DELETE		;35H ,00000000B     ;41       Y               row 1
     DB    70H ,00100000B     ;26       INSERT		;05H ,00000001B     ;40       F1              row 0
; COLUMN 6
     DB    4CH ,00000001B     ;31       ;  		;1AH ,00000000B     ;55       Z               row 7
     DB    26H ,00000001B     ;30       3		;22H ,00000000B     ;54       X               row 6
     DB    01H ,00000001B     ;7        MENU(F9)	;21H ,00000000B     ;53       C               row 5
     DB    7DH ,00100000B     ;         PAGE UP 	;1BH ,00000000B     ;52       S               row 4
     DB    55H ,00000001B     ;         =		;4CH ,00000001B     ;         ;               row 7
     DB    29H ,00000000B     ;57       SPACE BAR 	;2BH ,00000000B     ;50       F               row 2
     DB    0DH ,00000001B     ;59       TAB		;34H ,00000000B     ;49       G               row 1
     DB    76H ,00000000B     ;58       ESC		;33H ,00000000B     ;48       H               row 0
; COLUMN 7
     DB    0AH ,00000001B     ;6        HELP(F8)	;00H ,00000000B     ;63       DEAD POSITION   row 7
     DB    83H ,00000001B     ;5        F7		;2AH ,00000000B     ;62       V               row 6
     DB    0BH ,00000001B     ;4        F6		;32H ,00000000B     ;61       B               row 5
     DB    03H ,00000001B     ;3        F5		;31H ,00000000B     ;60       N               row 4
     DB    0CH ,00000001B     ;2        F4		;0DH ,00000001B     ;59       TAB             row 3
     DB    04H ,00000001B     ;1        F3		;76H ,00000000B     ;58       ESC             row 2
     DB    06H ,00000001B     ;0        F2		;29H ,00000000B     ;57       SPACE BAR       row 1
     DB    05H ,00000001B     ;40       F1		;7DH ,00100000B     ;56       PAGE UP         row 0
;++++++++++++++++++++++++++++
;    SHIFT KEY BASE TABLE
;++++++++++++++++++++++++++++
ShiftKeyBase:
; COLUMN 0
     DB    6BH ,00100000B     ;       LEFT  ARROW 	;01H ,00000001B     ;7        MENU(F9)        row 7
     DB    5AH ,00000000B     ;       ENTER		;0AH ,00000001B     ;6        HELP(F8)        row 6
     DB    72H ,00100000B     ;       DOWN ARROW	;83H ,00000001B     ;5        F7              row 5
     DB    12H ,00000000B     ;64       SHIFT 
     DB    49H ,00000001B     ;38       .		;1AH ,00000000B     ;55       Z               row 7
     DB    1AH ,00000000B     ;2       Z		;0CH ,00000001B     ;2        F4              row 2
     DB    35H ,00000000B     ;1       Y 		;04H ,00000001B     ;1        F3              row 1
     DB    22H ,00000000B     ;0       X              	;06H ,00000001B     ;0        F2              row 0
; COLUMN 1
     DB    75H ,00100000B     ;27       UP ARROW	;6CH ,00100000B     ;         HOME            row 7
     DB    74H ,00100000B     ;36       RIGHT ARROW	;49H ,00000000B     ;         >               row 6
     DB    1DH ,00000000B     ;45       W		;4EH ,00000000B     ;         _               row 5
     DB    2AH ,00000000B     ;62       V		;41H ,00000000B     ;         <               row 4
     DB    3CH ,00000000B     ;8        U		;3DH ,00000000B     ;         &               row 3
     DB    2CH ,00000000B     ;42       T		;1EH ,00000000B     ;         @               row 2
     DB    1BH ,00000000B     ;52       S		;43H ,00000000B     ;9        I               row 1
     DB    2DH ,00000000B     ;43       R		;3CH ,00000000B     ;8        U               row 0
; COLUMN 2
     DB    4CH ,00000000B     ;         : 		;69H ,00100000B     ;         END             row 7
     DB    41H ,00000000B     ;         <		;55H ,00000001B     ;         =               row 6
     DB    15H ,00000000B     ;46       Q		;45H ,00000000B     ;         )               row 5
     DB    4DH ,00000000B     ;11       P		;46H ,00000000B     ;         (               row 4
     DB    44H ,00000000B     ;10       O		;55H ,00000000B     ;         +               row 3
     DB    31H ,00000000B     ;60       N		;4BH ,00000000B     ;18       L               row 2
     DB    3AH ,00000000B     ;24       M		;42H ,00000000B     ;17       K               row 1
     DB    4BH ,00000000B     ;18       L		;3BH ,00000000B     ;16       J               row 0
; COLUMN 3
     DB    1EH ,00000001B     ;29       2		;4CH ,00000001B     ;31       ;               row 7
     DB    16H ,00000001B     ;28       1 		;26H ,00000001B     ;30       3               row 6
     DB    42H ,00000000B     ;17       K		;4AH ,00000001B     ;         /               row 5
     DB    3BH ,00000000B     ;16       J		;3EH ,00000000B     ;         *               row 4
     DB    43H ,00000000B     ;9        I		;75H ,00100000B     ;27       UP ARROW        row 3
     DB    33H ,00000000B     ;48       H		;70H ,00100000B     ;26       INSERT          row 2
     DB    34H ,00000000B     ;49       G		;71H ,00100000B     ;25       DELETE          row 1
     DB    2BH ,00000000B     ;50       F 		;3AH ,00000000B     ;24       M               row 0
; COLUMN 4
     DB    2EH ,00000001B     ;21       5		;5AH ,00000000B     ;39       ENTER           row 7
     DB    25H ,00000001B     ;20       4		;49H ,00000001B     ;38       .               row 6
     DB    24H ,00000000B     ;44       E		;41H ,00000001B     ;         ,               row 5
     DB    23H ,00000000B     ;51       D 		;74H ,00100000B     ;         RIGHT ARROW     row 4
     DB    21H ,00000000B     ;53       C		;72H ,00100000B     ;         DOWN ARROW      row 3
     DB    32H ,00000000B     ;61       B		;66H ,00000000B     ;         BACK SPACE      row 2
     DB    1CH ,00000000B     ;47       A 		;12H ,00000000B     ;         SHIFT           row 1
     DB    4AH ,00000001B     ;         /		;7AH ,00100000B     ;         PAGE DOWN       row 0
; COLUMN 5
     DB    3DH ,00000000B     ;         &		;1CH ,00000000B     ;47       A               row 7
     DB    4EH ,00000000B     ;         _		;49H ,00000001B     ;38       .               row 6
     DB    45H ,00000000B     ;         ) 		;15H ,00000000B     ;         Q               row 6
     DB    46H ,00000000B     ;         (		;2EH ,00000000B     ;         %               row 5
     DB    7AH ,00100000B     ;         PAGE DOWN	;2DH ,00000000B     ;         R               row 3
     DB    55H ,00000000B     ;         +		;2CH ,00000000B     ;         T               row 2
     DB    71H ,00100000B     ;25       DELETE		;35H ,00000000B     ;         Y               row 1
     DB    70H ,00100000B     ;26       INSERT		;05H ,00000001B     ;         F1              row 0
; COLUMN 6
     DB    49H ,00000000B     ;         >		;1AH ,00000000B     ;         Z               row 7
     DB    5DH ,00000001B     ;         \ 		;5DH ,00000001B     ;         \               row 6
     DB    01H ,00000001B     ;7        MENU(F9)	;21H ,00000000B     ;         C               row 5
     DB    7DH ,00100000B     ;         PAGE UP 	;1BH ,00000000B     ;         S               row 4
     DB    26H ,00000000B     ;         #		;23H ,00000000B     ;         D               row 3
     DB    29H ,00000000B     ;         SPACE BAR	;2BH ,00000000B     ;         F               row 2
     DB    0DH ,00000001B     ;         TAB		;0EH ,00000000B     ;         ~               row 1
     DB    76H ,00000000B     ;         ESC		;4CH ,00000000B     ;         :               row 0
; COLUMN 7
     DB    0AH ,00000001B     ;6        HELP(F8)	;00H ,00000000B     ;         DEAD POSITION   row 7
     DB    83H ,00000001B     ;5        F7		;09H ,00000001B     ;         F10             row 6
     DB    0BH ,00000001B     ;4        F6		;32H ,00000000B     ;61       B               row 5
     DB    03H ,00000001B     ;3        F5		;31H ,00000000B     ;60       N               row 4
     DB    0CH ,00000001B     ;2        F4		;0DH ,00000001B     ;59       TAB             row 3
     DB    04H ,00000001B     ;1        F3		;76H ,00000000B     ;58       ESC             row 2
     DB    06H ,00000001B     ;0        F2		;29H ,00000000B     ;57       SPACE BAR       row 1
     DB    05H ,00000001B     ;40       F1		;7DH ,00100000B     ;56       PAGE UP         row 0
;************************
     END


⌨️ 快捷键说明

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