- 注册时间
- 2004-8-28
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2004-12-31 13:39:00
|
显示全部楼层
现在我们开始编写程序,需要注意的是,擦除闪存的程序必须在RAM执行,而不能在闪存里被执行
先说明擦除闪存的步骤:
1.设置中断标志 即 SEI
2.保护地址00 0A 0D的内容,地址0A的内容的最高位为0
3.把擦除的闪存的页码送地址00,以切换到擦除的闪存的页码
4.开始 擦除闪存的代码
5.把立即数 30 送擦除闪存的块头地址,例如 若是01闪存块,块头地址是 4000,若是02闪存块,块头地址4800
6.恢复地址 00 0A 0D 的内容
7.取消中断标志 即 CLI
程序如下:
2000:SEI
2001DA $00
2003HA
2004DA $0A
2006HA
2007DA $0D
2009HA
200A:LDA $0A
200C:AND #$7F
200E:STA $0A
2010:LDA #$06 //把擦除闪存块所在页码数送地址00,以切换到闪存块所在页码
2012:STA $00
2014:LDA #$F0 //下面的代码就是擦除闪存的代码,是不能变的,大家也别问为什么是这样的代码,照抄就是!!!
2016:STA $8000
2019:LDA #$AA
201B:STA $5555
201E:LDA #$55
2020:STA $AAAA
2023:LDA #$80
2025:STA $5555
2028:LDA #$AA
202A:STA $5555
202D:LDA #$55
202F:STA $AAAA
2032:LDA #$30 //这里是很关键的一步,把立即数30送要擦除的闪存块的块头地址 这里是第1块,所以是 4000,第2块就是4800,类推!
2034:STA $4000
2037:LDA $8000 //这段代码是固定的,大家照抄!!
203A:AND #$88
203C:CMP #$88
203E:BNE $2037 //注意,这里是变化的,因为代码开始执行地址是不同的,不要这个也照抄,那就完了!!反正是跳转到 LDA $8000 那个地址
2040:LDA #$F0
2042:STA $8000
2045:CLI //取消中断标志,也是必须的
2046:PLA //下面就是恢复被保护的地址的内容了
2047:STA $0D
2049:PLA
204A:STA $0A
204C:PLA
204D:STA $00
204F:RTS
|
|