📄 pro51.asm
字号:
;ea=0v p3.4=1
;ea=5v p3.4=0,p3.5=1
;ea=12v p3.4=0,p3.5=0
;read51 260 270 361 371 ea5 rst1 ale1
;write51 260 271 361 371 ea12 rst1 ale101
;swap51 261 270 360 370 ea12 rst1 ale101(10ms)
;33-1.6 34-1.7 35-3.3 37-3.2 32-1.5 XTAL1-1.4
;READ2051 330 340 351 371 RST5 321 XTAL1_010
;SWAP2051 331 340 350 370 RST12 32101(10MS)
;WRITE2051 330 341 351 371 RST12 32101 XTAL_010
rst bit p3.3
ale bit p3.1 ;??
P33 BIT p0.6
P34 BIT p0.7
P35 BIT P3.3
P37 BIT P3.2
P32 BIT p0.5
XTAL1 BIT p0.4
;01h=1 51 ;01h=0 2051
ORG 0000H
AJMP main0
ORG 0030H
main0: MOV 20H,#00H
MOV TMOD,#22H
MOV SCON,#40H
MOV TH1,#0FAH ;f4;4800bps,12M FA=9600
MOV PCON,#80H
SETB TR1
SETB REN
ajmp start
db 75h
start: mov dptr,#ok
acall senda
jb p3.2,main
warn0: mov dptr,#warn
acall senda
ajmp warn0
warn: db 0ah,0dh,'版权所有,请勿非法复制!',0ah,0dh,'$'
main: ACALL DELAY_2MS
MAIN_R: setb p2.6;clear led
clr p3.4 ;wait comannd ea=5v
SETB p3.5
CLR XTAL1 ;FOR 2051
JBC RI,READ_C
AJMP MAIN_R
READ_C: MOV A,SBUF
cjne a,#7FH,main1 ;read eprom
ajmp read_eprom
db 75h
main1: cjne a,#'h',main_t0 ;test id
acall back_help
ajmp main
db 75h
main_t0: CJNE A,#':',main
ACALL test_51 ;51 OR 2051
jb 01h,MAIN2
AJMP PRO_2051 ;goto program 2051
MAIN2: clr 00h
setb rst ;start program 51
clr p3.4 ;12v
clr p3.5
setb p2.6
clr p2.7
clr p3.6
clr p3.7
CLR ALE
mov r2,#8
mov r0,#30h
rev_08: jnb ri,$
clr ri
mov @r0,sbuf
inc r0
djnz r2,rev_08
SETB ALE
acall canshu
mov a,37h ;program over?
cjne a,#30h,main
cjne r2,#0,program_
ajmp main
program_:;MOV A,R6
;JNZ MAIN_J
;MOV A,R7
;JNZ MAIN_J ;start program 00h-10h
pro_0: mov a,dph
anl a,#00011111b
anl p2,#11100000b
orl p2,a
mov p0,dpl
jnb ri,$
clr ri
mov a,sbuf
ACALL ASC2HEX
SWAP A
mov 30h,a
jnb ri,$
clr ri
mov a,sbuf
SETB RST
SETB ALE
clr p2.6
setb p2.7
setb p3.6
setb p3.7
ACALL ASC2HEX
add a,30h
mov p1,a
clr ale
nop
setb ale
inc dptr
djnz r2,pro_0 ;1hang over
clr p2.7
mov sbuf,#'>'
jnb ti,$
clr ti
;;
rev_again: jnb ri,$
clr ri
mov a,sbuf
cjne a,#':',rev_again
mov r2,#8
mov r0,#30h
rev_a1: jnb ri,$
clr ri
mov @r0,sbuf
inc r0
djnz r2,rev_a1
;;;
acall canshu
mov a,37h ;program over?
cjne a,#30h,READ_EP_j
cjne r2,#0,PRO_0
read_ep_j: ACALL DELAY_2MS
acall test_over
mov dptr,#over
acall senda
mov p0,#0ffh
mov p1,#0ffh
mov p2,#0ffh
mov p3,#0ffh
main_j: ajmp read_ep
ASC2HEX:CLR C
push dph
push dpl
SUBB A,#30H
MOV DPTR,#ASC2
MOVC A,@A+DPTR
pop dpl
pop dph
RET
ASC2: DB 0,1,2,3,4,5,6,7,8,9,0AH,0BH,0CH,0DH,0EH,0FH
DB 0,0AH,0BH,0CH,0DH,0EH,0FH
;READ2051 330 340 351 371 RST5 321 XTAL1_010
;SWAP2051 331 340 350 370 RST12 32101(10MS)
;WRITE2051 330 341 351 371 RST12 32101 XTAL_010
main_j2: Ljmp main
pro_2051:CLR P2.6
SETB p0.2
SETB p3.5 ;5V
CLR p3.4
SETB P32
setb p33 ;SWAP
clr p34
clr p35
clr p37
clr p3.4 ;12v
clr p3.5
CLR P32 ;START CLEAR
mov r2,#8
mov r0,#30h
rev_082: jnb ri,$
clr ri
mov @r0,sbuf
inc r0
djnz r2,rev_082
SETB P32 ;CLEAR OVER
;;
acall canshu2
mov a,37h ;program over?
cjne a,#30h,main_J2
cjne r2,#0,program_2
ajmp main
program_2:MOV A,R6
JNZ MAIN_J2
MOV A,R7
JNZ MAIN_J2 ;start program 00h-10h
clr p33
SETB p34
setb p35
setb p37
PRO_02: jnb ri,$
clr ri
mov a,sbuf
ACALL ASC2HEX
SWAP A
mov 30h,a
jnb ri,$
clr ri
mov a,sbuf
ACALL ASC2HEX
add a,30h
MOV B,A
MOV C,B.7
MOV ACC.0,C
MOV C,B.6
MOV ACC.1,C
MOV C,B.5
MOV ACC.2,C
MOV C,B.4
MOV ACC.3,C
MOV C,B.3
MOV ACC.4,C
MOV C,B.2
MOV ACC.5,C
MOV C,B.1
MOV ACC.6,C
MOV C,B.0
MOV ACC.7,C
mov p1,A
CLR P32 ;WRITE 1 BYTE
NOP
setb P32
SETB XTAL1 ;ADDR_+1
NOP
NOP
CLR XTAL1
NEXT: djnz r2,pro_02 ;1hang over
mov sbuf,#'>'
jnb ti,$
clr ti
;;
rev_again2: jnb ri,$
clr ri
mov a,sbuf
cjne a,#':',rev_again2
mov r2,#8
mov r0,#30h
rev_a12: jnb ri,$
clr ri
mov @r0,sbuf
inc r0
djnz r2,rev_a12
;;;
acall canshu2
mov a,37h ;program over?
cjne a,#30h,READ_EP_j2
cjne r2,#0,PRO_02
read_ep_j2:SETB P2.6
acall test_over
mov dptr,#over
acall senda
ajmp main
;AJMP READ_2051
read_2051:CLR P2.6 ;LED
SETB p3.4
clr xtal1
;mov dptr,#ok2051
read_22:;ACALL SENDA
SETB p3.5 ;5V
CLR p3.4
SETB P32
CLR P33
CLR P34
SETB P35
SETB P37
MOV p1,#0FFH
MOV dptr,#0
mov sbuf,#0dh
jnb ti,$
clr ti
mov sbuf,#0ah
jnb ti,$
clr ti
READ_20: mov r2,#16
acall send_s
read_16: mov c,p1.0
mov acc.7,c
mov c,p1.1
mov acc.6,c
mov c,p1.2
mov acc.5,c
mov c,p1.3
mov acc.4,c
anl a,#0f0h
mov 31h,a
swap a
ACALL SEND_HEX
mov c,p1.4
clr a
mov acc.3,c
mov c,p1.5
mov acc.2,c
mov c,p1.6
mov acc.1,c
mov c,p1.7
mov acc.0,c
mov 32h,a
add a,31h
add a,30h
mov 30h,a
mov a,32h
ACALL SEND_HEX
setb XTAL1
NOP
clr XTAL1
inc dptr
djnz r2,read_16
CLR A
CLR C
SUBB A,30H
MOV 30H,A
SWAP A
ANL A,#0FH
ACALL SEND_HEX
MOV A,30H
ANL A,#0FH
ACALL SEND_HEX
mov sbuf,#0dh
jnb ti,$
clr ti
mov sbuf,#0ah
jnb ti,$
clr ti
;;
jbc ri,read2_end
mov a,dpl
READ_E01:cjne a,#0h,read_20
mov a,dph
cjne a,#08h,read_20
AJMP READ_END2
read2_end: mov a,sbuf
cjne a,#1bh,read_e02
ajmp read2_end2
read_e02: cjne a,#00h,read_e01
READ2_END2: Mov dptr,#P_END
acall senda
MAIN_J3:SETB P2.6
ajmp main
read_eprom:JNB RI,$
CLR RI
MOV A,SBUF
CJNE A,#7FH,MAIN_J3
READ_EP: MOV p1,#0FFH
ACALL test_51
jb 01h,read_ep0
ljmp read_2051
read_ep0:
SETB RST
setb ale ;read51
clr p3.4 ;ea=5v
setb p3.5
clr p2.6
clr p2.7
setb p3.6
setb p3.7
mov dptr,#0
mov sbuf,#0dh
jnb ti,$
clr ti
mov sbuf,#0ah
jnb ti,$
clr ti
send_s0: acall send_s
send_1h0:mov r2,#16
send_1h:
mov a,dph
anl a,#00011111b
anl p2,#11100000b
orl p2,a
mov p0,dpl
mov p1,#0ffh
MOV A,p1
ADD A,30H
MOV 30H,A
MOV A,p1
swap a
anl a,#0fh
acall send_hex
mov a,p1
anl a,#0fh
acall send_hex
inc dptr
djnz r2,send_1h
CLR A
CLR C
SUBB A,30H
MOV 30H,A
SWAP A
ANL A,#0FH
ACALL SEND_HEX
MOV A,30H
ANL A,#0FH
ACALL SEND_HEX
mov sbuf,#0dh
jnb ti,$
clr ti
mov sbuf,#0ah
jnb ti,$
clr ti
mov a,dpl
jbc ri,read_end
READ_E1:cjne a,#0h,send_s_J
mov a,3fh
cjne a,#'1',read_e52
mov a,dph
cjne a,#010h,send_s_j ;51
ajmp read_end2
read_e52:mov a,dph
cjne a,#020h,send_s_J
AJMP READ_END2
read_end: mov a,sbuf
cjne a,#1bh,read_e2
ajmp read_end2
read_e2: cjne a,#00h,read_e1
READ_END2: Mov dptr,#P_END
acall senda
SETB P2.6
ajmp main
SEND_S_J: AJMP SEND_S0
send_s: mov 30h,#10h
MOV SBUF,#':'
JNB TI,$
CLR TI
MOV SBUF,#'1'
JNB TI,$
CLR TI
MOV SBUF,#'0'
JNB TI,$
CLR TI
MOV A,DPH
ADD A,30H
MOV 30H,A
mov a,dph
swap a
anl a,#0fh
acall send_hex
mov a,dph
anl a,#0fh
acall send_hex
MOV A,DPL
ADD A,30H
MOV 30H,A
mov a,dpl
swap a
anl a,#0fh
acall send_hex
mov a,dpl
anl a,#0fh
acall send_hex
mov sbuf,#'0'
jnb ti,$
clr ti
mov sbuf,#'0'
jnb ti,$
clr ti
ret
;;
send_byte:mov b,a
swap a
anl a,#0fh
acall send_hex
mov a,b
anl a,#0fh
acall send_hex
ret
send_hex: push dph
push dpl
mov dptr,#asc
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
pop dpl
pop dph
ret
asc: db "0123456789ABCDEF"
canshu:
mov a,30h ;ge shu
ACALL ASC2HEX
swap a
mov 30h,a
mov a,31h
ACALL ASC2HEX
add a,30h
mov r2,a
mov a,32h ;high address
ACALL ASC2HEX
swap a
mov 32h,a
mov a,33h
ACALL ASC2HEX
add a,32h
MOV R6,A
mov dph,a
mov a,34h ;low address
ACALL ASC2HEX
swap a
mov 34h,a
mov a,35h
ACALL ASC2HEX
add a,34h
MOV R7,A
mov dpl,a
ret
canshu2:
mov a,30h ;ge shu
ACALL ASC2HEX
swap a
mov 30h,a
mov a,31h
ACALL ASC2HEX
add a,30h
mov r2,a
mov a,32h ;high address
ACALL ASC2HEX
swap a
mov 32h,a
mov a,33h
ACALL ASC2HEX
add a,32h
MOV R6,A
mov a,34h ;low address
ACALL ASC2HEX
swap a
mov 34h,a
mov a,35h
ACALL ASC2HEX
add a,34h
MOV R7,A
ret
test_51: ;
MOV p1,#0FFH
SETB RST
setb ale ;read51
clr p3.4 ;ea=5v
setb p3.5
clr p2.6
clr p2.7
CLR P3.6
CLR P3.7
MOV P2,#0
MOV p0,#31H
MOV A,p1
SWAP A
ANL A,#0FH
CJNE A,#05H,PRO_2
SETB 01H
mov 3eh,#'5'
mov a,p1
anl a,#0fh
add a,#30h
mov 3fh,a
clr p2.5 ;K turn to 51
RET
PRO_2: clr p2.4 ;GND for 2051
CLR 01H ;01h=2051 or 51
setb p2.5 ;"K" to 2051
RET
back_help: mov dptr,#help
acall senda
RET
help: db 0dh,0ah,'XM 1.1 Copyright (c) 1999-2005 Nie Xiaomeng. --2000.6.1 ',0dh,0ah,'$'
test_over:setb p3.4 ;ea=0v ;test program is over?
setb p3.5
mov r3,#160 ;40ms
acall de_1
jbc ri,test_over
ret
delay_250us: MOV R2,#00H
DJNZ R2,$
RET
delay_2ms: mov r3,#8
de_1: acall delay_250us
djnz r3,de_1
ret
P_END: DB ':00000001FF$'
ok: db 0dh,0ah,'ok!',0dh,0ah,'$'
over: db 0dh,0ah,'program over!!!',0dh,0ah,'$'
error: db 0dh,0ah,0dh,0ah,"Sorry, There is no componet or I can't recognise.",0dh,0ah,'$'
senda: clr a ;发送字节子程序
movc a,@a+dptr
cjne a,#'$',senda_0
ret
senda_0:mov sbuf,a
JNB TI,$;
CLR TI ;
inc dptr
Ljmp senda
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -