单片机小系统及片外扩展_第1页
单片机小系统及片外扩展_第2页
单片机小系统及片外扩展_第3页
单片机小系统及片外扩展_第4页
单片机小系统及片外扩展_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机小系统及片外扩展第1页,共141页,2022年,5月20日,2点47分,星期二8.1 串行扩展总线接口技术89C51除芯片自身具有UART可用于串行扩展I/O口线以外,还可利用89C51的34根I/O口线进行SPI或I2C的外设芯片扩展,以及单总线的扩展。串行扩展总线技术是新一代单片机技术发展的一个显著特点。与并行扩展总线相比,串行扩展总线有电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等优点。第2页,共141页,2022年,5月20日,2点47分,星期二8.1.1 SPI串行外设接口总线SPI(Serial Peripheral InterfaceSPI总线是Mot

2、orola公司提出的一种同步串行外设接口。允许MCU与各种外围设备以同步串行方式进行通信。其外围设备种类繁多,从最简单的TTL移位寄存器到复杂的LCD显示驱动器、网络控制器等,可谓应有尽有。 第3页,共141页,2022年,5月20日,2点47分,星期二SPI系统可直接与各个厂家生产的多种标准外围器件直接接口,它只需4条线: 串行时钟线(SCK)、主机输入/从机输出数据线MISO、主机输出/从机输入数据线MOSI和低电平有效的从机选择线CS(SS)。在SPI接口中,数据的传输只需要1个时钟信号和2条数据线。第4页,共141页,2022年,5月20日,2点47分,星期二由于SPI系统总线只需34

3、位数据线和控制线即可扩展具有SPI的各种I/O器件,而并行总线扩展方法需8根数据线、816位地址线、23位控制线,因而SPI总线的使用可以简化电路设计,省掉了很多常规电路中的接口器件,提高了设计的可靠性。第5页,共141页,2022年,5月20日,2点47分,星期二SPI总线的特点:(串行外围设备接口:serial peripheral interface)一般使用4条线串行时钟线(SCK)主机输入/从机输出数据线MISO主机输出/从机输入数据线MOSI低电平有效的从机选择线SS第6页,共141页,2022年,5月20日,2点47分,星期二1. SPI总线系统的组成图8-1是SPI总线系统典型

4、结构示意图。图8-1 SPI外围扩展示意图第7页,共141页,2022年,5月20日,2点47分,星期二单片机与外围扩展器件在时钟线SCK、数据线MOSI和MISO上都是同名端相连。带SPI接口的外围器件都有片选端CS。在扩展多个SPI外围器件(如图8-1所示)时,单片机应分别通过I/O口线来分时选通外围器件。第8页,共141页,2022年,5月20日,2点47分,星期二SPI有较高的数据传送速度,主机方式最高速率可达1.05 Mb/s,目前不少外围器件都带有SPI接口。在大多数应用场合中,使用1个MCU作为主机,控制数据向1个或多个从外围器件的传送。从器件只能在主机发命令时,才能接收或向主机

5、传送数据。其数据的传输格式是高位(MSB)在前,低位(LSB)在后。第9页,共141页,2022年,5月20日,2点47分,星期二当SPI工作时,在移位寄存器中的数据逐位从输出引脚(MOSI)输出(高位在前),同时从输入引脚(MISO)接收的数据逐位移到移位寄存器(高位在前)。发送一字节后,从另一个外围器件接收的字节数据进入移位寄存器中。主SPI的时钟信号(SCK)使传输同步。第10页,共141页,2022年,5月20日,2点47分,星期二SPI总线有以下主要特性: 全双工、3线同步传输;主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。其典型时序图如图8-2所

6、示。图8-2 SPI串行总线典型时序图第11页,共141页,2022年,5月20日,2点47分,星期二2. 89C51单片机串行扩展SPI外设接口的方法1) 用一般I/O口线模拟SPI操作对于没有SPI接口的89C51来说,可使用软件来模拟SPI的操作,包括串行时钟、数据输入和输出。对于不同的串行接口外围芯片,它们的时钟时序是不同的。对于在SCK的上升沿输入(接收)数据和在下降沿输出(发送)数据的器件,一般应取图8-3中的串行时钟输出P1.1的初始状态为1;在允许接口芯片后,置P1.1为0。第12页,共141页,2022年,5月20日,2点47分,星期二因此,MCU输出1位SCK时钟,同时,使

7、接口芯片串行左移,从而输出1位数据至89C51的P1.3(模拟MCU的MISO线);再置P1.1为1,使89C51从P1.0输出1位数据(先为高位)至串行接口芯片。至此,模拟1位数据输入/输出完成。以后再置P1.1为0,模拟下一位的输入/输出依次循环8次,可完成1次通过SPI传输1字节的操作。对于在SCK的下降沿输入数据和上升沿输出数据的器件,则应取串行时钟输出的初始状态为0,在接口芯片允许时,先置P1.1为1,此时,外围接口芯片输出1位数据(MCU接收1位数据);再置时钟为0,外围接口芯片接收1位数据(MCU发送1位数据),可完成1位数据的传送。第13页,共141页,2022年,5月20日,

8、2点47分,星期二图8-3为89C51(MCU)与MCM2814(E2PROM)的硬件连接图。图8-3 SPI总线接口原理图第14页,共141页,2022年,5月20日,2点47分,星期二图8-3中,P1.0模拟MCU的数据输出端(MOSI),P1.1模拟SPI的SCK输出端,P1.2模拟SPI的从机选择端,P1.3模拟SPI的数据输入端(MISO)。下面介绍用89C51汇编语言模拟SPI串行输入、串行输出和串行输入/输出3个子程序。这些子程序也适用于在串行时钟的上升沿输入和下降沿输出的各种串行外围接口芯片,如8位或10位A/D芯片,74LS系列输出芯片等。对于下降沿输入、上升沿输出的各种串行

9、外围接口芯片,只须改变P1.1的输出顺序,即输出0,再输入1;再输出0则这些子程序也同样适用。第15页,共141页,2022年,5月20日,2点47分,星期二(1) MCU串行输入子程序SPIIN从MCM2814的SPISO线上接收1字节数据并放入寄存器R0中。SPIIN:SETB P1.1;使P1.1(时钟)输出为1 CLRP1.2;选择从机MOVR1,#08H;置循环次数SPIN1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPMOVC,P1.3;从机输出SPISO送进位CRLCA;左移至累加器ACCSETBP1.0;使P1.0(时钟)输出为1DJNZR1,SPIN1;判断是

10、否循环8次(1字节数据)MOVR0,A;1字节数据送R0RET;返回第16页,共141页,2022年,5月20日,2点47分,星期二(2) MCU串行输出子程序SPIOUT将89C51中R0寄存器的内容传送到MCM2814的SPISI线上。SPIOUN:SETBP1.1;使P1.1(时钟)输出为1CLRP1.2;选择从机MOVR1,#08H;置循环次数MOVA,R0;1字节数据送累加器ACCSPIOT1:CLRP1.1;使P1.1(时钟)输出为0NOP;延时NOPRLCA;左移至累加器ACC最高位至CMOVP1.0,C;进位C送从机输入SPISI线上SETBP1.1;使P1.1(时钟)输出为1

11、DJNZR1,SPIOT1;判断是否循环8次(1字节数据)RET;返回第17页,共141页,2022年,5月20日,2点47分,星期二(3) MCU串行输入/输出子程序SPIIO将89C51中R0寄存器的内容传送到MCM2814的SPISI中,同时从MCM2814的SPISO接收1字节数据存入R0中。SPIIO:SETBP1.1;使P1.1(时钟)输出为1CLRP1,2;选择从机MOVR1,#08H;置循环次数MOVA,R0;1字节数据送累加器ACCSPIO1:CLR P1.1;使P1.1(时钟)输出为0NOP;延时NOPMOVC,P1.3;从机输出SPISO送进位CRLCA;左移至累加器AC

12、C最高位至CMOVP1.0,C;进位C送从机输入SETBP1.1;使P1.1(时钟)输出为1DJNZR1,SPIO1;判断是否循环8次(1字节数据)MOVR0,ARET;返回第18页,共141页,2022年,5月20日,2点47分,星期二2) 利用89C51串行口实现SPI操作单片机应用系统中,最常用的功能无非是开关量I/O、A/D、D/A、时钟、显示及打印功能等等。下面分析利用单片机串口与多个串行I/O接口芯片进行接口的可行性。第19页,共141页,2022年,5月20日,2点47分,星期二(1) 串行时钟芯片在有些需要绝对时间的场合,例如打印记录、电话计费、监控系统中的运行及故障时间统计等

13、,都需要以年、月、日、时、分、秒等表示的绝对时间。虽然单片机内部的定时器可以通过软件进位计数产生绝对时钟,但由于掉电之后数据丢失,修改麻烦等原因,这样产生的绝对时钟总使设计者感到不满意。因此我们提倡对绝对时钟要求较高的场合使用外部时钟芯片,串行时钟芯片HT1380就是一个典型的器件。第20页,共141页,2022年,5月20日,2点47分,星期二HT1380是一个8脚的日历时钟芯片,它可以通过串行口与单片机交换信息,如图8-4所示。在该芯片中,X1、X2接晶振,SCLK作为时钟输入端,I/O端为串行数据输入、输出端口,RST是复位引脚。由于该芯片只有当RST为高时才能对时钟芯片进行读/写操作,

14、因此可以利用单片机的I/O口线对它进行控制(类似于芯片选择信号)。当RST为低时,I/O引脚对外是高阻状态,因此它允许多个串行芯片同时挂靠在串行端口上。CPU对它的输入/输出操作可以按串行的方式0(即扩展I/O方式)进行。第21页,共141页,2022年,5月20日,2点47分,星期二图8-4 HT1380与单片机接口电路第22页,共141页,2022年,5月20日,2点47分,星期二(2) 串行LED显示接口MAX7219该芯片可驱动8个LED显示器,这在智能仪表中已经足够了。89C51单片机与它的接口如图8-5所示。同样,单片机可以通过串行口以方式0与MAX7219交换信息,TXD作为移位

15、时钟、RXD作为串行数据I/O端、Load为芯片选择端。当Load位于低电平时,对它进行读/写操作;当Load为高电平时,DIN处于高阻状态。它同样允许多个串行接口芯片共同使用89C51的串行口。第23页,共141页,2022年,5月20日,2点47分,星期二图8-5MAX7219与单片机接口电路第24页,共141页,2022年,5月20日,2点47分,星期二(3) 串行模拟量输入芯片MAX1458MAX1458是一个可对差分输入信号(如电桥)进行程控放大(放大倍数可以由软件设定),并进行12位A/D转换的芯片。它将放大与转换电路集成在一个芯片上,图8-6给出了它与单片机的串行接口电路。图8-

16、6串行A/D芯片与单片机接口电路第25页,共141页,2022年,5月20日,2点47分,星期二它既可把转换好的数据通过串口送到CPU,同时也可将转换前的模拟信号输出到显示仪表。当CS为高电平时,可对MAX1458进行读/写,单片机对它的读/写也是以串口方式0进行的;当CS为低电平时,DIO对外处于高阻状态。第26页,共141页,2022年,5月20日,2点47分,星期二(4) 串行接口芯片的一般接口规律除上面3种芯片之外,单片机还可以通过串行接口芯片与E2PROM、D/A转换芯片等连接。它们与CPU的串行接口方式与以上几种芯片类似,即:都需要通过单片机的开关量I/O口线进行芯片选择;当芯片未

17、选中时,数据端口均处于高阻状态;与单片机交换信息时均要求单片机串行口以方式0进行;传输数据时的帧格式均要求先传送命令/地址,再传送数据;大都具有图8-7所示的时序波形。第27页,共141页,2022年,5月20日,2点47分,星期二图8-7 串行接口信号的一般时序图第28页,共141页,2022年,5月20日,2点47分,星期二(5) 扩展多个串行接口芯片的典型控制器的结构在图8-8所示的控制器电路中,数据采集均由串行接口芯片完成。由于无总线扩展,单片机节余出来的其他资源可以作为打印机输出控制、功能键、中断逻辑等电路。在扩展了系统功能的同时,极大地利用了系统资源,且使接口简单,控制器体积减小,

18、可靠性提高。系统的软件设计与常规的单片机扩展系统类似,只是在芯片选择方面不是通过地址线完成,而是通过I/O口线来实现。第29页,共141页,2022年,5月20日,2点47分,星期二图8-8 基于串行接口控制器的电路结构图第30页,共141页,2022年,5月20日,2点47分,星期二8.1.2 I2C总线I2C(Inter Integrated Circuit)常译为内部集成电路总线,或集成电路间总线,它是由Philips公司推出的芯片间串行传输总线。使用2线实现数据通信。1根串行数据线(SDA)1根串行时钟线(SCL)。第31页,共141页,2022年,5月20日,2点47分,星期二图8-

19、10 I2C总线外围扩展示意图第32页,共141页,2022年,5月20日,2点47分,星期二I2C总线有利于系统设计的模块化和标准化,省去了电路板上的大量连线,提高了可靠性,降低了成本。在多种串行总线中,I2C总线只用两条线,不需要片选线,支持带电插拔,并有众多的外围接口芯片,可以作为优先选择。第33页,共141页,2022年,5月20日,2点47分,星期二I2C总线上支持多主和主从两种工作方式。在多主方式中,通过硬件和软件的仲裁主控制器取得总线控制权。而在多数情况下,系统中只有一个主器件,即单主节点,总线上的其他器件都是具有I2C总线的外围从器件,这时的I2C总线就工作在主从工作方式。第3

20、4页,共141页,2022年,5月20日,2点47分,星期二在主从方式中,从器件的地址包括器件编号地址和引脚地址,器件编写地址由I2C总线委员会分配,引脚地址决定于引脚外接电平的高低。当器件内部有连续的子地址空间时,对这些空间进行N个字节的连续读/写,子地址会自动加1。在主从方式的I2C总线系统中,只须考虑主方式的I2C总线操作。第35页,共141页,2022年,5月20日,2点47分,星期二3. I2C总线基本知识1) I2C总线的接口电路结构I2C总线由一根数据线SDA和一根时钟线SCL构成。I2C总线中一个节点的每个电路器件都可视为有如图8-11虚框所示的一个I2C总线接口电路,用于与I

21、2C总线的SDA和SCL线挂接。数据线SDA和时钟线SCL都是双向传输线,平时均处于高电平备用状态,只有当需要关闭I2C总线时,SCL线才会箝位在低电平。第36页,共141页,2022年,5月20日,2点47分,星期二图8-11 I2C总线的器件连接第37页,共141页,2022年,5月20日,2点47分,星期二2) I2C总线信号定义在I2C总线上,SDA用于传送有效数据,其上传输的每位有效数据均对应于SCL线上的一个时钟脉冲。也就是说,只有当SCL线上为高电平(SCL=1)时,SDA线上的数据信号才会有效(高电平表示1,低电平表示0);SCL线为低电平(SCL=0)时,SDA线上的数据信号

22、无效。因此,只有当SCL线为低电平(SCL=0)时,SDA线上的电平状态才允许发生变化(见图8-12)。第38页,共141页,2022年,5月20日,2点47分,星期二图8-12 I2C总线信号的时序第39页,共141页,2022年,5月20日,2点47分,星期二SDA线上传送的数据均以起始信号(START)开始,停止信号(STOP)结束,SCL线在不传送数据时保持Mark(SCL=1)。当串行时钟线SCL为Mark(SCL=1)时,串行数据线SDA上发生一个由高到低的变化过程(下降沿),即为起始信号;发生一个由低到高的变化过程,即称为停止信号。第40页,共141页,2022年,5月20日,2

23、点47分,星期二起始信号和停止信号均由作为主控器的单片机发出,并由挂接在I2C总线上的被控器检测。对于不具备I2C总线接口的单片机,为了能准确检测到这些信号,必须保证在总线的一个时钟周期内对SDA线进行至少两次采样。第41页,共141页,2022年,5月20日,2点47分,星期二4. I2C总线的数据传送在I2C总线上每传输一位数据都有一个时钟脉冲相对应。注意这里的时钟脉冲不像一般的时钟那样必须是周期性的,它的时钟间隔可以不同。总线备用时(即处于“非忙”状态),SDA和SCL都必须保持高电平状态,关闭I2C总线时才使SCL箝位在低电平。只有总线处于“非忙”状态时,数据传输才能被初始化。在数据传

24、输期间,只要时钟线为高电平,数据线就必须保持稳定。只有在时钟线为低电平时,才允许数据线上的电平状态变化。在时钟线保持高电平期间,数据线出现下降沿为启动信号、上升沿为停止信号,启动和停止信号都由主机产生,总线上带有I2C总线接口的器件很容易检测到这些信号。第42页,共141页,2022年,5月20日,2点47分,星期二I2C总线上传输的数据和地址字节均为8位,且高位在前,低位在后。I2C总线以起始信号为启动信号,接着传输的是地址和数据字节,数据字节是没有限制的,但每个字节后都必须跟随一个应答位,全部数据传输完毕后,以终止信号结尾。I2C总线上数据的传送时序如图8-13所示。第43页,共141页,

25、2022年,5月20日,2点47分,星期二图8-13 I2C总线的数据传送字节格式第44页,共141页,2022年,5月20日,2点47分,星期二利用SDA线进行数据传输时,发送器每发完一个数据字节后,都要求接收方发回一个应答信号。但与应答信号相对应的时钟仍由主控器在SCL线上产生,因此主控发送器必须在被控接收器发送应答信号前,预先释放对SDA线的控制,以便主控器对SDA线上应答信号的检测。第45页,共141页,2022年,5月20日,2点47分,星期二应答信号在第9个时钟位上出现,接收器在SDA线上输出低电平为应答信号(A),输出高电平为非应答信号(A)。时钟信号以及应答和非应答信号间的关系

26、如图8-14所示。图8-14 I2C总线的应答位第46页,共141页,2022年,5月20日,2点47分,星期二在主控器发送数据时,被控器接收完一个数据字节后都要向主控器发回一个应答信号(A),主控器据此便可进行下一字节的发送。但如果被控器由于某种原因需要进行其他处理而无法继续接收SDA线上数据时,便可向SDA线输出一个非应答信号(A),使SDA线保持高电平,主控器据此便可产生一个停止信号来终止SDA线上的数据传输。第47页,共141页,2022年,5月20日,2点47分,星期二当主控器作为接收器接收被控器送来的最后一个数据时,必须给被控器发送一个非应答信号(A),令被控器释放SDA线,以便主

27、控器可以发送停止信号来结束数据的传输。I2C总线上的应答信号是比较重要的,在编制程序时应该着重考虑。第48页,共141页,2022年,5月20日,2点47分,星期二5 I2C总线数据传输协议1) 总线节点的寻址字节主机产生起始条件后,发送的第一个字节为寻址字节。该字节的前7位(高7位)为从机地址,最后一位(LSB)决定了数据传输的方向: 0表示主机写信息到从机,1表示主机读从机中的信息。当发送了一个地址后,系统中的每个器件都将头7位与它自己的地址比较。如果一样,器件会应答主机的寻址,至于是从机接收器还是从机发送器由R/W位决定。第49页,共141页,2022年,5月20日,2点47分,星期二从

28、机地址由一个固定的和一个可编程的部分构成。例如,某些器件有4个固定的位(高4位)和3个可编程的地址位(低3位),那么同一总线上共可以连接8个相同的器件。I2C总线委员会协调I2C地址的分配,保留了2组8位地址(0000和1111),这2组地址的用途可查阅有关资料。第50页,共141页,2022年,5月20日,2点47分,星期二挂接到总线上的所有外围器件、外设接口都是总线上的节点。在任何时刻总线上只有一个主控器件(主节点)实现总线的控制操作,对总线上的其他节点寻址,分时实现点对点的数据传送。因此,总线上每个节点都有一个固定的节点地址。第51页,共141页,2022年,5月20日,2点47分,星期

29、二I2C总线上的单片机都可以成为主节点,其器件地址由软件给定,存放在I2C总线的地址寄存器中,称为主器件的从地址。在I2C总线的多主系统中,单片机作为从节点时,其从地址才有意义。I2C总线上所有的外围器件都有规范的器件地址。器件地址由7位组成,它和1位方向位构成了I2C总线器件的寻址字节SLA。第52页,共141页,2022年,5月20日,2点47分,星期二主机产生起始信号后的第一个寻址字节格式如下:D7 D0SLADA3DA2DA1DA0A2A1A0R/W 从机地址第53页,共141页,2022年,5月20日,2点47分,星期二其各位含义如下:器件地址(DA3、DA2、DA1和DA0): 是

30、I2C总线外围接口器件固有的地址编码,器件出厂时,就已给定。例如,I2C总线E2PROM AT24C的器件地址为1010,4位LED驱动器SAA1064的器件地址为0111。引脚地址(A2、A1和A0): 是由I2C总线外围器件地址端口A2、A1和A0在电路中接电源或接地的不同而形成的地址数据。数据方向(R/W): 规定了总线上主节点对从节点的数据传送方向,R接收,发送。表8-1列出了一些常用外围器件的节点地址和寻址字节。第54页,共141页,2022年,5月20日,2点47分,星期二表8-1 常用I2C接口通用器件的种类、型号和寻址字节第55页,共141页,2022年,5月20日,2点47分

31、,星期二2) I2C总线数据传输的格式I2C总线传输数据时必须遵循规定的数据传输格式,图815示出了I2C总线一次完整的数据传输格式。图815 I2C总线一次完整的数据传输格式第56页,共141页,2022年,5月20日,2点47分,星期二在图815中,起始信号表明一次数据传送的开始,其后为被控器的地址字节,高位在前,低位在后,第8位为R/W方向位。方向位R/W表明主控器和被控器间数据传输的方向。若R/W=0,表明数据由主控器按地址字节写入被控器;若R/W=1,表明数据从由地址字节决定的被控器读入主控器。方向位后面是被控器发出的应答位ACK。地址字节传输完后是数据字节,数据字节仍是高位在前,低

32、位在后,然后是应答位。第57页,共141页,2022年,5月20日,2点47分,星期二若有多个数据字节需要传送,则每个数据字节的格式相同。数据字节传送完后,被控接收器发回一个非应答信号(高电平有效),主控器据此发送停止信号,以结束这次数据的传输。但是,如果主机仍希望在总线上通信,它可以产生重复的起始信号(Sr)和寻址另一个从机,而不是首先产生一个停止信号。总线上数据传输有多种组合方式,现以图解方式分别介绍如下3类数据传输格式。第58页,共141页,2022年,5月20日,2点47分,星期二(1) 主控器的写数据操作格式主控器产生起始信号后,发送一个寻址字节,收到应答后跟着就是数据传输,当主机产

33、生停止信号后,数据传输停止。主机向被寻址的从机写入n个数据字节。整个过程均为主机发送,从机接收,先发数据高位,再发低位,应答位ACK由从机发送。主控器向被控器发送数据时,数据的方向位(R/W=0)是不会改变的。传输n字节的数据格式如下:第59页,共141页,2022年,5月20日,2点47分,星期二具体内容为:其中: 为主控器发送, 被控器接收; 为被控器发送, 主控器接收;A为应答信号,S为起始信号,P为停止信号;SLA为寻址字节(写);data 1data n为被传输的n个数据字节。第60页,共141页,2022年,5月20日,2点47分,星期二(2) 主控器的读数据操作格式主机从被寻址的

34、从机读出n个数据字节。在传输过程中,除了寻址字节为主机发送、从机接收外,其余的n字节均为从机发送,主机接收。主机接收完数据后,应发非应答位,向从机表明读操作结束。第61页,共141页,2022年,5月20日,2点47分,星期二主控器从被控器读取数据时,数据传输的方向位R/W=1。主控器从被控器读取n字节的数据格式为:第62页,共141页,2022年,5月20日,2点47分,星期二具体内容为:其中: SLAR为寻址字节(读),其余与前述相同。注意: 主控器在发送停止信号前,应先给被控器发送一个非应答信号,向被控器表明读操作结束。第63页,共141页,2022年,5月20日,2点47分,星期二3)

35、 主控器的读/写数据操作格式读/写操作时,在一次数据传输过程中需要改变数据的传送方向,即主机在一段时间内为读操作,在另一段时间内为写操作。由于读/写方向有变化,起始信号和寻址字节都会重复一次,但读/写方向(R/W)相反。例如,由单片机主机读取存储器从机中某存储单元的内容,就需要主机先向从机写入该存储单元的地址,再发一个启动位,进行读操作。第64页,共141页,2022年,5月20日,2点47分,星期二主控器向被控器先读后写的数据格式如下:第65页,共141页,2022年,5月20日,2点47分,星期二具体内容为:其中: Sr为重复起始信号;data 1data n为主控器的读数据;DATA 1

36、DATA n为主控器的写数据;其余与前述相同。第66页,共141页,2022年,5月20日,2点47分,星期二无论总线处于何种方式,起始信号、终止信号和寻址字节均由主控器发送和被控器接收。寻址字节中,7位地址是指器件地址,即被寻址的被控器的固有地址,R/W方向位用于指定SDA线上数据传送的方向。R/W=0为主控器写和被控器收,R/W=1为主控器读(收)和被控器发。每个器件(主控器或被控器)内部都有一个数据存储器RAM,RAM的地址是连续的,并能自动加/减1。n个被传送数据的RAM地址可由系统设计者规定,通常作为数据放在上述数据传输格式中,即第一个数据字节data 1或DATA 1。总线上传输的

37、每个字节后必须跟一个应答或非应答信号A/A。通过上述分析,可以得出如下结论:第67页,共141页,2022年,5月20日,2点47分,星期二6 51单片机与I2C总线的接口1) 单片机与I2C总线的硬件连接用不带I2C接口的51单片机控制I2C总线时,硬件也非常简单,只需两个I/O口线,在软件中分别定义成SCL和SDA,与I2C总线的SCL和SDA直接相连,再加上上拉电阻即可。以51系列单片机为例,可以用P1.6和P1.7直接与SCL和SDA相连,硬件接口如图816所示。图816 模拟I2C总线第68页,共141页,2022年,5月20日,2点47分,星期二2) 51单片机对I2C总线的控制程

38、序这里以51系列单片机为例,介绍如何根据I2C总线的工作原理用汇编语言编写控制程序。第69页,共141页,2022年,5月20日,2点47分,星期二首先,应根据I2C总线对SDA和SCL在各个时段的时序要求写出起始、停止、送应答位、送非应答位、检查应答位以及发送一字节、接收一字节的子程序,具体代码可参见电子世界网站()上的汇编源程序,该程序中设置“I2C_ERROR”为出错标志。若在程序中适当增加NOP指令的条数,可以提高I2C总线数据传输的可靠性。第70页,共141页,2022年,5月20日,2点47分,星期二注意在使用这些程序前,先要确定从机的地址和从机中要操作的内部单元的地址。程序中用“

39、DeviceaddressW”表示从机的7位地址加上写标志0,“DeviceaddressR”表示从机的7位地址加上读标志1,“Subaddress”表示内部单元的8位地址,“DATA_I2C”表示操作数据在单片机内的存放地址。这些程序可以实现简单的I2C总线操作,用户也可以根据具体要求再附加相应的程序。第71页,共141页,2022年,5月20日,2点47分,星期二7 I2C总线数据传送软件包如果是不带I2C总线的单片机,则不必扩展I2C总线接口,只须通过软件模拟,这无疑会给I2C总线的应用提供更广泛的空间。通常大多数单片机应用系统中只有一个CPU,这种单主系统如果采用I2C总线技术,则总线

40、上只有单片机对I2C总线从器件的访问,没有总线的竞争等问题,这种情况下只需要模拟主发送和主接收时序。基于上述考虑,这里提供了这种使用情况下的时序模拟软件,使I2C总线的使用不受单片机必须带有I2C总线接口的限制。第72页,共141页,2022年,5月20日,2点47分,星期二本教程在模拟主方式下的I2C总线时序时,选用如图816所示P1.6和P1.7作为时钟线SCL和数据线SDA,晶振采用6 MHz。这里提供一个软件包,包括启动(STA),停止(STOP),发送应答位(MACK),发送非应答位(MNACK),应答位检查(CACK),发送一字节数据(WRBYT),接收一字节数据(RDBYT),发

41、送N字节数据和接收N字节数据(RDNBYT)9个子程序。第73页,共141页,2022年,5月20日,2点47分,星期二1) I2C总线典型信号时序及信号模拟子程序I2C总线数据传送时,有起始位(S)、终止位(P)、发送0代表应答位(A)、发送1代表非应答位(A)等信号。按照典型I2C总线传送速率的要求,这些信号、时序如图817(a)、(b)、(c)和(d)所示。第74页,共141页,2022年,5月20日,2点47分,星期二图817 I2C总线数据传送典型信号时序第75页,共141页,2022年,5月20日,2点47分,星期二图8-17I2C总线数据传送典型信号时序对于I2C总线的典型信号,

42、可以用指令操作来模拟其时序过程。若89C51单片机的系统时钟为6 MHz,相应的单周期指令的周期为2 s,则起始(STA)、终止(STOP)、发送应答位(MACK)、发送非应答位(MNACK)的4个模拟子程序如下:第76页,共141页,2022年,5月20日,2点47分,星期二1) 启动I2C总线子程序STASTA:SETBSDASETBSCL;起始条件建立时间大于4.7 sNOPNOPCLRSDANOP;起始条件锁定时间大于4 sNOPCLRSCL;箝住总线,准备发送数据RET第77页,共141页,2022年,5月20日,2点47分,星期二(2) 停止I2C总线子程序STOPSTOP:CLR

43、SDASETBSCL;发送停止条件的时钟信号NOP;停止总线时间大于4 sNOPSETBSDA;停止总线NOPNOPCLRSDACLRSCLRET第78页,共141页,2022年,5月20日,2点47分,星期二(3) 发送应答位信号子程序MACKMACK:CLRSDASETBSCLNOP ;保持数据时间,即SCL为 高,时间大于4 sNOPCLRSCLSETBSDARET第79页,共141页,2022年,5月20日,2点47分,星期二(4) 发送非应答位信号子程序MNACKMNACK:SETBSDASETBSCLNOP ;保持数据时间,即SCL为高,时间大于4.0 sNOPCLRSCLCLRS

44、DARET在使用上述子程序时,如果单片机的主时钟不是6 MHz,则应调整NOP指令个数,以满足时序要求。第80页,共141页,2022年,5月20日,2点47分,星期二2) I2C总线数据传送的模拟子程序从I2C总线的数据操作中可以看出,除了基本的启动(STA)、终止(STOP)、发送应答位(MACK)、发送非应答位(MNACK)外,还应有应答位检查(CACK)、发送一字节(WRBYT)、接收一字节(RBYT)、发送N字节(WRNBYT)和接收N字节(RDNBYT)这5个子程序。第81页,共141页,2022年,5月20日,2点47分,星期二(1) 应答位检查子程序CACK在应答位检查子程序(

45、CACK)中,设置了标志位。CACK中用F0作标志位,当检查到正常应答位后,F0=0;否则F0=1。CACK:SETB SDA;置SDA为输入方式 SETB SCL;使SDA上数据有效 CLR F0;预设F0=0 MOVC,SDA;输入SDA引脚状态 JNC CEND;检查SDA状态,正常应答转CEND,且F0=0 SETB F0;无正常应答,F0=1CEND:CLR SCL;子程序结束,使SCL=0 RET第82页,共141页,2022年,5月20日,2点47分,星期二(2) 发送一字节数据子程序WRBYT该子程序是向虚拟I2C总线的数据线SDA上发送一字节数据的操作。调用该子程序前,将要发

46、送的数据送入A中。占用资源: R0,C。WRBYT:MOVR0,#08H;8 位数据长度送R0中WLP:RLCA;发送数据左移,使发送位入CJCWR1;判断发送1还是0,发送1转WR1AJMPWR0;发送0转WR0WLP1:DJNZR0,WLP;8位是否发送完,未完转WLPRET;8位发送完结束WR1:SETBSDA;发送1程序段SETBSCLNOPNOPCLRSCLCLRSDAAJMPWLP1WR0:CLRSDA;发送0程序段SETBSCLNOPNOPCLRSCLAJMPWLP1第83页,共141页,2022年,5月20日,2点47分,星期二(3) 从SDA上接收一字节数据子程序RDBYT该

47、子程序用来从SDA上读取一字节数据,执行本程序后,从SDA上读取的一字节存放在R2或A中。占用资源: R0、R2和C。RDBYT:MOVR0,#08H;8位数据长度送R0中RLP:SETBSDA;置SDA为输入方式SETBSCL;使SDA上数据有效MOVC,SDA;读入SDA引脚状态MOVA,R2;读入0程序段,由C拼装入R2中RLC AMOVR2,ACLRSCL;使SCL=0可继续接收数据位DJNZR0,RLP;8位读完了吗?未读完转RLPRET第84页,共141页,2022年,5月20日,2点47分,星期二(4) 向被控器发送N字节数据子程序WRNBYT在I2C总线数据传送中,主节点常常需

48、要连续地向外围器件发送多个字节数据,本子程序是用来向SDA线上发送N字节数据的操作。该子程序的编写必须按照I2C总线规定的读/写操作格式进行。如主控器向I2C总线上某个外围器件连续发送N个数据字节时,其数据操作格式如下:其中,SLAW为外围器件寻址字节(写)。第85页,共141页,2022年,5月20日,2点47分,星期二按照上述操作格式所编写的发送N字节的通用子程序(WRNBYT)清单如下:WRNBYT:MOVR3,NUMBYTLCALLSTA;启动I2C总线MOVA,SLA;发送SLAW字节LCALLWRBYTLCALLCACK;检查应答位JBF0,WRNBYT;非应答位则重发MOVR1,

49、#MTDWRDA:MOVA,R1LCALLWRBYTLCALLCACKJBF0,WRNBYTINCR1DJNZR3,WRDALCALLSTOPRET第86页,共141页,2022年,5月20日,2点47分,星期二在使用本子程序时,占用资源为R1和R3,但须调用STA、STOP、WRBYT和CACK子程序,而且使用了一些符号单元。在使用这些符号单元时,应在片内RAM中分配好这些地址。这些符号单元有: MTD主节点发送数据缓冲区首址; SLA外围器件寻址字节存放单元; NUMBYT发送数据字节数存放单元。第87页,共141页,2022年,5月20日,2点47分,星期二在调用本子程序之前,必须将要发

50、送的N字节数据依次存放在以MTD为首地址的发送数据缓冲区中。调用本子程序后,N字节数据依次传送到外围器件内部相应的地址单元中。第88页,共141页,2022年,5月20日,2点47分,星期二(5) 从外围器件读取N字节数据子程序RDNBYT在I2C总线系统中,主控器按主接收方式从外围器件中读出N字节数据的操作格式如下:其中,A: 非应答位,主节点在接收完N字节后,必须发送一个非应答位;SLAR: 外围器件寻址字节(读)。第89页,共141页,2022年,5月20日,2点47分,星期二按照上述操作格式所编写的通用N字节接收子程序(RDNBYT)清单如下:RDNBYT:MOVR3,NUMBYTLC

51、ALLSTA;发送启动位MOVA,SLA;发送寻址字节(读)LCALLWRBYTLCALLCACK;检查应答位JBF0,RDNBYT;非正常应答时重新开始RDN:MOVR1,#MRD;接收数据缓冲区首址MRD入R1RDN1:LCALLRDBYT;读入一字节到接收数据缓冲区中MOVR1,ADJNZR3,ACK;N字节读完了吗?未完转ACKLCALLMNACK;N字节读完发送非应答位LCALLSTOP;发送停止信号RET;子程序结束ACK:LCALLMACK;发送应答位INCR1;指向下一个接收数据缓冲单元SJMPRDN1;转读入下一个字节数据第90页,共141页,2022年,5月20日,2点47

52、分,星期二在使用RDNBYT子程序时,占用资源R1和R3,但须调用STA、STOP、WRBYT、RDBYT、CACK、MACK和MNACK等子程序并满足这些子程序的调用要求。RDNBYT子程序中使用了一些符号单元,除了在WRNDYT子程序中使用过的SLA、MTD和NUMBYT外,还有以下几个: SLA器件寻址(读)存放单元; MRD主节点中数据接收缓冲区首址;在调用RDNBYT子程序后,从节点中所指定首地址中的N字节数据将被读入主节点片内以MRD为首址的数据缓冲器中。第91页,共141页,2022年,5月20日,2点47分,星期二3) 主程序在主程序初始化中,应有如下的语句: SDABITP1

53、.7SCLBITP1.6MTDEQU30H;MTD: 发送数据缓冲区首址MRDEQU40H;MRD: 接收数据缓冲区首址SLAEQU60H;SLA: 寻址字节SLAR/W的存放单元NUMBYTEQU61H;NUMBYT: 传送字节数存放单元第92页,共141页,2022年,5月20日,2点47分,星期二8.1.3 单总线近年来,美国的达拉斯半导体公司(DALLAS SEMICONDUCTOR)推出了一项特有的单总线(1-Wire Bus)技术。该技术与上述总线不同,它采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销少,成本低廉,便于总线

54、扩展和维护等优点。单总线适用于单主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从设备时,系统则按多节点系统操作。图1所示是单总线多节点系统的示意图。第93页,共141页,2022年,5月20日,2点47分,星期二图1 单总线构成的分布式温度监测系统第94页,共141页,2022年,5月20日,2点47分,星期二单总线的工作原理顾名思义,单总线即只有一根数据线,系统中的数据交换、控制都由这根线完成。设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送

55、数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个约为4.7k的上拉电阻,这样,当总线闲置时,其状态为高电平。主机和从机之间的通信可通过3个步骤完成,分别为初始化1-wire器件、识别1-wire器件和交换数据。由于它们是主从结构,只有主机呼叫从机时,从机才能应答,因此主机访问1-wire器件都必须严格遵循单总线命令序列,即初始化、ROM、命令功能命令。如果出现序列混乱,1-wire器件将不响应主机(搜索ROM命令,报警搜索命令除外)。第95页,共141页,2022年,5月20日,2点47分,星期二1 DS18S20单总线测温系统DS18S20是美国Dallas公司生产的单总线数

56、字温度传感器。它可以把温度信号直接转换成串行数字信号供单片机处理,特别适合构成多点温度巡回检测系统。由于每片DS18S20都含有惟一的产品号,所以从理论上来说,在一条总线上可以挂接任意多个DS18S20芯片。从DS18S20读出或写入信息仅需一根口线(单线接口)。读/写及温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18S20供电,而无需额外电源。DS18S20提供9位温度读数,构成多点温度检测系统而无需任何外围硬件。第96页,共141页,2022年,5月20日,2点47分,星期二1) DS18S20的特性及引脚单线接口,仅需一根口线与MCU相连,无需外围元件;由数据线提供电源;测温

57、范围为-55125 ,精度为0.5 (-1085 范围内);9位温度读数;温度转换时间最长为750 ms;用户可自行设定温度报警上下限,其值是非易失性的;报警搜索命令可识别哪片DS18S20超温度界限。DS18S20采用3脚PR35封装(或8脚SOIC封装),引脚排列如图819所示。图中GND为地,DQ为数据输入/输出脚(单线接口,可作寄生供电),VDD为电源电压。图819 DS18S20的引脚排列第97页,共141页,2022年,5月20日,2点47分,星期二2) DS18S20的内部结构DS18S20的内部结构如图820所示。DS18S20主要包括寄生电源、温度传感器、64位激光ROM单线

58、接口、存放中间数据的高速暂存器(内含便笺式RAM)、用于存储用户设定的温度上下限值TH和TL的触发器、存储与控制逻辑、8位循环冗余校验码(CRC)发生器8部分。DS18S20既可以采用寄生供电,也可以采用外部5 V电源供电。寄生供电时,当总线上是高电平时,DS18S20从总线上获得能量并储存在内部电容上。当总线上是低电平时,由电容向DS18S20供电。第98页,共141页,2022年,5月20日,2点47分,星期二图820 DS18S20内部结构图第99页,共141页,2022年,5月20日,2点47分,星期二DS18S20的测温原理是: 内部计数器对一个受温度影响的振荡器计数。温度表示值应为

59、9位,高位为符号位,但因符号位扩展成高8位,故以16位补码形式读出,温度与数字量的关系如表82所列。第100页,共141页,2022年,5月20日,2点47分,星期二3) 温度巡回检测系统电路系统如图821所示,采用寄生电源供电方式。图821 DS18S20温度巡回检测系统第101页,共141页,2022年,5月20日,2点47分,星期二为保证在有效的DS18S20周期内提供足够的电流,用一个MOSFET管和89C51的一个I/O口线(P1.0)来完成对DS18S20总线的上拉。采用寄生电源供电时,VDD必须接地。在此系统中采用89C51的P1.1口作发送口Tx,P1.2口作接收口Rx。实验发

60、现这种方法可接数十片DS18S20,距离可达50 m;而用1根口线(如图8-21所示)时,仅能挂接10片DS18S20,距离仅为20 m以内,同时由于读/写在操作上是分开的,故不存在信号竞争问题。第102页,共141页,2022年,5月20日,2点47分,星期二4) 工作过程89C51首先发复位DS18S20的负脉冲,接着收DS18S20的回应脉冲,这时89C51再发ROM命令(33H),最后发存储和控制命令。第103页,共141页,2022年,5月20日,2点47分,星期二(1) DS18S20 ROM命令主机操作ROM的命令有5种,如表83所列。64位激光ROM的结构如下:开始8位是产品类

温馨提示

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

评论

0/150

提交评论