打印
[PIC®/AVR®/dsPIC®产品]

(转载)PIC16F877A单片机的EEPROM读写

[复制链接]
469|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aoyi|  楼主 | 2019-5-30 09:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原文:https://blog.csdn.net/lucifer51/article/details/52416752


本例程的功能是将一个0x66的字符放在0x15的EEPROM中,然后在读取,如果读取成功就点亮LED灯

#include<pic.h>

//调用头文件,16F877A单片机
__CONFIG(0xFF32);
//芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡
#define L0 RD0 //定义L0为RD0端口


char buf;//读写数据的储存空间
void WriteEE(char addr,char data);//EEPROM写函数
char ReadEE(char addr);   //EEPROM读函数


使用特权

评论回复
沙发
aoyi|  楼主 | 2019-5-30 09:31 | 只看该作者
//主程序
void main()
{
TRISD=0B00000000; //0X00;
PORTD=0B00000000; //0x00;
    WriteEE(0x15,0x66);//将0x66写入0x15地址的EEROM中

    buf = ReadEE(0x15);//将0x15地址中的数据读出,并将他放到BUF中
while(1)
{           //判断buf中的数据是否为写入的数据,如果是0x66,证明读写功能成功
            if(buf == 0x66){
                L0=1;
            }
}}



使用特权

评论回复
板凳
aoyi|  楼主 | 2019-5-30 09:32 | 只看该作者
//EEPROM写数据函数
void WriteEE(char addr,char data)
{
    do{}
    while(WR == 1);//等待写完成
EEADR = addr;//写入地址信息
    EEDATA = data;//写入数据信息
    EEPGD = 0;//操作EEPROM
    WREN = 1; //写EEPROM允许
    EECON2 = 0x55;//写入特定时序
    EECON2 = 0xaa;
    WR = 1; //执行写操作
    do{}
    while(WR == 1);//等待写完成
    WREN = 0;//禁止写入EEPROM
}


使用特权

评论回复
地板
aoyi|  楼主 | 2019-5-30 09:32 | 只看该作者
//EEPROM读数据函数
char ReadEE(char addr)
{
    char num;
    do{}
    while(RD == 1);//等待读完成
    EEADR = addr;//写入要读的址址
    EEPGD = 0;//操作EEPROM
    RD = 1;//执行读操作
    do{}
    while(RD == 1);//等待读完成
    num = EEDATA;
    return num;//返回读取的数据
}


使用特权

评论回复
5
pzsh| | 2019-5-30 11:12 | 只看该作者
比较详细,学习了,谢谢

使用特权

评论回复
6
programmable| | 2019-5-31 15:50 | 只看该作者
感谢分享!学习了!

使用特权

评论回复
7
aoyi|  楼主 | 2019-6-12 10:54 | 只看该作者
哈哈  感谢支持

使用特权

评论回复
8
zljiu| | 2019-6-12 15:11 | 只看该作者
非常感谢楼主的分享啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

3305

帖子

3

粉丝