[51单片机] C8051F850的Flash读写问题

[复制链接]
1499|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的配置工具自动生成初始化代码,有如下两个函数:
  1. void Reset_Source_Init()
  2. {
  3.     RSTSRC = 0x06;
  4. }
  5. void Comparator_Reset_Init()
  6. {
  7.     RSTSRC = 0x00;
  8. }

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

2. 写入数据的指针signed char xdata * ptr_flash_wr需要定义在xdata,定义在data区貌似没有写入成功,原因不明,欢迎指教。
ningling_21 发表于 2016-5-18 09:06 | 显示全部楼层
tovax 发表于 2016-5-18 08:47
问题解决,两个地方需要注意:

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

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

操作FLASH 类似外部RAM,指针肯定必须定义到XDATA 区
 楼主| tovax 发表于 2016-5-18 09:08 | 显示全部楼层
yhn1973 发表于 2016-5-18 08:42
写Flash时要关中断

基本的操作步骤是按官方的建议来的
 楼主| tovax 发表于 2016-5-18 09:11 | 显示全部楼层
ningling_21 发表于 2016-5-18 09:06
对比这两个芯片的规格书了? 

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

两个芯片对Flash的操作没什么明显的差别,一步一步来应该没什么问题,主要还是细节没注意到。
谢谢你对xdata问题的回复,希望能对后来的朋友们有帮助。
gbbfbaa 发表于 2016-5-18 10:06 | 显示全部楼层
pic16f883和pic16f886居然还有异域兄弟,送分送分啊
https://bbs.21ic.com/forum.php?mo ... &fromuid=877646
(出处: 21ic电子技术论坛)
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区了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| tovax 发表于 2016-5-18 18:44 | 显示全部楼层
tianhaolan 发表于 2016-5-18 17:02
要写FLASH肯定不能用data指定,用code指定会报错,所以slicon要求写FLASH的时候用xdata指定(对用MOVX指 ...

十分感谢你的回复,解释的很清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

25

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部