51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM
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的模板。
1 #include<reg51.h> 2 3 #define uchar unsigned char 4 #define uint unsigned int 5 6 sbit SDA=P2^0; 7 sbit SCL=P2^1; 8 9 //uchar code Table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00}; 10 // 0 1 2 3 4 5 6 7 8 9 A B C D E F 无显示 11 12 void Delay1ms(); 13 void delay1(int n); 14 void delay(); 15 void start(); 16 void stop(); 17 void responds(); 18 void init(); 19 void write_byte(uchar date); 20 uchar read_byte(); 21 22 void main() 23 { 24 init(); 25 start(); 26 write_byte(0xa0); 27 responds(); 28 write_byte(0); 29 responds(); 30 write_byte(0xfe); 31 responds(); 32 stop(); 33 34 delay1(1000);//这里要有延时,停止后不能直接启动 35 36 start(); 37 write_byte(0xa0); 38 responds(); 39 write_byte(0); 40 responds(); 41 start(); 42 write_byte(0xa1); 43 responds(); 44 P1=read_byte(); 45 stop(); 46 while(1); 47 } 48 void write_byte(uchar date) 49 { 50 //写一个字节 51 uchar i=0,temp; 52 temp=date; 53 SCL=0; 54 delay(); 55 for(i=0;i<8;i++) 56 { 57 temp=temp<<1; 58 SDA=CY; 59 delay(); 60 SCL=1; 61 delay(); 62 SCL=0; 63 delay(); 64 } 65 SDA=1; 66 delay(); 67 } 68 uchar read_byte() 69 { 70 //读一个字节 71 uchar i,j,k; 72 SCL=0; 73 delay(); 74 SDA=1; 75 delay(); 76 for(i=0;i<8;i++) 77 { 78 SCL=1; 79 delay(); 80 j=SDA; 81 k=(k<<1)|j; 82 SCL=0; 83 delay(); 84 } 85 return k; 86 } 87 void init() 88 { 89 SDA=1; 90 SCL=1; 91 } 92 void start() 93 { 94 //起始信号 95 SDA=1; 96 delay(); 97 SCL=1; 98 delay(); 99 SDA=0; 100 delay(); 101 102 } 103 void stop() 104 { 105 //停止信号 106 SDA=0; 107 delay(); 108 SCL=1; 109 delay(); 110 SDA=1; 111 delay(); 112 } 113 void responds() 114 { 115 //应答信号 116 uchar i=0; 117 SCL=1; 118 delay(); 119 while((SDA==1)&&(i<250)) 120 { 121 i++; 122 } 123 SCL=0; 124 delay(); 125 } 126 void delay() 127 { 128 129 } 130 void delay1(int n) 131 { 132 while(n--) 133 { 134 Delay1ms(); 135 } 136 } 137 void Delay1ms() //@12.000MHz 138 { 139 unsigned char i, j; 140 141 i = 2; 142 j = 239; 143 do 144 { 145 while (--j); 146 } while (--i); 147 }
1.写入时间是在你传入EEPROM数据后才开始进行的,传送数据过程中,不能算写入时间,EEPROM在IIC在停止位后才开始写入动作,从这一刻开始至6MS之间算为写入时间;
(资料来源https://www.baidu.com/link?url=GmfN6JMOsWVFgIB6hDzhhJcKdWzwvsnfOB6IC8skYfUoabglVRyz1gaWIKND0Xha&wd=&eqid=f1e2a27a000817f9000000025cb9d508)
转载于:https://www.cnblogs.com/Lieyuanbingshi/p/10720228.html
51单片机学习笔记(郭天祥版)(9)——IIC、EEPROM相关推荐
- 51单片机学习笔记(清翔版)(25)——LCD1602和指针
常说的有LCD液晶和LED液晶 通常是背光源不同,LCD液晶的液晶面板是LCD的,背光源是荧光灯做的,LED液晶的面板也是LCD做的,背光源是LED灯做的. 看到的这个暗黄色的就是液晶面板,如果没有背 ...
- 51单片机学习笔记(清翔版)(13)——LED点阵、74HC595
如图3,点阵屏分单色和彩色,点阵屏是由许多点组成的,在一个点上,只有一颗一种颜色的灯珠,这就是单色点阵屏,彩色的在一个点上有三颗灯珠,分别是RGB三原色. 图4你可能没看出来,那么大块黄色的就是点阵屏 ...
- 51单片机学习笔记(清翔版)(19)——串口通信
学好了中断再学串口通信 今天这课内容是关于数据传输的,在工业控制和商业控制是很重要的.数据传输包含串口.并行通信. 这里说的计算机都可以理解为单片机,因为工作方式是一样的. 单片机通信是指单片机之间, ...
- 51单片机学习笔记(清翔版)(21)——ADDA数模转换
A:anolog模拟的 D:digital数字的 AD模拟转数字,DA数字转模拟 生活中的基本都是模拟量,如温度,可以是10℃,10.1℃等 手机的背光亮度自动调节,拿到太阳光下,亮度 ...
- 单片机c语言北航,【下载资料】《51单片机学习笔记》北航版
原标题:[下载资料]<51单片机学习笔记>北航版 如果手机下载有问题,请移步至电脑端,链接:https://forum.mianbaoban.cn/t/topic/36906 内容简介 本 ...
- 51单片机学习笔记-1简介及点灯
51单片机学习笔记 文章目录 51单片机学习笔记 1. 51单片机简介 1.1 安装软件 1.2 单片机简介 2. LED灯 2.1点亮一个LED 2.1.1原理分析 2.1.2 创建工程 2.2LE ...
- AutoLeaders控制组—51单片机学习笔记
文章目录 AutoLeaders控制组-51单片机学习笔记 1.1单片机及开发板介绍 单片机介绍 单片机应用领域 STC89C52单片机 内部结构 开发板介绍 2.1点亮一个Led 新建工程 编程 认 ...
- 51单片机学习笔记2 仿真器的使用及STC89Cxx简介
51单片机学习笔记2 仿真器的使用及STC89Cxx简介) 一.连接步骤 1. 硬件连接 2. 安装软件驱动 3. 检查是否安装成功 二.仿真步骤 1. 打开一个51工程 2. 选择仿真设备 3. S ...
- [51单片机学习笔记TWO]----蜂鸣器
蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...
- 51单片机学习笔记5 流水灯实现及蜂鸣器控制
51单片机学习笔记5 流水灯实现及蜂鸣器控制 一.流水灯 1. 硬件电路 2. 代码实现 (1) 点亮一个LED的基本操作 (2) 使用算术左移实现流水灯 (3) 使用库文件左移函数 二.蜂鸣器 1. ...
最新文章
- 如何在 Shell 脚本中执行语法检查调试模式
- 【控制】《多智能体系统一致性协同演化控制理论与技术》纪良浩老师-第12章-离散时间多智能体系统牵制一致性
- 每日一题——剑指 Offer24反转链表
- 【CSS】css控制模块到顶层或底层
- Android 获取静态上下文(Application)
- aws平台中为ec2实例添加双网卡
- leetcode [26] 删除排序数组中的重复项 / Remove Duplicates from Sorted Array
- calloc与malloc的区别
- GridView 换行设置
- while循环--登录
- 【神器】截图+贴图工具 Snipaste
- EasyX实现按钮效果
- 短视频平台、工具,新手在家用手机全程复制粘贴,一天收益247
- excel 365 版本安装 Solver
- Codeforces 950C-Zebras(模拟构造)
- “华为”和“荣耀”的关系紧密,双品牌携手驰骋手机市场
- 0基础成功转行Python自动化测试工程师,年薪30W+,经验总结都在这(建议收藏)
- SQL判断是否为null如果为null则返回0
- PHP Array to string conversion
- PDF通用工具其他下载地址
热门文章
- 浏览器网页上的SSH终端webssh:pip install webssh
- Scala项目启动方式:extends App和main的区别
- Apollo读取某个集群的配置
- 三级缓存/缓存行概念/缓存一致性协议/缓存对齐编程
- Hadoop大数据分布式文件系统hdfs的工作机制
- linux 查看服务器网络连接,1.3.2 查看Linux服务器的网络连接(2)
- 增加mysql的最大连接数
- Spring Boot 配置文件密码加密方法
- volatile的学习总结
- python中系列的含义_python中四种组合数据类型的含义、声明、增删改查,遍历