第8章89C51总线扩展技术本章要点串行扩展特点串行扩展方式分类虚拟串行扩展慨念移位寄存器串行扩展方式80C51I/O虚拟串行接口I2C总线串行扩展技术I2C总线扩展I/O口通用器件PCF8574虚拟I2C总线扩展AT24CXX系列E2PROM并行扩展总线组成(地址、数据、控制总线)并行扩展寻址方式(线选法、译码法)并行扩展EPROM并行扩展E2PROM并行扩展RAM用74系列芯片并行扩展I/O口扩展总线驱动能力89C51系列单片机有很强的外部扩展能力。外部扩展可分为并行扩展和串行扩展两大形式。早期的单片机应用系统以采用并行扩展为多,近期的单片机应用系统以采用串行扩展为多。外部扩展的器件可以有ROM、RAM、I/O口和其他一些功能器件,扩展器件大多是一些常规芯片,有典型的扩展应用电路,可根据规范化电路来构成能满足要求的应用系统。§8-1串行扩展概述一、串行扩展特点⑴最大程度发挥最小系统的资源功能。原来由并行扩展占用的P0口、P2口资源,直接用于I/O口。⑵简化连接线路,缩小印板面积。⑶扩展性好,可简化系统的设计。⑷串行扩展的缺点:数据吞吐容量较小,信号传输速度较慢,但随着CPU芯片工作频率的提高,以及串行扩展芯片功能的增强,这些缺点将逐步淡化。1、一线制二、串行扩展方式分类一线制的典型代表为Dallas公司推出的单总线(1-wire)。2、二线制二线制的典型代表为philips公司推出的I2C总线(IntelIntegratedCircuitBUS)。三线制(不包括片选线)主要有两种:⑴由Motorala公司推出的SPI(SerialperipheralInterface);⑵由NS公司推出的Microwire/PLUS。3、三线制SPI的时钟线是SCK,数据线MOSI(主发从收)、MOSO(主收从发),主从器件的MOSI和MOSO是同名端相连。由于该两类器件无法通过数据传输线寻址,因此,必须由MCUI/O线单独寻址,连到扩展器件的片选端CS(若只扩展一片,可将扩展芯片CS接地)。Microwire/PLUS的时钟线是SK,数据线为SI和SO,但SI、SO依照主器件的数据传送方向而定,主器件的SO与所有扩展器件数据输入端DI或SI相连;主器件的SI与所有扩展器件数据输出端DO或SO相连。4、80C51移位寄存器串行扩展80C51的UART(UniversalAsynohronousReceiver/Transmitter)有4种工作方式,其中方式0为同步移位寄存器工作方式,通过移位寄存方式,可将串行数据并行输出,也可以将并行数据串行输入。三、虚拟串行扩展概念用通用I/O口来模拟串行接口,构成虚拟的串行扩展接口。只要严格控制模拟同步信号,并满足串行同步数据传送的时序要求,就可满足串行数据传送的可靠性要求。§8-289C51移位寄存器串行扩展技术一、移位寄存器串行扩展方式80C51串行方式0时,串行口作为同步移位寄存器使用。TXD端(P3.1)发出移位脉冲,频率为fosc/12,RXD端(P3.0)输入输出数据。1、80C51扩展并行输出口74LS164为串入并出移位寄存器,其中A、B为串行数据输入端,QA、QB、…、QH为并行数据输出端(QA为高位),CLK为同步时钟输入端,CLR为输出清0端。若不需将输出数据清0,则CLR端接Vcc。2、80C51扩展并行输入口74LS165为并入串出移位寄存器,A、B、…、H为并行输入端(A为高位),QH为串行数据输出端,SER为串行数据输入端,CLK为同步时钟输入端,S/L为预置控制端。S/L=0时,锁存并行输入数据;S/L=1时,可进行串行移位操作。80C51串行方式0归一化子程序:⑴单字节串行输出子程序⑵单字节串行输入子程序⑶多字节串行输出子程序⑷多字节串行输入子程序二、串行方式0归一化子程序所谓归一化子程序,即通用或标准化操作子程序,将80C51串行方式0所有应用操作归纳成几个基本的输入输出子程序,并使这些标准子程序具有规范的入口条件和出口状态。应用时,只要设置相应的入口和出口,调用归一化子程序,就能达到串行输入输出的目的。80C51虚拟串行I/O口归一化子程序:⑴单字节虚拟串行输出子程序⑵单字节虚拟串行输入子程序⑶多字节虚拟串行输出子程序⑷多字节虚拟串行输入子程序三、80C51I/O虚拟串行接口利用80C51通用I/O口虚拟移位寄存器工作方式实现串行扩展,只需用任一通用I/O口代替RXD和TXD,设为VRXD和VTXD。四、移位寄存器串行扩展应用80C51移位寄存器串行扩展应用,只需根据标准化的电路形式连接,设置好入口条件,然后调用串行方式0归一化子程序或虚拟串行接口归一化子程序,即可完成扩展应用。【例8-1】电路如图8-5所示,fosc=12MHz,要求发光二极管从左向右依次点亮,点亮时间为1秒,不断循环。设串行方式0归一化子程序已存在ROM中。解:PIOX1BITP1.0;定义PIOX1WORK:MOVA,#10000000B;置D7灯亮,其余暗LOOP:CLRPIOX1;74LS164输出全0,灯全暗LCALLUART0;调用单字节串行输出子程序LCALLDLY1s;调用延时1秒子程序(略)RRA;右移SJMPLOOP;1、扩展连接方式§8-3I2C总线串行扩展技术一、I2C总线串行扩展概述具有I2C总线结构的器件,不论SRAM、E2PROM、ADC/DAC、I/O口或MCU,均可通过SDA、SCL连接(同名端相连)。无I2C总线结构的器件,如LED/LCD显示器、键盘、码盘、打印机等也可通过具有I2C总线结构的I/O接口电路成为串行扩展器件。2、器件寻址方式I2C总线器件地址SLA格式如下:具有I2C总线结构的器件在器件出厂时已经给定了器件的地址编码。SLAD7D6D5D4D3D2D1D0DA3DA2DA1DA0A2A1A0R/W器件固有地址编码器件引脚地址读/写⑴DA3~DA04位器件地址是I2C总线器件固有的地址编码,器件出厂时就已给定,用户不能自行设置。⑵A2A1A03位引脚地址用于相同地址器件的识别。若I2C总线上挂有相同地址的器件,或同时挂有多片相同器件时,可用硬件连接方式对3位引脚A2A1A0接Vcc或接地,形成地址数据。⑶R/W数据传送方向。R/W=1时,主机接收(读);R/W=0时,主机发送(写)。表8-1常用I2C器件地址SLA种类型号器件地址SLA引脚地址备注静态RAMPCF8570/711010A2A1A0R/W3位数字引脚地址A2A1A0PCF8570C1011A2A1A0R/W3位数字引脚地址A2A1A0E2PROMPCF85821010A2A1A0R/W3位数字引脚地址A2A1A0AT24C021010A2A1A0R/W3位数字引脚地址A2A1A0AT24C041010A2A1P0R/W2位数字引脚地址A2A1AT24C081010A2P1P0R/W1位数字引脚地址A2AT24C0161010P2P1P0R/W无引脚地址,A2A1A0悬空处理I/O口PCF85740100A2A1A0R/W3位数字引脚地址A2A1A0PCF8574A0111A2A1A0R/W3位数字引脚地址A2A1A0LED/LCD驱动控制器SAA106401110A1A0R/W2位数字引脚地址A1A0PCF8576011100A0R/W1位数字引脚地址A0PCF8578/79011110A0R/W1位数字引脚地址A0ADC/DACPCF89511001A2A1A0R/W3位数字引脚地址A2A1A0日历时钟PCF8583101000A0R/W1位数字引脚地址A03、接口电气结构I2C总线端口输出为开漏结构,总线上必须外接上拉电阻Rp,其阻值通常可选5~10KΩ。4、总线驱动能力由于I2C总线器件均为CMOS器件,总线具有足够的电流驱动能力。I2C总线的电容负载能力为400pF(通过驱动扩展可达4000pF)。I2C总线传输速率为100Kb/s(改进后的规范为400Kb/s)。5、I2C总线时序一次完整的数据传送过程应包括:起始(S)、发送寻址字节(SLAR/W)、应答、发送数据、应答、…、发送数据、应答、终止(P)。80C51只能采用虚拟I2C总线方式,并且只能用于单主系统,虚拟I2C总线接口可用通用I/O口中任一端线充任,数据线定义为VSDA,时钟线定义为VSCL。二、80C51单主系统虚拟I2C总线软件包80C51单主系统虚拟I2C总线软件包VIIC可由二大类共9个归一化子程序组成。二大类程序分别为典型信号模拟子程序和数据传送通用子程序。1、典型信号模拟子程序对于虚拟I2C总线,有几个重复应用的典型信号,可根据I2C总线时序要求,编制这些典型信号子程序:⑴启动信号STAT⑵终止信号STOP⑶发送应答位(A)MACK⑷发送应答非位(A)NACK⑸检查应答位CACK2、数据传送通用子程序数据传送通用子程序是应用典型信号模拟子程序(起始、终止、应答和检查应答)并按I2C总线数据传送时序要求编制的子程序。⑴发送一字节数据子程序WR1B⑵接收一字节数据子程序RD1B⑶发送N个字节数据子程序WRNB⑷接收N个字节数据子程序RDNB按照I2C总线数据传送时序要求,一次完整的数据发送过程应包括起始(S)、发送寻址字节(SLAR/W)、应答、发送数据、应答、…、发送数据、应答、终止(P),其格式如下:SSLAWAdata1Adata2A……dataNAP其中,红色部分由主器件发送,从器件接收;黑色部分由从器件发送,主器件接收。发送N个字节数据子程序WRNB入口条件:①伪指令定义NUMB、SLA、MTD单元地址;②发送数据字节数存内RAMNUMB单元;③发送寻址字节存内RAMSLA单元;④发送数据依次存放在首址为MTD的内RAM中。占用资源:Acc、R1、R2、R3、Cy、F0。WRNB:MOVR3,NUMB;取发送数据字节数N(存在内RAMNUMB单元)WRNB0:LCALLSTAT;启动I2C总线MOVA,SLA;读发送寻址字节(存在内RAMSLA单元)LCALLWR1B;发送寻址字节LCALLCACK;检查应答位JBF0,WRNB0;应答不正常,返回重发MOVR1,#MTD;应答(A)正常,取发送数据存储区首址WRDA:MOVA,@R1;读一个字节发送数据LCALLWR1B;发送一个字节LCALLCACK;检查应答位JBF0,WRNB;应答不正常,返回重发INCR1;应答(A)正常,指向发送数据下一字节DJNZR3,WRDA;判N个数据发送完毕否?未完继续LCALLSTOP;N个数据发送完毕,发送结束信号RET;按照I2C总线数据传送时序要求,接收N个字节数据应按下列格式编程:接收N个字节数据子程序RDNBSSLARAdata1Adata2A…dataNAP其中,红色部分由主器件发送,从器件接收;黑色部分由从器件发送,主器件接收。入口条件:①伪指令定义NUMB、SLA、MRD地址;②接收数据字节数存内RAMNUMB单元;③接收寻址字节存内RAMSLA单元。出口状态:接收N个字节依次存在首址MRD的内RAM中。占用资源:Acc、R1、R2、R3、Cy、F0。RDNB:MOVR3,NUMB;取接收数据字节数N(存在内RAMNUMB单元)RDNB0:LCALLSTAT;启动I2C总线MOVA,SLA;读接收寻址字节(存在内RAMSLA单元)LCALLWR1B;发送接收寻址字节LCALLCACK;检查应答位JBF0,RDNB0;应答不正常,返回重新开始RDA0:MOVR1,#MRD;应答(A)正常,取接收数据存储区首址RDA1:LCALLRD1B;接收一个字节数据MOV@R1,A;存一个字节数据DJNZR3,ACK;判N个数据接收完毕否?未完转发送应答位LCALLNACK;N个数据接收完毕,发送应答非位(A)LCALLSTOP;发送终止信号RET;子程序结束返回ACK:LCALLMACK;发送应答位(A)INCR1;指向下一接收数据存储单元地址SJMPRDA1;转接收下一字节数据