lizihui 发表于 2011-5-15 18:57:04

请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言

请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言请高手帮忙!

lizihui 发表于 2011-5-16 19:54:31

问题解决了,我把我的程序贴出来,希望能帮到有需要的人。也希望高手们多多支持我们!

/****************************************************************************************/
//读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;
}

gxy508 发表于 2011-5-30 19:17:42

楼主能否留个联系方式,我也正好要用PIC30F6014,想向你请教请教

lizihui 发表于 2011-6-2 21:24:27

在论坛也可以交流啊!有什么问题说出来大家共同学习!

motingwei 发表于 2011-9-13 15:33:45

楼主我把你的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是按是不是要把地址分为一个高字节和一个低字节啊。

motingwei 发表于 2011-9-13 15:34:17

呵呵我也是德阳,还请楼主帮忙。

motingwei 发表于 2011-9-13 15:47:43

如果 我想在0X7FF005地址里写入9,然后再读出来,应该怎么掉用楼主的程序呢,请楼主赐教。

lizihui 发表于 2011-10-10 19:31:18

WriteEEP(高16位地址,低16位地址,这应该是变量地址(如&value)) ;

Friendz 发表于 2011-10-10 20:09:22

用汇编为提高效率吗? 最好用C编译器来读写,时间成本效益更高些。

reynold007 发表于 2018-5-9 11:28:12

能否读写一字节?
页: [1]
查看完整版本: 请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言