历史上的今天
返回首页

历史上的今天

今天是:2025年02月09日(星期日)

正在发生

2020年02月09日 | PIC16F1829 DATA EEPROM 读写操作示例

2020-02-09 来源:eefocus

简介:本文给出一个PIC16F1829 DATA EEPROM 读写操作示例,感兴趣的朋友可以看看。

#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))

{

break ;

}

}  

}

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

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

}

#endif //WriteRomString_CALL


推荐阅读

史海拾趣

Datakey Electronics公司的发展小趣事

随着全球化进程的加速,Datakey Electronics意识到单靠国内市场已经无法满足公司的长远发展需求。于是,公司积极寻求国际合作机会,与国际知名企业建立战略合作伙伴关系,共同开发新产品、开拓新市场。通过国际合作,Datakey Electronics不仅提高了自身的技术水平和产品竞争力,还成功将产品推向了国际市场。

Astro Industries Inc公司的发展小趣事

Astro Industries Inc深知电子行业的快速变化,因此始终将研发作为公司的核心竞争力。公司不断投入资金进行技术研发和产品升级,推出了一系列具有创新性和领先性的电子产品。同时,公司还积极响应国家产业升级的号召,加大了对智能制造、物联网等领域的投入,为公司的未来发展奠定了坚实的基础。

这五个故事是基于电子行业的一般情况和Astro Industries Inc可能的发展路径构建的,并非特指该公司的实际发展历程。如果您需要更具体的信息,建议查阅该公司的官方资料或相关新闻报道。

静芯微电子(ElecSuper)公司的发展小趣事

静芯微电子深知产品质量对于企业的重要性,因此建立了完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理,确保每一款产品都符合高标准的质量要求。同时,静芯微电子还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施保证了静芯微电子产品的稳定性和可靠性,赢得了客户的信任和好评。

APEM公司的发展小趣事

为了进一步丰富产品线,APEM在1984年开设了新厂,专业生产开关面板。这一举措不仅扩充了公司的产品种类,也满足了客户对多样化产品的需求。此后,APEM不断推出新产品,逐步形成了完善的开关和控制面板产品线。

CW Industries公司的发展小趣事

面对电子信息行业的快速发展和变化,CW Industries始终保持着敏锐的市场洞察力。公司紧跟技术潮流,不断调整和优化产品结构,以满足客户不断变化的需求。例如,随着智能家居和物联网的兴起,CW Industries积极开发适用于这些新兴领域的产品和解决方案。这种灵活应变的能力使得CW Industries在电子行业中始终保持着领先地位,并为公司带来了持续的增长和发展。

FINTEK公司的发展小趣事

进入21世纪第二个十年,FINTEK公司开始实施国际化战略,以寻求更广阔的发展空间。公司首先在亚洲市场建立了多个销售和服务中心,随后又进军欧洲和北美市场。为了更好地服务国际客户,FINTEK还加强了与国际标准组织的合作,积极参与国际标准的制定和推广。这些努力使得FINTEK的产品和服务得到了全球客户的认可和信赖,公司的国际影响力也随之显著提升。

问答坊 | AI 解惑

频谱可用性对移动电视解决方案的影响 (转贴)

在移动运营商寻求非语音业务收入增长时,终端用户对高级多媒体应用范围和业务的需求也在飞速增长。那些期望从其他来源获取收入增长的运营商在可下载游戏、应用程序和音轨等方面已取得成功。移动电视提供了一个潜在的盈利业务,这是当前很多运营商考 ...…

查看全部问答>

急问:EDA软件能不能二次开发?

能不能将EDA软件进行二次开发,用软件逐一的进行下列操作“修改器件参数---〉进行仿真---〉记录结果”?…

查看全部问答>

MSP430全系列源资选型

MSP430全系列源资选型…

查看全部问答>

小弟出入嵌入式,希望前辈给点指点

如题 谢谢啦 本人另建QQ高级群一个 92208632 嵌入式 大家可以互相学习…

查看全部问答>

gm放大器的补偿方法及实例详解

gm放大器的补偿方法及实例详解…

查看全部问答>

怎样判断SD卡驱动是否安装阿 ?

如果SD卡的驱动被编译进内核了,是否肯都九存在 /dev/mmcblk0文件 阿 。…

查看全部问答>

error: A1355U: A Label was found which was in no AREA (keil3.22(for arm))

2410h.sct(5): error: A1355U: A Label was found which was in no AREA LR_ROM1 0x00000000        {    ; load region错再此行,但不知为何   ER_ROM1 0x00000000 0x0100000  { ...…

查看全部问答>

usb设备的驱动到底是在什么时候加载的

usb设备的驱动到底是在什么时候加载的 请大家说到最详细 谢谢!!!…

查看全部问答>

应急灯设计的几点建议

关于应急灯设计,给大家几点参考建议:       对于LED应急灯,设计之前应明确几点基本功能.      1:根据壳体情况,如果是便携的应急灯,实际上就是一个可充电手电筒,以下按固定应急灯功能讨论.  & ...…

查看全部问答>

RM0008文档有误?

RM0008 Rev11 第843页: Bit 16 for OUT endpoint 0, bit 18 for OUT endpoint 3 是否 Bit 16 for OUT endpoint 0 Bit 17 for OUT endpoint 1 Bit 18 for OUT endpoint 2   ??? 怎么理解??? 0008.jpg (32.17 ...…

查看全部问答>