片机的串行扩展技术.ppt_第1页
片机的串行扩展技术.ppt_第2页
片机的串行扩展技术.ppt_第3页
片机的串行扩展技术.ppt_第4页
片机的串行扩展技术.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第12章单片机的串行扩展技术单片机的串行扩展技术与并行扩展技术相比具有显著的优点 串行接口器件与单片机接口时需要的I O口线很少 仅需1 4条 极大地简化了器件间的连接 进而提高了可靠性 串行接口器件体积小 因而占用电路板的空间小 仅为并行接口器件的10 明显减少了电路板空间和成本 除上述优点外 还有工作电压宽 抗干扰能力强 功耗低 数据不易丢失等特点 因此 串行扩展技术在IC卡 智能仪器仪表以及分布式控制系统等领域得到了广泛的应用 12 1单总线接口简介单总线 1 Wirebus 是由DALLAS公司推出的外围串行扩展总线 它只有一条数据输入 输出线DQ 总线上的所有器件都挂在DQ上 电源也通过这条信号线供给 这种使用一条信号线的串行扩展技术 称为单总线技术 各种器件 由DALLAS公司提供的专用芯片实现 每个芯片都有64位ROM 厂家对每一个芯片用激光烧写编码 其中存有16位十进制编码序列号 它是器件的地址编号 确保它挂在总线上后 可以唯一被确定 除了器件的地址编码外 芯片内还包含收发控制和电源存储电路 如图12 1所示 图12 1 这些芯片的耗电量都很小 空闲时几 W 工作时几mW 工作时从总线上馈送电能到大电容中就可以工作 故一般不需另加电源 图12 2为一个由单总线构成的分布式温度监测系统 多个带有单总线接口的数字温度计和多个集成电路DS1820芯片都挂在DQ总线上 单片机对每个DS1820通过总线DQ寻址 DQ为漏极开路 须加上拉电阻 DALLAS公司为单总线的寻址及数据的传送提供了严格的时序规范 具体内容读者可查阅相关资料 图12 2 12 2SPI总线接口简介SPI SerialPeriperalInterface 是Motorola公司推出的同步串行外设接口 允许单片机与多个厂家生产的带有该接口的设备直接连接 以串行方式交换信息 使用 条线 串行时钟SCK 主器件输入 从器件输出数据线MISO 简称SO 主器件输出 从器件输入数据线MOSI 简称SI 和从器件选择线 SPI的典型应用是单主系统 该系统只有一台主器件 从器件通常是外围接口器件 如存储器 I O接口 A D D A 键盘 日历 时钟和显示驱动等 图12 3是SPI外围串行扩展结构图 图12 3 单片机与外围器件在时钟线SCK 数据线MISO和MOSI都是同名端相连 扩展多个外围器件时 SPI无法通过数据线译码选择 故接口的外围器件都有片选端 在扩展单个SPI器件时 外围器件的片选端可以接地或通过I O口控制 在扩展多个SPI器件时 单片机应分别通过I O口线来分时选通外围器件 在SPI串行扩展系统中 如果某一从器件只作输入 如键盘 或只作输出 如显示器 时 可省去一条数据输出 MISO 或一条数据输入 MOSI 从而构成双线系统 接地 SPI系统中从器件的选通依靠其引脚 数据传送软件十分简单 省去了传输时的地址选通字节 但在扩展器件较多时 连线较多 在SPI串行扩展系统中 作为主器件的单片机在启动一次传送时 便产生8个时钟 传送给接口芯片作为同步时钟 控制数据的输入和输出 数据的传送格式是高位 MSB 在前 低位 LSB 在后 如图12 4所示 数据线上输出数据的变化以及输入数据时的采样 都取决于SCK 但对于不同的外围芯片 有的可能是SCK的上升沿起作用 有的可能是SCK的下降沿起作用 图12 4 SPI有较高的数据传输速度 最高可达1 05Mb s Motorola公司为广大用户提供了一系列具有SPI接口的单片机和外围接口芯片 如存储器MC2814 显示驱动器MC14499和MC14489等芯片 SPI外围串行扩展系统的主器件是单片机 也可以不带SPI接口 但是从器件一定要有具有SPI接口 12 3I2C串行总线的组成及工作原理I2C串行总线只有两条信号线 一条是数据线SDA 另一条是时钟线SCL 所有连接到I2C总线上器件的数据线都接到SDA线上 各器件的时钟线均接到SCL线上 I2C总线系统的基本结构如图12 5所示 它可以使具有I2C总线的单片机 如PHILIPS公司的8xC552 直接与具有I2C总线接口的各种扩展器件 如存储器 I O口 A D D A 键盘 显示器 日历 时钟 连接 对不带有I2C接口的单片机 如89C51 可采用普通的I O口结合软件模拟I2C串行接口总线时序的方法 完成I2C总线的串行接口功能 12 3 1I2C串行总线概述只有两条信号线 一条是数据线SDA 另一条是时钟线SCL 所有连接到I2C总线上器件的数据线都接到SDA线上 各器件的时钟线均接到SCL线上 系统的基本结构如图12 5所示 图12 5 I2C的运行由主器件控制 主器件是指启动数据的发送 发出起始信号 发出时钟信号 传送结束时发出终止信号的器件 主器件可以具有I2C总线接口 也可以不带I2C总线接口 从器件可以是存储器 LED或LCD驱动器 A D或D A转换器 时钟 日历器件等 从器件必须带有I2C总线接口 I2C串行总线的SDA和SCL是双向的 带有I2C总线接口的器件的输出端为漏级开路 故必须通过上拉电阻接正电源 见图12 5中的两个电阻 总线空闲时 两条线均为高电平 由于连接到总线上的器件的输出级必须是漏级或集电极开路的 只要有一个器件输出低电平 都将使总线上的信号变低 SCL线上的时钟信号对SDA 线上的各器件间的数据传输起同步控制作用 SDA线上的数据起始 终止及数据的有效性均要根据SDA线上的时钟信号来判断 标准I2C普通模式 数据的传输速率为100kb s 高速模式可达400kb s 总线上扩展器件的数量不是由电流负载决定 而是由电容负载确定 I2C总线上每个节点器件的接口都有一定的等效电容 连接的器件越多 电容值越大 这会造成信号传输的延迟 总线上允许的器件数以总线上的电容量不超过400pF 通过驱动扩展可达4000pF 据此可计算出总线长度及连接器件的数量 每个连到I2C总线上的器件都有一个唯一的地址 扩展器件时同时也要受器件地址数目的限制 I2C总线系统允许多主器件 为避免混乱 某一时刻究竟由哪一台主器件来控制总线要通过总线仲裁来决定 读者可查阅I2C总线的仲裁协议 当然 经常遇到的是以单片机为主器件 其他外围接口器件为从器件的单主器件情况 12 3 2I2C总线的数据传送1 数据位的有效性规定在I2C总线上 每一数据位的传送都与时钟脉冲相对应 逻辑 0 和逻辑 1 的信号电平取决于相应电源VCC的电压 I2C总线在进行数据传送时 时钟线为高电平期间 数据线上的数据必须保持稳定 只有在时钟线为低电平期间 数据线上的高电平或低电平状态才允许变化 如图12 6所示 根据I2C总线协议 总线上数据传送的信号由起始信号 S 终止信号 P 应答信号 A 非应答信号 A 以及总线数据位组成 图12 6 1 起始信号 S 在SCL线为高电平期间 SDA线由高电平向低电平的变化表示起始信号 只有在起始信号以后 其他命令才有效 2 终止信号 P 在SCL线为高电平期间 SDA线由低电平向高电平的变化表示终止信号 随着终止信号的出现 所有外部操作都结束 起始和终止信号都是由主器件发出的 在起始信号产生后 总线就处于被占用的状态 在终止信号出现后 总线就处于空闲状态 起始信号和终止信号如图12 7所示 图12 7 若连接到I2C总线上的器件具有I2C总线的硬件接口 则很容易检测到起始和终止信号 对于不具备I2C总线硬件接口的有些单片机 如89C51 为了检测起始和终止信号 必须保证在每个时钟周期内对数据线SDA取样两次 3 应答信号 A I2C总线在每传送一字节数据后都必须有应答信号 与应答信号线对应的时钟信号由主器件产生 这时发送方必须在这一时钟位上使数据总线处于高电平状态 以便接收方在这一位上送出应答信号 如图12 8所示 应答信号在第9个时钟位上出现 接收方输出低电平为应答信号A 4 非应答信号 A 每传送完一字节数据后 在第9个时钟位上接收方输出高电平为应答信号 图12 8 2 I2C总线上数据字节的传送与应答数据传送时 传送的字节数 数据帧 没有限制 但是每一字节必须是8位长度 先传送最高位 MSB 每一个被传送的字节后面都必须跟随1位应答位 即一帧共有9位 见图12 8 接收器件收到一个完整的数据字节后 有可能需要完成一些其他工作 如从器件正在进行实时性的处理工作而无法接收总线上的数据 不需要立刻接收下一字节 这时接收器件可以将SCL线拉成低电平 从而使主器件处于等待状态 直到接收器件准备好接收下一个字节时 再释放SCL线使之为高电平 从而使数据传送可以继续进行 如果主器件对从器件进行了应答 但在数据传送一段时间后无法继续接收更多的数据 从器件可以通过对无法接收的第一个数据字节的 非应答 通知主器件 主器件则应发出终止信号以结束数据的继续传送 当主器件接收数据时 它收到从器件发出的最后一个数据字节后 必须向主器件发出一个结束传送的信号 这个信号是由对从器件的 非应答 来实现的 然后 从器件释放SDA线 以允许主器件产生终止信号 I2C总线上应答与非应答信号见图12 8 12 4AT89C51单片机扩展I2C总线器件的接口设计随着微电子技术的发展 许多公司 如PHILIPS Motorola ATMEL和MAXIM等 都推出许多带有I2C总线接口的单片机及各种外围器件 如 存储器 A D转换器 D A转换器 LED及LCD驱动器 日历时钟电路 且带有256 8RAM 如PHILIPS公司的PCF8553 和PCF8570 256 8RAM 等 MAXIM公司的MAX127 128 A D 和MAX517 518 519 D A ATMEL公司的AT24C系列存储器等 I2C总线系统中的主器件通常由单片机来担当 它可以具有I2C总线接口 也可以不带I2C总线接口 从器件必须带有I2C总线接口 对于89C51单片机 没有配置I2C总线接口 这时可以利用通用并行I O口线模拟I2C总线接口的时序 使89C51单片机不受没带I2C总线接口的限制 因此 在许多单片机应用系统中 都将I2C总线的模拟传送技术作为常规的设计方法 下面介绍89C51单片机扩展I2C总线器件的硬件接口设计 然后介绍用89C51I O口结合软件模拟I2C总线数据传送 以及数据传送模拟通用子程序的设计 12 4 1I2C总线器件的扩展接口电路AT89C51单片机的I2C总线扩展的硬件接口设计比较简单 图12 9为一个89C51单片机与具有I2C总线接口器件的扩展电路 图12 9所示为一个AT89C51单片机与具有I2C总线接口器件的扩展电路 图中 AT24C02为E2PROM芯片 PCF8570为静态256 8RAM PCF8574为8位I O口 SAA1064为4位LED驱动器 有关各种器件的具体工作原理和用法参见有关资料 图12 9 12 4 2I2C总线数据传送的模拟AT89C51单片机为单主器件的工作方式下 总线数据的传送控制比较简单 没有总线的竞争与同步 只存在单片机对I2C总线上各从器件的读 单片机接收 写 单片机发送 操作 通常可利用软件实现I2C总线的数据传送 即软件与硬件结合的信号模拟 1 典型信号模拟为保证数据传送的可靠性 标准I2C总线的数据传送有严格的时序要求 I2C总线的起始信号 终止信号 发送 0 及发送 1 的模拟时序如图12 10 图12 13所示 表12 1所示为I2C总线的时序特性 表中的数据为程序模拟I2C总线信号提供了基础 由表可知 除了SDA SCL线的信号下降时间为最大值外 其他参数只有最小值 这表明在I2C总线的数据传送中 可以利用时钟同步机制展宽低电平周期 迫使主器件处于等待状态 使传送速率降低 对于一个新的起始信号 要求起始前总线的空闲时间TBUF大于4 7 s 而对于一个重复的起始信号 要求建立时间TSU STA也须大于4 7 s 所以 图12 10所示的起始信号适用于数据模拟传送中任何情况下的起始操作 起始信号到第1个时钟脉冲的时间间隔应大于4 0 s 对于终止信号 要保证有大于4 7 s的信号建立时间TSU STO 终止信号结束时 要释放总线 使SDA SCL维持在高电平上 在大于4 7 s后才可以进行第1次起始操作 在单主器件系统中 为防止非正常传送 终止信号后SCL可以设置在低电平 对于发送应答位 非应答位来说 与发送数据 0 和 1 的信号定时要求完全相同 只要满足在时钟高电平大于4 0ms期间 SDA线上有确定的电平状态即可 2 典型信号模拟子程序主器件采用AT89C51 晶振频率为6MHz 即机器周期为2ms 对常用的几个典型信号的波形模拟如下 1 起始信号S起始信号S的时序波形如图12 10所示 图12 10 子程序如下 START SETBP1 7 SDA 1SETBP1 6 SCL 1NOPNOPCLRP1 7 SDA 0NOP 起始信号保持4msNOPCLRP1 6 SCL 0RET 2 终止信号P终止信号P的时序波形如图12 11所示 图12 11 子程序如下 STOP CLRP1 7 SDA 0SETBP1 6 SCL 1NOP 终止信号建立时间NOPSETBP1 7 SDA 1NOPNOPCLRP1 6CLRP1 7RET 3 发送应答位 0 发送应答位 数据 0 如图12 12所示 图12 12 子程序如下 ASK CLRP1 7 SDA 0SETBP1 6 SCL 1NOPNOPCLRP1 6 SCL 0SETBP1 7 SDA 1RET 4 发送非应答位 1 发送非应答位 数据 1 的时序波形如图12 13 图12 13 子程序如下 NASK SETBP1 7 SDA 1SETBP1 6 SCL 1NOPNOPCLRP1 6 SCL 0CLRP1 7 SDA 0RET 12 4 3I2C总线模拟通用子程序I2C总线操作中除了基本的起始信号 终止信号 发送应答位和发送非应答位外 还有应答位检查 发送1字节 接收1字节 发送n字节和接收n字节子程序 1 应答位检查子程序在应答位检查子程序CACK中 设置了标志位F0 当检查到正常的应答位时 F0 0 否则F0 1 参考子程序如下 CACK SETBP1 7 SDA为输入线SETBP1 6 SCL 1 SDA引脚上的数据有效CLRF0 预设F0 0MOVC P1 7 读入SDA线的状态JNCCEND 应答正常 则转F0 0SETBF0 应答不正常 F0 1CEND CLRP1 6 子程序结束 使SCL 0RET 2 发送1字节数据子程序模拟I2C的数据线SDA发送1字节数据的子程序 调用本子程序前 将欲发送的数据送入A中 参考子程序如下 S1BYTE MOVR6 08H 8位数据长度送入R6中WLP RLCA A左移 发送位进入CMOVP1 7 C 将发送位送入SDA引脚SETBP1 6 SCL 1 使SDA引脚上的数据有效NOPNOPCLRP1 6 SDA线上数据变化DJNZR6 WLPRET 3 接收1字节数据子程序模拟从I2C数据线SDA读取1字节数据 并存入R2中 程序如下R1BYTE MOVR6 08H 8位数据长度送入R6中RLP SETBP1 7 置SDA数据线为输入方式SETBP1 6 SCL 1 使SDA数据线上的数据有效MOVC P1 7 读入SDA引脚状态MOVA R2 RLCA 将C读入AMOVR2 A 将A存入R2CLRP1 6 SCL 0 继续接收数据DJNZR6 RLPRET 4 发送n字节数据子程序本子程序用来模拟主器件向I2C的数据线SDA连续发送n字节数据 从器件接收 子程序的编写必须遵照I2C总线规定的读 写格式进行 连续发送n字节数据的格式如下 其中 SLAW为外围器件寻址字节 写 本子程序定义了如下一些符号单元 MSBUF 主器件发送数据缓冲区首地址的存放单元 WSLA 外围器件寻址字节 写 的存放单元 NUMBYT 发送n字节数据的存放单元 在调用本程序之前 必须将寻址字节代码存放在WSLA单元 必须将要发送的n字节数据依次存放在以MSBUF单元内容为首地址的发送缓冲区内 调用本程序后 依次传送到外围器件内部相应的单元中 在写入过程中 外围器件的单元地址具有自动加1功能 即自动修改地址指针 这使传送过程大大简化 参考子程序如下 SNBYTE MOVR7 NUMBYT 发送字节数送R7LCALLSTART 调用起始信号模拟子程序MOVA WSLA 发送SLAW寻址字节LCALLS1BYTE 调用发送1字节子程序LCALLCACK 检查应答位 JBF0

温馨提示

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

评论

0/150

提交评论