打印
[C语言]

求解,关于C8051闪存擦除的问题

[复制链接]
2052|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
入门小生|  楼主 | 2015-12-28 09:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C8051, TE, AD, rc, RS
用的的C8051F310,程序如下,很简单的一个檫除问题。
#include<c8051f310.h>
#include <stdio.h>
unsigned char a;
bit c;
char EA_SAVE;
void FLASH_PageErase(unsigned int addr);
void FLASH_ByteWrite(unsigned int addr,char byte);
unsigned char FLASH_ByteRead(unsigned int addr);

void main()
{
char b=5;
PCA0MD &= ~0x40;
FLASH_PageErase(0);
        while(1)
                {
       
                a = FLASH_ByteRead(0);
                        if (a == 0)
                                {
                               
                                        FLASH_ByteWrite(0,b);
                                }
                        c=RSTSRC^6;
                        P2 = FLASH_ByteRead(0);
                }
               
}
//擦除
void FLASH_PageErase(unsigned int addr)
        {
                bit EA_SAVE=EA;
                char xdata*data pwrite;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                EA=0;
                pwrite=(char xdata*)addr;
                FLKEY=0xA5;
                FLKEY=0xF1;
                PSCTL|=0x03;
                *pwrite=0;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                PSCTL&=~0x03;
                EA=EA_SAVE;
        }
//写入
void FLASH_ByteWrite(unsigned int addr,char byt)
        {
                bit EA_SAVE=EA;
                char xdata*data pwrite;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                EA=0;
                pwrite=(char xdata*)addr;
                FLKEY=0xA5;
                FLKEY=0xF1;
                PSCTL|=0x01;
                *pwrite=byt;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                PSCTL&=~0x01;
                EA=EA_SAVE;
        }
//读取
unsigned char FLASH_ByteRead(unsigned int addr)
        {
                bit EA_SAVE=EA;
                char code*data pread;
                unsigned char byte;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                EA=0;
                pread=(char code*)addr;
                byte =*pread;
                RSTSRC=0x00;
                VDM0CN=0x80;
                RSTSRC=0x02;
                EA=EA_SAVE;
                return byte;
        }

相关帖子

沙发
入门小生|  楼主 | 2015-12-28 09:50 | 只看该作者
是程序有错了吗?实现不了 始终不能往里面存东西,也就判断不了读取是否成功了。。各位帮帮忙

使用特权

评论回复
板凳
入门小生|  楼主 | 2015-12-28 09:52 | 只看该作者
调试过程中 一执行到查处功能 机器代码一直就是mov R7,A

使用特权

评论回复
来自iphone 5s
地板
入门小生|  楼主 | 2015-12-28 10:06 | 只看该作者
就是这样的

112123.png (309.97 KB )

112123.png

使用特权

评论回复
5
ywlzh| | 2015-12-28 10:21 | 只看该作者
你去官网上找一下89C51的pdf文档,有例程有讲解,我记得我以前是用的EEPROM,不是flash,"预擦除必先写1",还有你说的是不是写进去了,你可以在程序开始的时候读你断电前写进去的东西并显示来

使用特权

评论回复
6
gaoxueyan| | 2015-12-28 11:17 | 只看该作者
你为什么只擦FLASH地址为0的地方呢?有些地方时不能擦的,你操作倒数第二个扇区试试,而且注意电源复位

使用特权

评论回复
7
入门小生|  楼主 | 2015-12-28 12:01 | 只看该作者
gaoxueyan 发表于 2015-12-28 11:17
你为什么只擦FLASH地址为0的地方呢?有些地方时不能擦的,你操作倒数第二个扇区试试,而且注意电源复位 ...

不行,错误复位了,我擦除了地址3BFE的 ,返回的是FF,还有我发现一个问题我写0地址的时候 为什么返回值是0呢? 也没有复位 难道被锁存了?

使用特权

评论回复
8
ff8zgs| | 2015-12-28 12:05 | 只看该作者
第一 你擦除的地址不对,你擦除了第一个扇区 知道第一个扇区都是干嘛的吗 ,有mcu启动代码,中断向量等等 ,不应该擦除 这个扇区,找个其他扇区,然后flah擦除后 读取出来应该是 0xff  所以这里又有问题。flah操作代码没有问题 ,是 你处理不对 ,多看看datasheet

使用特权

评论回复
9
tjlwl| | 2015-12-28 12:56 | 只看该作者
要定义你擦除的地址,在该地址上擦除,写入,读取

使用特权

评论回复
10
入门小生|  楼主 | 2015-12-28 13:01 | 只看该作者
ff8zgs 发表于 2015-12-28 12:05
第一 你擦除的地址不对,你擦除了第一个扇区 知道第一个扇区都是干嘛的吗 ,有mcu启动代码,中断向量等等  ...

谢谢呀 我去改改试试

使用特权

评论回复
11
入门小生|  楼主 | 2015-12-28 13:02 | 只看该作者
tjlwl 发表于 2015-12-28 12:56
要定义你擦除的地址,在该地址上擦除,写入,读取

这个定义了的呀

使用特权

评论回复
12
入门小生|  楼主 | 2015-12-28 13:49 | 只看该作者
我把地址改了。 返回的数一直都是FF

使用特权

评论回复
来自iphone 5s
13
入门小生|  楼主 | 2015-12-28 13:53 | 只看该作者
为什么复位的标志位一开始就是置1的

使用特权

评论回复
来自iphone 5s
14
ningling_21| | 2015-12-28 15:27 | 只看该作者
入门小生 发表于 2015-12-28 13:53
为什么复位的标志位一开始就是置1的

不同的复位源 会产生不同的复位寄存器的值

使用特权

评论回复
15
入门小生|  楼主 | 2015-12-28 15:49 | 只看该作者
谢谢大家的耐心指导,现在flash基本没有问题了。

使用特权

评论回复
来自iphone 5s
16
xbyu520| | 2015-12-28 21:38 | 只看该作者
透露你一个秘密,其实有个官方文档里写的好好的,复制过来就行

使用特权

评论回复
17
gaoxueyan| | 2015-12-29 11:41 | 只看该作者
好了就好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

30

帖子

1

粉丝