原创 PIC24F MCU内部的EEPROM操作

2013-1-15 14:51 2087 14 18 分类: 消费电子

这两天一直在纠结PIC24F单片机内部的EEPROM操作,现在终于算得上有了一定的了解,现将其写下供大家参考和指出相关的问题。

 
PIC24F单片机内部有256字的内存(不同的型号可能不同),它的寻址方式是字寻址,当每读写一个字后,它的地址指针好像跟外部的EEPROM有所不同,不会自动的增加,需要人为的对地址指针进行增加或减小,不过同样有数据覆盖的特点。
 
目前,我还没有找到完全用C代码读写EEPROM的方法,用的是行内汇编和编译器自带的函数,其实对EEPROM的操作也不是很难,就是当初没有这方面的概念,对于内部的EEPROM的读写,编译器其实就已经给我们提供了两个函数。就是在帮助文件中漫无思想的寻找很纠结。首先介绍几个概念,表读指令TBLRD,表写指令TBLWT,几个内建函数 __builtin_tblpage_  __builtin_tbloffset_ ......这些函数涉及到汇编的知识,帮助文件中有详细的说明,大家可以自己去看看。
 
这是编译器自带的读EEPROM操作,是用宏定义做的 #define eedata_read(src, offset, dest) {  \
  register int eedata_addr;               \
  register int eedata_val;                \
                                          \
  eedata_addr = __builtin_tbloffset(&src)+offset; \
  __asm__("tblrdl [%1], %0" : "=r"(eedata_val) : "r"(eedata_addr)); \
  dest = eedata_val;                      \
  }
 
大家可能很郁闷,为什么不用函数呢?确实用函数做不是会更明了吗,后来我试了一下改写成函数的形式,发现表页地址不能当做参数来进行传递,否则编译器会报错,大家可以自己去尝试一下,具体的我也不是很明白,这个读操作找了我好久呀!
写操作部分比较简单 
uint16 __attribute__((space(eedata))) user_data[2];
 _prog_addressT p;
  _init_prog_address(p, user_data); 
 _write_eedata_word(p, 0xxxxx);  
  _wait_eedata();
 
首先要在内部的EEPROM区域得到一个待写入数据的地址。写操作函数的二个参数依次为写入的地址,待写入的值,之后还有一个等待指令,用来查看操作是否已经完成,这里面的操作都有关于单片机内部存储器的,所以有点晕。还有在读写一个字节后,地址指针要移动两个单位,因为它是按照字寻址方式的。
 
现在算是对内部的EEPROM有了一定的了解,不过还有很多的地方并没有搞明白,暂时先写这么多吧!
 

文章评论4条评论)

登录后参与讨论

用户1602177 2013-2-18 14:31

您提交信息以后,收到成功通知了吗?还是其它情况?

用户1610239 2013-1-16 10:36

学习了,谢谢分享

huhaomcu_856934054 2013-1-15 20:06

小编 为什么我订的电子工程专辑的杂志总是不跟我发啊?

用户1602177 2013-1-15 15:01

既是很详细的学习笔记,也是很好的分享!多谢博主!
相关推荐阅读
huhaomcu_856934054 2014-08-19 20:54
uCOS-Ⅱ
启动uCOS-Ⅱ的学习与移植!...
huhaomcu_856934054 2014-07-20 10:08
多通道电路原理图
简单说说关于Protel中提供的多通道原理绘制与PCB布局布线. Protel(不知99SE是否可以)有提供多通道电路原理图的设计,这项功能在有些方面还是很有用处的,比如说:当部分原理图在一张图...
huhaomcu_856934054 2014-04-07 09:10
IAR制作工程模板
我个人学习新的MCU过程一般会是如下过程,建立一个个的DEMO工程,每个DEMO工程学习一个外设,所以每个DEMO程序都很简单,但是在建立一个个DEMO程序的过程中,会发现开始的步骤基本上就是相同...
huhaomcu_856934054 2014-03-14 18:06
新公司与老公司的比较
在新公司上了几天班真心有点想念以前的老公司了! 下面来比较比较新公司与老公司吧: 1.业务量。新公司的项目更多,人员更多,涉及的面也较广,整体的技术水平要大大强于以前的老公司。以前老公司里...
huhaomcu_856934054 2014-02-24 15:01
辞职了!
辞职了,但愿柳暗花明又一村!!...
huhaomcu_856934054 2014-02-21 09:22
回来啦!
之前因为身体原因一直在家休息,直到今天才来武汉上班。但愿今年个人的工作能有所上升!...
我要评论
4
14
关闭 站长推荐上一条 /2 下一条