最新单片机原理及应用C语言版8ppt课件.ppt
单片机原理及应用单片机原理及应用C C语言版语言版8 8第第8章章 单片机系统扩展单片机系统扩展 目目 录录 8.1 扩展并行三总线扩展并行三总线 8.2 扩展简单并行输入扩展简单并行输入/输出口输出口 8.3 扩展并行数据存储器扩展并行数据存储器 8.4 串行扩展总线接口技术串行扩展总线接口技术 一、地址总线一、地址总线 地址总线地址总线(Address Bus,AB)用于传送)用于传送单片机送出的地址信号,以便进行存储器单单片机送出的地址信号,以便进行存储器单元和元和I/O端口的选择。端口的选择。 地址总线是单向的地址总线是单向的,只能由单片机向外,只能由单片机向外发送信息。发送信息。 地址总线的数目决定了可直接访问的存地址总线的数目决定了可直接访问的存储单元的数目。储单元的数目。 8.1.1 片外三总线结构片外三总线结构 二、数据总线二、数据总线 数据总线数据总线(Data Bus,DB)用于单片机)用于单片机与存储器或与存储器或I/O端口之间的数据传送。端口之间的数据传送。 一般数据总线的位数与一般数据总线的位数与CPU的字长一致,的字长一致,MCS-51单片机的数据总线是单片机的数据总线是8位的。位的。 数据总线是双向的数据总线是双向的,可以进行两个方向,可以进行两个方向的数据传送。的数据传送。三、控制总线三、控制总线 控制总线控制总线(Control Bus,CB)是单片机)是单片机发出的以控制片外发出的以控制片外ROM、RAM和和I/O口读口读/写操作的一组控制线。写操作的一组控制线。 8.1.1 片外三总线结构片外三总线结构8.1.2 MCS-51系统扩展的实现系统扩展的实现 一、以一、以P0口作低口作低8位地址及位地址及8位数据位数据的复用总线的复用总线 复用,复用,即一段时间内作两种或两种以上即一段时间内作两种或两种以上用途。用途。 在这里指在这里指P0口在每个口在每个CPU周期的周期的前半个前半个周期周期输出低输出低8位地址,由地址锁存器锁存,位地址,由地址锁存器锁存,然后由地址锁存器代替然后由地址锁存器代替P0口输出低口输出低8位地址。位地址。后半个周期后半个周期进行进行8位数据的输入输出。位数据的输入输出。 二、以二、以P2口作为高口作为高8位的地址总线位的地址总线 P0口的低口的低8位地址加上位地址加上P2的高的高8位地址就位地址就可以形成可以形成16位的地址总线位的地址总线,达到,达到64KB的寻的寻址能力。址能力。 实际应用中,往往不需要扩展那么多地实际应用中,往往不需要扩展那么多地址,扩展多少用多少口线,剩余的口线仍可址,扩展多少用多少口线,剩余的口线仍可作一般作一般I/O口来使用。口来使用。8.1.2 MCS-51系统扩展的实现系统扩展的实现 三、控制信号线三、控制信号线ALE:地址锁存信号地址锁存信号,用以实现对低,用以实现对低8位位地址的锁存。地址的锁存。PSEN:片外程序存储器读选通信号片外程序存储器读选通信号。EA:程序存储器选择信号。程序存储器选择信号。为为低电平时低电平时,访问访问外部外部程序存储器;为程序存储器;为高电平时高电平时,访问,访问内内部部程序存储器。程序存储器。WR:片外数据存储器写选通信号。片外数据存储器写选通信号。RD:片外数据存储器读选通信号。片外数据存储器读选通信号。8.1.2 MCS-51系统扩展的实现系统扩展的实现8.1.3 总线驱动总线驱动 总线驱动的原因:总线驱动的原因:在单片机应用系统中,在单片机应用系统中,扩展的三总线上挂接很多负载,如存储器、扩展的三总线上挂接很多负载,如存储器、并行接口、并行接口、A/DA/D接口、显示接口等,但接口、显示接口等,但总线总线接口的负载能力接口的负载能力有限,因此常常需要通过连有限,因此常常需要通过连接接总线驱动器总线驱动器进行总线驱动。进行总线驱动。 总线驱动器的作用:总线驱动器的作用:对于单片机的对于单片机的I/O口口只相当于增加了一个只相当于增加了一个TTL负载,因此驱动器负载,因此驱动器除了对后级电路驱动外,还能对负载的波动除了对后级电路驱动外,还能对负载的波动变化起隔离作用。变化起隔离作用。 在对在对TTL负载驱动时,负载驱动时,只需考虑驱动电只需考虑驱动电流的大小。流的大小。 在对在对MOS负载驱动时,负载驱动时,MOS负载的输入负载的输入电流很小,更多地要考虑对分布电容的电流电流很小,更多地要考虑对分布电容的电流驱动。驱动。 8.1.3 总线驱动总线驱动 总线驱动器的选择:总线驱动器的选择: 系统总线中地址总线是单向的,因此驱动系统总线中地址总线是单向的,因此驱动器可以选用单向的,如器可以选用单向的,如74LS244,还带有三还带有三态控制,能实现总线缓冲和隔离。态控制,能实现总线缓冲和隔离。 数据总线是双向的,其驱动器也要选用双数据总线是双向的,其驱动器也要选用双向的,如向的,如74LS245。74LS245也是三态的,有也是三态的,有一个方向控制端一个方向控制端DIR。DIR=1时输出时输出(AnBn),),DIR=0时输入(时输入(AnBn)。)。 8.1.3 总线驱动总线驱动8.2 扩展简单并行输入扩展简单并行输入/输出口输出口 89C52有有P0P3四组四组I/O口,但是在某些口,但是在某些特定的场合,可能会出现特定的场合,可能会出现I/O口不够用的情口不够用的情况。这时就需要通过扩展来增加况。这时就需要通过扩展来增加I/O口的数口的数量以满足使用的需要。量以满足使用的需要。 在很多应用系统中,在很多应用系统中,采用采用74系列系列TTL电电路或路或4000系列系列MOS电路芯片,扩展并行数据电路芯片,扩展并行数据输入输出。输入输出。 例例1 在图在图8-4中,当中,当P2.0=0,WR=1,RD=0时,通过时,通过74HC244(扩展输入)(扩展输入)读读入按键状态,当入按键状态,当P2.0=0,WR=0,RD=1时,通过时,通过74HC573(扩展输出)(扩展输出)根据按根据按键状态驱动发光二极管发光。键状态驱动发光二极管发光。 74HC244、74HC573的操作地址设为的操作地址设为0 xfeff。8.2 扩展简单并行输入扩展简单并行输入/输出口输出口P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.789C52 WRP2.0RDD0 Q0D1 Q1D2 Q2D3 Q3D4 Q4D5 Q5D6 Q6D7 Q7LE VCCQ0 D0Q1 D1Q2 D2Q3 D3Q4 D4Q5 D5Q6 D6Q7 D7G+74HC57374HC244+5V图图8-4 简单简单I/O接口扩展接口扩展 8.2 扩展简单并行输入扩展简单并行输入/输出口输出口C语言程序清单:语言程序清单:#include void main()unsigned char data tmp1, tmp2=0;unsigned char xdata *pt1;pt1=0 xfeff; /给指针赋地址值给指针赋地址值0 xfeffwhile(1) /循环循环 tmp1=*pt1;/从从74HC244输入数据输入数据 if (tmp1!=tmp2)/判断输入改变时,判断输入改变时, *pt1 =tmp1;/从从74HC573输出数据输出数据 tmp2=tmp1; 汇编语言程序清单:汇编语言程序清单:MOV30H,#00H ;设一初值设一初值MOVDPTR,#0FEFFH ;设端口地址设端口地址LOOP:MOVXA,DPTR;从从244读键盘新值读键盘新值CJNEA, 30H, NEXT;与上次值比较与上次值比较SJMP LOOP;相等再读键盘值相等再读键盘值NEXT:MOV 30H,A;保存新键盘值保存新键盘值MOVXDPTR,A;从从573输出键盘值输出键盘值SJMP LOOP;继续读取键盘值继续读取键盘值8.2 扩展简单并行输入扩展简单并行输入/输出口输出口8.3 扩展并行数据存储器扩展并行数据存储器主要内容主要内容 8.3.1 扩展存储器概述扩展存储器概述 8.3.2 数据存储器的扩展数据存储器的扩展8.3 扩展并行数据存储器扩展并行数据存储器 数据存储器即随机存取存储器数据存储器即随机存取存储器(Random Access Memory,RAM),用于存放可随时),用于存放可随时修改的数据信息。修改的数据信息。 单片机使用的主要是静态单片机使用的主要是静态RAM。 MCS-51系列单片机片外数据存储器的空系列单片机片外数据存储器的空间可达间可达64KB,而片内数据存储器的空间只,而片内数据存储器的空间只有有128B或或256B。如果片内的数据存储器不。如果片内的数据存储器不够用时,则需进行数据存储器的扩展。够用时,则需进行数据存储器的扩展。8.3.1 扩展存储器概述扩展存储器概述 存储器扩展的核心问题是存储器扩展的核心问题是存储器的编址问存储器的编址问题。题。所谓编址就是给存储单元分配地址。所谓编址就是给存储单元分配地址。 由于存储器通常由多个芯片组成,为此存由于存储器通常由多个芯片组成,为此存储器的编址分为两个层次:储器的编址分为两个层次: 即即存储器芯片的选择存储器芯片的选择和和存储器芯片内部存存储器芯片内部存储单元的选择。储单元的选择。 一、地址线的译码一、地址线的译码 存储器芯片的选择有两种方法:存储器芯片的选择有两种方法:线选法和线选法和译码法。译码法。 1、线选法。、线选法。所谓线选法,就是所谓线选法,就是直接以系直接以系统的地址线作为存储器芯片的片选信号,统的地址线作为存储器芯片的片选信号,为为此只需把用到的地址线与存储器芯片的片选此只需把用到的地址线与存储器芯片的片选端直接相连即可。端直接相连即可。 2、译码法。、译码法。所谓译码法,就是所谓译码法,就是使用地址使用地址译码器对系统的片外地址进行译码,译码器对系统的片外地址进行译码,以其译以其译码输出作为存储器芯片的片选信号。码输出作为存储器芯片的片选信号。译码法译码法又分为又分为完全译码完全译码和和部分译码部分译码两种。两种。 8.3.1 扩展存储器概述扩展存储器概述(1 1)完全译码。)完全译码。地址译码器使用了全部地址地址译码器使用了全部地址线,地址与存储单元一一对应,线,地址与存储单元一一对应,也就是也就是1 1个个存储单元只占用存储单元只占用1 1个唯一的地址。个唯一的地址。(2 2)部分译码。)部分译码。地址译码器仅使用了部分地地址译码器仅使用了部分地址线,地址与存储单元不是一一对应址线,地址与存储单元不是一一对应,而是,而是1 1个存储单元占用了几个地址。个存储单元占用了几个地址。8.3.1 扩展存储器概述扩展存储器概述译码地址线译码地址线与存储器连接的地址线与存储器连接的地址线A15 A14 A13 A12 A11 A10 A9A8A7A6A5A4A3A2A1A00100图图8-5 地址译码关系图地址译码关系图8.3.1 扩展存储器概述扩展存储器概述 芯片译码地址:芯片译码地址:在设计地址译码器电路时,在设计地址译码器电路时,常采用地址译码关系图。所谓地址译码关系常采用地址译码关系图。所谓地址译码关系图,就是一种用简单的符号来表示全部地址图,就是一种用简单的符号来表示全部地址译码关系的示意图,如图译码关系的示意图,如图8-5所示。所示。 二、扩展存储器所需芯片数目的确定二、扩展存储器所需芯片数目的确定 若所选存储器芯片字长与单片机字长一致若所选存储器芯片字长与单片机字长一致,则只需扩展容量。则只需扩展容量。所需芯片数目按下式确定:所需芯片数目按下式确定: 芯片数目芯片数目= =系统扩展容量系统扩展容量存储器芯片容量存储器芯片容量8.3.1 扩展存储器概述扩展存储器概述 若所选存储器芯片字长与单片机字长不一若所选存储器芯片字长与单片机字长不一致,则不仅需扩展容量,还需字扩展。致,则不仅需扩展容量,还需字扩展。所需所需芯片数目按下式确定:芯片数目按下式确定: 芯片数目芯片数目= = 系统字长系统字长存储器芯片字长存储器芯片字长系统扩展容量系统扩展容量存储器芯片容量存储器芯片容量 三、三、38译码器译码器74LS138 38译码器译码器74LS138为一种常用的为一种常用的地址译地址译码器芯片。码器芯片。其中,其中,G1、G2A、G2B为控制端。只有为控制端。只有当当G1为为“1”,且,且G2A、G2B均为均为“0”时,译时,译码器才能进行译码输出。否则译码器的码器才能进行译码输出。否则译码器的8个个输出端全为高阻状态。输出端全为高阻状态。译码输入端与输出端之间的译码关系如译码输入端与输出端之间的译码关系如表表8-1所示。所示。8.3.1 扩展存储器概述扩展存储器概述Y0Y1Y2Y3Y4Y5Y6Y7CBA编码编码000001010011100101110111输出有效位输出有效位表表8-1 74LS138的译码关系的译码关系8.3.1 扩展存储器概述扩展存储器概述8.3.2 数据存储器的扩展数据存储器的扩展 一、常用静态一、常用静态RAM芯片芯片 常见的静态常见的静态RAM芯片有芯片有6264(8K8位)、位)、62256(32K8位)、位)、628128(128K8位)等。位)等。二、扩展数据存储器举例二、扩展数据存储器举例 例例8-2 采用采用6264芯片在芯片在89C52片外扩展片外扩展24KB数据存储器,如图数据存储器,如图8-8所示。所示。图图8-8 62648-8 6264扩展扩展24KB24KB数据存储器数据存储器 P2.0P2.4P0ALEP2.5P2.6P2.7WERD74HC573D QLE 74LS138A Y0B Y1C Y2 A0A126264CE WE OE A0A126264CE WE OEA8A12D0D7A0A78.3.2 数据存储器的扩展数据存储器的扩展解:根据公式可得解:根据公式可得 芯片数目芯片数目= = =3片片24KB8KB A0A126264CE WE OE8.4 串行扩展总线接口技术串行扩展总线接口技术主要内容主要内容 8.4.1 常用的串行总线接口简介常用的串行总线接口简介 8.4.2 I2C总线总线 8.4.3 SPI串行外设接口总线串行外设接口总线8.4 串行扩展总线接口技术串行扩展总线接口技术 串行扩展总线技术是新一代单片机技术发串行扩展总线技术是新一代单片机技术发展的一个显著特点。展的一个显著特点。 相对于并行总线接口,相对于并行总线接口,串行总线接口有着串行总线接口有着占用占用I/O口线少(一般口线少(一般34根),编程相对简根),编程相对简单,易于实现用户系统软硬件的模块化、标准单,易于实现用户系统软硬件的模块化、标准化等优点。化等优点。 随着串行总线接口技术(随着串行总线接口技术(SPI、I2C等)和等)和各种串行接口芯片的发展,串行总线接口技术各种串行接口芯片的发展,串行总线接口技术越来越受到人们的推崇。越来越受到人们的推崇。8.4.1 常用的串行总线接口简介常用的串行总线接口简介 一、一、I2C(Inter Integrated Circuit) I2C总线是总线是Philips公司推出的芯片间串行公司推出的芯片间串行传输总线。传输总线。 I2C总线是二线制,采用器件地址的硬件总线是二线制,采用器件地址的硬件设置方法,通过软件寻址设置方法,通过软件寻址完全避免了器件的完全避免了器件的片选线寻址方法,从而使硬件系统具有简单片选线寻址方法,从而使硬件系统具有简单灵活的扩展方法。灵活的扩展方法。 二、二、SPI SPI总线是总线是Motorola公司提出的一种同步公司提出的一种同步串行外设接口。串行外设接口。 SPI总线是三线制,可直接与多种标准外总线是三线制,可直接与多种标准外围器件直接接口。围器件直接接口。 三、三、Microware Microware总线是总线是NS公司提出的串行同公司提出的串行同步双工通信接口。步双工通信接口。 Microware总线是三线制,由一根数据输总线是三线制,由一根数据输出(出(SO)线、一根数据输入()线、一根数据输入(SI)线和一根)线和一根时钟(时钟(SK)线组成。)线组成。8.4.1 常用的串行总线接口简介常用的串行总线接口简介 四、单总线(四、单总线(1-wire) 单总线及应用:单总线及应用: 1-wire总线是总线是Dallas公司公司研制开发的一种协议,主要用于便携式仪表研制开发的一种协议,主要用于便携式仪表和现场监控系统。和现场监控系统。 单总线结构:单总线结构:是利用一根线实现双向通是利用一根线实现双向通信,由一个总线主节点、一个或多个从节点信,由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数组成系统,通过一根信号线对从芯片进行数据的读取。据的读取。8.4.1 常用的串行总线接口简介常用的串行总线接口简介 五、五、USB(Universal Serial Bus) USB总线及应用:总线及应用:USB总线是总线是Compaq、Intel、Microsoft、NEC等公司联合制定的一等公司联合制定的一种计算机串行通信协议。种计算机串行通信协议。 USB总线的主要优点:总线的主要优点:比较于其他传统接比较于其他传统接口的一个优势是即插即用的实现,即插即用口的一个优势是即插即用的实现,即插即用(Plug-and-Play)也称为热插拔()也称为热插拔(Hot Plugging)8.4.1 常用的串行总线接口简介常用的串行总线接口简介 六、六、CAN(Controller Area Network) CAN总线及应用:总线及应用: CAN总线是德国总线是德国Bosch公司最先提出的多主机局域网总线,公司最先提出的多主机局域网总线,是国际上应用最广泛的现场总线之一。是国际上应用最广泛的现场总线之一。 CAN总线的主要优点:总线的主要优点:在由在由CAN总线构总线构成的单一网络中,理论上可以挂接无数个节成的单一网络中,理论上可以挂接无数个节点。点。8.4.1 常用的串行总线接口简介常用的串行总线接口简介8.4.2 I2C总线总线 一、一、I2C总线的特点总线的特点 I2C总线最主要的优点是其简单性和有效总线最主要的优点是其简单性和有效性。性。 I2C总线的特点:总线的特点:其接口直接集成在组件其接口直接集成在组件之上,因此之上,因此I2C总线占用的空间非常小,减少总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了了电路板的空间和芯片管脚的数量,降低了互联成本。互联成本。 I2C总线的其它优点:总线的其它优点:它支持多主控它支持多主控(Multimastering),其中任何能够进行发),其中任何能够进行发送和接收的设备(节点)都可以成为主控器。送和接收的设备(节点)都可以成为主控器。图图8-9 典型典型I2C总线系统示意图总线系统示意图单片机单片机AA/D、D/A转换器转换器专用集成专用集成电路电路静态静态RAM或或ROMLCD显示器显示器单片机单片机BSDASCL8.4.2 I2C总线总线 I2C总线的主控器:总线的主控器:一个主控器能够控制一个主控器能够控制信号的传输和时钟频率。当然,在任何时间信号的传输和时钟频率。当然,在任何时间点上只能有一个主控器。如图点上只能有一个主控器。如图8-9所示。所示。 I2C总线支持多主和主从两种工作模式总线支持多主和主从两种工作模式多主方式:多主方式:通过硬件和软件的仲裁,主通过硬件和软件的仲裁,主控器取得总线控制权。控器取得总线控制权。 主从方式:主从方式:从器件地址包括从器件地址包括器件编号地器件编号地址址和和引脚地址引脚地址两部分,器件编号地址由两部分,器件编号地址由I2C总线委员会分配,引脚地址由外界电平的高总线委员会分配,引脚地址由外界电平的高低决定。低决定。 器件内部子地址:器件内部子地址:当器件内部有连续的当器件内部有连续的子地址空间时,对这些空间进行连续读写,子地址空间时,对这些空间进行连续读写,子地址会自动加子地址会自动加1。8.4.2 I2C总线总线 CPU发出的控制信号:发出的控制信号:分为地址码和控制分为地址码和控制量两部分。量两部分。 地址码:地址码:用来选址,用来选址,即接通需要控制的电即接通需要控制的电路,确定控制的种类。路,确定控制的种类。 控制量:控制量:决定该调整的类别决定该调整的类别(如对比度、(如对比度、亮度等)亮度等)及需要调整的量。及需要调整的量。这样,各控制电这样,各控制电路虽然挂在同一条总线上,却彼此独立,互路虽然挂在同一条总线上,却彼此独立,互不相关。不相关。8.4.2 I2C总线总线 二、二、I2C总线的时序总线的时序 I2C总线的信号:总线的信号:I2C总线在传送数据过程总线在传送数据过程中共有三种类型信号,中共有三种类型信号,分别是:开始信号、分别是:开始信号、结束信号和应答信号。结束信号和应答信号。 I2C总线总线 开始信号:开始信号:SCL为高电平时,为高电平时,SDA由高电由高电平向低电平跳变,平向低电平跳变,开始传送数据。开始传送数据。 结束信号:结束信号:SCL为低电平时,为低电平时,SDA由低电由低电平向高电平跳变,平向高电平跳变,结束传送数据。结束传送数据。 应答信号:应答信号:接收数据的接收数据的IC在接收到在接收到8bit数数据后,向发送数据的据后,向发送数据的IC发出特定的发出特定的低电平脉低电平脉冲,冲,表示已收到数据。表示已收到数据。8.4.2 I2C总线总线SDASCL 开始信号允许数据变化开始信号允许数据变化 允许数据变化允许数据变化 允许数据变化允许数据变化 结束信号结束信号图图8-10 I2C总线的时序总线的时序8.4.2 I2C总线总线 如图如图8-10所示,为所示,为I2C总线的一般时序。即总线的一般时序。即起始信号、结束信号、允许数据线改变的条件起始信号、结束信号、允许数据线改变的条件等。等。 三、三、I2C总线的数据传输过程总线的数据传输过程 数据传输时,主机先发送启动信号和时钟数据传输时,主机先发送启动信号和时钟信号,随后发送寻址字节来寻址被控器件,信号,随后发送寻址字节来寻址被控器件,并规定数据传送方向。并规定数据传送方向。 寻址字节由寻址字节由7位从机地址(位从机地址(D7D1)和)和1位位方向位(方向位(D0,读,读0/写写1)组成。)组成。 从机地址包括从机地址包括器件编号地址器件编号地址和和引脚地址引脚地址两两部分。部分。8.4.2 I2C总线总线WR/DA3DA2DA1DA0A2A1A0器件识别码器件识别码器件识别码器件识别码如:如:RTC 1101RTC 1101允许在公用的允许在公用的I I2 2C C总线总线EEPROM 1010EEPROM 1010上同时接上同时接8 8个同类器件个同类器件I I2 2C C总线器件的总线器件的7 7位从器件(机)地址:位从器件(机)地址:8.4.2 I2C总线总线 从机对地址的响应:从机对地址的响应:当主机发送寻址字节当主机发送寻址字节时,总线上所有器件都将其中的高时,总线上所有器件都将其中的高7位地址与位地址与自己的比较,自己的比较,若相同,则该器件根据读若相同,则该器件根据读/写位写位确定是从发送器还是从接收器。确定是从发送器还是从接收器。 对从接收器:对从接收器:在寻址字节之后,主控发送在寻址字节之后,主控发送器通过器通过SDA线向从接收器发送数据,数据发线向从接收器发送数据,数据发送完毕后发送终止信号,以结束传送过程。送完毕后发送终止信号,以结束传送过程。 对从发送器:对从发送器:在寻址字节之后,主控接收在寻址字节之后,主控接收器通过器通过SDA线接收被控发送器的发送数据。线接收被控发送器的发送数据。8.4.2 I2C总线总线 每传输一位数据,都有一个时钟脉冲相对每传输一位数据,都有一个时钟脉冲相对应。应。时钟脉冲不必是周期性的,它的时钟间时钟脉冲不必是周期性的,它的时钟间隔可以不同。隔可以不同。 I2C总线的备用状态(总线的备用状态(“非忙非忙”状态):状态):SDA和和SCL都为都为“1”;只有当总线处于只有当总线处于“非非忙忙”状态时,数据传输才能被初始化。状态时,数据传输才能被初始化。I2C总线的关闭状态:总线的关闭状态:SCL箝位在低电平。箝位在低电平。 I2C总线上传输的数据和地址字节均为总线上传输的数据和地址字节均为8位,位,且高位在前,低位在后。且高位在前,低位在后。8.4.2 I2C总线总线 数据线数据线SDA上的一般情况:上的一般情况:I2C总线以开总线以开始信号为始信号为启动信号启动信号;接着传输的是;接着传输的是地址和数地址和数据字节据字节,数据字节是没有限制的;每个字节,数据字节是没有限制的;每个字节后必须跟随一个后必须跟随一个应答位应答位(0);全部数据传输);全部数据传输完毕后,以完毕后,以结束信号结束信号结尾。结尾。 SCL的的“线与线与”特性:特性:任一器件的任一器件的SCL为为低电平时,便时时钟线低电平时,便时时钟线SCL变低,变低,SDA上数上数据就被停止传送。据就被停止传送。 8.4.2 I2C总线总线接收器的应答:接收器的应答:正常应答位为正常应答位为0;当接收;当接收器接收到一个字节后器接收到一个字节后无法立即接收下一个字无法立即接收下一个字节时节时,便,便向向SCL线输出低电平线输出低电平而箝住而箝住SCL(SCL=0),迫使,迫使SDA线处于等待状态。线处于等待状态。被控器箝住被控器箝住SCL线为低电平,使主控发送线为低电平,使主控发送器处于等待状态的情况:器处于等待状态的情况:如图如图8-11中的中的A处,处,当接收器在当接收器在A点接收完主控器发来的一个字节点接收完主控器发来的一个字节时,需要处理接收中断而无法继续接收,则时,需要处理接收中断而无法继续接收,则被控器便可箝住被控器便可箝住SCL线为低电平,使主控发线为低电平,使主控发送器处于等待状态,直到被控器处理完接收送器处于等待状态,直到被控器处理完接收中断后,再释放中断后,再释放SCL线。线。8.4.2 I2C总线总线图图8-11 I2C总线的数据传送字节格式总线的数据传送字节格式开始信号开始信号从地址从地址来自接收器来自接收器响应信号响应信号发送器等待发送器等待数据数据来自接收器来自接收器响应信号响应信号方向位方向位停止信号停止信号重复开始信号重复开始信号若传送多个字节则重复若传送多个字节则重复SCLSSDAMSBACKACKR/WP/SA8.4.2 I2C总线总线关于应答信号:关于应答信号:(1)应答信号的发送时刻:)应答信号的发送时刻:数据传输时,数据传输时,发送器每发完一个字节,都要求接收方发回发送器每发完一个字节,都要求接收方发回一个应答信号(一个应答信号(0)。)。 (2)应答信号的过程:)应答信号的过程:发送时钟仍由主发送时钟仍由主控器在控器在SCL上产生。上产生。主控发送器必须在被控主控发送器必须在被控接收器发送应答信号前,预先释放对接收器发送应答信号前,预先释放对SDA线线的控制的控制(SDA1),以便主控器对),以便主控器对SDA线上线上应答信号的检测。应答信号的检测。8.4.2 I2C总线总线 正常应答:正常应答:主控器发送时,被控器接收完每主控器发送时,被控器接收完每个字节需发回应答信号个字节需发回应答信号“0”,主控器据此进行下,主控器据此进行下一字节的发送。一字节的发送。 异常应答:异常应答:如果被控器由于某种原因无法继如果被控器由于某种原因无法继续接收续接收SDA上数据时,可向上数据时,可向SDA输出一个非应答输出一个非应答信号(信号(1),主控器据此便产生一个),主控器据此便产生一个Stop来终止来终止SDA线上的数据传输。线上的数据传输。 主控器接收时也应给被控器发应答信号。主控器接收时也应给被控器发应答信号。主控器接收时的结束应答:主控器接收时的结束应答:当主控器要结束当主控器要结束传输时,必须给被控器发一个非应答信号传输时,必须给被控器发一个非应答信号“1”,令被控器释放令被控器释放SDA线,以便主控器发送线,以便主控器发送Stop信号信号来结束数据的传输,如图来结束数据的传输,如图8-12所示。所示。8.4.2 I2C总线总线图图8-12 I2C总线的应答信号总线的应答信号发送器发送器数据输出数据输出接收器接收器数据输入数据输入主控器主控器时钟线时钟线起始信号起始信号释放总线保持高电平释放总线保持高电平不应答不应答 A应答应答 A应答时钟脉冲应答时钟脉冲SMSB28918.4.2 I2C总线总线 四、四、I2C的数据格式的数据格式 1、主控器写数据、主控器写数据 主机写数据过程:主机写数据过程:整个过程均为主机发送,整个过程均为主机发送,从机接收,数据的方向位从机接收,数据的方向位R/W=0。应答位。应答位ACK由从机发送,当主机产生结束信号后,由从机发送,当主机产生结束信号后,数据传输停止。格式如下:数据传输停止。格式如下:8.4.2 I2C总线总线A/SAData 1AData 2A Data n-1A Data nPSLAWS为开始信号,为开始信号,P为结束信号,为结束信号,A为应答信号,为应答信号, 为非应答信号,为非应答信号,SLA为寻址字节(写),为寻址字节(写),Data 1Data n为被传送的为被传送的n个数据。个数据。为主控器发送,被控器接收。为主控器发送,被控器接收。 为被控器发送,主控器接收。为被控器发送,主控器接收。 WAA8.4.2 I2C总线总线 2、主控器读数据、主控器读数据 主机读数据过程:主机读数据过程:寻址字节为主机发送、寻址字节为主机发送、从机接收,方向位从机接收,方向位R/W=1R/W=1,n n个数据字节均为个数据字节均为从机发送、主机接收。主机接收完全部数据后从机发送、主机接收。主机接收完全部数据后发非应答位(发非应答位(1 1),表明读操作结束。格式如),表明读操作结束。格式如下:下:SSLA RAData 1AData 2AData n-1AData nPSLA RSLA R为寻址字节读。为寻址字节读。 A8.4.2 I2C总线总线 3、主控器读主控器读/ /写数据写数据 改变改变传送方向的传送方向的数据传输过程:数据传输过程:由于读由于读/ /写方写方向有变化,开始信号和寻址字节都会重复一次,向有变化,开始信号和寻址字节都会重复一次,但读但读/ /写方向(写方向(R/WR/W)相反。格式如下:)相反。格式如下:SSLA RAData 1AData 2AData nASrADATA 1ADATA2ADATA n-1ADATA nPSr为重复开始信号,为重复开始信号,Data 1Data n为主控器为主控器的读数据,的读数据,DATA 1DATA n为主控器的写数据。为主控器的写数据。SLAWA/A8.4.2 I2C总线总线 三、三、I2C总线的应用总线的应用 带有带有I2C接口的单片机:接口的单片机:Cygnal的的 C8051 F0XX系列,系列,Philips的的P87LPC7XX系列,系列,Microchip的的PIC16C6XX系列等。很多外围器系列等。很多外围器件如存储器、监控芯片等也提供件如存储器、监控芯片等也提供I2C接口。接口。 图图8-13为为I2C总线外围扩展示意图。总线外围扩展示意图。8.4.2 I2C总线总线图图8-13 I2C总线外围扩展示意图总线外围扩展示意图 MCU SDA SCLLED显示器显示器LED驱动驱动控制器控制器SDA SCLLCD显示器显示器LCD驱动驱动控制器控制器SDA SCL键盘键盘I/OSDA SCL打印机打印机I/OSDA SCLSCL SDASRAMSCL SDAE2PROMSCL SDAADC/DACSCL SDARTCSCL SDADTMFVCC8.4.2 I2C总线总线RTC实时时钟,实时时钟,DTMF双音多频编码解码器。双音多频编码解码器。例例8-3 89C52模拟模拟I2C。如图。如图8-14所示。所示。图图8-14 89C51模拟模拟I2C89C52 P1.0P1.1I2C器件器件SCLSDA10K2 VCC 8.4.2 I2C总线总线C语言程序清单:语言程序清单:#include #include /有位操作、空操作等有位操作、空操作等sbit scl=0 x90;/P1.0的地址的地址sbit sda=0 x91;/P1.1的地址的地址void start(void)/发送开始信号发送开始信号 sda=1;scl=1;_nop_(); /延时延时 _nop_();sda=0;_nop_();_nop_();scl=0;8.4.2 I2C总线总线void stop(void) /发送结束信号发送结束信号 sda=0;scl=1; _nop_(); /延时延时_nop_();sda=1;_nop_();_nop_();sda=0;scl=0;8.4.2 I2C总线总线bit tack(void)/检查应答检查应答 sda=1;/准备接收准备接收 scl=1;_nop_();_nop_();if(sda!=0) /判断是否有应答判断是否有应答return sda; /若非应答返回若非应答返回sda scl=0;8.4.2 I2C总线总线void txbyt(unsigned char txdat) /字节发送字节发送 unsigned int i;for(i=0;i8;i+)/一个字节一个字节8次按位循环发送次按位循环发送 if(txdat&0 x80) sda=1;/取最高位,是取最高位,是1发送发送1else sda=0;/是是0发送发送0 scl=1;/保持数据有效保持数据有效 _nop_();_nop_();scl=0;/准备改变数据准备改变数据 sda=0;txdat=txdat1; /左移准备取次高位左移准备取次高位 8.4.2 I2C总线总线unsigned char rxbyt(void)/字节接收字节接收 unsigned char rxdat=0; /接收数据存于接收数据存于rxdat unsigned int i;for(i=0;i8;i+) sda=1;/开始接收开始接收 scl=1;if(sda&1)rxdat+=1;elserxdat+=0;rxdat=rxdat1;scl=0;/应答应答 return rxdat;/返回接收到的数据返回接收到的数据8.4.2 I2C总线总线汇编语言程序清单:汇编语言程序清单: SCL EQU P1.0SDA EQU P1.1;发送开始信号;发送开始信号START:SETB SDA SETB SCLNOP;NOP的数目由时钟频率确定的数目由时钟频率确定NOP;此处用此处用NOP来延时来延时 CLR SDANOPNOPCLR SCLRET8.4.2 I2C总线总线;结束信号;结束信号STOP:CLR SDASETB SCLNOPNOPSETB SDANOPNOPCLRSDACLR SCLRET8.4.2 I2C总线总线;应答位检查;应答位检查TACK:SETB SDA SETB SCLNOPNOPCLR 30H;正常标志正常标志 MOV C,SDAJNC TEND; 正常应答转移正常应答转移 SETB 30HTEND:CLR SCLRET8.4.2 I2C总线总线;发送子程序;发送子程序 TXBYT:MOV R4,#08H ;数据长度为;数据长度为8位位 TX0:RLC A ; 发送位送入发送位送入CYJC TX1;CY位为位为1转到转到TX1CLR SDA;置为低电平,发送置为低电平,发送0 SETB SCLNOPNOPCLR SCL; 高电平保持数据稳定高电平保持数据稳定DJNZ R4,TX0RET8.4.2 I2C总线总线TX1: SETB SDA SETB SCLNOPNOPCLR SCL; 脉冲变为低电平脉冲变为低电平改变数据 CLR SDADJNZ R4,TX0RET8.4.2 I2C总线总线;字节接收子程序;字节接收子程序 RXBYT:MOV R4,#08H