打印
[PIC®/AVR®/dsPIC®产品]

【分享】PIC16F1503读写flash所有函数

[复制链接]
7858|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
也在本站找过这个资源,没有合适的,后来自己做项目用到这个资源,自己写了下,看到还有朋友在找这个,特地传上来共享。

pic16f1503_flash.rar (1.95 KB)

沙发
xlhtracy| | 2015-6-15 14:03 | 只看该作者
  感谢分享

使用特权

评论回复
板凳
kenche| | 2015-7-20 17:33 | 只看该作者
好用,感谢。
但是想知道如何分配一个烧写时不会使用的地址?还是说,只要我分配了,烧写程序一定不会改写我分配的地址? 不懂求教。

使用特权

评论回复
地板
wangtao478552|  楼主 | 2015-7-24 16:25 | 只看该作者
kenche 发表于 2015-7-20 17:33
好用,感谢。
但是想知道如何分配一个烧写时不会使用的地址?还是说,只要我分配了,烧写程序一定不会改写 ...

只能根据编译完程序得到程序大小自己计算,像MPLAB X 编译完下面会出现用了多少FLASH

使用特权

评论回复
5
wangtao478552|  楼主 | 2015-7-24 21:19 | 只看该作者
本帖最后由 wangtao478552 于 2015-7-24 21:37 编辑

回复错了帖子抱歉

使用特权

评论回复
6
wangtao478552|  楼主 | 2015-7-24 21:40 | 只看该作者
caosix 发表于 2015-7-24 19:06
恩 ,,谢谢 分享 。。。谢谢。。。

我 最近 重新刚入门 PIC单片机,,想请问:

我的建议是首先看看你要用的芯片支持FLASH自编程吗,至于代码是否可以直接移植,可以对照二者手册看看寄存器。最简单的办法是,新建一个你要的芯片的工程,直接调用的的代码,如果寄存器名不同MPLAB X会报错,然后看手册,改寄存器名,同系列的芯片都可以这样移植。

使用特权

评论回复
7
kenche| | 2015-7-29 11:13 | 只看该作者
wangtao478552 发表于 2015-7-24 16:25
只能根据编译完程序得到程序大小自己计算,像MPLAB X 编译完下面会出现用了多少FLASH ...

烧写有时会在FLASH末尾一段地址写入内容,所以我先烧写再用MPLAB读出FLASH,看中间哪部分没使用,再改程序中写FLASH地址,很是蛋疼,但是貌似没好的方法
另外我发现换了片子程序是要小改的。我之前用16f720没问题,换了721容量大的片子怎么弄都不对。。。看你写的代码才发现高地址判断7FF,改下就好了,借了你的东西也算是学习了一遍
刚入行,感觉还是太菜,需要学的东西很多:lol

使用特权

评论回复
8
Antecer| | 2016-1-9 20:31 | 只看该作者
本帖最后由 Antecer 于 2016-1-9 20:40 编辑

关于放置固定的数据位置并且不被编译器使用的方法应该这样就行了,反正把数据存储在最后的位置应该就安全了:
#define NV_MEM_SIZE 32                              //保留的空间大小
extern const UINT8 NVMEM[NV_MEM_SIZE];
#define NV_ADDRESS (0x2000U - NV_MEM_SIZE)          //指定位置放置保留空间
const UINT8 NVMEM[NV_MEM_SIZE]@NV_ADDRESS = {
    0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b,
    0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13,
    0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b,
    0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23
};

使用特权

评论回复
9
Antecer| | 2016-1-9 20:40 | 只看该作者
你好,我用PIC16F1455编写了读写flash的函数,然而读取没问题,擦除和写入都无法成功。

在这里看到了你的代码,我又下载了你的读写函数测试了下,然而还是出现相同的问题,可以读但不能写。

使用特权

评论回复
10
wangtao478552|  楼主 | 2016-1-18 11:38 | 只看该作者
Antecer 发表于 2016-1-9 20:40
你好,我用PIC16F1455编写了读写flash的函数,然而读取没问题,擦除和写入都无法成功。

在这里看到了你的 ...

不同型号可能寄存器有一定出入,我找下手册看看

使用特权

评论回复
11
Antecer| | 2016-5-6 14:14 | 只看该作者
wangtao478552 发表于 2016-1-18 11:38
不同型号可能寄存器有一定出入,我找下手册看看

问题已经解决了,是pic批次问题出现的bug,还有就是IDE并不能实时监控flash的读写,只能自己写个程序把这个改变的状态体现出来。

使用特权

评论回复
12
zhanzr21| | 2016-5-7 00:26 | 只看该作者
kenche 发表于 2015-7-20 17:33
好用,感谢。
但是想知道如何分配一个烧写时不会使用的地址?还是说,只要我分配了,烧写程序一定不会改写 ...

可以用 __at(0x1000)這種關鍵字

也可以生成hex後 看hex用到多少地址 再重新手工分配, 這種比較麻煩一點, 但是節省也靈活

使用特权

评论回复
13
jjjkkk00| | 2017-4-12 13:52 | 只看该作者
down下学习,刚入手microchip的菜鸟一枚,需求大量学习资料。
赞分享!

使用特权

评论回复
14
wei309571460| | 2017-12-26 19:52 | 只看该作者
楼主在吗,我的FLASH程序为什么一直卡循环了,
void main()
{
    init();
    INT16U L7_NOW_state = 0x0000;
    INT16U L7_state = 0x0000;
    while(1)
    {
         L7_state = 0x0001;//
         FlashWriteWordEraseRow(0x07f0,L7_state);
         delay(1);
        // L7_NOW_state=FlashReadWord(0x07f0);
         L7_NOW_state = flash_read(0x07f0);
         if( L7_NOW_state == 0x0000)
         {
          RC3=~RC3;
          RC5=0;
          delay(10);
          }
         else
          {
          RC5=~RC5;
          RC3=0;
          delay(10);
          }
    }
}

执行这一步就不往下走了,不知道为什么

使用特权

评论回复
15
wei309571460| | 2017-12-26 19:55 | 只看该作者
wei309571460 发表于 2017-12-26 19:52
楼主在吗,我的FLASH程序为什么一直卡循环了,
void main()
{

执行到 FlashWriteWordEraseRow(0x07f0,L7_state); 这一步就卡主了 可是并没有循环

使用特权

评论回复
评论
WUZHIXIONG23 2018-1-19 10:14 回复TA
我也遇到相同的问题,我用的芯片是pic16lf1507,大神解决没? 
16
zbcaich| | 2018-1-7 20:53 | 只看该作者
如附图,在ROM range后面指定要空出来的空间,编译器就不会在这个空间内放置任何数据了

定位空.png (45.5 KB )

定位空.png

使用特权

评论回复
17
xuanchenzhu| | 2018-4-2 10:07 | 只看该作者
感谢楼主分享

使用特权

评论回复
18
JLennon| | 2018-4-2 10:23 | 只看该作者
讨论很热烈,帮顶。

使用特权

评论回复
19
yhy08090| | 2019-7-3 10:02 | 只看该作者
看了楼主的文件,我有点困惑:
我看到写数据的时候,最大是0x3fff就是11位数据, 因为空间有限,我希望全部填满
那么对于16进制的 0x9988  0xfeed, 这样的数据怎么存放才能充分利用有限的空间?

使用特权

评论回复
20
lcczg| | 2019-7-3 15:54 | 只看该作者
yhy08090 发表于 2019-7-3 10:02
看了楼主的文件,我有点困惑:
我看到写数据的时候,最大是0x3fff就是11位数据, 因为空间有限,我希望全部 ...

程序空间一个word是14位。如果要存放16位的数据的话,写入前和读取后应该要做下处理。

使用特权

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

本版积分规则

10

主题

115

帖子

4

粉丝