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

📄 pro51.asm

📁 51自制编译器。本资料免费提供
💻 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 + -