ORG 0000H ;YK.ASM
LJMP START
ORG 0003H
ajmp xint0
ORG 100H
a_bit equ 20h ;ge bit
b_bit equ 21h ;shi bit
count equ 22h ;count
START: MOV SP,#60H
SETB EA
setb ex0 ;!!!!!YING XIANG MUSIC
SETB IT0
mov r4,#00h
MOV a_bit,#10h ;off
mov b_bit,#11h ;p
loop: acall disp
ajmp loop
DISP: MOV A,a_bit ;取个位数
MOV DPTR,#TAB ;指定查表启始地址
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.7 ;开个位显示
DJNZ R4,$ ;显示0.5ms
SETB P2.7
MOV A,b_bit ;取十位数
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
DJNZ R4,$ ;显示0.5ms
SETB P2.6
MOV P0,#00H ;off
ret
tab: db 0cfh,03h,5dh,5bh,93h,0dah,0deh,43h,0dfh,0dbh
DB 0D7H,9EH,0CCH,1FH,0DCH,0D4H,00h,0f5h
pds: push acc
anl a,#0fh
mov a_bit,a
pop acc
swap a
anl a,#0fh
mov b_bit,a
ret
xint0: SETB RS1
PUSH ACC
PUSH PSW
clr ea
mov r6,#10
sb: acall ys1 ;delay 400us 400us*10=4ms 同步码头:9ms的低电平;4ms的高电平
jb p3.2,exit51; ;if p3.2==1 return
djnz r6,sb
jnb p3.2,$ ;wait low
acall ys2 ;wait 2.35ms
mov r7,#26
jjjja: jnb p3.2,$ ;同步码头结束
lcall ys1
mov c,p3.2 ;26bit mov c,p3.2
jnc uuua
lcall ys3 ;等待0.5ms
uuua: djnz r7,jjjja ;26个用户识别码
mov r1,#1ah ;1ah=26 26个用户识别码接受结束
mov r2,#2
pp: mov r3,#8
jjjj: jnb p3.2,$
lcall ys1 ;delay 400us
mov c,p3.2 ;8bit mov c,p3.2
jnc uuu
lcall ys3
uuu: mov a,@r1
rrc a
mov @r1,a
djnz r3,jjjj ;jjjj 8bit 操作码mov c,p3.2
inc r1
djnz r2,pp ;跳回接受8比特反操作码
mov a,1ah
cpl a
cjne a,1bh,exit51 ;如果反操作码与操作码不符,返回
MOV P1,1AH ;!!! ;如果反操作码与操作码相符,接收成功
MOV a,1AH
acall pds
clr p2.5 ;接收成功蜂鸣器响
lcall ys2
lcall ys2
lcall ys2
setb p2.5 ;接收成功蜂鸣器响;响2.35*3=7毫秒
EXIT51: POP PSW
POP ACC
CLR RS1
SETB EA
RETI
ys1: mov r4,#20 ;400us
d51: mov r5,#20
djnz r5,$
djnz r4,d51
ret
ys2: mov r4,#10 ;2350us=2.35ms
d52: mov r5,#235
djnz r5,$
djnz r4,d52
ret
ys3: mov r4,#2 ;500us=0.5ms
d53: mov r5,#248
djnz r5,$
djnz r4,d53
ret
END
LJMP START
ORG 0003H
ajmp xint0
ORG 100H
a_bit equ 20h ;ge bit
b_bit equ 21h ;shi bit
count equ 22h ;count
START: MOV SP,#60H
SETB EA
setb ex0 ;!!!!!YING XIANG MUSIC
SETB IT0
mov r4,#00h
MOV a_bit,#10h ;off
mov b_bit,#11h ;p
loop: acall disp
ajmp loop
DISP: MOV A,a_bit ;取个位数
MOV DPTR,#TAB ;指定查表启始地址
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.7 ;开个位显示
DJNZ R4,$ ;显示0.5ms
SETB P2.7
MOV A,b_bit ;取十位数
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.6 ;开十位显示
DJNZ R4,$ ;显示0.5ms
SETB P2.6
MOV P0,#00H ;off
ret
tab: db 0cfh,03h,5dh,5bh,93h,0dah,0deh,43h,0dfh,0dbh
DB 0D7H,9EH,0CCH,1FH,0DCH,0D4H,00h,0f5h
pds: push acc
anl a,#0fh
mov a_bit,a
pop acc
swap a
anl a,#0fh
mov b_bit,a
ret
xint0: SETB RS1
PUSH ACC
PUSH PSW
clr ea
mov r6,#10
sb: acall ys1 ;delay 400us 400us*10=4ms 同步码头:9ms的低电平;4ms的高电平
jb p3.2,exit51; ;if p3.2==1 return
djnz r6,sb
jnb p3.2,$ ;wait low
acall ys2 ;wait 2.35ms
mov r7,#26
jjjja: jnb p3.2,$ ;同步码头结束
lcall ys1
mov c,p3.2 ;26bit mov c,p3.2
jnc uuua
lcall ys3 ;等待0.5ms
uuua: djnz r7,jjjja ;26个用户识别码
mov r1,#1ah ;1ah=26 26个用户识别码接受结束
mov r2,#2
pp: mov r3,#8
jjjj: jnb p3.2,$
lcall ys1 ;delay 400us
mov c,p3.2 ;8bit mov c,p3.2
jnc uuu
lcall ys3
uuu: mov a,@r1
rrc a
mov @r1,a
djnz r3,jjjj ;jjjj 8bit 操作码mov c,p3.2
inc r1
djnz r2,pp ;跳回接受8比特反操作码
mov a,1ah
cpl a
cjne a,1bh,exit51 ;如果反操作码与操作码不符,返回
MOV P1,1AH ;!!! ;如果反操作码与操作码相符,接收成功
MOV a,1AH
acall pds
clr p2.5 ;接收成功蜂鸣器响
lcall ys2
lcall ys2
lcall ys2
setb p2.5 ;接收成功蜂鸣器响;响2.35*3=7毫秒
EXIT51: POP PSW
POP ACC
CLR RS1
SETB EA
RETI
ys1: mov r4,#20 ;400us
d51: mov r5,#20
djnz r5,$
djnz r4,d51
ret
ys2: mov r4,#10 ;2350us=2.35ms
d52: mov r5,#235
djnz r5,$
djnz r4,d52
ret
ys3: mov r4,#2 ;500us=0.5ms
d53: mov r5,#248
djnz r5,$
djnz r4,d53
ret
END