请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言
请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言请高手帮忙! 问题解决了,我把我的程序贴出来,希望能帮到有需要的人。也希望高手们多多支持我们!/****************************************************************************************/
//读EEP函数
//每次读一个EEP数据
//无返回
/****************************************************************************************/
void ReadEEP(register int source_address,register int offset_address,int *dest_array)
{
TBLPAG=source_address;
asm("TBLRDL ,");
}
#define EE_WRITE_WORD_CODE 0x4004
#define EE_ERASE_WORD_CODE 0x4044
/****************************************************************************************/
//写EEP函数
//每次写一个EEP数据
//无返回
/****************************************************************************************/
void WriteEEP(register int source_address,register int offset_address,int *dest_array)
{
TBLPAG=source_address;
asm("TBLWTL ,");
NVMCON=EE_WRITE_WORD_CODE;
CLI();//关中断宏
NVMKEY=0x55;
NVMKEY=0xAA;
NVMCONbits.WR=1;
SEI();//开中断宏
while(NVMCONbits.WR==1);
NVMCONbits.WREN=0;
}
/****************************************************************************************/
//擦除EEP函数
//擦除一个EEP数据
//无返回
/****************************************************************************************/
void EraseEEP(register int source_address,register int offset_address)
{
NVMADRU=source_address;
NVMADR=offset_address;
NVMCON=EE_ERASE_WORD_CODE;
CLI();
NVMKEY=0x55;
NVMKEY=0xAA;
NVMCONbits.WR=1;
SEI();
while(NVMCONbits.WR==1);
NVMCONbits.WREN=0;
} 楼主能否留个联系方式,我也正好要用PIC30F6014,想向你请教请教 在论坛也可以交流啊!有什么问题说出来大家共同学习! 楼主我把你的CLI,SEL替换为// 初始化系统
void DIS_INTRRUPT()
{
SRbits.IPL = 7; // 关闭所有可屏蔽中断
}
void EN_INTRRUPT()
{
SRbits.IPL = 0; // 关闭所有可屏蔽中断
}
然后在主程序里
if (EEPROM_MARK==5)
{
EEPROM_MARK=9;
CORCONbits.PSV = 1;
ReadEEP(1,1,readtesteeprom);
}
else if (EEPROM_MARK==6)
{
EEPROM_MARK=10;
EraseEEP(1,1);
WriteEEP(1,1,writetesteeprom) ;
}
掉用,怎么读到的数据不对啊,请问一下楼主能不能讲一下register int source_address和register int offset_address地址究竟是怎么配合来指向一人固定地址,我看了半天也没有看个所以然,有的说6014的EEPROM是按页寻址,有的说又不是,真不知道是怎么回事,EEPROM的起始地址为0X7FF00已经超过16位了,请问register int source_address和register int offset_address是按是不是要把地址分为一个高字节和一个低字节啊。 呵呵我也是德阳,还请楼主帮忙。 如果 我想在0X7FF005地址里写入9,然后再读出来,应该怎么掉用楼主的程序呢,请楼主赐教。 WriteEEP(高16位地址,低16位地址,这应该是变量地址(如&value)) ; 用汇编为提高效率吗? 最好用C编译器来读写,时间成本效益更高些。 能否读写一字节?
页:
[1]