?? m25p10-copy.asm
字號:
;***************************************************************
; Program Serial Flash 25P10 by reading 29010 ROM
;***************************************************************
;
; P3.0 DATA
; P3.1 CLK
; P3.2 Q
; P3.3 25P10 CS\
; P3.4 LED
; P3.5 7407 (Relay)
; P3.6 A16
; P3.7 29010 CS\
;
;===============================================================
.RAMCHK OFF
.SYMBOLS
.CHIP 8051
;===============================================================
PORT0 EQU 080H ; PORT 0 D00-D07
PORT1 EQU 090H ; PORT 1 A00-A07
PORT2 EQU 0A0H ; PORT 2 A08-A15
PORT3 EQU 0B0H ; PORT 3 Control Pins
TEMP EQU 010H
LOOP1 EQU 011H
LOOP2 EQU 012H
INDEX1 EQU 013H
INDEX2 EQU 014H
;===============================================================
ORG 000H
JMP START
ORG 040H
START:
NOP
CLR EA ; DISABLE ALL INTERRUPT
;===============================================================
INIT_PORT:
MOV PORT0, #FFH ; INPUT
MOV PORT1, #00H ; ROM Address 0000H
MOV PORT2, #00H ;
;===============================================================
SF_INIT:
SETB PORT3.0 ; 25P10 D input
SETB PORT3.1 ; 25P10 CLK High
SETB PORT3.2 ; 25P10 Q input
SETB PORT3.3 ; 25P10 CS\ High
CLR PORT3.4 ; LED OFF
CLR PORT3.6 ; A16 == 0
CLR PORT3.7 ; 29010 CS\ High
CALL RELAY_SYS
CALL DELAY
CALL DELAY
;===============================================================
ROM_Detect:
MOV A, PORT0
MOV TEMP, A
MOV A, PORT0
CLR C
SUBB A, TEMP
JZ ROM_Detect
;------------------------
SETB PORT3.4 ; LED ON
;===============================================================
SF_ERASE_START:
CALL RELAY_8051
CALL DELAY
CALL DELAY
CALL DELAY
;------------------------
SF_ERASE:
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #06H ; WREN
CALL WRITE_SF
SETB PORT3.3 ; 25P10 CS\ High
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #01H ; WRSR
CALL WRITE_SF
MOV A, #00H ; WRSR BP0,1 = 0
CALL WRITE_SF
SETB PORT3.3 ; 25P10 CS\ High
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #06H ; WREN
CALL WRITE_SF
SETB PORT3.3 ; 25P10 CS\ High
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #C7H ; Bulk Erase
CALL WRITE_SF
SETB PORT3.3 ; 25P10 CS\ High
CALL ACK_SF
SF_ERASE_END:
CLR PORT3.4 ; LED OFF
CALL DELAY
CALL DELAY
CALL DELAY
;===============================================================
; KEY
;===============================================================
ROM_Detect_END:
MOV R1, #00H
MOV R2, #00H
MOV A, PORT0
MOV TEMP, A
ROM_Detect_LOOP:
MOV A, PORT0
CLR C
SUBB A, TEMP
JNZ ROM_Detect_END
DJNZ R1, ROM_Detect_LOOP
DJNZ R2, ROM_Detect_LOOP
CALL DELAY
CALL DELAY
SETB PORT3.4 ; LED ON
;===============================================================
SF_PGM:
SF_PGM_INIT:
MOV PORT1,#00H ; Address 0000H
MOV PORT2,#00H
CLR PORT3.6 ; A16 == 0
SF_PGM_256:
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #06H ; WREN
CALL WRITE_SF
SETB PORT3.3 ; 25P10 CS\ High
;------------------------
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #02H ; Page Program
CALL WRITE_SF
MOV A, #00H ; Address 23-16
MOV C, PORT3.6
RLC A
CALL WRITE_SF
MOV A, PORT2 ; Address 15-8
CALL WRITE_SF
MOV A, PORT1 ; Address 7-0
CALL WRITE_SF
SF_PGM_LOOP:
CLR PORT3.7 ; 29010 CS\ Low
MOV A, PORT0 ; Read from 29010
MOV A, PORT0 ; Read from 29010
SETB PORT3.7 ; 29010 CS\ High
CALL WRITE_SF
MOV A, PORT1
INC A
MOV PORT1, A
JNZ SF_PGM_LOOP
SF_PGM_CYCLE_END:
SETB PORT3.3 ; 25P10 CS\ High
CALL ACK_SF
SF_PGM_LED:
MOV C, PORT2.2 ; A10
MOV PORT3.4, C ; Toggle LED
SF_PGM_A15_A08:
MOV A, PORT2
INC A
MOV PORT2, A
JNZ SF_PGM_256
SF_PGM_A16:
MOV C, PORT3.6
MOV A, #00H
RLC A
JNZ SF_DONE
SETB PORT3.6 ; A16 == 1
JMP SF_PGM_256
;===============================================================
SF_DONE:
CALL DLY
CLR PORT3.4 ; LED OFF
CALL RELAY_SYS
CALL DELAY
CALL DELAY
JMP START
;***************************************************************
; Function Calls
;***************************************************************
RELAY_8051:
SETB PORT3.5 ; 7407 output High
RET
;===============================================================
RELAY_SYS:
CLR PORT3.5 ; 7407 output Low
RET
;===============================================================
WRITE_SF:
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 7
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 6
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 5
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 4
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 3
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 2
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 1
CLR PORT3.1 ; DCLK Low
RLC A
MOV PORT3.0, C
SETB PORT3.1 ; DCLK High 0
CLR PORT3.1 ; DCLK Low
RET
;===============================================================
READ_SF:
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 7
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 6
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 5
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 4
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 3
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 2
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 1
CLR PORT3.1 ; DCLK Low
MOV C,PORT3.2
RLC A
SETB PORT3.1 ; DCLK High 0
CLR PORT3.1 ; DCLK Low
RET
;===============================================================
ACK_SF:
CLR PORT3.3 ; 25P10 CS\ Low
MOV A, #05H ; RDSR
CALL WRITE_SF
ACK_SF_LOOP:
CALL READ_SF
JB A.0, ACK_SF_LOOP
SETB PORT3.3 ; 25P10 CS\ High
RET
;===============================================================
DLY: ; DELAY 500us @ 10MHz
MOV R1, #00H
MOV R2, #01H
JMP DELAY_LOOP
DELAY: ; DELAY 150ms @ 10MHz
MOV R1, #00H
MOV R2, #00H
DELAY_LOOP:
DJNZ R1, $
DJNZ R2, DELAY_LOOP
RET
;===============================================================
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -