IIC是两根线,单总线,只有一根数据线,发送数据和读取收据都是一根线,像我们之前学的AD、DA都是许多线,许多线的话,这样做系统可以少浪费资源,少浪费控制IO口的资源,这种并行的处理速度快。所以线越多,速度越快。

我们用的较多的是SIP和IIC,单总线用得少,一般就BS18B20用。

这两条线可以接很多I²C设备,凡是具有I²C通信功能的设备都可以接在这总线上。要和哪个设备通信,先发送一个地址码给总线,总线全会响应这个地址码,这条总线上所有I²C芯片会检测这个地址,哪一个地址和它相符,就和主机建立通信,建立起后只有这个唯一的设备和总线通信。

I²C比较重要,不过也比较简单,实际上就是时序图。

凡是I²C总线设备必须接上拉电阻,Rp阻值一般为10K

先传送最高位记住。

随便两条线都可以模仿I²C总线


接下来说E²PROM(electronic erase program read only memory)电可擦除可编程只读存储器

其实就是Flash,例如U盘插上去,数据写完后拔走,就存在里面了。

这里第二条最高位错了,最高位不是不变,是补0.

这里用的其实是24C02

A0~A2就是三位地址线,WP(write protect)写保护,U盘就有这功能,为1时不能写,不知道能不能读。

接下来看看datasheet

低电压和标准电压都支持,这里使用的是2.7~5.5V。

内部构造2K~16K。

两线接口。

施密特触发器、滤波用来抑制噪声。

双向数据传输协议。

电压越高传输速率越快(电压越高运行速度越快,越快功耗越高),1.8V->100kHz,5V->400kHz

2K一页,4K+是多页,C02一页的不用管。

最多可读写1Million次

数据保存时间100年。

NC是不连接的意思。

这里有四种封装

总线时序图

写:

数据有效性:

起始信号和停止信号:

应答信号:

地址:

写:

页写(不管)

当前地址读取(即已经知道了读取的地址):

随机读取:

顺序读取:


现在写程序:

有起始信号,停止信号,应答信号,写一个字节,读一个字节,从任意字节读,向任意字节写,我们把这些都写成带参数的函数(例如write(地址变量,数据变量)),主函数直接调用就可以了,这就可以当成是一个I²C的模板。

 #include<reg51.h>

 #define uchar unsigned char
#define uint unsigned int sbit SDA=P2^;
sbit SCL=P2^; //uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
// 0 1 2 3 4 5 6 7 8 9 A B C D E F 无显示 void Delay1ms();
void delay1(int n);
void delay();
void start();
void stop();
void responds();
void init();
void write_byte(uchar date);
uchar read_byte(); void main()
{
init();
start();
write_byte(0xa0);
responds();
write_byte();
responds();
write_byte(0xfe);
responds();
stop(); delay1();//这里要有延时,停止后不能直接启动 start();
write_byte(0xa0);
responds();
write_byte();
responds();
start();
write_byte(0xa1);
responds();
P1=read_byte();
stop();
while();
}
void write_byte(uchar date)
{
//写一个字节
uchar i=,temp;
temp=date;
SCL=;
delay();
for(i=;i<;i++)
{
temp=temp<<;
SDA=CY;
delay();
SCL=;
delay();
SCL=;
delay();
}
SDA=;
delay();
}
uchar read_byte()
{
//读一个字节
uchar i,j,k;
SCL=;
delay();
SDA=;
delay();
for(i=;i<;i++)
{
SCL=;
delay();
j=SDA;
k=(k<<)|j;
SCL=;
delay();
}
return k;
}
void init()
{
SDA=;
SCL=;
}
void start()
{
//起始信号
SDA=;
delay();
SCL=;
delay();
SDA=;
delay(); }
void stop()
{
//停止信号
SDA=;
delay();
SCL=;
delay();
SDA=;
delay();
}
void responds()
{
//应答信号
uchar i=;
SCL=;
delay();
while((SDA==)&&(i<))
{
i++;
}
SCL=;
delay();
}
void delay()
{ }
void delay1(int n)
{
while(n--)
{
Delay1ms();
}
}
void Delay1ms() //@12.000MHz
{
unsigned char i, j; i = ;
j = ;
do
{
while (--j);
} while (--i);
}

1.写入时间是在你传入EEPROM数据后才开始进行的,传送数据过程中,不能算写入时间,EEPROM在IIC在停止位后才开始写入动作,从这一刻开始至6MS之间算为写入时间;

(资料来源https://www.baidu.com/link?url=GmfN6JMOsWVFgIB6hDzhhJcKdWzwvsnfOB6IC8skYfUoabglVRyz1gaWIKND0Xha&wd=&eqid=f1e2a27a000817f9000000025cb9d508)

51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM的更多相关文章

  1. 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595

    如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...

  2. 51单片机学习笔记(清翔版)(21)——ADDA数模转换

    A:anolog模拟的         D:digital数字的 AD模拟转数字,DA数字转模拟 生活中的基本都是模拟量,如温度,可以是10℃,10.1℃等 手机的背光亮度自动调节,拿到太阳光下,亮度 ...

  3. 51单片机学习笔记(郭天祥版)(6)——键盘的作业题、AD、DA、DS18B20(这里之后看清翔的补一下好了)

    A:analog,D:digital AD,就是模拟量转换为数字量,DA就是数字量转换为模拟量 为什么要转换? 单片机是数字芯片,内部只有0和1,没法表示模拟量 比如我们如果需要2.5V怎么办?其实是 ...

  4. 51单片机学习笔记(郭天祥版)(1)——单片机基础和点亮LED灯

    关于单片机型号的介绍: STC89C52RC40C-PDIP 0721CV4336..... STC:STC公司 89:89系列 C:COMS 52(还有51,54,55,58,516,):2表示存储 ...

  5. 20145316许心远《Java学习笔记(第8版)》课程总结

    20145316许心远<Java学习笔记(第8版)>课程总结 每周读书笔记链接汇总 ▪ 第一周读书笔记 ▪ 第二周读书笔记 ▪ 第三周读书笔记 ▪ 第四周读书笔记 ▪ 第五周读书笔记 ▪ ...

  6. 学习笔记︱Nvidia DIGITS网页版深度学习框架——深度学习版SPSS

    DIGITS: Deep Learning GPU Training System1,是由英伟达(NVIDIA)公司开发的第一个交互式深度学习GPU训练系统.目的在于整合现有的Deep Learnin ...

  7. Python 基础学习笔记(超详细版)

    1.变量 python中变量很简单,不需要指定数据类型,直接使用等号定义就好.python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前 ...

  8. Linux程序设计学习笔记(独乐乐版)

    在Android的开发过程中经常会遇到Linux相关的问题,为了更彻底的了解Linux准备整点没用的,找到一本 <Linux程序设计>开始系统的学习. 期间记录下自认为重要的内容,本以为是 ...

  9. 义隆单片机学习笔记之(一) 硬件框架&资源下载

    参考网址: 点击链接或右键链接地址 (台湾义隆官网)http://www.emc.com.tw/chs/tech_8bit.asp (EM78P153K官方资料)http://www.emc.com. ...

随机推荐

  1. iPerf 笔记

    iPerf 笔记 iperf 是一个网络性能测试工具,可以测试最大TCP和UDP带宽质量,具有多种参数和UDP特性,可以报告带宽.延迟抖动和数据包丢失. iperf 可以用来测一些网络设备,比如路由器 ...

  2. java+Selenium+TestNg搭建自动化测试架构(2)实现跨浏览器功能

    1.切换浏览器类:其中包含了切换浏览器的方法,以及关闭浏览器,设置等待时间,以及重写的断言方法 package com.rrx.framework; import java.io.IOExceptio ...

  3. 团队项目需求分析——NABCD

    N(Need)需求 经发现,很多人在理发时都要经过漫长的排队等待时间,这些时间也就因此白白浪费掉了,而且一些理发店也会因个别顾客不愿等待而损失客源.对此,我们设计出了这款小软件——理了么,一款专门为理 ...

  4. Akka详细介绍

    AKKA NOTES - 介绍演员 任何在过去做过多线程的人都不会否认管理多线程应用程序有多么困难和痛苦.我说管理因为它开始很简单,一旦你开始看到性能改进,它变得非常有趣.但是,当您发现没有更简单的方 ...

  5. PHP实现大转盘抽奖算法实例

    本文主要向大家介绍了PHP语言实现大转盘抽奖算法,通过具体的实例向大家展示,希望对大家学习PHP抽奖有所帮助. 流程:1.拼装奖项数组,2.计算概率,3.返回中奖情况 代码如下:中奖概率 ' v ' ...

  6. oracle 的tnsnames.ora,listener.ora

    x:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN listener.ora: # listener.ora Network Conf ...

  7. tornado架构分析1 从helloworld分析tornado架构

    最近公司需要我写一个高性能RESTful服务组件.我之前很少涉及这种高性能服务器架构,帮公司和平时没事玩都是写脚本级别的东西.虽然好多基础组件(sphinx.logging.configparse等) ...

  8. python大法好——Python XML解析

    Python XML解析 什么是XML? XML 被设计用来传输和存储数据. XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识. 它也是元标记语言,即定义了用于定义其他与 ...

  9. JAVA SpringBoot2 关于 JSON 数据处理,基于 ObjectMapper

    1,当今的互联网开发行业,JSON 这种数据格式越来越成为网络开发的主流,尤其是前后端分离之后,几乎百分百的数据交互方式都是采用 JSON 2,由于 SpringMVC 框架的封装性,我们日常开发中只 ...

  10. PHP入门——基本巩固

    ----------一.变量 ----------二.运算 ----------三.控制结构 ----------四.函数 ----------六.字符串 ----------七.数组 ------- ...