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

📄 test.asm

📁 在工作过程中用到SST39系列的FLASH.就写了这个FLASH测试软件,对于初次接触FLASH的人有很大帮助.文件中有详细的说明.
💻 ASM
字号:
/*********************************************************************************
**版权信息  
**工程名称  39VF080FLASH的读写测试
**工程描述  
**文件名称  主文件
**文件描述  
**编译环境  Keil C51
**硬件信息  
**创建人
**创建日期  2007-8-8
**版本信息  V1.0
**版本描述  初始版本
**修改记录  无
**说明:
;测试39VF080的读写,只有一个芯片.
功能为将数据写入FLASH后,读出再发往PC串口,看是否正确.
在使用时最好连接电脑串口观看数据.
用5V单片机连FLASH时,不要加电阻,直接相连也可以.这是我们在工程中使用了好久的做法,一直没有问题.呵呵.
*********************************************************************************/


$include (stc89c52rc.inc)
;$include (sst39vf.inc)
;$include(MACRO.inc)

ERRTIMES	EQU 2000

	bseg	at	00h
csflash		bit p3.5	


	dseg	at 	23h
t0count:	ds 1		;延时单位:1毫秒
t0count_1:	ds 1
t0countx:	ds 1
t0count_1s:	ds 1
errtime:	ds 2
t1s:		ds 2
sector	:	ds 1
stack:		ds 1
	xseg		at	0000h		
dbuf:		ds	100

	cseg	at	0000h
	sjmp	start
start:
	clr	ea

	mov	p1,#80h
	mov	sp,#stack-1
	mov	psw,#0
	mov	r0,#7fh
	clr	a
	mov	@r0,a
	djnz	r0,$-1
	mov	tmod,#20h		;只打开串口
	mov	th1,#0FAh
	mov	tl1,#0FAh
	mov	scon,#50h
	mov	pcon,#00h
	setb	tr1
	setb	ea
	mov	auxr,#02

	setb	csflash
	mov	a,#09h
	mov	dptr,#0000h
	movx	@dptr,a
	inc	dptr
	mov	a,#08h
	movx	@dptr,a

sendtest:
	setb	csflash
	clr	a
	mov	dptr,#0000h
	movx	a,@dptr
	mov	sbuf,a
	jnb	ti,$
	clr	ti

	mov	dptr,#0001h
	movx	a,@dptr
	mov	sbuf,a
	jnb	ti,$
	clr	ti
;	delay100ms	5
	sjmp	sendtest

	mov	p1,#00h			;FLASH芯片的高位全为低
	clr	csflash			;低选中FLASH
	lcall	ReadFlashID		;读ID,这里可以读出为080
	lcall	easesectorallchip	;擦除整个芯片
;	delay100ms	19
	;------------------------------------------------
	;写数据过程,写2byte,数据为:88,99
	mov	dptr,#0	
	mov	r6,#255	
	mov	r7,#1
	mov	p1,#00h
W_lp:
	clr	csflash
	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#0a0h

	mov	a,#88h
	mov	dptr,#00h
	movx	@dptr,a	;写1byte数据到FLASH
	movx	a,@dptr
	anl	a,#40h
	mov	r5,a
	movx	a,@dptr
	anl	a,#40h
	xch	a,r5
	xrl	a,r5
	jnz	$-5



	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#0a0h

	mov	a,#99h
	mov	dptr,#01h
	movx	@dptr,a;写1byte数据到FLASH
	movx	a,@dptr
	anl	a,#40h
	mov	r5,a
	movx	a,@dptr
	anl	a,#40h
	xch	a,r5
	xrl	a,r5
	jnz	$-5

	;------------------------------------------------
	;读0-255个字节出来发往PC
readflash:
	clr	csflash
	clr	a
	mov	p1,#00h
	mov	r6,#255
	mov	dptr,#0
	clr	a
	movx	a,@dptr
	mov	sbuf,a
	jnb	ti,$
	clr	ti
	inc	dptr
	djnz	r6,$ -10
	ljmp	start
;=============================================================
;读器件号
ReadFlashID:
	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#90h
	movx	@dptr,a
	mov	dptr,#1
	movx	a,@dptr
	mov	r7,a
	mov	a,#0f0h
	movx	@dptr,a
	mov	a,r7
	ret

;============================================================
;擦除一个扇区,r7,r6入口扇区地址
easesector:
	anl	p1,#00h

	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#80h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	
	mov	dph,r7		;将地址赋值到DPTR		
	mov	dpl,r6
	mov	a,#30h
	movx	@dptr,a		

	movx	a,@dptr
	anl	a,#40h
	mov	r7,a
	movx	a,@dptr
	anl	a,#40h
	xch	a,r7
	xrl	a,r7
	jnz	$-5
	ret

;擦除整个芯片
easesectorallchip:
	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#80h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#0aah
	movx	@dptr,a
	mov	dptr,#2aaah
	mov	a,#55h
	movx	@dptr,a
	mov	dptr,#5555h
	mov	a,#10h
	movx	@dptr,a

	movx	a,@dptr
	anl	a,#40h
	mov	r7,a
	movx	a,@dptr
	anl	a,#40h
	xch	a,r7
	xrl	a,r7
	jnz	$-5

	ret
;=====================================================================================


delay:
	mov	r6,a
	mov	r7,#250
	nop
	nop
	djnz	r7,$ - 2
	djnz	r6,$ - 6
	ret
;==================================================

	end

⌨️ 快捷键说明

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