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

📄 zcq6.asm

📁 一个大容量的FLASH存储器芯片的读写程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
flash_busy	bit	p1.3
flash_sclk	bit	p1.0
flash_se1	bit	p2.0
flash_sdi	bit	p1.1
flash_sdo	bit	p1.2
flash_se2	bit	p2.1
;*********************************
bit_datamove	bit	00h
bit_down_ok	bit	01h
bit_move_ok	bit	02h
bit_rbz	bit	03h
bit_start	bit	04h
bit_stop	bit	05h
bit_readep	bit	06h
bit_time	bit	07h
bit_cse	bit	08h
bit_cse1	bit	09h
bit_yy		bit	0ah
bit_first	bit	0ch
bit_source	bit	0dh
bit_zcwc	bit	0eh
bit_ok		bit	0fh
bit_ts		bit	10h
bit_jsbz	bit	11h
bit_tsbz	bit	12h
bit_tsbz1	bit	13h
;bit_ts		bit	14h
;**************************************
flash_rse	data	94h
flash_rmec	data	0a0h
flash_rmb	data	0a4h
flash_web	data	0a8h
flash_webc	data	0ach
flash_wbmep	data	0b0h
flash_rme	data	98h
;*********************************
rg_tt1		equ	2eh
rg_tt		equ	2fh
rg_delay	equ	30h
rg_jsq		equ	31h
rg_write_jsq	equ	32h
rg_flash_adrs	equ	33h
rg_flash_adrsl	equ	34h
rg_flash_adrsh	equ	35h
rg_read_jsq	equ	37h
rg_read_jsq1	equ	38h
rg_read_jsq2	equ	4fh
rg_cash	equ	39h
rg_address	equ	40h
rg_adress1	equ	41h
write_flash_adrs	equ	43h
write_flash_adrsl	equ	44h
write_flash_adrsh	equ	45h
write_flash_cash	equ	46h
write_flash_adrs1	equ	48h
write_flash_adrsl1	equ	49h
write_flash_adrsh1	equ	4ah
rg_flash_adrs1	equ	4bh
rg_flash_adrsl1	equ	4ch
rg_flash_adrsh1	equ	4dh
rg_flash_cash		equ	4eh
rg_sj		equ	50h
rg_sj_jsq	equ	53h
rg_delay1	equ	55h
rg_adrs_jsq	equ	57h
rg_adrs_jsq1	equ	58h
rg_adrs_jsq2	equ	59h
rg_adrs_cash	equ	5ah
rg_adrs	equ	5dh
rg_tssj	equ	5fh
rg_tssj1	equ	5eh 
rg_jsjsq	equ	60h
rg_delay2	equ	62h
RG_DELAY3	EQU	63H
rg_write_jsq1	equ	64h
;**********************************
rg_cssj	equ	80h
;*********************************
rg_sj1		equ	3dh
;*********************************
	org	0000h
	ljmp	main
	org	0003h
	ljmp	int0
	org	000bh
	ljmp	time0
	org	0013h
	ljmp	int1
	org	001bh
	reti
	org	0023h
	reti
	org	002bh
	reti
int0:
	push	acc
	setb	bit_start
	clr	bit_down_ok
	clr	bit_move_ok
	pop	acc
	reti
time0:
       PUSH   ACC                 ;
	PUSH   PSW                 ;
	PUSH	DPL
	PUSH	DPH
       MOV    TH0,#0FCH           ;定时1MS
       MOV    TL0,#66H            ;定时参数重新装入
       DJNZ   RG_DELAY,T0_RET    ;
       SETB   BIT_TIME          ;置采集数据超时
	ljmp	t0_ret1
T0_RET:
	jnb	bit_yy,	t0_ret1
	dec	rg_delay1
	mov	a,	rg_delay1
	jnz	t0_ret1
	mov	rg_delay1,	#00h
	DEC	RG_DELAY2
	MOV	A,	RG_DELAY2
	JNZ	T0_RET1
	clr	bit_yy
	setb	p1.5
	setb	p2.7
	setb	p2.3
	mov	p0,	#00h
	ljmp	t0_ret1
t0_ret1:	
	POP	DPH
	POP	DPL
  	POP    PSW                 ;
       POP    ACC                 ;
       RETI   
int1:	
	PUSH	ACC
	PUSH	PSW
	PUSH	DPL
	PUSH	DPH
	SETB	BIT_STOP
	POP	DPH
	POP	DPL
	POP	PSW
	POP	ACC
	RETI
;***********************************
clr_raml:
	mov	r0,	#20h
	mov	a,	#00h
clr_raml1:
	mov	@r0,	a
	inc	r0
	cjne	r0,	#60h,	clr_raml1
	ret
clr_ramh:
	mov	r0,	#80h
	clr	a
clr_ramh1:
	mov	@r0,	a
	inc	r0
	cjne	r0,	#0ffh,	clr_ramh1
	ret
delay15ms:
	mov	r7,	#0ffh
delay15ms1:
	mov	r6,	#18h
	djnz	r6,	$
	djnz	r7,	delay15ms1
	ret
delay5ms:
	mov	r7,	#08h
delay5ms1:
	mov	r6,	#0ffh
	djnz	r6,	$
	djnz	r7,	delay5ms1
	ret
cssj_cx:
	mov	a,	#0ddh
	mov	r0,	#rg_cssj 
	mov	@r0,	a
	mov	a,	#03h
	inc	r0
	mov	@r0,	a
	mov	a,	#04h
	inc	r0
	mov	@r0,	a
	mov	a,	#05h
	inc	r0
	mov	@r0,	a
	mov	a,	#06h
	inc	r0
	mov	@r0,	a
	mov	a,	#07h
	inc	r0
	mov	@r0,	a
	mov	a,	#08h
	inc	r0
	mov	@r0,	a
	mov	a,	#09h
	inc	r0
	mov	@r0,	a
	mov	a,	#0ah
	inc	r0
	mov	@r0,	a
	mov	a,	#0bh
	inc	r0
	mov	@r0,	a
	mov	a,	#0ch
	inc	r0
	mov	@r0,	a
	mov	a,	#0dh
	inc	r0
	mov	@r0,	a
	mov	a,	#0eh
	inc	r0
	mov	@r0,	a
	mov	a,	#0fh
	inc	r0
	mov	@r0,	a
	mov	a,	#01h
	inc	r0
	mov	@r0,	a
	mov	a,	#08h
	inc	r0
	mov	@r0,	a
	ret
;**************************************
main:
	mov	sp,	#65h
	clr	ea
	mov	p0,	#00h
	lcall	clr_raml
	lcall	clr_ramh
	SETB	P2.7
	setb	p1.5
	setb	p2.3
	MOV     TMOD,#01H
	MOV     TH0,#0FCH
	MOV     TL0,#66H
	SETB	TR0
	SETB	IT0
	CLR	TR2
	setb	et0
	CLR	ES
	mov	p0,	#00h
	SETB		RCLK
	SETB		TCLK
	MOV     TH2,	#0FFH          ;设波特率为9.6K
	MOV     TL2,	#0f4h		;          ;
	MOV     RCAP2H,#0FFH       ;
	MOV     RCAP2L,#0f4h		;DCH       ;
	MOV     T2CON,#30H   	;定时器2为波特率发生器,接收时钟允许
	MOV     SCON,#50H         ;REN=1,SM2=0,方式1
	MOV	PCON,	#00H
	SETB	TR2
	MOV	RG_DELAY,	#0FFH
	CLR	BIT_TIME
	clr	bit_datamove
	setb	ea
	setb	ex0
	setb	ex1
	clr	ri
	clr	ti
	clr	sm2
	setb	ren
	clr	tb8
	clr	rb8
	mov	rg_flash_adrs,	#10h
	mov	rg_flash_adrsl,	#00h
	mov	rg_flash_adrsh,	#00h
	mov	write_flash_adrs,	#00h
	mov	write_flash_adrsl,	#00h
	mov	write_flash_adrsh,	#00h
	mov	write_flash_adrs1,	#00h
	mov	write_flash_adrsl1,	#00h
	mov	write_flash_adrsh1,	#00h
	mov	rg_adrs_jsq,	#00h
	mov	rg_adrs_jsq1,	#00h
	mov	rg_adrs_jsq2,	#00h
	mov	rg_adress1,	#00h
	mov	rg_cash,	#01h
	clr	p2.0
	setb	p2.1
	mov	a,	#0feh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	lcall	delay15ms
	lcall	delay15ms
	clr	p2.1
	setb	p2.0
	mov	a,	#0feh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	mov	a,	#0ffh
	mov	r0,	#rg_sj1
	mov	@r0,	a
	lcall	write_mm36sb020_byte
	lcall	delay15ms
	lcall	delay15ms
	setb	p2.1
	clr	p2.0
	mov	r1,	#write_flash_adrs
	mov	rg_adress1,	#00h
	lcall	read_adress
;***********************************************************
	mov	r1,	#write_flash_adrs
	mov	a,	@r1
	mov	sbuf,	a
	jnb	ti,	$
	clr	ti
	inc	r1
	mov	a,	@r1
	mov	sbuf,	a
	jnb	ti,	$
	clr	ti
	inc	r1
	mov	a,	@r1
	mov	sbuf,	a
	jnb	ti,	$
	clr	ti
;***************************************************************
	mov	r0,	#write_flash_cash
	mov	a,	@r0
	mov	sbuf,	a
	jnb	ti,	$
	clr	ti
	cjne	a,	#01h,	start1
	ljmp	main1
start1:
	cjne	a,	#02h,	start2
	ljmp	main1
start2:
	mov	r1,	#rg_adrs_jsq			
	mov	a,	#00h
	mov	@r1,	a
	mov	a,	#01h
	inc	r1
	mov	@r1,	a
	clr	a
	inc	r1
	mov	@r1,	a
	inc	r1
	mov	a,	#01h
	mov	@r1,	a
	mov	r1,	#rg_adrs_jsq			
	mov	rg_address,	#00h
	lcall	write_address
    cpl	p2.2
 	ljmp	main1
start3:
	clr	p2.7
	clr	p2.3
	clr	p1.5
;	mov	a,	#3ch
;	mov	p0,	a
;	setb	bit_yy
	mov	rg_delay1,	#0ffh
	mov	rg_delay2,	#0Bh
	MOV	RG_DELAY3,	#0FFH
	ljmp	main1
;*************************************************
main1:
;  lcall	cssj_cx
 ; lcall	test_data
	setb	p2.0
	setb	p2.1
  ;cpl	p2.2
	mov	rg_write_jsq,	#00h
MAIN10:
	JB	P2.5,	MAIN2_a
	MOV	RG_DELAY,	#0C8H
	MOV	RG_JSQ,	#20H
	CLR	BIT_TIME
	CLR	ES
	SETB		RCLK
	SETB		TCLK
	MOV     TH2,	#0FFH          ;设波特率为9.6K
	MOV     TL2,	#0f4h			;DCH          ;
	MOV     RCAP2H,#0FFH       ;
	MOV     RCAP2L,#0f4h			;DCH       ;
	MOV     T2CON,#30H   	;定时器2为波特率发生器,接收时钟允许
	MOV     SCON,#50H         ;REN=1,SM2=0,方式1
	MOV	PCON,	#00H
	SETB	TR2
	clr	bit_move_ok
	setb	p2.1
	setb	p2.0
;*******************************************************
main11a:
	jb	bit_move_ok,	write_data0a
	clr	p2.0
	mov	r1,	#write_flash_adrs
	mov	rg_adress1,	#00h
	lcall	read_adress
	setb	p2.0
	mov	r0,	#write_flash_adrs
	mov	a,	@r0
	mov	rg_adrs_jsq,	a
	inc	r0
	mov	a,	@r0
	mov	rg_adrs_jsq1,	a
	inc	r0
	mov	a,	@r0
	mov	rg_adrs_jsq2,	a
	inc	r0
	mov	a,	@r0
	mov	rg_cash,	a
	cjne	a,	#01h,	adress_cash
	ljmp	write_cash1
adress_cash:
	cjne	a,	#02h,	adress_cash1
	mov	r1,	#write_flash_adrs
	inc	r1
	inc	r1
	mov	a,	@r1
	xrl	a,	#08h
	jz	start3
	setb	bit_cse
	ljmp	write_cash2
adress_cash1:
	ljmp	main11a
write_cash1:
	clr	p2.0
	setb	p2.1
	mov	rg_cash,	#01h
	ljmp	write_data0a
write_cash2:
	clr	p2.1
	setb	p2.0
	mov	rg_cash,	#02h
	ljmp	write_data0a
write_data0a:
	jb	bit_start,	main11
	ljmp	main10
main2_a:
	ljmp	main2
main11_a:
	ljmp	main10
main11:
;****************************************************************
	jb	bit_move_ok,	main11_a
	clr	es
	mov	a,	#0aeh
	mov	sbuf,	a
	jnb	ti,	$
	clr	ti
	clr	ri
	mov	rg_delay,	#0ffh
	clr	bit_time
main12:
	jb	bit_stop,	main14
	jnb	ri,	$
	clr	ri
	mov	a,	sbuf
	mov	r2,	a
	xrl	a,	#0aeh
	jnz	main12
	jnb	ri,	$
	clr	ri
	mov	a,	sbuf
;	mov	a,	r2
	mov	rg_sj,	a
	lcall	write_data
	setb	p2.0
	setb	p2.1
	clr	bit_time
	mov	rg_delay,	#05h
	jb	bit_zcwc,	main130
	ljmp	main12
main13:
	jnb	bit_time,	main12
main130:
	clr	p2.7
	clr	p1.5
	clr	p2.3
;	mov	a,	#3ch
;	mov	p0,	a
;	setb	bit_yy
	mov	rg_delay1,	#0ffh
	mov	rg_delay2,	#0Bh
	MOV	RG_DELAY3,	#0FFH
MAIN131:
	setb	bit_move_ok
	clr	bit_time
	clr	bit_start
	clr	bit_zcwc
	setb	p2.2
	ljmp	main10
main14:
	clr	bit_start
	ljmp	main131
;**************************************************
main2a:
	ljmp	main10
main2b:
	ljmp	main3
main2:
	clr	bit_move_ok
	clr	bit_stop
	jb	bit_down_ok,	main23_a
	jb	p2.6,	main2b
  	CLR	ES
  	SETB		RCLK
  	SETB		TCLK
 	MOV     TH2,	#0FFH          ;设波特率为9.6K
  	MOV     TL2,	#0f4H          ;
 	MOV     RCAP2H,#0FFH       ;
  	MOV     RCAP2L,#0f4H       ;
  	MOV     T2CON,#30H   	;定时器2为波特率发生器,接收时钟允许
  	MOV     SCON,#50H         ;REN=1,SM2=0,方式1
  	MOV	PCON,	#00H
  	SETB	TR2
	jnb	bit_start,	main2a
	mov	rg_delay,	#20h
	clr	bit_time
main2c:
	jnb	p2.5,	main3
	jnb	ri,	main2c
	clr	ri
	clr	ti
	mov	a,	sbuf
	mov	r2,	a

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -