打印
[51单片机]

C8051F850的Flash读写问题

[复制链接]
946|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tovax|  楼主 | 2016-5-17 20:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
之前用的比较多的是c8051f330, c8051f310等,最近用了c8051f850,据说是和f330完全兼容的。
于是去复制了f330的读写flash代码,用在了两个项目上。
项目A一些正常,项目B完全没有操作到flash一样。
考虑是不是项目B的板子有问题,就用手头的c8051f850的最小系统板验证一下,仿真发现读写Flash的地址处完全没有反应。。。
纠结,同样的MCU,同样的代码,为什么出现了不同的状况呢?
求助过往的大神指点一下,谢谢!

相关帖子

沙发
lyjian| | 2016-5-17 20:27 | 只看该作者
没什么好纠结的,自己好好看看规格书找差异

使用特权

评论回复
板凳
yhn1973| | 2016-5-18 08:42 | 只看该作者
写Flash时要关中断

使用特权

评论回复
地板
tovax|  楼主 | 2016-5-18 08:47 | 只看该作者
问题解决,两个地方需要注意:

1. C8051的配置工具自动生成初始化代码,有如下两个函数:
void Reset_Source_Init()
{
    RSTSRC = 0x06;
}
void Comparator_Reset_Init()
{
    RSTSRC = 0x00;
}

生成的代码先调用了Reset_Source_Init,导致Comparator_Reset_Init之后RSTSRC被清零。
这一点在之前都吃过亏,这次又浪费时间了。

2. 写入数据的指针signed char xdata * ptr_flash_wr需要定义在xdata,定义在data区貌似没有写入成功,原因不明,欢迎指教。

使用特权

评论回复
5
ningling_21| | 2016-5-18 09:06 | 只看该作者
tovax 发表于 2016-5-18 08:47
问题解决,两个地方需要注意:

1. C8051的配置工具自动生成初始化代码,有如下两个函数:

对比这两个芯片的规格书了? 

操作FLASH 类似外部RAM,指针肯定必须定义到XDATA 区

使用特权

评论回复
6
tovax|  楼主 | 2016-5-18 09:08 | 只看该作者
yhn1973 发表于 2016-5-18 08:42
写Flash时要关中断

基本的操作步骤是按官方的建议来的

使用特权

评论回复
7
tovax|  楼主 | 2016-5-18 09:11 | 只看该作者
ningling_21 发表于 2016-5-18 09:06
对比这两个芯片的规格书了? 

操作FLASH 类似外部RAM,指针肯定必须定义到XDATA 区 ...

两个芯片对Flash的操作没什么明显的差别,一步一步来应该没什么问题,主要还是细节没注意到。
谢谢你对xdata问题的回复,希望能对后来的朋友们有帮助。

使用特权

评论回复
8
gbbfbaa| | 2016-5-18 10:06 | 只看该作者
pic16f883和pic16f886居然还有异域兄弟,送分送分啊
https://bbs.21ic.com/forum.php?mo ... &fromuid=877646
(出处: 21ic电子技术论坛)

使用特权

评论回复
9
tianhaolan| | 2016-5-18 17:02 | 只看该作者
本帖最后由 tianhaolan 于 2016-5-18 17:04 编辑
tovax 发表于 2016-5-18 08:47
问题解决,两个地方需要注意:

1. C8051的配置工具自动生成初始化代码,有如下两个函数:



要写FLASH肯定不能用data指定,用code指定会报错,所以slicon要求写FLASH的时候用xdata指定(对用MOVX指令)。
data是指向数据区的,xdata在设置了相应的寄存器位之后就会指向code区了。

使用特权

评论回复
10
tovax|  楼主 | 2016-5-18 18:44 | 只看该作者
tianhaolan 发表于 2016-5-18 17:02
要写FLASH肯定不能用data指定,用code指定会报错,所以slicon要求写FLASH的时候用xdata指定(对用MOVX指 ...

十分感谢你的回复,解释的很清楚

使用特权

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

本版积分规则

6

主题

25

帖子

0

粉丝