PIC单片机读内部EEPROM的读写操作子程序

发布者:DelightfulWish最新更新时间:2019-11-23 来源: 51hei关键字:PIC单片机  内部EEPROM  读写操作 手机看文章 扫描二维码
随时随地手机看文章

//*****************************************************************************

//*****************************************************************************

//     pic16f917

//*****************************************************************************

unsigned char read_eeprom(unsigned char);

void write_eeprom(unsigned char,unsigned char);

void write_work();

//*****************************************************************************


//*****************************************************************************

unsigned char read_eeprom(unsigned char addr)

{

     unsigned char num;

     do{;}

     while(RD==1);                        //上一次读操作是否完成

     EEADR=addr;                            //EEPROM地址为00H

     EEPGD=0;                            //指向EEPROM数据储存器

     RD=1;                                //开始读

     do{;}

     while(RD==1);                        //等待读操作完成

     num=EEDATA;                            //读出

     return(num);                        //返回读出的数

}

//********************************************************************************

void write_work()

{

     if((write_dt&0x1) == 0x1)

     {

          write_eeprom(0,sdy_dt);

     }

     if((write_dt&0x2) == 0x2)

     {

          write_eeprom(1,sdy_set);

     }

     if((write_dt&0x4) == 0x4)

     {

          write_eeprom(2,power_dt);

     }

     write_dt=0;

}

//********************************************************************************

void write_eeprom(unsigned char addr,unsigned char data)

{

     do{;}

     while(WR==1);                        //上一次写操作是否完成

     EEADR=addr;                            //EEPROM地址

     EEDATA=data;                        //准备写入EEPROM的数据

     EEPGD=0;                            //指向EEPROM数据储存器

     WREN=1;                                //使能写操作

     EECON2=0x55;                        //设置通用参数

     EECON2=0xAA;                        //设置通用参数

     WR=1;                                //开始写

     do{;}

     while(WR==1);                        //等待写操作完成

     WREN=0;                                //禁止写操作

}

//********************************************************************************

//********************************************************************************

回复 举报


 sunhaitao 发表于 2013-8-13 17:24 | 显示全部楼层

单片机讨论群87496842,目前有100多人。


回复 举报


 libiaoha 发表于 2013-9-1 11:04 | 显示全部楼层

我也来凑个热闹:

#define        ReadRomString_CALL

#define        WriteRomString_CALL


//*************************************

// 函数名称:ReadRomByte

// 函数功能:从ROM的某一地址读数据

// 入口参数:所读数据的地址

// 出口参数:所读地址的数据

//***************************************

uint8 ReadRomByte(uint8 addr)

{

    uint8 num;


    while(RD==1);//等待读完成

    EEADR=addr;//写入要读的址址

    EEPGD=0;//操作EEPROM

    RD=1;//执行读操作

    while(RD==1);//等待读完成

    num=EEDATA;

    return num;//返回读取的数据

}

//*************************************

// 函数名称:WriteRomByte

// 函数功能:从RAM的某一地址写数据

// 入口参数:所写数据的地址及数据

// 出口参数:无

//***************************************

void WriteRomByte(uint8 addr,uint8 data)

{

        uint8 Tmp ;

        uint8 i ;


        Tmp = ReadRomByte(addr) ;

        if(Tmp == data) return ; //如果读出数据与要写的数一样 直接返回


        for(i=3;i>0;i--)//最多写三次

        {

            while(WR==1);//等待写完成               

            EEADR=addr;//写入地址信息

            EEDATA=data;//写入数据信息

            EEPGD=0;//操作EEPROM

            WREN=1; //写EEPROM允许

            EECON2=0x55;//写入特定时序

            EECON2=0xaa;

            WR=1; //执行写操作

            while(WR==1);//等待写完成

            WREN=0;//禁止写入EEPROM

                

                Tmp = ReadRomByte(addr) ;

                if(Tmp == data)

                {

                        break ;        

                }

        }

}


//*************************************

// 函数名称:ReadRomString

// 函数功能:从RAM读一连串的数据

// 入口参数:所读数据的首地址 读得的数据的存放首地址 读数据 长度

// 出口参数:所读地址的数据

/***************************************/

#ifdef        ReadRomString_CALL


void ReadRomString(uint8 InAddr,uint8 *OutAddr,uint8 DataLong)

{        

        uint8 i ;

        

        for(i=DataLong;i>0;i--)

        {        

                while(RD==1);//等待读完成

                EEADR = InAddr;//写入要读的址址

                EEPGD = 0;//操作EEPROM

                RD = 1;//执行读操作

                while(RD==1);//等待读完成

                *OutAddr = EEDATA;


                InAddr ++ ;        //存储地址加1

                OutAddr ++ ; //数据地址加1

        }                

}

#endif        //ReadRomString_CALL

//*************************************

// 函数名称:WriteRomString

// 函数功能:从RAM写一连串的数据

// 入口参数:要写进RAM的首地址 要写的数据 写数据的长度

// 出口参数:无

/***************************************/

#ifdef        WriteRomString_CALL

void WriteRomString(uint8 InAddr,uint8 *InData,uint8 DataLong)

{

        uint8 i,j;

        uint8 Tmp ;

        

        for(i=DataLong;i>0;i--)

        {

                //读出的和要写的数据一致 直接写下一个数据                        

                Tmp = ReadRomByte(InAddr) ;

                if(Tmp != (*InData))  //读数据与要写数据不一至 进行写 操作

                {

                        for(j=3;j>0;j--)//最多写三次

                        {

                            while(WR==1);//等待写完成               

                            EEADR = InAddr;//写入地址信息

                            EEDATA = *InData;//写入数据信息

                            EEPGD = 0;//操作EEPROM

                            WREN = 1; //写EEPROM允许

                            EECON2 = 0x55;//写入特定时序

                            EECON2 = 0xaa;

                            WR = 1; //执行写操作

                            while(WR==1);//等待写完成

                            WREN = 0;//禁止写入EEPROM

                                

                                Tmp = ReadRomByte(InAddr) ;

                                if(Tmp == (*InData))

[1] [2]
关键字:PIC单片机  内部EEPROM  读写操作 引用地址:PIC单片机读内部EEPROM的读写操作子程序

上一篇:PIC单片机驱动LCD1602液晶循环显示两行字符串程序
下一篇:Micrichip 单片机 I /O引脚使用注意事项

推荐阅读最新更新时间:2024-11-09 18:00

PIC单片机片内EEPROM运用方法
/*============================================================================= 访问PIC16F877A片内EEPROM,运行程序: Begin Test - LED0亮, EEPROM Test OK- LED7亮, Write&Read OK - LED0/2/4/6亮。 =============================================================================*/ //////////////////////////////////////////////
[单片机]
PIC单片机的原理介绍
简介:据统计,我国的单片机年容量已达1-3亿片,且每年以大约16%的速度增长,但相对于世界市场我国的占有率还不到1%。这说明单片机应用在我国才刚刚起步,有着广阔的前景。培养单片机应用人才,特别是在工程技术人员中普及单片机知识有着重要的现实意义。 本文主要介绍PIC单片机的原理。 当今单片机厂商琳琅满目,产品性能各异。针对具体情况,我们应选何种型号呢?首先,我们来弄清两个概念:集中指令集(CISC)和精简指令集(RISC)。采用CISC结构的单片机数据线和指令线分时复用,即所谓冯.诺伊曼结构。它的指令丰富,功能较强,但取指令和取数据不能同时进行,速度受限,价格亦高。采用RISC结构的单片机数据线和指令线分离,即所谓哈佛结构。这使
[单片机]
基于使用STM8单片机I2C方式实现读写操作
STM8硬件I2C知识 STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz)或快速(最高400kHz)的I2C总线。 1.I2C的4种模式 ● 从设备发送模式 ● 从设备接收模式 ● 主设备发送模式 ● 主设备接收模式 2.I2C的主要特点 ● 并行总线/I2C总线协议转换器 ● 多主机功能:该模块既可做主设备也可做从设备 ●I2C主设备功能 ─ 产生起始和停止信号 ●I2C从设备功能 ─ 可编程的I2C 地址检测 ─ 停止位检测 ● 产
[单片机]
基于使用STM8单片机I2C方式实现<font color='red'>读写</font><font color='red'>操作</font>
PIC单片机gpio配置与使用步骤
配置步骤如下: 第一步:首先配置ANSELx寄存器,将IO口定义为数字IO,还是模拟输入IO 第二步:配置TRISx, 将IO口定义为输入,还是输出 第三步:若定义IO口为输入,要得到IO端口的实际电平,则直接读取PORTx寄存器,若将IO口定义为输出,则通过写LATx来达到对IO口置高低电平操作。 注意:若直接写PORTx寄存器,实际上会写入到LATx中,所以一般不写入PORTx寄存器。若直接读取LATx寄存器,读取到的是锁存在GPIO Latch中的数据,而不是真正的IO端口数据,所以一般不读取LATx寄存器。 当某个引脚配置成模拟IO时候,必须将其相应的TRISx配置成输入,这样才能读取到引脚上外部电压
[单片机]
<font color='red'>PIC单片机</font>gpio配置与使用步骤
PIC单片机有什么特点和优势?
简介:PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。 PIC系列单片机有什么优势? 自从我95年接触PIC单片机以来,便一直热衷于这种单片机的开发与应用。有不少朋友问我:PIC到底有什么优势?也许你也会有这样的疑问,所以我在这里略谈几点自己的看法。 1) PIC最大的特点是不搞单纯的功能堆积,而是从实际出发,重视产品的性能与价格比,靠发展多种型号来满足不同层次的应用要求。就实际而言,不同的应用对单片机功能和资源的需求也是不同的。比如,一个摩托车的点火器需要一个I/O较少、RAM及程序存储空间不大、可靠性较高的小型单片机,若采用40脚且功能强大的单片
[单片机]
基于PIC单片机直流电压表的汇编程序分享
定义用户寄存器 WEI1EQUH’0C’;BIT0=MODS:选择模式位0:模式11:模式2 ;BIT1=BREK:断路判别位0:无断路1:有断路 ;BIT2= ;BIT3= ;BIT4= ;BIT5=慢响 ;BIT6=快响 ;BIT7=长响 WEI2EQUH’0D’;“百位值运算”的启始值 WEI3EQUH’0E’;“十位值运算”的启始值 WEI4EQUH’0F’;个位值 WEI5EQUH’10’;百位值 WEI6EQUH’11’;十位值 WEI7EQUH’12’; WEI8EQUH’13’; WEI9EQUH’14’; WEIAEQUH’15’; WEIBEQUH’16’ WEICEQUH’17’ WEIDEQUH’1
[单片机]
基于<font color='red'>PIC单片机</font>直流电压表的汇编程序分享
PIC单片机对电风扇送出仿自然风的设计
一、硬件电路及原理 要使电风扇送出仿自然风,就需要改变电风扇送风的强弱,即需要改变风扇电机的电压和电流,从而改变其转速。如图1所示,风扇插座与晶闸管TREAC相串联,改变晶闸管控制角α,即控制晶闸管导通的时间,就能使风扇电机的电压、电流发生变化。图2展示了α角和电机负载电压的关系。 Α角的变化又可通过电容C1的充放电时间的改变来实现。PIC16F84单片机按一定规律选择电阻Rx,即可改变电容C1的充放电时间,从而改变2N2646的导通时间。改变了TREAC的导通角,达到改变电风扇送风强弱的目的。控制角α和强弱风的关系如图3所示 市电频率f=50Hz,则可得下式 α/360°=t/0.02……………(1) 根据图1所示RxC
[单片机]
<font color='red'>PIC单片机</font>对电风扇送出仿自然风的设计
菜鸟学PIC单片机(一)
菜鸟学P IC 单片机 (一):TS1620字符型液晶模块驱动程序编写苦与乐 小弟学习PIC16F87X系列 单片机 已持续半个月了,遇到的困难还是比较多的,幸好单位的图书馆里还有一些相关的书籍,加之购买了第三方的ICD,因此学习起来还是比较充实的。 虽说如此,但在单位里找不到志同道合者一起来琢磨她,不过这里却有许多热心的站友。 今后,小弟打算将自己的一些学习心得和疑问写出来,与论坛里和我一样的初学者一起进步,并殷切希望能得到前辈的指点, 小弟写的第一个程序是控制三位八段 数码管 的显示,还没来得及总结,今天下午调试和总结了一下 LCD 的驱动程序,遇到了很多困难,但也有点小小的收获,拿出来晾晾,大家尽管扔砖,小
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved