本讲内容:

对存储器的基本知识进行介绍。介绍EEPROM芯片AT24C02;通过例程展示EEPROM的读写。

存储器是应用于各种嵌入式场合的存储部件,按功能可分为只读存储器(ROM)和随机存取存储器(RAM)两大类,分别用作固定数据存储和临时数据缓存。

RAM(Random Access Memory),随机存取存储器:

RAM的特点是:上电运行时,操作系统和应用程序的所有正在运行的数据和程序都会放置其中,并且随时可以对存放在里面的数据进行修改和存取。它的工作需要由持续的电力提供,一旦系统断电,存放在里面的所有数据和程序都会自动清空掉,并且再也无法恢复。

使用得比较多的RAM种类有:

DRAM(Dynamic RAM,动态随机存取存储器):

这是最普通的RAM,一个电子管与一个电容器组成一个位存储单元,DRAM将每个内存位作为一个电荷保存在位存储单元中,用电容的充放电来做储存动作,但因电容本身有漏电问题,因此必须每几微秒就要刷新一次,否则数据会丢失。存取时间和放电时间一致,约为2~4ms。因为成本比较便宜,通常都用作计算机内的主存储器。

SRAM(Static RAM,静态随机存取存储器):

静态,指的是内存里面的数据可以长驻其中而不需要随时进行存取。每6颗电子管组成一个位存储单元,因为没有电容器,因此无须不断充电即可正常运作,因此它可以比一般的动态随机处理内存处理速度更快更稳定,往往用来做高速缓存。

SDRAM(Synchronous DRAM,同步动态随机存取存储器):

这是一种与CPU实现外频Clock同步的内存模式,工作电压为3.3V。 所谓clock同步是指内存能够与CPU同步存取资料,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。

DDR SDRAM(Double Data Rate二倍速率同步动态随机存取存储器):

作为SDRAM的换代产品,它具有两大特点:

其一,速度比SDRAM有一倍的提高;

其二,采用了DLL(Delay Locked Loop:延时锁定回路)提供一个数据滤波信号。这是目前内存市场上的主流模式。

只读存储器(read-only memory --- ROM)可以分为以下两大类:

(1)掩模编程ROM,它所存储的固定逻辑信息是由生产厂家通过光刻掩模版来决定的。

(2)现场可编程ROM(programmable read-only memory)。

a:PROM(可编程ROM)。此类ROM通常采用溶丝结构,用户可根据编程的需要,把无用的溶丝烧断来完成编程工作(即把信息写入到存储器中)。但一旦编程完毕,就无法再变更,故用户只可编程(写)一次。

b:EPROM(可擦除可编程ROM-erasable programmable read only memory)。

此类ROM存储单元中存贮信息的管子采用浮栅结构,可用紫外线或X-射线把原来存的信息一次全部擦除。

c:EEPROM(电可擦除可编程ROM,也叫E2PROM-electrically erasable programmable read only memory)。

d: Flash Memory(快闪存储器)

这是一种可以直接在主机板上修改内容而不 需要将IC拔下的内存,当电源关掉后储存在里面的资料并不会流失掉,在写入资料时必须先将原本的资料清除掉,然后才能再写入新的资料,缺点为写入资料的速度太慢。

EEPROM芯片AT24C02介绍:

例程:

/*****************EEPROM读写*******************

*单片机型号:STC89C52RC

*开发环境:KEIL

*功能:向IIC总线器件24c02EEPROM中地址为1的存储单元中写入数据50

并将其读出,显示于数码管上。

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

#include<reg51.h>

#define uint unsigned int

#define uchar unsigned char

sbit sda=P2^0;sbit scl=P2^1;sbit LE1=P2^6;sbit LE2=P2^7;sbit LED=P1^0;

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,

0x5e,0x79,0x71};

void delay1(uint z)

{

uchar x,x1;

for(;z>0;z--)

{for(x=0;x<114;x++){for(x1=0;x1<1;x1++);}}

}

void delay_5us()

{

int i;

for(i=0;i<1;i++){;}

}

void delay(int In,int Out)                                                                                          //定义延时函数

{

int i,j;

for(i=0;i<In;i++)

{for(j=0;j<Out;j++){;}}

}

void star()

{

sda=1;delay_5us();

scl=1;delay_5us();

sda=0;delay_5us();

}

void stop()

{

sda=0;delay_5us();

scl=1;delay_5us();

sda=1;delay_5us();

}

void ack()

{

uchar z=0;

while((sda==1)&&(z<50))z++;

scl=0;

delay_5us();

}

void write(uchar slave_write_address,uchar byte_address,uchar data_data)

{

uchar temp,temp1,i,ii;

star();

for(ii=0;ii<3;ii++)

{

if(ii==0)

{temp=slave_write_address;temp1=slave_write_address;}

else if(ii==1)

{temp=byte_address;temp1=byte_address;}

else if(ii==2)

{temp=data_data;temp1=data_data;}

for(i=0;i<8;i++)

{

scl=0;

delay_5us();

temp=temp1;

temp=temp&0x80;

if(temp==0x80)sda=1;

else sda=0;

delay_5us();

scl=1;delay_5us();

scl=0;delay_5us();

temp1=temp1<<1;

}

sda=1;delay_5us();

scl=1;delay_5us();

ack();

}

stop();

}

uchar read(uchar slave_write_address,uchar byte_address,uchar slave_read_address)

{

uchar temp,temp1,i,ii,x,data_data;

star();

for(ii=0;ii<3;ii++)

{

if(ii==0)

{temp=slave_write_address;temp1=slave_write_address;}

else if(ii==1)

{temp=byte_address;temp1=byte_address;}

else if(ii==2)

{star();temp=slave_read_address;temp1=slave_read_address;}

for(i=0;i<8;i++)

{

scl=0;delay_5us();

temp=temp1;temp=temp&0x80;

if(temp==0x80)sda=1;

else sda=0;

delay_5us();

scl=1;delay_5us();

scl=0;delay_5us();

temp1=temp1<<1;

}

sda=1;delay_5us();

scl=1;delay_5us();

ack();

}

for(x=0;x<8;x++)

{

data_data=data_data<<1;

sda=1;delay_5us();

scl=0;delay_5us();

scl=1;delay_5us();

if(sda==1)data_data|=0x01;

}

ack();

stop();

return data_data;

}

void display(uchar a,uchar b)

{

LE1=0;

P0=table[a];LE1=1;LE1=0;       //显示百位

LE2=0;

P0=0xfe;LE2=1;LE2=0;

delay(5,100);

LE1=0;

P0=table[b];LE1=1;LE1=0;       //显示十位

LE2=0;

P0=0xfd;LE2=1;LE2=0;

delay(5,100);

}

void main()

{

unsigned char num;

unsigned char buffer;

unsigned char a,b;

num = 0x32;

loop1:write(0xa0,0x01,num);

delay1(20);

buffer=read(0xa0,0x01,0xa1);

delay1(20);

if(buffer!=num){goto loop1;}

a=buffer/10;

b=buffer%10;

LED=0;delay(5,1000);

LED=1;delay(5,1000);

LED=0;delay(5,1000);

LED=1;delay(5,1000);

while(1){display(a,b);}

}

最后,求求看到的此文的小伙伴点赞关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~

基于51单片机的EEPROM读写相关推荐

  1. NFC之基于51单片机rc522的读写

    NFC之基于51单片机rc522的读写 改程序,端口定义 上位机修改com口

  2. SD卡SPI读写模式,基于51单片机的讲解

    经过验证测试,sd卡使用的spi模式为模式3(mode3),即CPOL和CPHA均为1,时钟线高电平空闲,第二个边沿(上升沿)进行采样. 下面为51单片机软spi读写一个字节时序(模式3)的代码示例, ...

  3. 基于51单片机的电子万年历的设计-源代码

    电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...

  4. 毕设--基于51单片机的温度报警器设计

    目录 1.简介 2.设计要求与方案论证 2.1.设计要求 2.2.系统基本方案选择和论证 2.2.1.单片机芯片的选择方案和论证 2.2.2.温度传感器设计方案论证 2.3.电路设计最终方案决定 3. ...

  5. 基于51单片机的温度报警器设计

    目 录 前言.............................................................................................. ...

  6. 基于51单片机的语音采集系统设计(录音笔选择方案)

    功能: 基于51单片机的语音实时采集系统 系统由STC89C52单片机+ISD4004录音芯片+LM386功放模块+小喇叭+LCD1602+按键+指示灯+电源构成 具体实现功能: (1)可通过按键随时 ...

  7. 基于51单片机的密码锁

    本次的项目是基于51单片机的密码锁,适合用来作为课程设计 主要实现了:密码锁功能,通过矩阵按键输入密码,输入范围为0-F,共有四位:同时,也可以使用更改按键更改密码,在更改时需要输入原密码来进入更改模 ...

  8. 基于51单片机的简易雷达定位装置

    简易超声波雷达 任务: 一. 摘要: 超声波测距广泛运用于各类电子产品精确距离测量,如汽车尾部的倒车雷达对倒车时的障碍物进行精确判断,反馈到驾驶员,使驾驶员能做出准确的判断和操作:各类航模中当即将触地 ...

  9. 基于51单片机的酒精浓度检测仪设计

    本设计仅供参考 基于51单片机的酒精浓度检测仪设计(proteus仿真+程序+原理图+报告) 原理图:Altium Designer 仿真:proteus 8.9 程序编译器:keil 4/keil ...

最新文章

  1. 朱峰谈概念设计(二):我们设计什么
  2. Androd安全——反编译技术完全解析
  3. 人工智能第六课:如何做研究
  4. calayer 与uiview
  5. WebService学习总结——调用第三方提供的webService服务
  6. 安装saltstack遇到的问题锦集
  7. 2.maven 安装配置
  8. pythoncv2模块详细介绍_【Opencv】【Python】Python中opencv模块cv2一些函数用法及简介...
  9. ibatis 直接升格为 apache 一级项目了
  10. STM32F103无源蜂鸣器驱动程序
  11. MFC:读取整个记事本文件
  12. 完美的Python代码制作“恐龙跳一跳“小游戏【附带源码 】
  13. 小白学习笔记之Python要点
  14. temp.....................
  15. Qt编写物联网管理平台22-报警联动
  16. prompt learning 提示学习初步心得及示例 代码
  17. 上海-亚马逊AWS联合创新中心正式启用
  18. 无法加载文件 C:\Users\Administrator\PycharmProjects\pythonProject\venv\Scripts\activate.ps1,因为在此系统上禁止运行脚本。
  19. 组态王图素制作_组态王教程——很实用(杂项)
  20. 软件测试-bug详解

热门文章

  1. Mask R-CNN 原理解析
  2. Android如何打开未安装的apk,android获取未安装的APK文件的信息
  3. 快衰落、慢衰落,平坦衰落、频率选择性衰落
  4. kafka生产者的发送消息的流程以及代码案例
  5. 一串JS代码Hack简单考眼力小游戏
  6. 哈夫曼编码器和译码器(完整代码)
  7. 云破月来花弄影-SVG多种技术组合实现
  8. round在python是什么意思_python3.3.2我对函数“round”有正确的理解吗?
  9. python广州地图_手把手教你用Python+可视化工具制作漂亮地图
  10. CorelDRAW X3中文版服装创意设计视频教程