PIC16F877A 内部EEPROM读写实验

发布者:ph49635359最新更新时间:2014-12-23 来源: 51hei关键字:PIC16F877A  EEPROM  读写实验 手机看文章 扫描二维码
随时随地手机看文章

/******************************************
******PIC16F877A 内部EEPROM读写实验*******好象还有点问题,没有写进去?
Author:hnrain
Date:2010-12-25
Version:V0.1
Email:hnrain1004@gmail.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写操作中断标志位
 = 写操作完成(必须软件清零)
 = 写操作未完成或还未开始
bit3   WRERR:EEPROM错误标志位
 = 写操作过早终止
 = 写操作已完成
bit2   WREN:EEPROM写使能位
 = 允许写入
 = 禁止写入EEPROM
bit1   WR:写操作控制位
 = 启动写周期,一旦写入完成,该位将被硬件清零
            写操作控制位只能用软件置"1"
 = EEPROM的写周期已完成
bit0   RD:读控制位
 = 启动EEPROM读操作。读需要一个周期,RD由硬件清零
           RD只能用软件置“1”
 = 未启动EEPROM读操作
写入EEPROM有一个特定的过程:将55H写入EECON2,将AAH写入EECON2
然后将WR位置1
*******************************************/
#include
#include "../head/config.h"
__CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);   
//HS振荡,禁止看门狗,低压编程关闭,启动延时定时器

void WriteEE(uint8 addr,uint8 data);//EEPROM写函数
uint8 ReadEE(uint8 addr);   //EEPROM读函数
uint8 cydata;   //定义全局变量
oid DelayMs(unsigned int t)
{
 unsigned int i,j;
 for(i=0;i {
  for(j=0;j<10;j++);
 }
}
void Display(unsigned char num,unsigned char data)             
{
 PORTD = TABLE[data]; //取出数据,送D口显示
 PORTC = 0x01;
 switch(num)
 {
  case 0:
   PORTA = 0x01;
   break;
  case 1:
   PORTA = 0x02;
   break;
  case 2:
   PORTA = 0x04;
   break;
  case 3:
   PORTA = 0x06;
   break;
  case 4:
   PORTA = 0x08;
   break;
  case 5:
   PORTA = 0x0A;
   break;
  case 6:
   PORTA = 0x0C;
   break;
  case 7:
   PORTA = 0x0E;
   break;
  
  default:
   PORTA = 0x00; 
 }
 DelayMs(2);
}
void main(void) //主函数
{
   unsigned char buf;
 GIE =0;
 TRISD = 0;     //portd 输出
   TRISA = 0;     //porta 输出
 TRISC = 0;     //porta 输出
 PORTC = 0x01;     //74HC138控制端口
 DelayMs(50);
 buf=232;
// writeByte(0x15,buf);
 eeprom_write(0x30,buf);   
 buf = 0;
    DelayMs(50);
// buf = 0;
// buf = readByte(0x15);
 buf=eeprom_read(0x30);    //从片内EEPROM中的地址0X10中读出数据
 
// GIE = 1;
   while(1)
   {
  Display(0,buf/100);
  Display(1,buf/10%10);
  Display(2,buf%100%10);                         
   }}
//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;//返回读取的数据
}
关键字:PIC16F877A  EEPROM  读写实验 引用地址:PIC16F877A 内部EEPROM读写实验

上一篇:PIC单片机AD中断调试(无数字滤波)
下一篇:PIC16F917 内部AD练习程序

推荐阅读最新更新时间:2024-03-16 13:49

单片机调EEPROM存储器24C256
简介:(单片机基础知识之单片机存储器)设置MSP430单片机为主设备,24C256为从设备。IIC总线由SDA和SCL两条线组成,每根线都联结4.7K的上拉电阻。 设置MSP430单片机为主设备,24C256为从设备。IIC总线由SDA和SCL两条线组成,每根线都联结4.7K的上拉电阻。 主设备向24C56写:主设备发送start信号— 接着发送8位Device address(0xa0写)— 24C256比较受到的地址,发送应答信号ack- 主设备受到ACK后,先发送First word address(高8位)— 24C256受到后返回ack应答— 主设备发送Second word address(低8位)— 24C2
[单片机]
复旦微电推出NAND Flash及EEPROM存储器新品
2023年4月27日——上海复旦微电子集团股份有限公司今日举办线上发布会,推出FM25/FM29系列SLC NAND,FM24N/FM24LN/FM25N高可靠、超宽压系列EEPROM,以及符合AEC-Q100的车规FM24C/FM25系列EEPROM等非挥发存储新产品。 FM25/FM29系列产品基于28nm先进NAND flash工艺,满足6万次擦写次数和数据保存10年的高可靠性要求,应用于工规、5G通讯、车载等相关领域。FM24N/FM24LN/FM25N系列产品基于95nm先进EEPROM工艺,具备低功耗、超宽电压、高可靠等特性,其中擦写寿命大于400万次、数据保持时间大于200年,产品性能及可靠性达到业界领先水
[嵌入式]
复旦微电推出NAND Flash及<font color='red'>EEPROM</font>存储器新品
AVR Eeprom的c语言编程
//***************FileName:Capature.C***************// //***************ICCAVR 编译*****************// #include io8535v.h #define uchar unsigned char #define uint unsigned int //数码管字型表,对应0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F// uchar Table ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x
[单片机]
51单片机入门 - EEPROM(24C02的使用)
24C02:256 个字节的 EEPROM。一般情况下,EEPROM 拥有 30 万到 100 万次的寿命。基于 I2C 通信协议的器件。I2C 是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM 是一个器件,只是这个器件采样了 I2C 协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM 可以用其它接口, I2C 也可以用在其它很多器件上。 1、EEPROM写数据流程 第一步,首先是 I2C 的起始信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地 址,并且在读写方向上选择“写”操作。 第二步,发送数据的存储地址。24C02一共 256 个字节的存储空间,地址从 0x00~0xFF,我们想把数
[单片机]
PIC16F877A 模数转换Demo
#include htc.h #include stdio.h __CONFIG(0xFF32); #define u8 unsigned char #define u16 unsigned int void delayus() { int i; for(i=200;i--;); } /********延时程序********/ void Delay_ms(u16 xms) { int i,j; for(i=0;i xms;i++) { for(j=0;j 71;j++) ; } } void port_init(void) { PORTA=0xFF; TRISA=0x01; //RA0输
[单片机]
stm8s eeprom读写
stm8s有自带的eeprom,起始地址是0x4000,终止到哪看手册,因为我用的时候只写一个4字节数据,配置如下: 入参:eeprom偏移地址,写入的数据 void eeprom_write(const unsigned char addr,unsigned long date) { asm( sim ); FLASH_CR1_FIX = 1;//编程时间固定为标准编程时间 FLASH_CR2_WPRG = 1;//使能字编程 FLASH_NCR2_NWPRG = 0;/使能字编程 do { FLASH_DUKR = 0xAE; FLASH_DUKR = 0x56; } wh
[单片机]
51单片机—IIC—EEPROM(CAT24WCXX)—03
今天没事做,突然想起来了IIC,所以决定回顾一下下,呵呵,忘记了不少,所以打算写出来,便于以后记忆。。。 ,这里的例子就拿CAT24WCXX的EEPROM来解释吧~~(我也是边写文章,边写代码~~~累啊) 一、IIC总线简介 1.IIC总线的主要特点 IIC总线是一种简单、双向二线制同步串行总线。 (1)总线只有两根线,既串行时钟线(SCL)和串行数据线(SDA),这在设计中大大减少了硬件接口 (2)每个连接到总线上的器件都有一个用于识别的器件地址,(注意,器件地址由芯片内部硬件电路和外部地址引脚同时决定,这样就避免了~~你懂得)从而建立了简单的主从关系,从而每个器件都可以作为发送器,也可以作为接收器。 (3)同步时钟允许
[单片机]
51单片机—IIC—<font color='red'>EEPROM</font>(CAT24WCXX)—03
PCI-PCI桥在线读写EEPROM的技巧
PCI-PCI桥启动时,一般需要从EEPROM预读取配置数据。更改EEPROM中的数据一般需要专用的烧结器,这给调试过程带来不便。尤其是采用表贴封装的EEPROM。本文以Intel公司的Dec21554PCI-PCI桥为例,介绍一种在线读写EEPROM的方法。 EEPROM选用的是ATMEL公司生产的AT93LC66,4Kbit,按512×8bit组织。AT93LC66与Dec21554的硬件连线如图1所示。 Dec21554提供了一组寄存器,用于访问外接的串行ROM。寄存器位于CSR(控制状态寄存器组)空间中,基地址是PCI配置头部Secondary BAR2寄存器的值,文中定义为base。寄存器包括: ①
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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