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

📄 atxtll51org.asm

📁 XT_KeyBoard interface with 8951 using Assembler and Document for Key board delivered data details, W
💻 ASM
字号:
       cpu "8051.tbl"		;89c51 pin1 is connected to keyboard "Data" line.
        hof "int8"		;
;IEC:      EQU       A8H	;89c51 pin2 is connected to keyboard "Clock" line.      
PSW:      equ       0D0h      ;program status word.
IE:       EQU       0A8H      ;INTERRUPT ENABLE.
SBUF:     EQU       99H       ;SEND BUFFER.
SCON:     EQU       98H       ;SERIAL CONTROL.
TH1:      EQU       8DH       ;TIMER 1 HIGH.
TH0:      EQU       8CH       ;TIMER 0 HIGH.
TL1:      EQU       8BH       ;TIMER 1 LOW.
TL0:      EQU       8AH       ;TIMER 0 LOW.
TMOD:     EQU       89H       ;TIMER MODE.
TCON:     EQU       88H       ;TIMER CONTROL.
PCON:     EQU       87H       ;POWER CONTROL REGISTER.
DPH:      EQU       83H       ;DATA POINTER HIGH.
DPL:      EQU       82H       ;DATA POINTER LOW.
SP:       EQU       81H       ;STACK POINTER.
P0:       EQU       80H       ;PORT 0.
P1:       EQU       90H       ;PORT 1.
P2:       EQU       0A0H      ;PORT 2.
P3:       EQU       0B0H      ;port 3.
p4:       EQU       0E8H      ;port 4	
p6:       equ       0F8h      ;port6.
Acc:      equ       0E0h      ;Acc.
;
;MCS-51 INTERNAL BIT ADDRESSES
;
CY:       EQU       0D7H      ;CARRY FLAG
AC:       EQU       0D6H      ;AUXILIARY-CARRY FLAG
F0:       EQU       0D5H      ;USER FLAG 0
RS1:      EQU       0D4H      ;REGISTER SELECT MSB
RS0:      EQU       0D3H      ;REGISTER SELECT LSB
OV:       EQU       0D2H      ;OVERFLOW FLAG
P:        EQU       0D0H      ;PARITY FLAG
PS:       EQU       0BCH      ;PRIORITY SERIAL PORT
PT1:      EQU       0BBH      ;PRIORITY TIMER 1
PX1:      EQU       0BAH      ;PRIORITY EXTERNAL 1
PT0:      EQU       0B9H      ;PRIORITY TIMER 0
PX0:      EQU       0B8H      ;PRIORITY EXTERNAL 0
EA:       EQU       0AFH      ;ENABLE ALL INTERRUPT
ES:       EQU       0ACH      ;ENABLE SERIAL INTERRUPT
ET1:      EQU       0ABH      ;ENABLE TIMER 1 INTERRUPT
EX1:      EQU       0AAH      ;ENABLE EXTERNAL 1 INTERR
ET0:      EQU       0A9H      ;ENABLE TIMER 0 INTERRUPT
EX0:      EQU       0A8H      ;ENABLE EXTERNAL 0 INTERR
SM0:      EQU       09FH      ;SERIAL MODE 0
SM1:      EQU       09EH      ;SERIAL MODE 1
SM2:      EQU       09DH      ;SERIAL MODE 2
REN:      EQU       09CH      ;SERIAL RECEPTION ENABLE
TB8:      EQU       09BH      ;TRANSMITT BIT 8
RB8:      EQU       09AH      ;RECEIVE BIT 8
TI:       EQU       099H      ;TRANSMIT INTERRUPT FLAG
RI:       EQU       098H      ;RECEIVE INTERRUPT FLAG
TF1:      EQU       08FH      ;TIMER 1 OVERFLOW FLAG
TR1:      EQU       08EH      ;TIMER 1 RUN CONTROL BIT
TF0:      EQU       08DH      ;TIMER 0 OVERFLOW FLAG
TR0:      EQU       08CH      ;TIMER 0 RUN CONTROL BIT
IE1:      EQU       08BH      ;EXT INTERR. 1 EDGE FLAG
IT1:      EQU       08AH      ;EXT INTERR. 1 TYPE FLAG
IE0:      EQU       089H      ;EXT INTERR. 0 EDGE FLAG
IT0:      EQU       088H      ;EXT INTERR. 0 TYPE FLAG
BDE:      EQU       0dfH
org 0700h
 Unshift: DFB	00H,43H,00H,3FH,3DH,3BH,3CH,58H,00H,44H,42H,40H,3EH,09H,60H,00H,
 	  dfb	00H,00H,00H,00H,00H,71H,31H,00H,00H,00H,7AH,73H,61H,77H,32H,00H,
 	  dfb	00H,63H,78H,64H,65H,34H,33H,00H,00H,20H,76H,66H,74H,72H,35H,00H,
 	  dfb	00H,6EH,62H,68H,67H,79H,36H,00H,00H,00H,6DH,6AH,75H,37H,38H,00H,
 	  dfb	00H,2CH,6BH,69H,6FH,30H,39H,00H,00H,2EH,2FH,6CH,00H,70H,2DH,00H,
 	  dfb	00H,2CH,00H,00H,5BH,3DH,00H,00H,00H,00H,1CH,5DH,00H,5CH,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,08H,00H,00H,00H,00H,4BH,00H,00H,00H,00H,
 	  dfb	52H,7FH,50H,00H,4DH,48H,01H,00H,57H,2BH,00H,2DH,2AH,00H,00H,00H,
 	  dfb	00H,00H,00H,41H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
 
 ORG 0800H
 SHIFTED: DFB	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,7EH,00H,
	  dfb	00H,00H,00H,00H,00H,51H,21H,00H,00H,00H,5AH,53H,41H,57H,40H,00H,
	  dfb	00H,43H,58H,44H,45H,24H,23H,00H,00H,20H,56H,46H,54H,52H,25H,00H,
	  dfb	00H,4EH,42H,48H,47H,59H,5EH,00H,00H,00H,4DH,4AH,55H,26H,2AH,00H,
	  dfb	00H,3CH,4BH,49H,4FH,29H,28H,00H,00H,3EH,3FH,4CH,3AH,50H,5FH,00H,
	  dfb	00H,00H,22H,00H,7BH,2BH,00H,00H,00H,00H,0DH,7DH,00H,7CH,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,08H,00H,00H,31H,00H,34H,37H,00H,00H,00H,
	  dfb	30H,2EH,32H,35H,36H,38H,1BH,00H,00H,2BH,33H,2DH,00H,39H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 org 0900h
 XTdata:  dfb	00H,43H,00H,3FH,3DH,3BH,3CH,58H,00H,44H,42H,40H,3EH,0FH,29H,00H,
	  dfb	00H,38H,2AH,00H,1DH,10H,02H,00H,00H,00H,2CH,1FH,1EH,11H,03H,00H,
	  dfb	00H,2EH,2DH,20H,12H,05H,04H,00H,00H,39H,2FH,21H,14H,13H,06H,00H,
	  dfb	00H,31H,30H,23H,22H,15H,07H,00H,00H,00H,32H,24H,16H,08H,09H,00H,
	  dfb	00H,33H,25H,17H,18H,0BH,0AH,00H,00H,34H,35H,26H,27H,19H,0CH,00H,
	  dfb	00H,2CH,28H,00H,1AH,0DH,00H,00H,3AH,36H,1CH,1BH,00H,2BH,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,0EH,00H,00H,4FH,00H,4BH,47H,00H,00H,00H,
	  dfb	52H,53H,50H,4CH,4DH,48H,01H,45H,57H,4EH,51H,4AH,2AH,49H,46H,00H,
	  dfb	00H,00H,00H,41H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,37H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
	  dfb	00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,
 org   30h
    kbdata1:	dfs 1
    kbdata2:	dfs 1
    kbdata3:	dfs 1
    kbdata4:	dfs 1
    kbdata5:	dfs 1	;
    kbdata6:	dfs 1	;89c51 pin1 is connected to keyboard "Data" line.
    temp1:	dfs 1	;
    temp2:	dfs 1	;89c51 pin2 is connected to keyboard "Clock" line.
    temp3:	dfs 1	;
    data:	dfs 1
    bcount:	dfs 1
    store1:     dfs 1
    store2:     dfs 1
    gap1:	dfs 1
    store3:     dfs 1
    store4:     dfs 1
    gap2:	dfs 1
    store5:     dfs 1
    store6:     dfs 1
    gap3:	dfs 1
    store7:     dfs 1
    store8:     dfs 1
    gap4:	dfs 1
    store9:     dfs 1
    storea:     dfs 1
    gap5:	dfs 1    
    storeb:     dfs 1
    storec:     dfs 1
    gap6:	dfs 1
    gap7:	dfs 1
    timer1:	dfs 1
 org 0000h
        LJMP start
 org 0200h
start:	mov	sp,#20h
	acall	delay
	mov 	store1,#3fh
        mov 	store2,#3fh
        MOV 	store3,#3fh
        MOV 	store4,#3fh
        mov 	store5,#3fh
        mov 	store6,#3fh
        mov	gap1,#20h
        mov	gap2,#20h
        mov	gap3,#20h
        mov	gap4,#20h
        mov	gap5,#20h
        mov	gap6,#20h
        mov	gap7,#20h
	mov	temp1,#00
	mov 	timer1,#00
	acall	delay
	
repeat:	mov	temp1,#00
	acall	rebyte
	mov	kbdata1,temp1
	mov	a,temp1
	cjne	a,#12h,Splkey		;check key is shifted or not.12h=>21h
	
	mov	temp1,#00
	acall	rebyte
	mov	kbdata2,temp1
		
	mov	temp1,#00
	acall	rebyte
	mov	kbdata3,temp1
		
	mov	temp1,#00
	acall	rebyte
	mov	kbdata4,temp1
	
	mov	temp1,#00
	acall	rebyte
	mov	kbdata5,temp1
	
	mov	temp1,#00
	acall	rebyte
	mov	kbdata6,temp1
	
	acall	init
	
	mov	dptr,#SHIFTED
	mov	a,kbdata2
	movc	a,@a+dptr
	mov	data,a
	swap	a
	mov	kbdata2,a	;Now here key Hex Data Available for shifted key.
	mov	a,kbdata2
	anl	a,#0fh
	acall	Ascii
	mov	store1,temp1
	mov	a,store1
wait3:	jnb 	ti,wait3        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
	
	mov	a,kbdata2
	SWAP	A
	anl	a,#0fh
	acall	Ascii
	MOV	store2,temp1
	mov	a,store2
wait4:	jnb 	ti,wait4        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
	
	acall	Debounce
	clr 	tr1            	; stop timer
	mov	a,data
	mov	P2,a
	setb	p1+2
	jnb	p1+3,$
	mov	a,#00
	mov	p2,a
	ajmp	repeat		; data serial line.
	;=======================
Splkey:	cjne	a,#0E0h,Unshit
	mov	temp1,#00
	acall	rebyte
	mov	kbdata2,temp1
		
	mov	temp1,#00
	acall	rebyte
	mov	kbdata3,temp1
		
	mov	temp1,#00
	acall	rebyte
	mov	kbdata4,temp1
	
	mov	temp1,#00
	acall	rebyte
	mov	kbdata5,temp1
	acall	init
				
	mov	dptr,#Unshift
	mov	a,kbdata2	;Now here key Hex Data Available for special key.
	movc	a,@a+dptr
	mov	data,a
	swap	a
	mov	kbdata2,a
	
	mov	a,kbdata2
	anl	a,#0fh
	acall	Ascii
	mov	store1,temp1
	mov	a,store1
wait5:	jnb 	ti,wait5        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
	
	mov	a,kbdata2
	SWAP	A
	anl	a,#0fh
	acall	Ascii
	MOV	store2,temp1
	mov	a,store2
wait6:	jnb 	ti,wait6        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
        acall	Debounce
	clr 	tr1            	; stop timer
	mov	a,data
	mov	P2,a
	setb	p1+2
	jnb	p1+3,$
	mov	a,#00
	mov	p2,a
	ajmp	repeat	
	;=======================
Unshit:	mov	temp1,#00
	acall	rebyte
	mov	kbdata2,temp1
		
	mov	temp1,#00
	acall	rebyte
	mov	kbdata3,temp1
	
	mov	dptr,#XTdata	;#Unshift
	mov	a,kbdata1
	movc	a,@a+dptr
	mov	data,a
	swap	a
	mov	kbdata1,a	;Now here key Hex Data Available for Unshifted key.
	acall	init
	
	mov	a,kbdata1
	anl	a,#0fh
	acall	Ascii
	mov	store1,temp1
	mov	a,store1
wait1:	jnb 	ti,wait1        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
	
	mov	a,kbdata1
	SWAP	A
	anl	a,#0fh
	acall	Ascii
	MOV	store2,temp1
	mov	a,store2
wait2:	jnb 	ti,wait2        ; wait until ti is set
	clr 	ti              ; clear it
        mov 	sbuf,a          ; send acc to serial buffer
        acall	Debounce
	clr 	tr1            	; stop timer
	mov	a,data
	mov	P2,a
	setb	p1+2
	jnb	p1+3,$
	mov	a,#00
	mov	p2,a
	ajmp	repeat
;=============================================	
Ascii:	CJNE	A,#0AH,NotEql	;Find out above 0Ah or below.
	ADD	A,#37H
	MOV	temp1,A
	AJMP	MSB1
NotEql:	jc	below
	ADD	A,#37H		;\
	MOV	temp1,A		; |---Above
	AJMP	MSB1		;/
below:	add	a,#30h		;\____Below
	mov	temp1,a		;/
MSB1:	ret
;=============================================
rebyte:	jb	p1+1,$		;

⌨️ 快捷键说明

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