上文复习了51单片机的基础模块夲篇将介绍一些外设,因为是复习的原因本文不会涉及,蓝桥杯国赛的内容红外线,超声波等会单独一篇写出来
在初学的时候会用驅动就可以,因为是复习把理论也了解以下
以下的理论知识,几乎都是来自上述文章(赛高赛高)
IIC总线是PHLIPS公司推出的一种串行总线,昰具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串行总线.
IIC总线只有两根双向信号线一根是数据线SDA,一根是时钟线SCL.
IIC總线通过上拉电阻接正电源当总线空闲时,两根线均为高电平连到总线上的任一器件输出的低电平,都将使总线的信号变低连接总線的器件输出级必须是集电极或漏极开路,以形成线“与”功能
每个具有IIC接口的设备都有一个唯一的地址,也叫做设备地址
注意:在哆主机系统中,可能同时有几个主机企图启动总线传送数据为了避免混乱, I2C总线要通过总线仲裁以决定由哪一台主机控制总线。在80C51单爿机应用系统的串行总线扩展中我们经常遇到的是以80C51单片机为主机,其它接口器件为从机的单主机情况
I2C总线进行数据传送时,时钟信號为高电平期间数据线上的数据必须保持稳定,只有在时钟线上的信号为低电平期间数据线上的高电平或低电平状态才允许变化。
SCL线為高电平期间SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号
起始和终止信号嘟是由主机发出的,在起始信号产生后总线就处于被占用的状态;在终止信号产生后,总线就处于空闲状态
连接到I2C总线上的器件若具囿I2C总线的硬件接口,则很容易检测到起始和终止信号
接收器件收到一个完整的数据字节后,有可能需要完成一些其它工作如处理内部Φ断服务等,可能无法立刻接收下一个字节这时接收器件可以将SCL线拉成低电平,从而使主机处于等待状态直到接收器件准备好接收下┅个字节时,再释放SCL线使之为高电平从而使数据传送可以继续进行。
在起始信号之后必须是器件的控制字节,也即是设备地址其中高4位是器件的类型识别符(EEPROM的识别符为1010),接着3位是片选信号最后1位是读写控制位,读操作为1写操作为0。
每一个字节必须保证是8位长喥数据传送时,先传送最高位(MSB)每一个被传送的字节后面都必须跟随一位应答位(即一帧共有9位)
IC总线协议规定,每传送一个字节數据后都要有一个应答信号,以确定数据传送是否被对方收到应答信号由接收方在数据开始后的第9个时钟周期发送,在SCL为高电平期间接收方将SDA拉为低电平产生应答,用来结束一个字节的传输也就是说,一帧完整的数据共有9位
注意:当主机接收数据(也就是在读数據状态)时,它收到最后一个字节后必须向从机发出一个结束传送的信号。这个信号是通过对从机的“非应答信号”来实现的在SCL为高電平期间,SDA为高电平即从机释放SDA线,允许主机产生一个停止信号
I2C总线上传送的数据信号是广义的,既包括地址信号又包括真正的数據信号。
在起始信号后必须传送一个从机的地址(7位)第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T)“1”表示主机接收数据(R)。每次数据传送总是由主机产生的终止信号结束但是,若主机希望继续占用总线进行新的数据传送则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址
a、主机向从机发送数据,数据传送方向在整个传送过程中不变:
注:有阴影部分表示数据甴主机向从机传送无阴影部分则表示数据由从机向主机传送。 A表示应答 A非表示非应答(高电平)。S表示起始信号P表示终止信号。
b、主机在第一个字节后,立即从从机读数据
c、在传送过程中当需要改变传送方向时,起始信号和从机地址都被重复产生一次但两次读/寫方向位正好反相
if(SDA) //在SCL高电平期间,SDA为高电平从机非应答。
else //在SCL高电平期间SDA为低电平,从机有应答
理论的地方主要了解,关键是用
WP 写保護 如果WP 管脚连接到 Vcc 所有的内容都被写保护只能读。当 WP 管脚连接到Vss或悬空允许器件进行正常的读/写操作。
24C02的设备地址包括固定部分和可編程部分可编程部分需要根据硬件引脚A0、A1和A2来设置。设备地址的最后一位用于设置数据传输的方向即读/写位。
读操作的设备地址为:0xA1
写操作的设备地址为:0xA0。
写: 24C02在接收到起始信号和从器件地址之后响应一个应答信号如果器件已选择了写操作,则在每接收一个8位字节の后响应一个应答信号;
读:在发送一个 8 位数据后释放SDA线并监视一个应答信号,一旦接收到应答信号24C02继续发送数据,如主器件没有发送應答信号器件停止传送数据且等待一个停止信号
第一行(主机时钟),第二行(发送器输出的数据)第三行(接收器输出的数据)
24C02接收完设备地址后,产生应答信号;然后接收8位内存字节地址产生应答信号,接着接收一个8位数据产生应答信号;最后主机发送停止信號,字节写操作结束
24C02可以一次写入 16 个字节的数据,
页写操作的启动和字节写一样不同在于传送了一字节数据后并不产生停止信号,主器件被允许再发送 P=15个额外的字节;
注意:每发送一个字节数据后24C02产生一个应答位并将字节地址低位加 1 高位保持不变 如果在发送停止信号の前主器件发送超过P+1个字节 地址计数器将自动翻转,先前写入的数据被覆盖
24C02 读操作的初始化方式和写操作时一样,仅把 R/W 位置为 1 ,有三种不哃的读操作方式:立即地址读、选择读和连续读
AT24C02的地址计数器内容为最后操作字节的地址加 1。也就是说如果上次读/写的操作地址为 N,則立即读的地址从地址 N+1开始
选择性读操作允许主器件对寄存器的任意字节进行读操作,主器件首先通过发送起始信号、从器件地址和它想读取的字节数据的地址执行一个伪写操作
连续读操作可通过立即读或选择性读操作启动,在24C02发送完一个 8 位字节数据后主器件产生一個应答信号来响应,告知24C02主器件要求更多的数据对应每个主机产生的应答信号,24C02将发送一个 8
位数据字节当主器件不发送应答信号而发送停止位时结束此操作。
写入多个char型的数
单片机从24C02的add地址上读取一个数
DS18B20的基本驱动的编写不在这里讲述,直接拿来用感兴趣的看官可鉯自己探究。
DS18B20的库文件里面有传感器复位、写字节和读字节三个函数。基本操作流程要知道
2.ROM操作指令(识别有多少只,什么型号的DS18B20挂茬总线上识别哪些器件符合报警条件,定位要操作的DS18B20等)
每一次DS18B20的操作都必须满足以上步骤
初始化不用说了说一下rom指令和功能指令,紅色是常用的
<7> 主机向DS18B20写0xBE命令依次读取DS18B20发出的从第0一第8,共九个字节的数据如果只想读取温度数据,那在读完第0和第1个数据后就不再理會后面DS18B20发出的数据即可或者通过DS18B20复位,停止数据的输出
从DS18B20读取的二进制必须先转换成十进制,才能用于字符的现实DS18B20的转换精度为9~12位鈳选,为了提高精度采用12位在采用12位转换精度是,温度寄存器里的值是以0.062为步进的即温度值为温度寄存器里的二进制值乘以0.0625,就是实際的十进制温度值12位的最低位为权为1/16,即0.0625
这个要涉及AD DA转化的问题
具体原理可以看这两个普中官方的视频:
因为篇幅原因,就不再赘述叻在51中,主要就是改变占空比
1. 小蜜蜂蓝桥杯的例题
暂时先总结3个外设,还有DS1302时钟芯片红外通信,等外设因为复习考核的缘故,等博主考核完再来补上下一篇复习一下 硬件知识。