资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单片机中级教程,原理与应用,山东农业大学,信息学院,#,1,第六章 80,C51,单片机的系统扩展,6.1,概述,6.1.1,外部并行扩展性能,6.1.2,外部串行扩展性能,6.2,单片机的外部并行扩展,6.2.1,程序存储器的扩展,6.2.2,片外数据存储器的扩展,6.2.3,扩展片外程序存储器和片外数据存储器,2,6.2.4,通过并行总线扩展,I/O,口,6.3,单片机的外部串行扩展,6.3.1,串行扩展,E,2,PROM,6.3.2,串行扩展,I/O,接口,6.4,外部中断源的扩展,3,思考,通常情况下,采用80,C51/87C51,的最小应用系统最能发挥单片机体积小、成本低的优点。但在许多情况下,构成一个工业测控系统时,考虑到,传感器接口,、,伺服控制接口,以及,人机对话接口,等的需要,最小应用系统常常不能满足要求,因此,系统扩展是单片机应用系统硬件设计中最常遇到的问题。,4,系统扩展,是指,单片机内部各功能部件不能满足应用系统要求时,在片外连接相应的外围芯片以满足应用系统要求,。80,C5l,系列单片机有很强的外部扩展能力,外围扩展电路芯片大多是一些常规芯片,扩展电路及扩展方法较典型、规范。用户很容易通过标准扩展电路来构成较大规模的应用系统。,80,C51,系列单片机的系统扩展有,程序存储器(,ROM),扩展,、,数据存储器(,RAM),扩展,、,I/O,口扩展,、,中断系统扩展,以及,其它特殊功能扩展,。,5,6.1,概述,对于单片机系统扩展的方法有,并行扩展法,和,串行扩展法,两种。,并行扩展法,是指利用单片机的,三组总线(,AB、DB、CB),进行的系统扩展;,串行扩展法,是指利用,SPI,三线总线,和,I,2,C,双总线,的串行系统扩展。,由于集成度和结构的发展,在原来只能使用并行扩展法的场合,现在使用串行扩展法了。串行扩展法具有显著的优点。一般地说,串行接口器件,体积小,,因而,所占用电路板的空间小,仅为并行接口器件的10%,明显地减小了电路板空间和成本;串行接口器件,6,与单片机接口时需用的,I/O,口线很少,(,仅需3,4,根,),不仅减少了控制器的资源开销,而且极大地简化了连接,进而提高了可靠性。,但是,一般串行接口器件,速度较慢,,在需用高速应用的场合,还是并行扩展法占主导地位。在进行系统扩展时,应对单片机的系统扩展能力、扩展总线结构及扩展应用特点有所了解,这样才能顺利地完成系统扩展任务。,7,6.1.1,外部并行扩展性能,1,、80,C51,系列单片机的片外总线结构,单片机都是通过芯片的引脚进行系统扩展的。为了满足系统扩展要求,80,C51,系列单片机芯片引脚可以构成右图所示的,三总线结构,,即,地址总线(,AB),、,数据总线(,DB),和,控制总线(,CB),。,所有的外部芯片都通过这三组总线进行扩展。,80,C51,系列单片机的三总线引脚结构,8,(1),地址总线(,AB),地址总线由,P0,口提供低8位,A0A7,P2,口提供高8位,A8A15。,由于,P0,还要作数据总线口,只能,分时用做地址线,,故,P0,口输出的低8位地址数据必须,用锁存器锁存,。锁存器的锁存控制信号为引脚,ALE,输出的控制信号。在,ALE,的下降沿将,P0,口输出的地址数据锁存。,P2,口具有输出锁存功能,故不需外加锁存器。,P0、P2,口扩展为地址线后便不能作为一般,I/O,口使用。,地址总线宽度为16位,故可寻址范围为2,16,=64,KB。,9,(2),数据总线(,DB),数据总线由,P0,口提供,其宽度为8位。,P0,口为三态双向口,是应用系统中使用最为频繁的通道。所有单片机与外部交换的数据、指令、信息,除少数可直接通过,P1,口外,全部通过,P0,口传送。,数据总线要连到多个连接的外围芯片上,而在同一时间里只能够有一个是有效的数据传送通道。哪个芯片的数据通道有效,则由地址线控制各个芯片的,片选线,来选择。,10,(3),控制总线(,CB),控制总线包括,片外系统扩展用控制线,和,片外信号对单片机的控制线,。,ALE,:,输出,,P0,口上地址与数据隔离信号,用于锁存,P0,口输出的低8位地址数据的控制线。通常,,ALE,在,P0,口输出地址期间出现低电平,用这个,低电平信号控制锁存器来锁存地址数据,。,系统扩展用控制线有,ALE、PSEN、EA、WR、RD。,11,PSEN,:,输出,用于片外程序存储器(,EPROM),的,“,读,”,数控制。,“,读,”,取,EPROM,中数据(指令)时,不用,“,RD,”,信号,而用,PSEN。,EA,:,输入,用于选择片内或片外程序存储器。当,EA=0,时,只访问外部程序存储器,不论片内有无程序存储器。因此,在扩展并使用片外程序存储器时,必须使,EA,接地。,WR、RD,:,输出,用于片外数据存储器(,RAM),的读/写控制。当执行片外数据存储器操作指令,MOVX,时,这两个控制信号自动生成。,12,2,、80,C51,系列单片机的系统并行扩展能力,由于地址总线宽度为16位,在片外可扩展的存储器最大容量为64,KB,,地址为0000,HFFFFH。,片外数据存储器与程序存储器的操作使用,不同的指令和控制信号,,,允许两者的地址重复,,故片外可扩展的数据存储器与程序存储器分别为64,KB。,片外数据存储器与片内数据存储器的操作指令不同(片外,RAM,只能用,MOVX,指令),,允许两者地址重复,,亦即外部扩展数据存储器地址可从0000,H,开始。,13,为了配置外围设备而需要扩展的,I/O,口,可与片外数据存储器统一编址,不再另外提供地址线。因此,在应用系统要大量配置外围设备以及扩展较多,I/O,口时,要占去大量的,RAM,地址。片外程序存储器与片内程序存储器采用相同的操作指令,,片内与片外程序存储器的选择靠硬件结构实现,。,当,EA=0,时,不论片内有无程序存储器,此时只使用片外程序存储器,片外程序存储器的地址应从0000,H,开始设置;当,EA=1,时,前4,KB,地址0000,H0FFFH,为片内程序存储器所有,片外扩展的程序存储器的地址只能从1000,H,开始设置。,14,当应用系统扩展的存储器容量超过地址总线范围时,可用,换体,的办法解决,如下图所示。图中用4个32,KB,容量的数据存储器62256来组成两个存储器体,存储器体、分别为64,KB。4,个62256的使能端通过由,P2.7,和,P1.0,控制的2-4译码器来选通。可以看出每增加一条,I/O,口线,可以再扩大地址容量一倍。,用,I/O,线来控制片外存储器换体,当复位后,由于,P1.0,为高电平,64地址指向体;当给,P1.0,置低电平后,则64,KB,地址指向体。,15,6.1.2,外部串行扩展性能,1,、80,C51,系列单片机的串行总线结构,80,C51,系列单片机的串行总线包括:,SPI,(Serial Peripheral Interface),三线总线和,I,2,C,公用双总线两种。,SPI,三线总线结构是一个同步外围接口,允许,MCU,与各种外围设备以串行方式进行通信。一个完整的,SPI,系统有如下的特性:,(1) SPI,三线总线结构,全双工、三线同步传送;,16,主、从机工作方式;,可程控的主机位传送频率、时钟极性和相位;,在大多数场合,使用一个,MCU,作为主机,控制数据向一个或多个从机(外围器件)的传送。一般,SPI,系统使用四个,I/O,引脚:,发送完成中断标志;,写冲突保护标志。,1),串行数据线(,MISO、MOSI),17,主机输入/从机输出数据线(,MISO,),和主机输出/从机输入数据线(,MOSI,),,用于串行数据的发送和接收。数据发送时,,先传送,MSB(,高位),后传送,LSB(,低位),。,在,SPI,设置为,主机,方式时,,MISO,线是主机数据输入线,,MOSI,是主机数据输出线,;在,SPI,设置为,从机,方式时,,MISO,线是从机数据输出线,,MOSI,是从机数据输入线,。,18,2),串行时钟线(,SCLK),串行时钟线(,SCLK),用于,同步,从,MISO,和,MOSI,引脚输入和输出数据的传送。在,SPI,设置为,主机,方式时,,SCLK,为,输出,;在,SPI,设置为,从机,方式时,,SCLK,为,输入,。,在,SPI,设置为主机方式时,主机启动一次传送时,自动在,SCLK,脚产生8个时钟周期。在主机和从机,SPI,器件中,在,SCLK,信号的一个跳变时进行数据移位,数据稳定后的另一个跳变时进行采样。,19,对于一个完整的,SPI,系统,串行数据和串行时钟之间有四种极性和相位关系,如下图所示,以适应不同的外围器件特性。,主机和从机器件之间的传送定时关系必须相同,。,SPI,系统时钟的极性和相位关系,CPOL,CPHA,pol,arity,pha,se,CPOL,=0,时钟的空闲状态为低电平,CPOL,=1,时钟的空闲状态为高电平,CPHA=0,CPHA=0,CPHA=1,CPHA=1,CPOL =0,CPOL =0,CPOL =1,CPOL =1,CPHA,=0,第一个边沿采样,CPHA,=1,第一个边沿改变数值,20,3),从机选择(,SS),在从机方式时,,SS,脚是输入端,用于使能,SPI,从机进行数据传送;在主机方式时,,SS,一般由外部置为高电平。,通过,SPI,可以扩展各种,I/O,功能,包括:,A/D、D/A、,实时时钟、,RAM、E,2,PROM,及并行输入/输出接口等。在把,SPI,与一片或几片串行扩展芯片相连时,只需按要求连接,SPI,的,SCLK,、,MOSI,及,MISO,三根线即可。对于有些,I/O,扩展芯片,它们有,CS,端。这时,这些片选输入端一般有,同步串行通信,的功能:无效时,为复位,21,芯片的串行接口;有效时,初始化串行传送。有些芯片的,CS,端,将其上从低到高的跳变当做把移位数据打入并行寄存器或操作启动的脉冲信号。因此,对于这些芯片,应该,用一根,I/O,口线来控制,它们的片选端,CS。,在80,C51,系列中,串行口的方式0提供了简化的,SPI,同步串行通信功能。其特点是:, 串行时钟(,SCLK),极性和相位之间的关系是固定的,串行传送速率也是固定的,不能编程改变;, 无从机选择输入(,SS),端;,22, 串行数据输入、输出线不是隔离的,而是同一根线,用软件设置数据传输方向;, 串行数据线上传送数据位的顺序为,先,LSB,,,后,MSB,。,因此,在80,C51,系列中,,SPI,只有两个引脚:,RXD(P3.1),MOSI/MISO;,TXD(P3.0),SCLK。,在某些应用系统中,由于80,C51,的串行通信口已经占用或者感到串行口方式0使用不方便,则可以用软件来模拟仿真,SPI,操作。,23,在器件(,IC,)之间,使用,两根信号线,(,SDA,和,SCL,),串行的方法进行信息传送的并允许若干兼容器件共享的二线总线,称为,I,2,C,总线,。,A,、,I,2,C,总线的概念,(2) I,2,C,公用二总线结构,1) I,2,C,总线规范简介,I,2,C,:,I,nter,I,ntegrated,C,ircuit,SDA,(,S,erial,DA,ta,),线称为,串行数据线,,其上传输双向的数据;,SCL,(,S,erial,CL,ock),线称为,串行时钟线,,其上传输时钟信号,用来同步串行数据线上的数据。,24,DECT,cordless phone base-station,D,igital,E,nhanced,C,ordless,T,elecommunications,25,I,2,C,总线上的器件,,SDA,和,SCL,引脚都是一个,开漏输出端,。,26,挂接在,I,2,C,总线上的器件(或,IC,),根据其功能可分为两种:主控器件和从控器件。,主控器件,:,控制总线存取,产生串行时钟,(SCL),信号,并产生启动传送信号及结束传送信号的器件,总线必须由一个主控器件控制。主控器件一般称,主器件(主机),。,从控器件,:,在总线上被主控器件寻址的器件,它们根据主控器件的命令来接收和发送数据。从控器件一般称,从器件(从机),。,27,I,2,C,总线系统是一个允许多主的系统。,系统中的某一器件有四种可能的工作方式:,主发送方式,、,主接收方式,、,从发送方式,和,从接收方式,。,28,在,I,2,C,总线上的所有器件是按照如下的,数据传输协议,协调工作的,:,据此定义以下,总线条件,:,总线不忙,SCL=SDA=,1,只有当总线不忙时,数据传输才能开始;,当串行时钟线为,高,电平时,串行数据线的变化将认为是传送的开始或停止;当串行时钟线为,低,电平时,才允许串行数据线发生变化;,数据传送期间,无论何时串行时钟线为高电平,串行数据线必须保持稳定。,29,开始数据传送,停止数据传送,起始信号,(,START,),停止信号(,STOP,),30,数据有效(,Data validity,),31,应答(,Acknowledge,),32,B,、,7,位的地址格式,33,主发送到从接收,主机发送,从机接收,传输的方向不会改变,34,从发送到主接收,主机在发送完第一个字节后,立即读从机。第一次响应仍由从机产生,在第一次响应后主机变成接受器,从机变成发送器。停止条件由主机发出。,35,复合格式,改变传输方向的时侯,起始条件和从机地址都会被重复,且,R/W,位取反。,如果主机作为接收,发送一个重复起始条件,它之前应该发送了一个不响应信号(,A,)。,36,仲裁和时钟发生,时钟同步,产生的同步,SCL,时钟的低电平周期由低电平时钟周期最长的器件决定,而高电平周期由高电平时钟周期最短的器件决定。,37,仲裁,首先变成高电平的器件丢失仲裁,因为,SDA,上的电平与本器件产生的电平不一致。,38,C,、,I2C,总线主要功能特点:,在主控器件和从控器件之间双向传送数据;,无中央主控器件的多主总线;,多主传送时,不发生错误;,可以使用不同的位速率;,串行时钟作为交接信号;,可用于测试和诊断目的。,39,在单片机应用系统中,,单主结构,占绝大多数。在单主系统中,,I,2,C,总线的数据传送状态要简单得多,没有,总线竞争,与,同步,问题,只有作为主器件的单片机对,I,2,C,总线器件的读,/,写操作。这就简化了模拟软件的设计工作。,有,I,2,C,总线的单片机中,可以直接用,I,2,C,总线来进行系统的串行扩展;对于,80C51,系列单片机,大多数没有,I,2,C,总线接口功能,而是采用,软件模拟双向数据传送协议,的方法,来实现系统的串行扩展。,40,6.3,单片机的外部串行扩展,6.3.1,串行扩展,E,2,PROM,1,、利用模拟,SPI,扩展串行,E,2,PROM,(1),串行,E,2,PROM,93C46,的特点及引脚,93,C46,是6416(1024)位串行存取的电擦除可编程的只读存储器。具有如下特点:在线改写数据和自动擦除功能;电源关闭,数据也不丢失;输入、输出口与,TTL,兼容;片内有,编程电压发生器,,可以产生擦除和写入操作时所需的电压;,41,片内有,控制和定时发生器,,擦除和写入操作均由此定时电路自动控制;具有整体编程允许和禁止功能,以增强数据的保护能力;+5,V,单电源供电;处于等待状态时,电流为1.53,mA。,93C46,有两种封装形式,如右图所示。其中,(a),为8脚双列直插式塑料封装;,(b),为14脚扁平式塑料封装。其各引脚的功能为:,93,C46,引脚排列,42,CS,:,片选信号。当,CS,置高电平时,片选有效。用,CS,信号的,下降沿启动片内定时器,,开始擦写操作。启动之后,,CS,信号上电平的高低不影响芯片内部的擦写操作。,CLK,:,串行数据时钟信号输入端。输入时钟频率为0250,kHz。,DI,:,串行数据输入端。,DO,:,串行数据输出端(读操作时)。擦除操作时,,DO,引脚可作为,擦写状态指示,,相当于,READY/BUSY,信号,即忙/闲指示信号。其它状态时,,DO,引脚呈高阻态。,43,ORG,:,结构端。当,ORG,连接到,VCC,或悬空时,芯片为16位存储器结构;,当,ORG,连接到,VSS,时,则选择8位存储器结构,。在时钟频率低于1,MHz,时,,ORG,端才能悬空,构成16位存储器结构。,93,C46,共有,7,条指令,指令格式如下表所示。,(2),指令系统,在不对芯片操作时,最好将,CS,置为低电平,使芯片处于等待状态,以降低功耗。,44,RDY/BSY,10,00,1,RDY/BSY,D,7,D0,01,00,1,高阻,00,00,1,高阻,11,00,1,擦除地址,A,6,A0,RDY/BSY,11,1,擦除,写地址为,A,6,A0,RDY/BSY,D,7,D0,01,1,写,读地址为,A,6,A0,D,7,D0,A6A5A4A3A2A1A0,10,1,读,DO,DI,说明,数据,地址,操作,代码,起始位,指令,擦写禁止,擦写允许,片写,片擦除,A6A5A4A3A2A1A0,A6A5A4A3A2A1A0,93,C46,指令表(,ORG=0,,,8,位结构),45,RDY/BSY,10,00,1,RDY/BSY,D,15,D0,01,00,1,高阻,00,00,1,高阻,11,00,1,擦除地址,A,5,A0,RDY/BSY,A5A4A3A2A1A0,11,1,擦除,写地址为,A,5,A0,RDY/BSY,D,15,D0,A5A4A3A2A1A0,01,1,写,读地址为,A,5,A0,D,15,D0,A5A4A3A2A1A0,10,1,读,DO,DI,说明,数据,地址,操作,代码,起始位,指令,擦写禁止,擦写允许,片写,片擦除,93,C46,指令表(,ORG=1,,,16,位结构),46,47,指令的最高位(起始位,第8位)恒为1,作为控制指令的起始值。接下去的两位操作代码,最后是6(或,7,)位地址码。只要向93,C46,写入控制命令,便可进行相应操作。,93,C46,在,SPI,系统中作为,从器件,。其,DI,引脚用于接收以串行格式发来的命令、地址和数据信息,信息的每一位均在,CLK,的上升沿读入93,C46。,不论93,C46,进行什么操作,必须首先将,CS,置高电平,接着在时钟同步下,把9位串行指令依次写入片内。在未完成这条指令所必须的操作之前,芯片拒绝接收新的指令。,48,读指令的功能是从93,C46,的单元中读取数据。该指令的机器码是,“,110,A,N,A,0,”,,A,N,A,0,是被读取单元的地址。93,C46,接收指令后,在,DO,引脚先输出一个低电平,“,虚拟,”,读脉冲,之后,从时钟,CLK,的上升沿开始,,DO,引脚连续输出16位串行数据。当,CS,保持为高时,允许连续读,即存储器中的数据将自动地周期性地输出下一个地址单元的数据。,1),读指令(,READ),49,写指令的功能是向93,C46,的指定单元中写入数据。该指令的机器码是,“,101,A,N,A,0,D,N,D,0,”,。写指令中,在指定单元的地址之后,紧接着输出16位数据。在最后一个数据位加在,DI,端后,在,CLK,的下一个上升沿以前,,CS,必须为低。,CS,的下降沿启动自定时自动擦除和编程周期,。在,CS,约250,ns,的低电平之后,恢复为高,,DO,端指示器件的,READY/BUSY,状态。,DO,端为0时,指示编程仍在进行;,DO,端为1时,表示指定的数据已经写入指定的地址单元,并且器件已准备好接收下一条指令。写周期每字需4,ms,时间。,2),写指令(,WRITE,),50,擦除指令的功能是将指定单元的内容擦除,即强迫指定地址单元中的所有数据位为逻辑,“,1,”,状态。这条指令的机器码是,“,111,A,N,A,0,”,。在装载最后的地址位以后,,CS,为低电平。,CS,的下降沿启动自定时编程周期,。在,CS,约250,ns,的低电平之后,恢复为高,,DO,端指示器件的,READY/BUSY,状态。,DO,端为0时,指示编程仍在进行;,DO,端为1时,表示指定的地址单元已被擦除,并且器件已准备好接收下一条指令。擦除周期每字需4,ms,时间。,3),擦除指令(,ERASE,),51,擦除整个存储器指令的功能是将整个存储器阵列强迫为逻辑,“,1,”,状态。除操作码不同之外,,ERAL,周期与,ERASE(,擦除)周期相同。,ERAL,周期完成自定时并且在,CS,的下降沿开始。在器件进入自己产生时钟的模式之后,,CLK,端的驱动时钟不再需要。在,CS,约250,ns,的低电平之后,恢复为高,,DO,端指示器件的,READY/BUSY,状态。,4),擦除整个存储器指令(,ERAL),52,写整个存储器指令的功能是将命令中指定的数据写入整个存储器阵列中。除操作码不同之外,,WRAL,周期与,WRITE(,写)周期相同。,WRAL,周期完成自定时并且在,CS,的下降沿开始。在器件进入自己产生时钟的模式之后,,CLK,端的驱动时钟不再需要。,WRAL,指令不包括对器件的自动,ERAL,周期。因此,,WRAL,指令不要求一条,ERAL,指令,但是芯片必须进入,EWEN,状态。在,CS,约250,ns,的低电平之后,恢复为高,,DO,端指示器件的,READY/BUSY,状态。,WRAL,周期最大需30,ms。,5),写整个存储器指令(,WRAL),53,擦/写允许指令的功能是使芯片处于允许擦/写状态。一旦,EWEN,指令执行,编程保持允许直至执行了,EWDS,指令或者电源关闭为止。,6),擦/写允许指令(,EWEN),54,7),擦/写禁止指令(,EWDS),擦/写禁止指令的功能是禁止对芯片的所有擦除和写操作,包括整个芯片和单个单元的擦除和写入。在上电后,芯片处于,EWDS,状态。执行,EWDS,指令禁止所有擦/写功能,主要为了防止偶然的数据干扰。一般可跟在所有的编程操作之后。,55,(3),93,C46,与80,C51,单片机的接口与编程,利用软件仿真时的硬件电路原理图如下图所示。,电路中使用斯密特触发器74,HC14,,是为了对时钟脉冲整形,提高抗噪声干扰的能力。,?,93C46,与80,C51,单片机的接口,56,1),送起始位(,“,1,”,)子程序,INSB,功能,:80,C51,向93,C46,送出,“,1,”,。,2),送8位数据子程序,WRI,功能,:80,C51,向93,C46,送出8位数据,这8位数据可能是两位操作码和6位地址码,也可能是8位数据,若是16位数据可分两次送。,入口参数,:无。,出口参数,:无。,入口参数,:8位数据在,A,中。,出口参数,:无。,CSEQUP1.3,CLKEQUP1.0,DIEQUP1.1,DOEQUP1.2,57,INSB:,SETBCS;,置片选无效,(CS),CLRCLK,;,时钟置低,(CLK),SETBDI,;,置位,DI,NOP,NOP,CLRCS ;,置片选有效,NOP,NOP,SETBCLK ;,时钟置高,移入数据,NOP,NOP,CLRCLK ;,时钟置低,RET,(,2,个机器周期),80,C51,向93,C46,送出,“,1,”,93C46,端信号,58,WRI:MOV R4,#8;,写入数据的位数,W10:RLC A,MOV DI,C,;,将,CY,送,DI,NOP,NOP,SETB CLK ;,时钟置高,移入数据,NOP,NOP,CLRCLK,;,时钟置低,DJNZR4,W10,;,未完,继续,RET,(2,个机器周期,),80,C51,向93,C46,送出8位数据,59,3),读取8位数据子程序,RDI,功能,:80,C51,从93,C46,的,DO,引脚读取8位数据。,4),向,93C46,写入,16,位数据,WRITE,功能,:80,C51,向93,C46,送出,16,位数据。,入口参数,:无。,出口参数,:读出的8位数据在,A,中。,入口参数,:,B,寄存器,8,位指令,,2,位操作码,,6,位地址码,R2:,存放要写入的数据高8位;,R3:,存放要写入的数据低8位。,出口参数,:无。,60,5),从,93C46,读取,16,位数据,READ,功能,:80,C51,从93,C46,的,DO,引脚读取,16,位数据。,入口参数,:,B,寄存器,8,位指令,,2,位操作码,,6,位地址码,出口参数,:,R2:,存放要读出的数据高8位;,R3:,存放要读出的数据低8位。,61,RDI,:MOVR4,#8,;,读取的数据位数,R10:NOP,NOP,SETBCLK,;,时钟置高,移出数据,NOP,NOP,CLRCLK,;,时钟置低,MOVC,DI,;,数据从,DI,读入,CY,RLCA,DJNZR4,R10,;,未读完,继续,RET,62,WRITE,:,LCALLINSB,;,擦/写允许指令,MOVA,#30H,LCALLWRI,LCALLINSB,;,写入指令,MOVA;B,LCALL WRI,MOVA,R2,;,写入高8位,LCALLWRI,MOVA,R3,;,写入低8位,LCALLWRI,SETBCS,;,置片选为无效,NOP,63,NOP,CLRCS,;,片选有效,WAIT:,JNBDO,WAIT,;,编程未完,等待,LCALL INSB,;,擦/写禁止指令,MOV A,#00H,LCALL WRI,SETB CS,;,置片选为无效,RET,;,返回,64,READ,:,LCALLINSB,;,写读出指令,MOVA,B,LCALLWRI,NOP,NOP,LCALLRDI,MOVR2,A,;,读出高8位,LCALLRDI,MOVR3,A,;,读出低8位,SETBCS,;,置片选为无效,RET,65,(1),串行,E,2,PROM,24LC32,的特点及引脚,24LC32,是,32 Kb,(,4 K8,位)串行存取的电擦除可编程的只读存储器,E,2,PROM,。,特点:,芯片对快速写操作具有,8,个,8B,字节页面,、或者,64,字节,的高速缓存器,并具有二线串行接口。在,I,2,C,上作,从器件,使用,;,2,、利用模拟,I,2,C,扩展串行,E,2,PROM,66,可在电源电压低到,2.5V,的条件下工作,芯片还有功率等待模式,以降低功耗;等待电流和额定电流分别为,1A,和,3 mA,(写);,地址线允许,8,片,24LC32,连接到相同的总线上,得到,256 Kb,位地址空间。,引脚:,A0,、,A1,、,A2,:,芯片地址输入端,WP,:,写保护端,67,(2),器件的寻址和操作,控制字节和器件寻址,操作,控制码,块选择,读,/,写(,R/W,),读,1010,块地址,1,写,1010,块地址,0,68,作为从器件,接收到的下两个字节定义了,第一个数据字节的地址,。,由于仅用,A0A11,,所以,最高,4,位地址码必须为,0,。,但对于,ATMEL,公司的产品来说,无此规定。,first,last,地址的,最高有效字节,的,最高有效位,最先发送,。,69,写操作,字节写,主器件发出开始条件以后,再发送,R/W=0,的控制字节到总线上。这指示被寻址的从接收器的两个地址字节及一个数据字节将跟在第,9,个时钟周期产生的确认(应答)位之后。,1,0,1,0,0,主器件发送的下一个字节是字地址的高地址字节,应答后,接着是低地址字节,再次应答后,它们将被写入,24LC32,的,地址指针,。随后主器件发送写入到被寻址的存储器里的数据字节。,24LC32,应答后,主器件发出停止条件。,R/W =,0,时,,,将启动写操作,。,70,页面写,写控制字节、字地址和第一个数据字节以与字节写相同的方式发送到,24LC32,。但是替代产生停止条件,主器件可发送多达,8,页的,8,个数据字节(总共,64,个字节)。,24LC32,先将这些数据字节暂存在片内的页面高速缓存器中。,一旦接收到主器件的停止条件后,则内部的写周期开始,这些数据字节将从页面高速缓存器中写入,E,2,PROM,阵列。每写入一个字节后,,24LC32,的低,6,位顺序地址指针在内部加,1,,高,6,位顺序地址指针保持不变。,71,如果主器件在产生停止条件以前要发送多于,8,个字节的数据(越过页边界写),地址计数器的低,3,位将会翻转,并且指针将加,1,,指向页面高速缓存器的下一页。这样重复,8,次后或者直至高速缓存器存满时,主器件产生停止条件。如果停止条件没有接收到,高速缓存器指针将翻转到第一页(字节,0,),这之后再接收到的数据将覆盖以前所获得的数据。,在发送期间的任何时刻都可传送停止条件,。,72,应答查询,由于在写周期期间,器件将不会应答,所以,这一点可以用来决定写周期在什么时候完成。一旦针对写命令的停止条件由主器件发出,从器件开始进行内部定时写周期,主器件的,ACK,查询被立即启动。如果写周期器件仍然很忙,则,ACK,信号将不会产生;如果周期已经完成,则器件将产生,ACK,信号。主器件将可以进行下一次的读或写操作。,73,读操作,读当前地址内容,当控制字的,R/W,位被置为,“,1,”,时,将启动读操作。存在三种基本的读操作类型:,读当前地址内容,、,读随意地址内容,及,读顺序地址内容,。,1,0,1,0,1,读当前地址内容,24LC32,内部包含一个自动加,1,的地址计数器,它保存被存取过的,最后一个字节的地址,。如果以前存取的地址为,n,,下一次读操作则从,n+1,地址中读数据。,在接收到的从地址中的,R/W,为,1,的情况下,,24LC32,发送一个应答位,并且送出,8,位数据。主器件发出非应答信号,(NO ACK),,使从器件释放数据线,以便主器件发出一个停止条件,从而终止数据传送。,74,读随意地址内容,此方式允许主器件以任意方式读存储器任意地址的内容。这种读操作须先置字地址,即主器件将字地址作为写操作的一部分送给,24LC32,。在发送了字地址以后,主器件在应答位之后产生一个开始条件。这样可以在内部地址计数器置数后终止写操作。主器件再次发,R/W,为,1,的控制字。,24LC32,将发出应答位,并发送出,8,位数据。主器件将发送非应答信号,并产生一个停止条件,从而终止发送。,75,读顺序地址内容,读顺序地址内容方式与读随意地址内容方式的启动方法一样,,,但是在,24LC32,发送第一个数据字节后,主器件不发出终止发送的信号(,发送应答信号,),。,24LC32,继续发送下一个地址的,8,位数据,其内部的地址指针在操作后自动加,1,。,地址指针允许在一次操作期间,连续顺序地读出整个存储器,。,当主器件接收到最后一个字节后,主器件将产生非应答信号及一个停止条件,终止传送,。,76,(3) 80C51,与串行,E,2,PROM,24LC32,的接口和编程,80C51,与串行,24LC32,的接口,80C51,与串行,E,2,PROM 24LC32,的接口原理图,77, 模拟,I,2,C,总线的编程,利用模拟仿真的方法,编写通用子程序。,这些通用子程序包括,:,启动,、,停止,、,发送应答位,及,非应答位,、,应答位检查,、,单字节数据接收,与,发送,。,以下子程序中,设定单片机所使用的晶体振荡器为,6MHz,,即机器周期为,2uS,。若晶体振荡器不是,6MHz,,则可根据情况增减程序中的,NOP,指令即可。,汇编语言,编写的子程序,:,SCLBITP1.6,SDABITP1.7,78,A.,启动,I,2,C,总线子程序:,START:,SETB SDA,SETB SCL,NOP,NOP,CLR SDA,NOP,NOP,CLR SCL,NOP,RET,79,B.,停止,I,2,C,总线子程序,:,STOP,:,CLR SDA,SETB SCL,NOP,NOP,SETB SDA,NOP,NOP,CLR SCL,NOP,RET,80,C.,发送应答位子程序:,S_ACK:,CLR SDA,SETB SCL,NOP,NOP,CLR SCL,SETB SDA,RET,D.,应答位检查子程序:,子程序出口时,,SDA,线的状态存入标志位,F0,中,若有,ACK,,,F0=0,,否则,F0=1,。,81,C_ACK:,SETB SDA,;,SDA,为输入状态,SETB SCL,;,第,9,个时钟脉冲开始,NOP,MOV C,SDA,;,读,SDA,线,MOV F0,C,;,存入,F0,中,CLR SCL,;,第,9,个时钟脉冲结束,NOP,RET,82,E.,单字节数据发送子程序:,将累加器,A,中的待发送数据送上,SDA,线。,WRBYT,:,MOV R7,#8,;,发送,8,位,WRBYT1:,RLC A,;,将发送位移入,C,中,JC WRBYT2,;,此位为,1,转,WRBYT2,CLR SDA,;,此位为,0,发送,0,SETB SCL,;,时钟脉冲开始,NOP,NOP,CLR SCL,;,时钟脉冲结束,DJNZ R7,WRBYT1,;,未发送完,转,WRBYT1,RET,83,WRBYT2:,SETB SDA,;,此位为,1,发送,1,SETB SCL,;,时钟脉冲开始,NOP,NOP,CLR SCL,;,时钟脉冲结束,CLR SDA,DJNZ R7,WRBYT1,;,未发送完,转,WRBYT1,RET,84,F.,单字节数据接收子程序:,从,SDA,线上读一个字节的数据,存入,A,中。,RDBYT:,MOV R7,#8,;,接收,8,位,RDBYT1:,SETB SDA,;,SDA,为输入状态,SETB SCL,;,时钟脉冲开始,MOV C,SDA,;,读,SDA,线,MOV A,R6,;,取回暂存结果,RLC A,;,移入新接收位,MOV R6,A,;,将结果暂存,R6,CLR SCL,;,时钟脉冲结束,DJNZ R7,RDBYT1,;,未读完,8,位,转,RDBYT1,RET,;,读完,8,位,返回,85,6.3.2,串行扩展,I/O,接口,1,、用串行口方式扩展,I/O,接口,(1),扩展并行输出口,(2),扩展并行输入口,自己看,自己看,86,2,、用,I,2,C,扩展,I/O,接口,(1) PCF8574,的特性及引脚说明,PCF8574T,是一种单片,CMOS,电路,具有,I,2,C,总线接口和,8,位准双向口。,在,I,2,C,总线系统中仅作从器件。,具有低的电流损耗,最大静态电流为,10 A,;,能输出大的电流,并有锁存功能,可直接驱动,LED,发光管;,有中断逻辑线;,87,SDA,:,串行数据线,双向。,SCL,:,串行时钟线,输入。,P7P0,:,8,位准双向输入,/,输出口。准双向口的每一位可作输出或输出。上电复位时,口的每一位均为高电平。某位在作输入前,应置为高电平。,A2A0,:,地址输入线。,INT,:,中断输出线,低电平有效。,3,根硬件地址引脚使,I,2,C,总线系统可挂接,8,只,PCF8574,。,器件的串行时钟的最高频,率为,400 kHz,88,PCF8574,的每个,I/O,口都可单独用作输入或输出。输入通过读模式将数据传送到,MCU,,输出通过写模式将数据发送到端口。,PCF8574,和,PCF8574A,的,控制字节的配置,(2) PCF8574,的寻址方式及操作,89,写模式(输出),90,读模式(输入),91,中断,在输入模式中(读),口输入信号的上升或下降沿产生中断。,92,PCF8574,作扩展,8,位输入口,PCF8574,读方式的连接,将开关的状态读入片内,RAM 30H,单元中。,(3) PCF8574,的应用和编程,93,程序如下:,RD8,:,ACALLSTART,;,开始条件,MOVA,#41H,;,PCF8574,为读方式,ACALLWRBYT,ACALLC_ACK,;,检查,ACK,信号,JBF0,$,ACALLRDBYT,;,读数据,MOV30H,A,ACALLC_ACK,JBF0,$,ACALLSTOP,AJMP$,94,PCF8574,作扩,8,位输出口,PCF8574,写方式的连接,95,程序如下:,WR8,:,ACALLSTART,;,开始条件,MOVA,#40H,;,PCF8574,为写方式,ACALLWRBYT,ACALLC_ACK,;,检查,ACK,信号,JBF0,$,MOVA,#0FFH,;,改变不同的立即数,,;,PCF8574,的指示灯相应的亮熄,ACALLWRBYT,ACALLC_ACK,;,检查,ACK,信号,JBF0,$,ACALLSTOP,;,停止条件,AJMP$,96,PCF8574,作扩展,4,位输入口和,4,位输出口,PCF8574,高,4,位输入、低,4,位输出的连接,97,程序如下:,STA:,ACALLSTART,;,开始条件,MOVA,#41H,;,PCF8574,为读方式,ACALLWRBYT,ACALLC_ACK,;,检查,ACK,信号,JBF0,$,ACALLRDBYT,;,读数据,SWAPA,CPLA,MOV30H,A,ACALLSTOP,ACALLSTART,;,开始条件,MOVA,#40H,;,PCF8574,为写方式,98,ACALLWRBYT,ACALLC_ACK,;,检查,ACK,信号,JBF0,$,MOVA,30H,ACALLWRBYT,ACALLDELAY,;,延时子程序,ACALLSTOP,;,停止条件,LJMPSTA,99,扩展,4,个外部中断源的电路,中断源查询程序的流程图,6.4,外部中断源的扩展,100,INT0,的中断服务程序如下:,PINT0:,PUSHPSW,;,保护现场,PUSHACC,JBP1.0,LOOP1,;,转向中断服务程序,1,JBP1.1,LOOP2,;,转向中断服务程序,2,JB P1.2,LOOP3,;,转向中断服务程序,3,JB P1.2,LOOP4,;,转向中断服务程序,4,INTEND,:,POPACC,;,恢复现场,POP PSW,RETI,101,LOOP1:,中断服务程序,1,AJMP INTEND,LOOP2:,中断服务程序,2,AJMP INTEND,LOOP3:,中断服务程序,3,AJMP INTEND,LOOP4:,中断服务程序,4,AJMP INTEND,从程序中可以看出,这里定义的扩展外中断源,1,的优先级最高,扩展外中断源,4,的优先级最低,所以查询的顺序从,P1.0,开始。,
展开阅读全文