?? 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 + -