【PIC学习第18例】PIC16F877A 内部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
< pic.h >
#include
" ../head/config.h "

__CONFIG(HS
& WDTDIS & LVPDIS & PWRTEN);
// HS振荡,禁止看门狗,低压编程关闭,启动延时定时器


void WriteEE(uint8 addr,uint8 data); // EEPROM写函数
uint8 ReadEE(uint8 addr); // EEPROM读函数

uint8 cydata;
// 定义全局变量

void main( void ) // 主函数
{
uint8 k;
PORTD
= 0xff ; // PORTD赋FF
TRISD = 0x00 ; // PORTD为输出

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 )
{
RD0
= 0 ; // 判断EEPROM地址0里的数据是不是为1,为1则点亮LED0
}
}
}

// EEPROM写数据函数
void WriteEE(uint8 addr,uint8 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
}

// EEPROM读数据函数
uint8 ReadEE(uint8 addr)
{
uint8 num;
do {}
while (RD == 1 ); // 等待读完成
EEADR = addr; // 写入要读的址址
EEPGD = 0 ; // 操作EEPROM
RD = 1 ; // 执行读操作
do {}
while (RD == 1 ); // 等待读完成
num = EEDATA;
return num; // 返回读取的数据
}


 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值