📄 test.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 + -