1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,8,章 单片机小系统及片外扩展,89C51,单片机芯片内集成了计算机的基本功能部件,已具备了很强的功能。,一块芯片,就是,一个完整的最小微机系统,,但片内存储器的容量、并行,I/O,端口、定时器等,内部资源都还是有限的,。根据实际需要,,89C51,单片机可以很方便地进行,功能扩展,。,扩展应尽量采用串行扩展,方案。通过,SPI,或,I,2,C,总线扩展,E,2,PROM,、,A/D,、,D/A,、显示器、看门狗、时钟等芯片,占用,MCU,的,I/O,口线少,编程也方便,.,第,8,章 单片机小系统及片
2、外扩展,8.1,串行扩展总线接口技术,8.2,并行扩展三总线的产生,8.3,扩展数据存储器,8.4,思考题与习题,8.1,串行扩展总线接口技术,89C51,除芯片自身具有,UART,可用于串行扩展,I/O,口线以外,还可利用,89C51,的,3,4,根,I/O,口线,进,行,SPI,或,I,2,C,的外设芯片扩展,以及单总线的扩展,.,8.1.1 SPI,串行外设接口总线,SPI(Serial,Peripheral,Interface,串行外设接口,)总线是,Motorola,公司推出的一种,同步串行外设接口,,它用于,MCU,与,各种外围设备,以,串行方式,进行,通信,(,8,位数据同时同步
3、地被发送和接收),系统可配置为,主,或,从操作模式,。,外围设备,包括简单的,TTL,移位寄存器,(用作并行输入或输出口)至复杂的,LCD,显示驱动器,或,A/D,转换器,等。,SPI,系统可直接与各个厂家生产的多种标准外围器件直接接口,它,只需,4,条线,:,串行时钟线(,SCK,)、,主机输入,/,从机输出数据线,MISO,、,主机输出,/,从机输入数据线,MOSI,低电平有效的从机选择线,CS(SS,)。,在,SPI,接口中,,数据的传输,只需要:,1,个,时钟信号,2,条,数据线。,由于,SPI,系统总线,只需,3,4,位数据线和控制线即可扩展具有,SPI,的各种,I/O,器件,,而,
4、并行总线扩展,方法需,8,根,数据线、,8,16,位,地址线、,2,3,位,控制线,,因而,SPI,总线,的使用可以,简化电路设计,,省掉了很多常规电路中的接口器件,,提高了设计的可靠性,。,1.SPI,总线系统的组成,SPI,总线系统,典型结构示意图,:,P195,图,8-1,图,8-1,SPI,外围扩展示意图,单片机,与,外围扩展器件,在时钟线,SCK,、数据线,MOSI,、,MISO,上都是,同名端相连,。,带,SPI,接口的,外围器件,都有片选端,CS,。,在扩展多个,SPI,外围器件(如图,8-1,所示)时,,单片机应分别通过,I/O,口线,来,分时选通,外围器件。,当,SPI,接口
5、上有,多个,SPI,接口的,单片机,时,,应区别其主从地位,,在,某一时刻只能有一个单片机为主器件,。,P195,图,8-1,中:,MCU,(,主,)为主器件,,MCU,(,从,)为从器件。,SPI,有,较高,的数据传送速度,主机方式,最高速率,可达,1.05 Mb/s,,目前不少外围器件都带有,SPI,接口。,在大多数应用场合中,使用,1,个,MCU,作为,主机,,控制数据向,1,个,或,多个,从外围器件的传送。,从器件,只能在主机发命令时,才能接收或向主机传送数据。,数据的传输格式,:,高位,(MSB),在前,低位,(LSB),在后。,当,SPI,工作时,在移位寄存器中的数据逐位从输出引脚
6、MOSI,),输出,(高位在前),同时从输入引脚(,MISO,),接收,的数据逐位移到移位寄存器(高位在前)。,发送一字节后,从另一个外围器件接收的字节数据进入移位寄存器中。,主,SPI,的时钟信号(,SCK,)使传输,同步,。,SPI,总线的,主要特性,:全双工、,3,线同步传输;主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。,典型时序图,:P195,图,8-2,图,8-2 SPI,串行总线典型时序图,2.89C51,单片机,串行扩展,SPI,外设接口,的,方法,1,)用一般,I/O,口线,模拟,SPI,操作,对于,没有,SPI,接口的,89C51,来
7、说,可,使用软件来模拟,SPI,的操作,包括串行时钟、数据输入和输出。,对于,不同,的串行接口,外围芯片,,它们的,时钟时序是不同的,。,模拟,1,位,数据输入,/,输出:,P196,图,8-3,对于在,SCK,的,上升沿输入,(,接收,),数据,、在,下降沿输出,(,发送,),数据,的器件,一般应取,P196,图,8-3,中的串行时钟输出,P1.1,的初始状态为,1,;,在,允许,接口芯片后,置,P1.1,为,0,。,因此,,MCU,输出,1,位,SCK,时钟,同时,使,接口芯片,串行左移,从而,输出,1,位数据,至,89C51,的,P1.3,(模拟,MCU,的,MISO,线);,再置,P1
8、1,为,1,,使,89C51,从,P1.0,输出,1,位数据,(先为高位)至串行接口芯片。,以后再置,P1.1,为,0,,模拟下一位的输入,/,输出,依次,循环,8,次,,可完成,1,次,通过,SPI,传输,1,字节,的操作。,对在,SCK,的,下降沿输入数据,、,上升沿输出数据,的器件,则应取串行时钟输出,P1.1,的初始状态为,0,在接口芯片,允许,时,先置,P1.1,为,1,,此时,外围接口芯片,输出,1,位数据(,MCU,接收,1,位数据);,再置时钟,P1.1,为,0,,外围接口芯片,接收,1,位,数据,(MCU,发送,1,位数据,),,可完成,1,位数据的传送。,P196,图,8
9、3,:,89C51(MCU),与,MCM2814,(,E,2,PROM,)的硬件连接图。,图,8-3 SPI,总线接口原理图,图,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,系列输出芯片
10、等。,对于,下降沿输入,、,上升沿输出,的各种串行外围接口芯片,,只须改变,P1.1,的输出顺序,,即输出,0,,再输入,1,;再输出,0,则这些子程序也同样适用。,(,1,),MCU,串行,输入,子程序,SPIIN,从,MCM2814,的,SPISO,线上,接收,1,字节,数据并放入寄存器,R0,中。,SPIIN:SETB,P1.1 ;,使,P1.1(,时钟,),输出为,1,CLR P1.2 ;,选择从机,MOV R1,#08H ;,置循环次数,SPIN1:CLR P1.1 ;,使,P1.1(,时钟,),输出为,0,NOP ;,延时,NOP,MOV C,,,P1.3 ;,从机输出,SPISO
11、送进位,C,RLC A ;,左移至累加器,ACC P69,SETB P1.1 ;,使,P1.1(,时钟,),输出为,1,DJNZ R1,SPIN1,;,判断是否循环,8,次,(1,字节数据,),MOV R0,,,A ;1,字节数据送,R0,RET ;,返回,(,2,),MCU,串行,输出,子程序,SPIOUT,将,89C51,中,R0,寄存器的内容传送到,MCM2814,的,SPISI,线上。,SPIOUN:SETB P1.1 ;,使,P1.1(,时钟,),输出为,1,CLR P1.2 ;,选择从机,MOV R1,#08H ;,置循环次数,MOV A,,,R0 ;1,字节,数据送累加器,AC
12、C,SPIOT1:CLR P1.1 ;,使,P1.1(,时钟,),输出为,0,NOP ;,延时,NOP,RLC A ;,左移累加器,ACC,最高位至,C,MOV P1.0,C ;,进位,C,送从机输入,SPISI,线上,SETB P1.1 ;,使,P1.1(,时钟,),输出为,1,DJNZ R1,SPIOT1,;,判断是否循环,8,次,(1,字节数据,),RET ;,返回,(,3,),MCU,串行,输入,/,输出,子程序,SPIIO,将,89C51,中,R0,寄存器的内容传送到,MCM2814,的,SPISI,中,同时从,MCM2814,的,SPISO,接收,1,字节数据存入,R0,中。,SP
13、IIO:SETB P1.1 ;,使,P1.1(,时钟,),输出为,1,CLR P1,2 ;,选择从机,MOV R1,,,#08H ;,置循环次数,MOV A,,,R0 ;1,字节,数据送累加器,ACC,SPIO1:CLR P1.1 ;,使,P1.1(,时钟,),输出为,0,NOP ;,延时,NOP,MOV C,,,P1.3 ;,从机输出,SPISO,送进位,C,RLC A ;,左移累加器,ACC,最高位至,C,MOV P1.0,,,C ;,进位,C,送从机输入,SETB P1.1 ;,使,P1.1(,时钟,),输出为,1,DJNZ R1,,,SPIO1,;,判断是否循环,8,次,(1,字节数据
14、),MOV R0,,,A,RET ;,返回,2),利用,89C51,串行口,实现,SPI,操作,单片机应用系统中,最常用的功能无非是开关量,I/O,、,A/D,、,D/A,、时钟、显示及打印功能等等。下面分析利用,单片机串口,与,多个串行,I/O,接口芯片,进行接口的可行性。,(,1,)串行时钟芯片,在有些,需要绝对时间,的场合,例:打印记录、电话计费、监控系统中的运行及故障时间统计等,都需要以年、月、日、时、分、秒等表示的绝对时间。虽然,单片机内部的定时器,可以通过软件进位计数产生绝对时钟,但由于掉电之后数据丢失,修改麻烦等原因,这样产生的绝对时钟总使设计者感到不满意。因此我们,提倡对绝对
15、时钟要求较高的场合使用外部时钟芯片,,串行时钟芯片,HT1380,就是一个典型的器件。,HT1380,:是一个,8,脚,的,日历时钟芯片,,它可通过串行口与单片机交换信息,如,P198,图,8-4,所示。,在该芯片中:,X1,、,X2,:接晶振,,SCLK,:为时钟输入端,,I/O,端:为串行数据输入、输出端口,,RST,:是复位引脚。,由于该芯片只有当,RST,为高,时才能对时钟芯片进行,读,/,写,操作,因此可以利用单片机的,I/O,口线对它进行控制(类似于芯片选择信号)。,当,RST,为低,时,,I/O,引脚对外是,高阻,状态,,因此它,允许多个,串行芯片同时,挂靠,在串行端口上。,CP
16、U,对它的,输入,/,输出,操作可以,按串行,的,方式,0,(即,扩展,I/O,方式,)进行。,图,8-4 HT1380,与单片机接口电路,(,2,)串行,LED,显示接口,MAX7219,该芯片,可驱动,8,个,LED,显示器,这在智能仪表中已经足够了。,单片机,可以通过,串行口,以,方式,0,与,MAX7219,交换信息。,89C51,单片机与,MAX7219,的接口:,P198,图,8-5,TXD,:为移位时钟、,RXD,:为串行数据,I/O,端,Load,:为芯片选择端。,当,Load,位于,低电平,时,对它进行,读,/,写,操作;,当,Load,为,高电平,时,,DIN,处于,高阻,
17、状态。,它同样,允许多个,串行接口芯片共同使用,89C51,的串行口。,图,8-5 MAX7219,与单片机接口电路,(,3,)串行模拟量输入芯片,MAX1458,MAX1458,:是一个可,对差分输入信号,(如电桥)进行程控,放大,(放大倍数可以由软件设定),并进行,12,位,A/D,转换,的芯片。它将放大与转换电路集成在一个芯片上,,P198,图,8-6,给出了它与单片机的串行接口电路。,(,3,)串行模拟量输入芯片,MAX1458,图,8-6,串行,A/D,芯片与单片机接口电路,它既可把,转换好,的数据通过串口送到,CPU,,同时也可将,转换前,的模拟信号输出到,显示仪表,。,当,CS,
18、为高电平,时,可对,MAX1458,进行,读,/,写,,,单片机对它的读,/,写也是,以串口方式,0,进行的;,当,CS,为低电平,时,,DIO,对外处于,高阻,状态。,(,4,)串行接口芯片的,一般接口规律,除上面,3,种芯片之外,单片机还可通过串行接口芯片与,E,2,PROM,、,D/A,转换芯片等连接。它们与,CPU,的串行接口方式与以上几种芯片类似,即,都需要通过单片机的开关量,I/O,口线,进行,芯片选择,;当芯片,未选中,时,,数据端口,均处于,高阻,状态,.,与单片机,交换信息时,均要求,单片机串行口,以,方式,0,进行;,传输数据时,的帧格式均要求,先传送命令,/,地址,,,再
19、传送数据,;,大都具有,P199,图,8-7,所示的,时序波形,。,图,8-7,串行接口信号的一般时序图,(,5,)扩展,多个,串行接口芯片的,典型控制器的结构,在,P199,图,8-8,所示的控制器电路中,,数据采集,均由,串行接口芯片,完成。,由于,无总线扩展,,单片机节余出来的其他资源可以作为打印机输出控制、功能键、中断逻辑等电路。在扩展了系统功能的同时,极大地利用了系统资源,且使接口简单,控制器体积减小,可靠性提高。,系统的,软件设计,与常规的单片机扩展系统类似,只是在,芯片选择,方面不是通过地址线完成,而是通过,I/O,口线,来实现。,图,8-8,基于串行接口控制器的电路结构图,8.
20、1.2,I,2,C,总线,I,2,C,总线是,PHILIPS,公司推出的串行总线。,I,2,C,总线的应用非常广泛,在很多器件上都配备有,I,2,C,总线接口,使用这些器件时一般都需要通过,I,2,C,总线进行控制。,这里简要介绍,I,2,C,总线的,工作原理,,介绍如何用,51,单片机进行,控制,以及相应的汇编语言控制程序的,编写,。,1 I,2,C,总线的概念,I,2,C,总线,:是一种具有自动寻址、高低速设备同步和仲裁等功能的高性能串行总线,能够实现完善的全双工数据传输,是各种总线中使用信号线数量最少的。,I,2,C,总线只有两根信号线:,数据线,SDA,、时钟线,SCL,。,所有进入,
21、I,2,C,总线系统中的设备都带有,I,2,C,总线接口,符合,I,2,C,总线电气规范的特性,只需将,I,2,C,总线上所有节点的串行数据线,SDA,和时钟线,SCL,分别与总线的,SDA,和,SCL,相连即可。,各节点供电可以不同,但需共地,另外,SDA,和,SCL,需分别接上拉电阻。,当执行数据传送时,启动数据发送并产生时钟信号的器件称为,主器件,;被寻址的任何器件都可看作,从器件,;发送数据到总线上的器件称为,发送器,从总线上接收数据的器件称为,接收器,。,I,2,C,总线是,多主机总线,,可以有两个或更多的能够控制总线的器件与总线连接;同时,I,2,C,总线还具有,仲裁功能,,当一个
22、以上的主器件同时试图控制总线时,,只允许一个有效,,从而保证数据不被破坏。,I,2,C,总线的寻址采用,纯软件的寻址方法,,无需片选线的连接,这样就,简少了总线数量,。,主机在,发送完启动信号,后,立即,发送寻址字节,来寻址被控器件,并,规定数据传送方向,。,寻址字节由,7,位从机地址,(D7,D1),和,1,位方向位,(,D0,,,0/1,,读,/,写)组成。,当主机发送寻址字节时,总线上所有器件都将该寻址字节中的,高,7,位地址,与,自己器件的地址比较,若两者相同,则该器件认为被主机寻址,并根据,读,/,写位,确定是,从发送器,还是,从接收器,。,I,2,C,总线,具有多重主控能力,,这就
23、意味着可以允许多个作为主控器的电路模块(具有,I,2,C,总线接口的单片机)去抢占总线。,因此挂接在,I,2,C,总线上的集成电路模块的,发送器,/,接收器,可以根据不同的工作状态分为,主控发送器,主控接收器,、,被控发送器,和,被控接收器,。,显然,具有,I,2,C,总线接口的,单片机,可以工作在上述,4,种工作状态中的任一状态,而一些带有,I,2,C,总线接口的,存储器,(,RAM,或,E,2,PROM,)模块只能充当,被控发送,器或,被控接收器,。,图,8-9,示出了带有,两个单片机,和其他,一些外围电路,模块接入,I,2,C,总线的一个实例。,图,8-9 I,2,C,总线典型系统示意图
24、在图,8-9,中,假设,单片机,A,要向单片机,B,发送信息,单片机,A,首先作为主控器在,I,2,C,总线上,发送起始信号,和,时钟,,,寻址,作为被控器的,单片机,B,,并,确立信息传送方向,。,接着,单片机,A,作为主控发送器便可通过,SDA,线向被控接收器(单片机,B,),发送信息,,并在信息发送完毕后,发送终止信号,,以结束信息的传送过程。,假设,单片机,A,要从单片机,B,读取信息,,单片机,A,同样作为主控器在,I,2,C,总线上,发送起始信号,和,时钟,,,寻址,作为被控器的,单片机,B,,并确立信息传送方向。,此时,单片机,A,作为主控接收器接收单片机,B,发送的信息,一旦
25、作为主控接收器的单片机,A,接收完,单片机,B,发来的,信息,后就,发出终止信号,,以结束整个信息的读取过程。,上述分析表明:不论作为主控器的单片机,A,向作为被控器的单片机,B,是发送信息还是读取信息,被传信息的起始和终止信号以及时钟信号都是由作为主控器的单片机,A,发送的。,2 I,2,C,总线的应用,I,2,C,总线为同步串行数据传输总线,用于单片机的外围扩展。其总线传输速率为,100 kb/s,(改进后的规范为,400 kb/s,),总线驱动能力为,400,pF,。,图,8-10,为,I,2,C,总线外围扩展示意图。,图,8-10 I,2,C,总线外围扩展示意图,图中只表示出单片机应用
26、系统中常用的,I,2,C,总线外围通用器件、外围设备模块、接口以及其他单片机节点。,最常使用的通用外围器件有,SRAM,、,E,2,PROM,、,ADC/DAC,、,RTC,、,I/O,口和,DTMF,等。,外围设备模块有,LED,驱动控制器构成的,LED,显示器,各种,LCD,驱动控制器构成的段式、图形点阵、字符点阵液晶显示器等。,通过,I,2,C,总线通用,I/O,口器件可构成许多通用接口如键盘、码盘、打印机接口和,LCD,接口等。,I,2,C,总线有利于系统设计的模块化和标准化,省去了电路板上的大量连线,提高了可靠性,降低了成本。,在多种串行总线中,,I,2,C,总线只用两条线,不需要片
27、选线,支持带电插拔,并有众多的外围接口芯片,可以作为优先选择。,I,2,C,总线上支持多主和主从两种工作方式。,在,多主方式,中,通过硬件和软件的仲裁主控制器取得总线控制权。,而在多数情况下,系统中只有,一个主器件,,即单主节点,总线上的其他器件都是具有,I,2,C,总线的外围从器件,这时的,I,2,C,总线就工作在,主从工作方式,。,在,主从方式,中,,从器件的地址,包括器件编号地址和引脚地址,,器件编写地址,由,I,2,C,总线委员会分配,,引脚地址,决定于引脚外接电平的高低。,当器件内部有连续的子地址空间时,对这些空间进行,N,个字节的连续读,/,写,子地址会自动加,1,。在主从方式的,
28、I,2,C,总线系统中,只须考虑主方式的,I,2,C,总线操作。,3.,I,2,C,总线基本知识,1,),I,2,C,总线的接口电路结构,I,2,C,总线,由一根数据线,SDA,和一根时钟线,SCL,构成。,I,2,C,总线中,一个节点的每个电路器件,都可视为有如图,8-11,虚框所示的一个,I,2,C,总线接口电路,,用于与,I,2,C,总线的,SDA,和,SCL,线挂接。,数据线,SDA,和时钟线,SCL,都是,双向传输线,,,平时,均处于,高电平,备用状态,只有当,需要关闭,I,2,C,总线时,,SCL,线才会箝位在,低电平,。,图,8-11 I,2,C,总线的器件连接,2,),I,2,
29、C,总线信号定义,在,I,2,C,总线上,,SDA,用于,传送有效数据,,其上传输的,每位,有效数据均对应于,SCL,线上的,一个时钟脉冲,。即:,当,SCL,线上为,高电平,(,SCL=1,)时,,SDA,线上的数据信号才会,有效,(高电平表示,1,,低电平表示,0,);,SCL,线为,低电平,(,SCL=0,)时,,SDA,线上的数据信号,无效,。,因此,只有当,SCL,线为低电平(,SCL=0,)时,,SDA,线上的电平状态才允许发生变化(见图,8-12),。,图,8-12 I,2,C,总线信号的时序,SDA,线上传送的,数据,均以起始信号(,START,)开始,停止信号(,STOP,)
30、结束,,SCL,线在不传送数据时保持,Mark,(,SCL=1,)。,当串行时钟线,SCL,为,Mark,(,SCL=1,)时,,串行数据线,SDA,上发生一个,由高到低,的变化过程(,下降沿,),即为,起始信号,;发生一个,由低到高,的变化过程,即称为,停止信号,。,起始信号,和,停止信号,均由作为,主控器,的单片机,发出,,并由挂接在,I,2,C,总线上的,被控器检测,。,对于不具备,I,2,C,总线接口的单片机,为了能准确检测到这些信号,必须保证在总线的一个时钟周期内对,SAD,线进行至少两次采样。,4.,I,2,C,总线的数据传送,在,I,2,C,总线上每传输一位数据都有一个时钟脉冲相
31、对应。注意这里的时钟脉冲不像一般的时钟那样必须是周期性的,它的,时钟间隔可以不同,。,总线备用,时(即处于“,非忙,”状态),,SDA,和,SCL,都必须保持,高电平,状态,关闭,I,2,C,总线时才使,SCL,箝位在低电平。只有当总线处于“非忙”状态时,数据传输才能被,初始化,。,在数据传输期间,只要时钟线为高电平,数据线就必须保持稳定。,只有在时钟线为低电平时,才允许数据线上的电平状态变化。,在时钟线保持高电平期间,数据线出现,下降沿,为,启动信号,、,上升沿,为,停止信号,,启动和停止信号都,由主机产生,,总线上带有,I,2,C,总线接口的器件很容易检测到这些信号。,I,2,C,总线上传
32、输的,数据,和,地址,字节均为,8,位,,且高位在前,低位在后。,I,2,C,总线以起始信号为启动信号,接着传输的是地址和数据字节,数据字节是没有限制的,但,每个字节后,都必须跟随一个,应答位,,,全部数据传输完毕,后,以,终止信号结尾,。,I,2,C,总线上,数据的传送时序,:图,8-13,图,8-13 I,2,C,总线的数据传送字节格式,如前所述,,SCL,线为,低电平,时,,SDA,线上数据就被,停止传送,。,SCL,线的这一线“与”特性十分有用,当接收器接收到一个数据,/,地址字节后需要进行其他工作而无法立即接收下一个字节时,接收器便可向,SCL,线输出低电平而箝住,SCL(SCL=0
33、),,迫使,SDA,线处于,等待状态,,直到接收器准备好接收新的数据,/,地址字节时,再释放时钟线,SCL,(SCL=1),,使,SDA,线上数据传输得以继续进行。,例:当,被控接收器,在,A,点(图,8-13,),接收完,主控器发来的一个数据字节时,若被控器需要处理接收中断而,无法,令其接收器,继续接收,,则被控器便可箝住,SCL,线为,低电平,,使,主控发送器,处于,等待,状态,直到被控器处理完接收中断后,再释放,SCL,线。,利用,SDA,线进行数据传输时,,发送器,每发完一个数据字节后,都要求,接收方,发回一个应答信号。但与应答信号相对应的,时钟,仍由主控器在,SCL,线上产生,因此,
34、主控发送器,必须在被控接收器发送应答信号前,预先释放对,SDA,线的控制,以便主控器对,SDA,线上应答信号的检测。,应答信号在,第,9,个时钟位,上出现,接收器在,SDA,线上输出低电平为,应答信号,(A),,输出高电平为,非应答信号,(A),时钟信号以及应答和非应答信号间的关系:图,8-14,图,8-14 I,2,C,总线的应答位,在主控器发送数据时,被控器接收完一个数据字节后都要向主控器发回一个应答信号,(A),,主控器据此便可进行下一字节的发送。,如果,被控器,由于某种原因需要进行其他处理而,无法继续接收,SDA,线上数据时,便可向,SDA,线输出一个非应答信号,(A),,使,SDA,
35、线,保持高电平,,,主控器,据此便可产生,一个停止信号,来终止,SDA,线上的数据传输。,当,主控器,作为接收器,接收,被控器送来的,最后一个数据,时,必须给被控器,发送一个非应答信号,(A),令被控器释放,SDA,线,以便主控器可以发送停止信号来结束数据的传输。,I,2,C,总线上的应答信号是比较重要的,在编制程序时应该着重考虑。,5 I,2,C,总线数据传输协议,1,)总线节点的寻址字节,主机产生起始条件后,发送的第一个字节为,寻址字节,。该字节的,头,7,位,(,高,7,位,)为从机地址,,最后位,(,LSB,)决定了报文的方向:,0,表示主机,写,信息到从机,,1,表示主机,读,从机中
36、的信息。,当发送了一个地址后,系统中的,每个器件,都将,头,7,位,与它,自己的地址比较,。如果一样,器件会应答主机的寻址,至于是从机接收器还是从机发送器由,R/W,位决定。,从机地址,由,一个固定,的和,一个可编程,的部分构成,例:某些器件有,4,个固定的位,(,高,4,位,)和,3,个可编程,的地址位(,低,3,位,),那么同一总线上共可以连接,8,个相同的器件。,I,2,C,总线委员会协调,I,2,C,地址的分配,保留了,2,组,8,位地址,(0000,和,1111,),这,2,组地址的用途可查阅有关资料。,挂接到总线上的所有外围器件、外设接口都是总线上的节点。,在,任何时刻,总线上,只
37、有一个主控器件,(,主节点,)实现总线的控制操作,对总线上的其他节点寻址,分时实现点,点的数据传送。,因此,总线上,每个节点,都有,一个固定的节点地址,。,I,2,C,总线上的,单片机,都可以成为主节点,其器件地址由软件给定,存放在,I,2,C,总线的地址寄存器中,称为,主器件的从地址,。,在,I,2,C,总线的多主系统中,单片机作为从节点时,其从地址才有意义。,I,2,C,总线上所有的,外围器件,都有规范的器件地址。,器件地址,由,7,位组成,它和,1,位方向位,构成了,I,2,C,总线器件的,寻址字节,SLA,。,主机产生起始信号后的,第一个寻址字节格式,:,D7 D0,SLA,DA3,D
38、A2,DA1,DA0,A2,A1,A0,R/W,从机地址,其各位含义如下:,器件地址,(,DA3,、,DA2,、,DA1,、,DA0,):,是,I,2,C,总线外围接口器件固有的地址编码,器件出厂时,就已给定。例:,I,2,C,总线,E,2,PROM AT24C,的器件地址为,1010,4,位,LED,驱动器,SAA1064,的器件地址为,0111,。,引脚地址,(,A2,、,A1,、,A0,):,是由,I,2,C,总线外围器件地址端口,A2,、,A1,、,A0,在电路中接电源或接地的不同而形成的地址数据。,数据方向,(,R/W,):,规定了总线上主节点对从节点的数据传送方向,,R,接收,,W
39、发送。,表,8-1,列出了一些常用外围器件的节点地址和寻址字节。,表,8-1,常用,I,2,C,接口通用器件的种类、型号、寻址字节,2)I,2,C,总线数据传输的格式,I,2,C,总线传输数据时必须遵循规定的数据传输格式,,图,8-15,示出了,I,2,C,总线一次完整的数据传输格式。,图,8,15,I,2,C,总线一次完整的数据传输格式,图,8,15,中,,起始信号,表明一次数据传送的开始,其后为,被控器的地址字节,,高位在前,低位在后,第,8,位,为,R/W,方向位。方向位,R/W,表明主控器和被控器间数据传输的方向。,若,R/W=0,,表明数据由主控器按地址字节,写入,被控器;,若,R
40、/W=1,,表明数据从由地址字节决定的被控器,读入,主控器。,方向位后面是被控器发出的,应答位,ACK,。,地址字节传输完后是,数据字节,,数据字节仍是高位在前,低位在后,然后是,应答位,。,若有多个数据字节需要传送,则每个数据字节的格式相同。,数据字节传送完,后,,被控接收器,发回一个,非应答信号,(,高电平有效,),,主控器,据此,发送停止信号,以结束这次数据的传输。,但是,如果,主机仍希望,在总线上,通信,,它可以产生重复的起始信号(,Sr,)和寻址另一个从机,而不是首先产生一个停止信号。,总线上数据传输有多种组合方式,现以图解方式分别介绍如下,3,类数据传输格式,。,(,1,)主控器的
41、写数据操作格式,主控器产生,起始信号,后,发送一个,寻址字节,,,收到应答后,跟着就是,数据传输,,当主机产生,停止信号,后,数据传输停止。主机向被寻址的从机写入,n,个数据字节。整个过程均为主机发送,从机接收,先发数据高位,再发低位,应答位,ACK,由从机发送。,主控器向被控器发送数据时,数据的方向位(,R/W=0,)是不会改变的。传输,n,字节的数据格式如下:,(,1,)主控器的,写数据,操作格式,其中:为主控器发送,被控器接收;,为被控器发送,主控器接收;,A,为应答信号,,A,为非应答信号;,S,为起始信号,,P,为停止信号;,SLA,(,W,),为寻址字节(写);,data,1,da
42、ta n,为被传输的,n,个数据字节。,具体内容为:,(,2,)主控器的,读数据,操作格式,主机从被寻址的从机读出,n,个数据字节。,在传输过程中,除了寻址字节为主机发送、从机接收外,其余的,n,字节均为从机发送,主机接收,.,主机接收完数据后,应发非应答位,向从机表明读操作结束。,主控器从被控器读取数据时,数据传输的方向位,R/W=1,。主控器从被控器读取,n,字节的数据格式为:,具体内容为:,其中:,SLAR,为寻址字节,(,读,),,其余与前述相同,.,注意:主控器在发送停止信号前,应先给被控器发送一个非应答信号,向被控器表明读操作结束。,3,)主控器的,读,/,写,数据操作格式,读,/
43、写操作,时,在一次数据传输过程中,需要改变数据的传送方向,,即主机在一段时间内为读操作,在另一段时间内为写操作。,由于读,/,写方向有变化,,起始信号,和,寻址字节,都会,重复,一次,但,读,/,写方向,(,R/W,),相反,。,例:由单片机主机读取存储器从机中某存储单元的内容,就需要主机先向从机,写入,该存储单元的,地址,,再,发,一个,启动位,,进行,读操作,。,主控器向被控器,先读后写,的,数据格式,如下:,具体内容为:,其中:,Sr,为重复起始信号;,data 1,data n,为主控器的,读数据,;,DATA 1,DATA n,为主控器的,写数据,;其余与前述相同。,通过上述分析,
44、可以得出如下,结论,:,无论总线处于何种方式,,起始信号,、,终止信号,和,寻址字节均,由,主控器发送,和,被控器接收,。,寻址字节中,,7,位地址,是指器件地址,即被寻址的被控器的固有地址。,R/W,方向位用于指定,SDA,线上数据传送的方向。,R/W=0,为主控器写和被控器收,,R/W=1,为主控器读(收)和被控器发。,每个器件(主控器或被控器)内部都有一个,数据存储器,RAM,,,RAM,的地址是连续的,,并,能自动加,/,减,1,。,n,个被传送数据的,RAM,地址可由系统设计者规定,通常作为数据放在上述数据传输格式中,即第一个数据字节,data 1,或,DATA 1,。,总线上传输的
45、每个字节后必须跟,一个应答或非应答信号,A/A,。,6 51,单片机与,I,2,C,总线的接口,1,)单片机与,I,2,C,总线的,硬件连接,用,不带,I,2,C,接口的,51,单片机控制,I,2,C,总线时,硬件也非常简单,,只需两个,I/O,口线,,在软件中分别,定义成,SCL,和,SDA,,与,I,2,C,总线的,SCL,和,SDA,直接相连,再,加上上拉电阻,即可。,以,51,系列单片机为例,可以用,P1.6,和,P1.7,直接与,SCL,和,SDA,相连,硬件接口:,图,8,16,6 51,单片机与,I,2,C,总线的接口,图,8,16,模拟,I,2,C,总线,2)51,单片机对,
46、I,2,C,总线的控制程序,这里以,51,系列单片机为例,介绍如何根据,I,2,C,总线的工作原理用汇编语言编写控制程序。,首先,应根据,I,2,C,总线对,SDA,和,SCL,在各个时段的时序要求写出起始、停止、送应答位、送非应答位、检查应答位以及发送一字节、接收一字节的子程序,具体代码可参见,电子世界,网站(,)上的汇编源程序,该程序中设置“,I,2,C_ERROR”,为出错标志。若在程序中适当增加,NOP,指令的条数,可以提高,I,2,C,总线数据传输的可靠性。,注意:使用这些程序前,先要确定从机的地址和从机中要操作的内部单元的地址。程序中用“,DeviceaddressW,”,表示从机
47、的,7,位地址加上写标志,0,,“,DeviceaddressR,”,表示从机的,7,位地址加上读标志,1,,“,Subaddress,”,表示内部单元的,8,位地址,“,DATA_I,2,C”,表示操作数据在单片机内的存放地址。,这些程序可以实现简单的,I,2,C,总线操作,用户也可以根据具体要求再附加相应的程序。,7 I,2,C,总线数据传送软件包,89C51,单片机中具有,I,2,C,总线接口的毕竟是少数,.,如果是,不带,I,2,C,总线的单片机,则不必扩展,I,2,C,总线接口,,只须通过软件模拟,,这无疑会给,I,2,C,总线的应用提供更广泛的空间。,7 I,2,C,总线数据传送软
48、件包,通常大多数单片机应用系统中,只有一个,CPU,,这种,单主系统,如果采用,I,2,C,总线技术,则总线上只有单片机对,I,2,C,总线从器件的访问,,没有总线的竞争,等问题,这种情况下,只需要模拟主发送,和,主接收时序,。,基于上述考虑,这里提供了这种使用情况下的时序模拟软件,使,I,2,C,总线的使用不受单片机必须带有,I,2,C,总线接口的限制。,本教程在模拟主方式下的,I,2,C,总线时序时,选用如图,8,16,所示,P1.6,和,P1.7,作为时钟线,SCL,和数据线,SDA,,晶振采用,6 MHz,。,这里提供一个软件包,包括:,启动(,STA,),停止(,STOP,),,发送
49、应答位(,MACK,),,发送非应答位(,MNACK,),,应答位检查(,CACK,),,发送一字节数据(,WRBYT,),,接收一字节数据(,RDBYT,),,发送,N,字节数据和接收,N,字节数据(,RDNBYT,),9,个子程序。,1),I,2,C,总线典型信号时序及信号模拟子程序,I,2,C,总线数据传送时,有:,起始位(,S,)、终止位(,P,)、,发送,0,代表应答位(,A,)、,发送,1,代表非应答位(,A,)等信号。,按照典型,I,2,C,总线传送速率的要求,这些信号、时序如,图,8-17(a),、,(b),、,(c),、,(d),所示。,1),I,2,C,总线典型信号时序及信
50、号模拟子程序,图,8,17 I,2,C,总线数据传送典型信号时序,对于,I,2,C,总线的典型信号,可以用指令操作来模拟其时序过程。,若,89C51,单片机的,系统时钟,为,6MHz,,,相应的,单周期指令的周期,为,2s,,则:,起始(,STA,)、终止(,STOP,)、,发送应答位(,MACK,)、,发送非应答位(,MNACK,),的,4,个模拟子程序,如下:,(1),启动,I,2,C,总线子程序,STASTA,:,SETB SDA,SETB SCL ;,起始条件建立时间大于,4.7s,NOP,NOP,CLR SDA,NOP ;,起始条件锁定时间大于,4s,NOP,CLR SCL ;,箝住






