当前位置:首页 > 单片机 > 单片机
[导读]unsigned char eeprom_read(unsigned char addr);void eeprom_write(unsigned char addr, unsigned char value);这两个函数是PIC内部函数,可以直接调用;-----------------------------以下内容是baidu空间的一位博

unsigned char eeprom_read(unsigned char addr);void eeprom_write(unsigned char addr, unsigned char value);这两个函数是PIC内部函数,可以直接调用;

-----------------------------以下内容是baidu空间的一位博主写的-------http://hi.baidu.com/wxg923/item/17d65d23942ea9fd50fd8788---------

-上周在做一个项目时,需要对测试数据实时的保存,以被重新上电后读取.采用了PIC的内部EEPROM,正常读取时没有什么问题.反复上电掉电就出现了EEPROM被清0(改写).

查阅相关资料:EEROM写过程包括两个阶段:先擦除(电压为20V) 再写入(电压18V);EEPROM在写入过程中如果电压不稳定,很容易导致错误.先使用了软件冗余法,同一个data写在连续3个地址,使用时比较,只有2个相同时才使用.这样做,反复上电掉电出错几率小了很多,但是还是会出错.在反复上电100多次时还是出错.另一个解决办法就是使能BOD,写EEPROM时,先检测BOD.网上一位兄弟使用此方法反复上电2000多次才错误一次.

上述方法有两个致命缺陷:1.EEPROM寿命短,EEPROM按最低10万次算,我的项目每2s写一次EEPROM,连续使用2周后EEPROM就可能寿命以尽.2还是有错误,没有100%正确.

解决方案:使用掉电检测,如果成本许可还可以使用法拉电容.


电源电压掉电时,产生一个INT信号,PIC进入外部中断程序:首先将IO清零以降低电流损耗,此时利用电容C1的放电时间将要保存的数据写入EEPROM.470uF D型钽电容可供PIC工作20ms左右,足够写8bety EEPROM.

---------------------以下内容是我实验内容--------摘自博客园的--“业精于勤,荒于嬉;行成于思,毁于随---------

/******************************************
******PIC16F877A 内部EEPROM读写实验*******
Author:hnrain
Date:2010-12-25
Version:V0.1
Email:hnrain1004@gmail.com
Forum:http://bbs.cepark.com
_______________________________
实验现象:先给内部EEPROM的0~7字节写数据1~8,再读出第0字节的
内容,并判断读出来的数据是不是1,如果是1则点亮RD0口的LED。

重点内容:
内部EEPROM的操作主要通过4个寄存器
EECON1,EECON2,EEDATA,EEADR

EEDATA寄存器存放8位读写数据
EEADR存放EEPROM被访问过的地址

EECON1寄存器定义:
bit7:5 未用;读为0
bit4 EEIF:EEPROM写操作中断标志位
1 = 写操作完成(必须软件清零)
0 = 写操作未完成或还未开始
bit3 WRERR:EEPROM错误标志位
1 = 写操作过早终止
0 = 写操作已完成
bit2 WREN:EEPROM写使能位
1 = 允许写入
0 = 禁止写入EEPROM
bit1 WR:写操作控制位
1 = 启动写周期,一旦写入完成,该位将被硬件清零
写操作控制位只能用软件置"1"
0 = EEPROM的写周期已完成
bit0 RD:读控制位
1 = 启动EEPROM读操作。读需要一个周期,RD由硬件清零
RD只能用软件置“1”
0 = 未启动EEPROM读操作

写入EEPROM有一个特定的过程:将55H写入EECON2,将AAH写入EECON2
然后将WR位置1
*******************************************/

#include #define uchar unsigned char#define uint unsigned int// CONFIG#pragma config FOSC = HS // 12MHZ 外部晶振#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT enabled)#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)#define DELAY 200void WriteEE(uchar addr,uchar data);//EEPROM写函数uchar ReadEE(uchar addr); //EEPROM读函数uchar cydata; //定义全局变量void main(void) //主函数{ uchar k; PORTA = 0x00; //PORTA赋00 TRISA = 0x00;//PORTA为输出 for(k = 0;k < 7; k++) { WriteEE(k,k+1); //循环调用EEPROM写函数,向地址为0~7的写入1~8 }while(1){ cydata = ReadEE(0);//读取EEPROM的地址0数据 if(cydata == 1) { RA0 = 1; //判断EEPROM地址0里的数据是不是为1,为1则点亮LED0 }}}//EEPROM写数据函数void WriteEE(uchar addr,uchar data){ do{} while(WR == 1);//等待写完成 EEADR = addr;//写入地址信息 EEDATA = data;//写入数据信息 EEPGD = 0;//操作EEPROM WREN = 1; //写EEPROM允许// --- 此处要disable interrupt EECON2 = 0x55;//写入特定时序 EECON2 = 0xaa; WR = 1; //执行写操作 do{} while(WR == 1);//等待写完成// 可以enable interrupt 功能 WREN = 0;//禁止写入EEPROM}//EEPROM读数据函数uchar ReadEE(uchar addr){ uchar num; do{} while(RD == 1);//等待读完成 EEADR = addr;//写入要读的址址 EEPGD = 0;//操作EEPROM RD = 1;//执行读操作 do{} while(RD == 1);//等待读完成 num = EEDATA; return num;//返回读取的数据}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭