搜索
bottom↓
回复: 9

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

[复制链接]

出0入0汤圆

发表于 2011-5-15 18:57:04 | 显示全部楼层 |阅读模式
请教高手怎样将PIC30F6014的EEPROM一个字或字节读出?C语言  请高手帮忙!

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 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 [W1],[W2]");
}

#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 [W2],[W1]");
        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;
}

出0入0汤圆

发表于 2011-5-30 19:17:42 | 显示全部楼层
楼主能否留个联系方式,我也正好要用PIC30F6014,想向你请教请教

出0入0汤圆

 楼主| 发表于 2011-6-2 21:24:27 | 显示全部楼层
在论坛也可以交流啊!有什么问题说出来大家共同学习!

出0入0汤圆

发表于 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是按是不是要把地址分为一个高字节和一个低字节啊。

出0入0汤圆

发表于 2011-9-13 15:34:17 | 显示全部楼层
呵呵我也是德阳,还请楼主帮忙。

出0入0汤圆

发表于 2011-9-13 15:47:43 | 显示全部楼层
如果 我想在0X7FF005地址里写入9,然后再读出来,应该怎么掉用楼主的程序呢,请楼主赐教。

出0入0汤圆

 楼主| 发表于 2011-10-10 19:31:18 | 显示全部楼层
WriteEEP(高16位地址,低16位地址,这应该是变量地址(如&value)) ;

出0入0汤圆

发表于 2011-10-10 20:09:22 | 显示全部楼层
用汇编为提高效率吗? 最好用C编译器来读写,时间成本效益更高些。

出0入0汤圆

发表于 2018-5-9 11:28:12 | 显示全部楼层
能否读写一字节?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 08:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表