
keil c51 访问单片机XRAM
我用的是ADI的ADUC848,他有2KB的FLASH/EEPROM的非易失性数据区,我想要知道在KEIL中如何才能访问?我的意思就是单片机在一次使用中,计算出来一次数据...
我用的是ADI的ADUC848,他有2KB的FLASH/EEPROM 的非易失性数据区,我想要知道在KEIL中如何才能访问?
我的意思就是单片机在一次使用中,计算出来一次数据,掉电再复电,这个数据仍然能保存下来。。。。。 展开
我的意思就是单片机在一次使用中,计算出来一次数据,掉电再复电,这个数据仍然能保存下来。。。。。 展开
1个回答
展开全部
那你选STC的51单片机,其内部都带EEPROM,不需要扩展外部FLASH,至少也有1K两个扇区的空间供你使用,可保你数据部丢失。
追问
有EEPROM,我只是问怎么访问。。。。。
追答
//给你一个例程参考吧,程序较大,去掉了一些无关的,
#include
#define uint8 unsigned char
#define uint16 unsigned int
#define const code
#define HIGH 1
#define LOW 0
#define F_READ 0x01 //读取页
#define F_WRITE 0x02 //写入页
#define F_VERIFY 0x04 //检测页
#define F_ERASE 0x05 //擦除页
#define F_ERASEALL 0x06 //全部擦除
//flash/eeprom读一个字节数据
uint8 Flash_Read_Byte1(uint8 Address)
{
uint8 c;
EADRH=0x00;
EADRL=Address;
ECON=F_READ;
c=EDATA1;
return c;
}
uint8 Flash_Read_Byte2(uint8 Address)
{
uint8 c;
EADRH=0x00;
EADRL=Address;
ECON=F_READ;
c=EDATA2;
return c;
}
uint8 Flash_Read_Byte3(uint8 Address)
{
uint8 c;
EADRH=0x00;
EADRL=Address;
ECON=F_READ;
c=EDATA3;
return c;
}
uint8 Flash_Read_Byte4(uint8 Address)
{
uint8 c;
EADRH=0x00;
EADRL=Address;
ECON=F_READ;
c=EDATA4;
return c;
}
//flash/eeprom读一个字数据
uint16 Flash_Read_Word(uint8 Address)
{
uint8 a,b;
uint16 c;
EADRH=0x00;
EADRL=Address;
ECON=F_READ;
a=EDATA1;
b=EDATA2;
c=b|((a<<8)|0x0000);
return c;
}
//flash/eeprom写一个字节数据
void Flash_Write_Byte(uint8 Address,uint8 Date)
{
EADRH=0x00;
EADRL=Address;
ECON=F_ERASE;
EADRH=0x00;
EADRL=Address;
EDATA1=Date;
ECON=F_WRITE;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询