第09章 单片机系统资源扩展.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第09章 单片机系统资源扩展

授课教师:左敬龙 单片机应用系统资源扩展 I2C(Inter-Integrated Circuit)是飞利浦公司于二十世纪80年代初期推出的一种“芯片互联”串行总线标准,起初设计的最高传送速率为100kbps,主要用于低带宽、短距离的板内芯片通信。 目前,I2C总线的理论最高传输速率可达到3.4Mbps,且通信范围也早已不仅仅局限在板内。 开始及停止信号的定义 I2C总线上主设备发送起始信号启动发送过程后,还需要发送一个控制字节来初始化从设备的地址及读写操作。 控制字节的定义如图9-23所示,高4位数据为设备类型号,例如EEPROM的设备类型号为1010。 紧接着3位数据为从设备的地址,这三位数据的值由从设备相应的引脚电平来确定。 最低位为读写标志,当该位为1时,表示主设备对从设备进行读数据操作,当该位为0时,表示向从设备写入数据。 应答信号 I2C总线传送数据时,设备需要对每一个接受到的字节进行应答,具体表现为应答设备在第9个时钟周期将SDA线下拉到低电平,即产生一个应答信号(ACK)。 对于主设备发起的写操作而言,从设备每接受完一个字节后向总线发送一个ACK。 反之,主设备进行读操作时,在收到从设备过来的一个字节的数据后由主设备发送一个ACK应答从设备,当收到从设备发过来的最后一个数据后,主设备发送一个非应答信号(NOACK),然后结束。 I2C总线上一次完整的写数据时序如图9-24所示 在向总线发送起动信号取得总线使用权之后,主设备发送一个控制字节,与控制字中地址相同的从设备在收到控制字后向总线发送一个ACK应答完成握手。 随后主设备向从设备写数据,从设备对收到的每个字节都进行应答,直至主设备发送完全部数据向总线发出停止信号。 2、串行程序存储器扩展举例 典型的MCS-51并不包含专用的I2C接口,但可以通过并行口线模拟,方便地扩展支持I2C总线的程序存储器。 常见的支持I2C总线的程序存储器有ATMEL公司的AT24XX系列E2PROM和RAMTRON公司的FM24XX系列FRAM等。 由于均采用了I2C总线标准,无论采用哪种类型的芯片作为程序存储器,扩展方法均无太大区别。 图9-26为MCS-51扩展AT24C02 E2PROM的参考硬件电路。 WP为写数据保护脚,当该引脚为高电平时,EEPROM处于写保护模式,该模式下数据只能从EEPROM内读出,写入无效;在电路中,WP接地,表示单片机可对EEPROM进行读写操作。 A0、A1、A2三个管脚共同构成EEPROM的地址选通线,通过这三个引脚不同的电平组合可以构成八个不同的从设备地址。也就是说,在I2C总线上,最多可扩展8片AT24C02。 SDA为串行数据线(Serial Data Line) SCL为串行时钟线(Serial Clock) VCC接电源正极; GND接地 2)内部地址结构 AT24C02内部分为32页,每页有8字节,由此构成32(页)×8(字节)×8(位)=2048位的存储空间。 作为主设备的单片机对从设备AT24C02的写操作,可以按字节写入也可以按页面写入。 而对于读操作,除了由当前单元地址读取和按页面读取外,还可以由指定随机地址读取数据,在随机地址读取操作中,单片机先向总线发送包含AT24C02从设备地址的控制字,确认AT24C02应答后,再进行一次写操作,将要读取的8位单元地址发送给AT24C02。第二次收到应答后,单片机才开始由AT24C02中被指定的单元读出数据。 4. 编程应用 【例9-6】单片机从AT24C02将地址为10H~17H的8个单元的内容读出,各字节数据加1后再写入AT24C02的原地址。 参考C程序 #includereg51.h //包含头文件,该文件中定义51寄存器地址 #define uchar unsigned char #define uint unsigned int #define DELAY_TIME 60 //定义延时时间常数 sbit SDA=P1^3; //定义SDA、SCL位 sbit SCL=P1^2; uchar a; //声明一个RAM变量 void delay(uint t) //延时子程序1,延时120us { while(t--); } //当t不为零时循环 void delay1(uchar x) //延时子程序2 { uchar a,b;

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档