AVR单片机 E2写函数 void eeprom_write_byte (uint8_t *__p, uint8_t __value); 原型在哪里?
答案:2 悬赏:60 手机版
解决时间 2021-04-08 09:28
- 提问者网友:愿为果
- 2021-04-07 12:10
AVR单片机 E2写函数 void eeprom_write_byte (uint8_t *__p, uint8_t __value); 原型在哪里?
最佳答案
- 五星知识达人网友:你哪知我潦倒为你
- 2021-04-07 12:24
比如在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号:①〇②〇⑥⑤〇⑤⑤〇 有疑问可以加我追问Atmel studio 6.0 在哪里?追答并不在Atmel studio 6.0里面,需要安装WINAVR才可以在Atmel studio 6.0里面调用。在 \WinAVR-20090313\avr\include\avr\eeprom.h 文件里面定义EEPROM的相关。属于库函数吧,使用汇编完成的。追问
在eeprom.h
这个文件中,并没有这个函数是怎么完成E2的写操作的?
#define __EEPUT(ADR,VAL) (*((unsigned char __eeprom *)ADR) = VAL)
#define __EEGET(VAR, ADR) (VAR = *((unsigned char __eeprom *)ADR))
如果使用IAR的EEPROM带的EEPROM库,设置连接器后,则会自己自动读取。在其他环境下原理相同
一般来说,我会自己编写出适合自己使用的EEPROM读写函数。
我的QQ号:①〇②〇⑥⑤〇⑤⑤〇 有疑问可以加我追问Atmel studio 6.0 在哪里?追答并不在Atmel studio 6.0里面,需要安装WINAVR才可以在Atmel studio 6.0里面调用。在 \WinAVR-20090313\avr\include\avr\eeprom.h 文件里面定义EEPROM的相关。属于库函数吧,使用汇编完成的。追问
在eeprom.h
这个文件中,并没有这个函数是怎么完成E2的写操作的?
全部回答
- 1楼网友:像个废品
- 2021-04-07 13:22
\icc\libsrc.avr\libsrc.zip 中,密码是ICCAVR追问Atmel studio 6.0 在哪里?追答这个安装ICCAVR编译器就有,不用Atmel studio 6.0 ,Atmel studio 6.0的配置要求太高,一般机器运行很慢的!追问
我现在用的WINAVR,和Atmel studio 6.0一样,函数在eeprom.h中声明了,但是没有写具体是怎么实现的?
追答int EEPROMwrite( int location, unsigned char byte)
{
unsigned char oldSREG;
EEAR = location;
EEDR = byte;
oldSREG = SREG;
SREG &= ~0x80;// disable interrupt
EECR |= 0x04; // Set MASTER WRITE enable
EECR |= 0x02; // Set WRITE strobe
while (EECR & 0x02); // Wait until write is done
SREG = oldSREG;
return 0; // return Success.
// Could be expanded so that
// the routine checks that the address
// is within the range of the chip.
}
unsigned char EEPROMread( int location)
{
EEAR = location;
EECR |= 0x01; // Set READ strobe
return (EEDR); // Return byte
}
//以上是ICCAVR中的应用,可能只有寄存器定义不同,你可以参考!
我现在用的WINAVR,和Atmel studio 6.0一样,函数在eeprom.h中声明了,但是没有写具体是怎么实现的?
追答int EEPROMwrite( int location, unsigned char byte)
{
unsigned char oldSREG;
EEAR = location;
EEDR = byte;
oldSREG = SREG;
SREG &= ~0x80;// disable interrupt
EECR |= 0x04; // Set MASTER WRITE enable
EECR |= 0x02; // Set WRITE strobe
while (EECR & 0x02); // Wait until write is done
SREG = oldSREG;
return 0; // return Success.
// Could be expanded so that
// the routine checks that the address
// is within the range of the chip.
}
unsigned char EEPROMread( int location)
{
EEAR = location;
EECR |= 0x01; // Set READ strobe
return (EEDR); // Return byte
}
//以上是ICCAVR中的应用,可能只有寄存器定义不同,你可以参考!
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯