第09章 单片机系统资源扩展_第1页
第09章 单片机系统资源扩展_第2页
第09章 单片机系统资源扩展_第3页
第09章 单片机系统资源扩展_第4页
第09章 单片机系统资源扩展_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、授课教师:左敬龙授课教师:左敬龙电话:电话:1382868066013828680660短号:短号:6801268012邮箱:邮箱:单片机原理及应用单片机原理及应用单片机应用系统资源扩展单片机应用系统资源扩展I2C总线总线123http:/ I2 2C C(Inter-Integrated CircuitInter-Integrated Circuit)是飞利浦公司于二十世)是飞利浦公司于二十世纪纪8080年代初期推出的一种年代初期推出的一种“芯片互联芯片互联”串行总线标准,起串行总线标准,起初设计的最高传送速率为初设计的最高传送速率为100kbps100kbps,主要用于低带宽、短,主要用于

2、低带宽、短距离的板内芯片通信。距离的板内芯片通信。目前,目前,I I2 2C C总线的理论最高传输速率可达到总线的理论最高传输速率可达到3.4Mbps3.4Mbps,且,且通信范围也早已不仅仅局限在板内。通信范围也早已不仅仅局限在板内。 9.4.1 I9.4.1 I2 2C C串行总线标准串行总线标准 图9-21 I2C总线设备连接电路开始及停止信号的定义开始及停止信号的定义图图9-22 I2C9-22 I2C总线起停信号定义总线起停信号定义I2C总线上只有主设备可以发起数据传输,允许多个主设备共存。为了获取总线控制权,主设备需要向总线发送一个启动信号来通知总线上其他设备其对总线的征用。通信结

3、束时,主设备还需要发送一个结束信号来释放总线。I2C对启动信号的定义为当SCL处于高电平时,SDA出现一个下降沿;停止信号则是当SCL处于高电平时,SDA出现一个上升沿。I2C的启停信号如图9-22所示。 I I2 2C C总线上主设备发送起始信号启动发送过程后,还需要发送总线上主设备发送起始信号启动发送过程后,还需要发送一个控制字节来初始化从设备的地址及读写操作。一个控制字节来初始化从设备的地址及读写操作。 控制字节的定义如图控制字节的定义如图9-239-23所示,高所示,高4 4位数据为设备类型号,例位数据为设备类型号,例如如EEPROMEEPROM的设备类型号为的设备类型号为101010

4、10。紧接着紧接着3 3位数据为从设备的地址,这三位数据的值由从设备相位数据为从设备的地址,这三位数据的值由从设备相应的引脚电平来确定。应的引脚电平来确定。最低位为读写标志,当该位为最低位为读写标志,当该位为1 1时,表示主设备对从设备进行时,表示主设备对从设备进行读数据操作,当该位为读数据操作,当该位为0 0时,表示向从设备写入数据。时,表示向从设备写入数据。 应答信号应答信号I2CI2C总线传送数据时,设备需要对每一个接受到的字节进总线传送数据时,设备需要对每一个接受到的字节进行应答,具体表现为应答设备在第行应答,具体表现为应答设备在第9 9个时钟周期将个时钟周期将SDASDA线下线下拉到

5、低电平,即产生一个应答信号(拉到低电平,即产生一个应答信号(ACKACK)。)。对于主设备发起的写操作而言,从设备每接受完一个字节对于主设备发起的写操作而言,从设备每接受完一个字节后向总线发送一个后向总线发送一个ACKACK。反之,主设备进行读操作时,在收到从设备过来的一个字反之,主设备进行读操作时,在收到从设备过来的一个字节的数据后由主设备发送一个节的数据后由主设备发送一个ACKACK应答从设备,当收到从应答从设备,当收到从设备发过来的最后一个数据后,主设备发送一个非应答信设备发过来的最后一个数据后,主设备发送一个非应答信号(号(NOACKNOACK), ,然后结束。然后结束。图图9-24

6、I2C9-24 I2C写数据时序图写数据时序图I2CI2C总线上一次完整的写数据时序如图总线上一次完整的写数据时序如图9-249-24所示所示在向总线发送起动信号取得总线使用权之后,主设备发送在向总线发送起动信号取得总线使用权之后,主设备发送一个控制字节,与控制字中地址相同的从设备在收到控制字一个控制字节,与控制字中地址相同的从设备在收到控制字后向总线发送一个后向总线发送一个ACKACK应答完成握手。应答完成握手。随后主设备向从设备写数据,从设备对收到的每个字节都随后主设备向从设备写数据,从设备对收到的每个字节都进行应答,直至主设备发送完全部数据向总线发出停止信号。进行应答,直至主设备发送完全

7、部数据向总线发出停止信号。 图9-25 I2C读数据时序图I I2 2C C总线上的一次读数据时序如图总线上的一次读数据时序如图9-259-25所示所示首先,由主设备向从设备发送一个读控制字节(首先,由主设备向从设备发送一个读控制字节(R/WR/W位置位置0 0)并对其想读取的地址进行一次写操作,从设备应答后,主设备并对其想读取的地址进行一次写操作,从设备应答后,主设备应答控制信号(应答控制信号(R/WR/W位置位置1 1),开始接收由从设备发送过来的),开始接收由从设备发送过来的数据,主设备对收到的每个字节都进行应答,当收到最后一字数据,主设备对收到的每个字节都进行应答,当收到最后一字节数据

8、后,主设备不做应答,向总线发送一个非应答信号,然节数据后,主设备不做应答,向总线发送一个非应答信号,然后向总线发出停止信号。后向总线发出停止信号。2 2、串行程序存储器扩展举例、串行程序存储器扩展举例 典型的典型的MCS-51MCS-51并不包含专用的并不包含专用的I2CI2C接口,但可以通接口,但可以通过并行口线模拟,方便地扩展支持过并行口线模拟,方便地扩展支持I2CI2C总线的程序存总线的程序存储器。储器。常见的支持常见的支持I2CI2C总线的程序存储器有总线的程序存储器有ATMELATMEL公司的公司的AT24XXAT24XX系列系列E2PROME2PROM和和RAMTRONRAMTRO

9、N公司的公司的FM24XXFM24XX系列系列FRAMFRAM等。等。由于均采用了由于均采用了I2CI2C总线标准,无论采用哪种类型的芯总线标准,无论采用哪种类型的芯片作为程序存储器,扩展方法均无太大区别。片作为程序存储器,扩展方法均无太大区别。图图9-269-26为为MCS-51MCS-51扩展扩展AT24C02 E2PROMAT24C02 E2PROM的参考硬件电路。的参考硬件电路。图9-26 MCS-51扩展AT24C02 E2PROM硬件电路图WPWP为写数据保护脚,当该引脚为高电平时,为写数据保护脚,当该引脚为高电平时,EEPROMEEPROM处于写处于写保护模式,该模式下数据只能从

10、保护模式,该模式下数据只能从EEPROMEEPROM内读出,写入无效;内读出,写入无效;在电路中,在电路中,WPWP接地,表示单片机可对接地,表示单片机可对EEPROMEEPROM进行读写操作。进行读写操作。A0A0、A1A1、A2A2三个管脚共同构成三个管脚共同构成EEPROMEEPROM的地址选通线,通过的地址选通线,通过这三个引脚不同的电平组合可以构成八个不同的从设备地址。也这三个引脚不同的电平组合可以构成八个不同的从设备地址。也就是说,在就是说,在I2CI2C总线上,最多可扩展总线上,最多可扩展8 8片片AT24C02AT24C02。 SDASDA为串行数据线(为串行数据线(Seria

11、l Data LineSerial Data Line) SCL SCL为串行时钟线(为串行时钟线(Serial ClockSerial Clock) VCC VCC接电源正极;接电源正极; GND GND接地接地 图9-27 AT24C02芯片引脚图 1 1)AT24C02AT24C02芯片及连线说明芯片及连线说明2 2)内部地址结构)内部地址结构AT24C02AT24C02内部分为内部分为3232页,每页有页,每页有8 8字节,由此构成字节,由此构成3232(页)(页)8 8(字节)(字节)8 8(位)(位)=2048=2048位的存储空间。位的存储空间。作为主设备的单片机对从设备作为主设

12、备的单片机对从设备AT24C02AT24C02的写操作,可以按字节写入也可的写操作,可以按字节写入也可以按页面写入。以按页面写入。而对于读操作,除了由当前单元地址读取和按页面读取外,还可以由指而对于读操作,除了由当前单元地址读取和按页面读取外,还可以由指定随机地址读取数据,在随机地址读取操作中,单片机先向总线发送包含定随机地址读取数据,在随机地址读取操作中,单片机先向总线发送包含AT24C02AT24C02从设备地址的控制字,确认从设备地址的控制字,确认AT24C02AT24C02应答后,再进行一次写操应答后,再进行一次写操作,将要读取的作,将要读取的8 8位单元地址发送给位单元地址发送给AT

13、24C02AT24C02。第二次收到应答后,单片。第二次收到应答后,单片机才开始由机才开始由AT24C02AT24C02中被指定的单元读出数据。中被指定的单元读出数据。4. 4. 编程应用编程应用【例例9-69-6】单片机从单片机从AT24C02AT24C02将地址为将地址为10H17H10H17H的的8 8个单元的内容读出,各字节数据加个单元的内容读出,各字节数据加1 1后再写入后再写入AT24C02AT24C02的原地址。的原地址。 参考参考C C程序程序#include /#include /包含头文件,该文件中定义包含头文件,该文件中定义5151寄存器地址寄存器地址#define #d

14、efine ucharuchar unsigned char unsigned char#define #define uintuint unsigned unsigned intint#define DELAY_TIME 60 /#define DELAY_TIME 60 /定义延时时间常数定义延时时间常数sbitsbit SDA=P13; / SDA=P13; /定义定义SDASDA、SCLSCL位位sbitsbit SCL=P12; SCL=P12;ucharuchar a; / a; /声明一个声明一个RAMRAM变量变量void void delay(uintdelay(uint t

15、) / t) /延时子程序延时子程序1 1,延时,延时120us120us while(twhile(t-); /-); /当当t t不为零时循环不为零时循环void delay1(uchar x) /void delay1(uchar x) /延时子程序延时子程序2 2 ucharuchar a,ba,b; /; /声明两个声明两个RAMRAM变量变量 for(afor(a=0;a=0;a=x;ax;a+) /+) /由输入参值由输入参值x x定循环次数定循环次数 for(bfor(b=0;b=100;b+); /=0;b=100;b+); /空循环空循环100100次次 void star

16、t() /void start() /启动信号启动信号 SDA=1; / SDA=1; /使使SDASDA为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SCL=1; /SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SDA=0; /SDA=0; /使使SDASDA为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 void stop() /void stop() /停止信号停止信号 SD

17、A=0; / SDA=0; /使使SDASDA为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SCL=1; /SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SDA=1; /SDA=1; /使使SDASDA为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 void void responsrespons() /() /应答信号应答信号 ACKACK ucharuchar i; / i;

18、/声明一个声明一个RAMRAM变量变量 SCL=1; /SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 while(SDAwhile(SDA=1)&(i250)i+; /SDA=1)&(i250)i+; /SDA高电平保持高电平保持 SCL=0; /SCL=0; /使使SCLSCL为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 void init() /void init() /总线初始化总线初始化 SDA=1; / SDA=1

19、; /使使SDASDA为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SCL=1; /SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 void void write_byte(ucharwrite_byte(uchar datdat) /) /写一个字节数据写一个字节数据 ucharuchar i,tempi,temp; /; /定义两个定义两个RAMRAM变量变量 temp=temp=datdat; /; /传送数据传送数据 for(ifor

20、(i=0;i8;i+) /=0;i8;i+) /一个字节一个字节8 8位数据逐一送出位数据逐一送出 temp= temp=temptemp1; /1; /左移一位将左移一位将temptemp的最高位送的最高位送C C SCL=0; / SCL=0; /使使SCLSCL为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SDA=CY; /SDA=CY; /使使SDASDA等于进位标志位(等于进位标志位(temptemp当前位数据)当前位数据) delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SCL=

21、1; /SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SCL=0; / SCL=0; /使使SCLSCL为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); ); SDA=1; / SDA=1; /使使SDASDA为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); ); ucharuchar read_byteread_byte() /() /读一个字节数据读一个字节数据 ucharuchar i,ki,k; ; SCL=0; /

22、SCL=0; /使使SCLSCL为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 SDA=1; /SDA=1; /使使SDASDA为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 for(ifor(i=0;i8;i+)=0;i8;i+) SCL=1; / SCL=1; /使使SCLSCL为高电平为高电平 delay(DELAY_TIMEdelay(DELAY_TIME); /); /延时延时 k=(k1)|SDA; /k=(k1)|SDA; /将总线上接收到的位数据传入将总线上接

23、收到的位数据传入k k SCL=0; / SCL=0; /使使SCLSCL为低电平为低电平 delay(DELAY_TIMEdelay(DELAY_TIME); ); return k; / return k; /返回返回k k值(值(1Byte1Byte) void void write_add(ucharwrite_add(uchar address,ucharaddress,uchar datdat) /) /向指定地址写数据向指定地址写数据 start(); / start(); /发送启动信号发送启动信号 write_byte(0 xa0); /write_byte(0 xa0);

24、/传送设备地址传送设备地址 responsrespons(); /(); /检查检查ACKACK write_byte(addresswrite_byte(address); /); /传送单元地址传送单元地址 responsrespons(); /(); /检查检查ACKACK write_byte(datwrite_byte(dat); /); /写入一字节的数据写入一字节的数据 responsrespons(); /(); /检查检查ACKACK stop(); / stop(); /发出结束信号发出结束信号 ucharuchar read_add(ucharread_add(uchar address) / address) /读指定地址数据函数读指定地址数据函数 ucharuchar datdat; /; /定义一个定义一个RAMRAM变量变量 start(); /start(); /发送启动信号发送启动信号 write_byte(0 xa0); /write_byte(0 xa0); /送控制字送控制字 responsrespons(); /();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论