📄 atxtll51org.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 + -