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

xc8 是否不支持EEPROM库函数?

[复制链接]
5070|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
armxu|  楼主 | 2015-11-23 12:59 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
环境:MAPLAB X 3.15
今天头一回使用eeprom_read()和eeprom_write()向PIC18F4620单片机读写数据,但死活无法向EEPROM写数据也读不到数据。用自己编写的读写程序倒是可以成功读写。
不知道是否XC 8的不支持EEPROM函数的操作。另外MPLAB® XC8 C 编译器用户指南里也没有相关EEPROM的库函数。
请高手指点?
沙发
liurongbin1111| | 2016-4-5 10:57 | 只看该作者
XC8 未实现
2.5.9.4 注意事项
对于所有 PIC18 器件, XC8 均未实现 __eeprom 限定符;对于其他 8 位器件,该限定
符将按预期工作。

使用特权

评论回复
板凳
QQ826220679| | 2016-4-5 11:29 | 只看该作者
我用XC8  V1.33 可以成功写入PIC12F683、1822和 16F1823、1825、1829、1847、1786、1787、1789及18F4550、46K80等等,并没有楼主说的问题啊!

使用特权

评论回复
地板
Scofieldct| | 2016-4-24 17:49 | 只看该作者
QQ826220679 发表于 2016-4-5 11:29
我用XC8  V1.33 可以成功写入PIC12F683、1822和 16F1823、1825、1829、1847、1786、1787、1789及18F4550、4 ...

直接用库函数可以吗?我试了下用库函数也是不行,用自己写的函数就可以

使用特权

评论回复
5
txf2012| | 2016-5-2 16:51 | 只看该作者
我也遇到了,应该是不可以

使用特权

评论回复
6
zhanzr21| | 2016-5-7 00:18 | 只看该作者
有庫函數的

使用特权

评论回复
7
zhanzr21| | 2016-5-7 00:20 | 只看该作者
我是xc8 1.37 上面是安裝目錄中的文件 看到他有實現 至於具體沒有作用可能跟你實驗方法有關

使用特权

评论回复
8
zhanzr21| | 2016-5-7 00:22 | 只看该作者
liurongbin1111 发表于 2016-4-5 10:57
XC8 未实现
2.5.9.4 注意事项
对于所有 PIC18 器件, XC8 均未实现 __eeprom 限定符;对于其他 8 位器件, ...

這個說的EEPROM變量直接声明 跟樓主說的EEPROM讀寫函數不是一件事情

使用特权

评论回复
9
dogglove| | 2016-5-7 16:50 | 只看该作者
做PIC18f是用自己编的读写EEPRM程序。

使用特权

评论回复
10
黑洞不黑| | 2016-10-19 10:46 | 只看该作者
我自己写的读写程序,写入EEPROM数据,复位后读出来的怎么是0?

使用特权

评论回复
11
黑洞不黑| | 2016-11-16 11:03 | 只看该作者
unsigned char EEPROM_read(unsigned char addr)
{
    unsigned char temp;
    EEADR=addr;//写入地址
    EEPGD=0;//bit6=0,访问数据存储器
    CFGS=0;//bit7=0,访问存储器
    EECON1bits.RD=1;//启动读操作
    GIE=0;//禁止总中断
    //while(RD);//等待读取完成
    temp=EEDATA;//读取数据
    GIE=1;//打开总中断
    return temp;
}
void EEPROM_write(unsigned char addr,unsigned char data)
{
    EEADR=addr;//写入地址
    EEDATA=data;//写入数据
    EEPGD=0;//bit6=0,访问数据存储器
    CFGS=0;//bit7=0,访问存储器
    GIE=0;//关闭总中断
    WREN=1;//使能写操作
    EECON2=0x55;//必要时序
    NOP();
    EECON2=0xAA;//必要时序
    NOP();
    EECON1bits.WR=1;//启动写操作
    while(EECON1bits.WR==1);//等待写操作完成
    GIE=1;//打开总中断
    WREN=0;//禁止写操作
    EEDATA=0;
}
这段代码有问题吗?读出来的一直是出厂默认值,写不进去

使用特权

评论回复
12
252tp| | 2018-7-13 15:30 | 只看该作者
QQ826220679 发表于 2016-4-5 11:29
我用XC8  V1.33 可以成功写入PIC12F683、1822和 16F1823、1825、1829、1847、1786、1787、1789及18F4550、4 ...

你好!能发一个**版的XC8 V1.33给我吗?邮箱416775364@qq.com

使用特权

评论回复
13
QQ826220679| | 2019-2-16 22:23 | 只看该作者
刚看到,呵呵~

使用特权

评论回复
14
yuyhyty6| | 2019-2-17 16:02 | 只看该作者
可以进去看下XC8的库是怎么写的。

使用特权

评论回复
15
CoolSilicon| | 2019-2-18 08:45 | 只看该作者
直接看dataSheet的FLASH/E2PROM的章节,  有读写访问的例子的, 搞清原理, 照葫芦画瓢也很容易...

使用特权

评论回复
16
systemchip| | 2019-2-18 09:58 | 只看该作者
之前有一个帖子已经说过了,那两个nop去掉,另外用MCC更方便

使用特权

评论回复
17
xixi2017| | 2019-2-18 22:29 | 只看该作者
你能找到带这个的头文件?

使用特权

评论回复
18
oxygenzz| | 2019-2-19 13:40 | 只看该作者
本帖最后由 oxygenzz 于 2019-2-19 13:41 编辑

在MPLAP X 打开代码工程,双击选定函数名,然后Ctrl + Shift + A, 可以定位到该函数的头文件
也可以通过右键菜单,Navigate -> Go to Header

使用特权

评论回复
19
QQ826220679| | 2020-1-21 14:36 | 只看该作者
对于PIC18f26K22相似芯片,内部有1024字节EEPROM,只有XC8 1.34及以前例如1.33版本能用eeprom_read(addr),及eeprom_write(addr,dat),能读写EEPROM ,并且能读写至1023地址。

其他版本XC8,如1.36,1.37,1.38,经实验不能读写,特此留下记录。

使用特权

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

本版积分规则

25

主题

105

帖子

1

粉丝