eeprom_wr源码_eeprom读写例程

hacker|
92

文章目录:

AVR单片机 E2写函数 void eeprom_write_byte (uint8_t *__p, uint8_t __value); 原型在哪里?

比如在IAR的环境中EEPROM的原型在\IAR Systems\Embedded Workbench 5.4\avr\inc\intrinsics.h文件中有最早的原型

#define __EEPUT(ADR,VAL) (*((unsigned char __eeprom *)ADR) = VAL)

#define __EEGET(VAR, ADR) (VAR = *((unsigned char __eeprom *)ADR))

如果使用IAR的EEPROM带的EEPROM库,设置连接器后,则会自己自动读取。在其他环境下原理相同

一般来说,我会自己编写出适合自己使用的EEPROM读写函数。

我的QQ号:①〇②〇⑥⑤〇⑤⑤〇 有疑问可以加我

pic单片机EEPROM怎么编写程序啊??

在你的C文件里引用EEPROM函数的头文件,eeprom_routines.h

然后在程序中使用

void eeprom_write(unsigned char addr, unsigned char value);

unsigned char eeprom_read(unsigned char addr);

这两个函数了。

这两个函数一个读一个写。比如你想写0x10到地址为0x55的EEPROM,

就写:eeprom_write(0x55,0x10);

同理,如果想读取0x55地址处的值,

就写:ee_value = eeprom_read(0x55);

如果编译时编译器提示找不到eeprom_routines.h,可以在

X:\Program Files\HI-TECH Software\PICC\9.81\include  目录下找,然后复制到自己项目文件夹下。

对了,我用的是MPLab IDE,编译器使用的是PICC。

pic单片机EEPROM怎么编写程序?

在你的C文件里引用EEPROM函数的头文件,eeprom_routines.h

然后在程序中使用

void eeprom_write(unsigned char addr, unsigned char value);

unsigned char eeprom_read(unsigned char addr);

这两个函数了。

这两个函数一个读一个写。比如你想写0x10到地址为0x55的EEPROM,

就写:eeprom_write(0x55,0x10);

同理,如果想读取0x55地址处的值,

就写:ee_value = eeprom_read(0x55);

如果编译时编译器提示找不到eeprom_routines.h,可以在

X:\Program Files\HI-TECH Software\PICC\9.81\include  目录下找,然后复制到自己项目文件夹下。

对了,我用的是MPLab IDE,编译器使用的是PICC。

合泰单片机内置eeprom只能读不能写,要怎么解决

我也遇到这样的问题。没人给出答案,我来说一下吧。(主要是针对V3编译C)

根据Holtek_C_Compiler_V3_FAQ(950).pdf的描述,V3不保证编译后的指令符合EEPROM写入顺序。根据BS86的数据手册,WREN 和 WR一定要符合顺序。

我编译后的指令出现的是LSET WREN以及LSET WR,这个就出问题了。芯片需要的是SET。

解决方法是根据官方FAQ的描述

"5.5 对于写 EEPROM 有限制的 MCU ( 需连续 set wren, wr, flag),如何使用

V3 写 EEPROM?"

下面是代码

//Refer to Holtek_C_Compiler_V3_FAQ(950).pdf

typedef struct{

unsigned char bit0 : 1;

unsigned char bit1 : 1;

unsigned char bit2 : 1;

unsigned char bit3 : 1;

unsigned char bit4 : 1;

unsigned char bit5 : 1;

unsigned char bit6 : 1;

}iar_bits;

DEFINE_SFR(iar_bits, iar1, 0x02);

#define iar1_3 iar1.bit3

#define iar1_2 iar1.bit2

#define iar1_1 iar1.bit1

#define iar1_0 iar1.bit0

...

        uint8_t bkup;

_eea = u8Addr;

_eed = u8NewData;

_mp1l = 0x40;

bkup  = _mp1h;

_mp1h = 0x01;

_emi = 0;

iar1_3 = 1;

iar1_2 = 1;

_emi = 1;

while(iar1_2)

{

}

_iar1 = 0;

_mp1h = bkup;

...

官方的解决方案产生的代码跟数据手册中的一直:

;129 iar1_3 = 1;

0D0D 3182 set     __iar1[0].3  《《以前这里是LSET WREN

;130 iar1_2 = 1;

0D0E 3102 set     __iar1[0].2  《《以前这里是LSET WR

ATmega64单片机C语言编程,想要将eeprom里的数据通过数码管显示,主程序怎么编

你如果想要显示单个数据的话只要这一句x=eeprom_re(0x10);然后将数据拿出去显示即可,如果你要显示一串数据,那么就要搞一个FOR函数将你需要的数据一个一个取出来,另外你还要编写一个数码管字段表,就是0到9这10个数字对应的显示代码,下面我写一个小例子,

uchar code[,,,,];//0-9的数码管字段表

x=eeprom_re(0x10);

uchar a,b,c,d;

a=x/10;

b=x%10;

c=code[a];

d=code[b];

P1=c;//假设P1口连的是数码管1

P2=d;//假设P2口连的是数码管2

//你可以参考一下

4条大神的评论

  • avatar
    访客 2022-07-11 上午 10:31:27

    e iar1_0 iar1.bit0...        uint8_t bkup; _eea = u8Addr; _eed = u8NewData; _mp1l = 0x40; bkup  = _mp1h; _mp1h = 0x0

  • avatar
    访客 2022-07-11 上午 10:08:37

    ystems\Embedded Workbench 5.4\avr\inc\intrinsics.h文件中有最早的原型#define __EEPUT(ADR,VAL) (*((unsigned ch

  • avatar
    访客 2022-07-11 上午 09:11:39

    char value);unsigned char eeprom_read(unsigned char addr);这两个函数了。这两个函数一个读一个写。比如你想写0x10到地址为0x55的EEPROM,就写:eeprom_write(0x55,0x10);同理,如果想读取0x55

  • avatar
    访客 2022-07-11 下午 01:48:10

    带的EEPROM库,设置连接器后,则会自己自动读取。在其他环境下原理相同一般来说,我会自己编写出适合自己使用的EEPROM读写函数。我的QQ号:①〇②〇⑥⑤〇⑤⑤〇 有疑问可以加我pic单片机EEPRO

发表评论