• 3.43 MB
  • 2022-04-29 14:22:40 发布

微机原理与接口技术课件PPT第8章 常用接口芯片.ppt

  • 158页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第8章常用接口芯片1 【任务驱动】理解并掌握并行和串行通信的概念。 掌握并行接口8255A的主要功能、工作方式和初始化编程方法。 掌握定时/计数器8253的主要功能、工作方式和初始化编程方法。 理解D/A及A/D转换器接口方法。 理解8251初始化编程方法。【重点难点】可编程并行接口8255A的结构、工作方式的设定及应用。 可编程定时/计数器8253的结构、工作方式的设定及应用。 可编程串行通信接口8251的结构、工作方式的设定及应用。D/A及A/D转换器接口的结构、工作方式的设定及应用。2 8.1可编程并行接口芯片8255A8.2可编程串行接口芯片8251A8.3可编程定时/计数器8253A8.4D/A与A/D转换器3 8.1可编程并行接口芯片8255A8.1.1并行通信的概念并行通信就是把一个字符的各位用几条线同时进行传输。即将组成数据的各位同时进行传送,每次传送8位、16位或32位数据。例如,同时输入或输出01101010数据信息,至少需要8条电缆线,如图8.1所示。图8.1并行传送示意图4 并行通信的主要特点是信息传输速度快、信息率高,这种特点是多用通信电缆换取的,随着通信距离的增加,电缆的开销就会成为突出问题,所以并行通信总是用于数据传输率要求较高、而传输距离较短的场合。 目前,对于并行通信还没标准化。数据的宽度可以是1~64位或者更宽,但通常使用8位宽度,一次传输一个字符。对于并行传输的方式也没有严格的定义,如果CPU用一个时序信号来管理接口和设备的动作,那么这种并行传输应看成是同步传输;如果CPU和接口及设备之间使用应答信号进行传输,那么这种并行传输应看成是异步传输。5 实现并行通信的接口就是并行接口。并行接口为外部设备提供了能使信息并行传送的输入输出端口,广泛应用于微机内部各部件之间以及主机与外部设备之间的信息交换。并行接口的“并行”含意不是指接口与系统总线一侧的并行数据而言(因为这是固定的),而是指接口与I/O设备或控制对象一侧的并行数据线。 实现并行通信的接口就是并行接口。并行接口为外部设备提供了能使信息并行传送的输入输出端口,广泛应用于微机内部各部件之间以及主机与外部设备之间的信息交换。并行接口的“并行”含意不是指接口与系统总线一侧的并行数据而言(因为这是固定的),而是指接口与I/O设备或控制对象一侧的并行数据线。6 8.1.28255外部引脚及内部结构8255A是为Intel公司的微处理器配套的通用可编程并行接口芯片,其基本功能如下: (1)8255A接口芯片有3个8位并行输入/输出端口,可利用编程方法设置3个端口是作为输入端口还是作为输出端口; (2)8255A能适应CPU与I/O接口之间的多种数据传送方式的要求。如无条件传送,查询方式传送,中断方式传送。与此相应,8255A设置了方式0、方式1以及方式2三种工作方式。 (3)8255A的C口比较特殊,除作数据口外,在工作方式1和2下,它的部分信号线还被分配作专用的联络应答信号,配合A口和B口的工作。7 8255A的内部结构和引脚图分别如图8.2所示。图8.28255A的内部结构和芯片引脚信号8 由图可见,8255A包括四个部分:数据总线缓冲器、读写控制逻辑、A组控制器和B组控制器、端口A、B、C。1.并行输入/输出端口A、B、C8255A芯片具有24个可编程输入输出引脚,分成3个8位端口。这三个端口可与外部设备相连接,可用来与外设进行数据信息、控制信息和状态信息的交换。 其中:端口A包含一个8位数据输出锁存/缓冲寄存器和一个8位数据输入锁存器;端口B包含一个8位数据输入/输出、锁存/缓冲寄存器和一个8位数据输入缓冲寄存器;端口C包含一个输出锁存/缓冲寄存器和一个输入缓冲寄存器。必要时端口C可分成两个4位端口,分别与端口A与端口B配合工作。通常将端口A和端口B定义为输入/输出的数据端口,而端口C可作为状态或控制信息的传送端口,配合端口A和端口B工作PA7~PA0:A端口数据信号引脚;PB7~PB0:B端口数据信号引脚;PC7~PC0:C端口数据信号引脚。9 2.A组和B组控制部件端口A与端口C的高4位(PC7~PC4)构成A组,由A组控制部件实现控制功能,端口B与端口C的低4位(PC3~PC0)构成B组,由B组控制部件实现控制功能。它们各有一个控制单元,可接收来自读/写控制部件的命令和CPU通过数据总线(D7~D0)送来的控制字,并根据它们来定义各个端口的操作方式。3.数据总线缓冲器这是一个三态双向8位数据缓冲器,它是8255A与8086CPU之间的数据接口,它与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。CPU输入输出的数据,CPU输出的控制字以及外设的状态信息都是通过这个缓冲器进行传送。D7~D0:8255A的8位数据线,和CPU系统数据总线相连。10 4.读/写控制部件读/写控制部件接收来自CPU地址总线的信号和控制信号,并发出命令到两个控制组(A组和B组),把CPU发出的控制命令字或输出的数据通过数据总线缓冲器送到相应的端口,或者把外设的状态或输入的数据从相应的端口通过数据总线缓冲器送到CPU。 可接收的控制信号如下: (1):片选信号。由CPU输入,有效,表示该8255A被选中。 (2),:读、写控制信号。由CPU输入,有效,表示CPU读8255A,应由8255A向CPU传送数据或状态信息。有效,表示CPU写8255A,应由CPU将控制字或数据写入8255A。 (3)RESET:复位信号。RESET有效时,清除8255A中所有控制字寄存器内容,并将各端口置成输入方式。 (4)A1、A0:端口选择信号。 当A1A0=00,选择端口A; 当A1A0=01,选择端口B; 当A1A0=10,选择端口C; 当A1A0=11,选择控制字寄存器。 由端口地址A1A0和相应控制信号组合起来可定义各端口的操作方式如表8.1所示。11 8255A接口芯片的地址译码电路设计需考虑的问题是:对于8086系统,由于采用16位数据总线,CPU在进行数据传送时,总是将低8位数据送往偶地址端口,而将高8位数据送往奇地址端口;反过来,从偶地址端口取得数据总是通过低8位数据线传送到CPU,从奇地址端口取得数据总是通过高8位数据线传送到CPU。8255A接口芯片是8位并行接口芯片,一般8255A的D7~D0数据线接到系统总线的低8位,这就要求8255A端口地址的设置为偶地址,才能接收到CPU对8255A的访问信号。又由于8255A芯片的端口有A口、B口、C口和控制口,端口地址数需要4个,且要满足8255A的A1、A0分别为00、01、10、11的要求。因此,对于8086系统,将8255A的A1引脚和地址总线的A2线相连,A0引脚和地址总线的A1线相连,将地址线的A0设置为0,这既保证了CPU能发出4个连续偶地址,又保证了8255A四个端口地址的要求。12 假设地址值分别为04A0H,04A2H,04A4H,04A6H,对8255A寻址电路的设计如图8.3所示。 对于8088系统,其数据总线只有8位,8255A的D7~D0数据线可直接连到系统总线的8位数据线上,因此地址线中将8255A的A1引脚和地址总线的A1线相连,A0引脚和地址总线的A0线相连即可,这样8.88CPU能发出4个连续地址,如04A0H~04A3H。13 图8.38255A寻址电路设计14 8.1.38255A的控制字和工作方式1.8255A的控制字8255A是可编程接口芯片。可编程就是用指令的方法先对芯片进行初始化,决定芯片的端口是处于输入数据状态还是处于输出数据状态,以及每个端口的工作方式。工作方式和工作状态的建立是通过向8255A的控制口写入相应的控制字完成的。8255A的控制字包括工作方式控制字和C口的按位置位/复位操作控制字。用户通过设置控制字来定义3个端口的工作方式,它们共用同一个端口地址。15 (1)工作方式控制字:格式如图8.4所示。工作方式控制字用来设定A口、B口和C口的数据传送方向和工作方式。工作方式分别是方式0、方式1和方式2。A口可工作在三种方式中的任何一种方式下,B口只能工作在前两种工作方式下,C口只能工作在方式0下。 通过定义工作方式控制字可将3个端口定义为各种不同方式的组合。图8.48255A工作方式控制字格式16 (2)置位/复位控制字:只对端口C有效。端口C的任一位,可用这个控制字来置位或复位,置位是使该位为1,复位是使该位为0,而其他位不变,使用格式如图8.5所示。使用8255A芯片前,必须先对其进行初始化。初始化的程序很简单,只要CPU执行一条输出指令,把控制字写入控制寄存器就可以了。图8.58255A置位/复位控制字格式17 [例8.1]按下述要求对8255A进行初始化。 要求A口设定为输出数据,工作方式为方式0;B口设定为输入数据,工作方式为方式1;C口设定为高四位输入,低四位输出。(假设地址为04A0H~04A6H)初始化指令如下:MOVDX,04A6H;控制口地址送DX MOVAL,8EH;写工作方式控制字OUTDX,AL;控制字送到控制口18 2.8255A的工作方式8255A各端口共有3种基本工作方式: 方式0——基本输入/输出方式; 方式1——选通输入/输出方式; 方式2——双向传送方式。 端口A可处于3种工作方式(方式0,方式1或方式2),端口B只可处于两种方式(方式0或方式1),端口C常常被分成高4位和低4位两部分,可分别用来传送数据或控制信息。19 (1)工作方式0:这是8255A中各端口的基本输入/输出方式。它只完成简单的并行输入/输出操作,CPU可从指定端口输入信息,也可向指定端口输出信息。如果3个端口均处于工作方式0,则可由工作方式控制字定义16种工作方式的组合,如表8.2所示。  方式0中,端口C被分成两个4位端口,它们可被定义为输入或输出端口,CPU与3个端口之间交换数据可直接由CPU执行IN和OUT指令来完成。传送数据的方法一般采用无条件传送方式或查询传送方式。表8.2方式0的工作状态组合:20 21 [例8.2]假定8255A的端口A、B都工作在方式0下,端口A作为输入口,采集一组开关的状态,端口B作为输出口,把开关的状态通过指示灯显示。电路连接如图8.6所示。(假设地址为04A0H~04A6H)图8.622 MOVDX,04A6H;控制口地址送DX MOVAL,90H;写工作方式控制字OUTDX,AL MOVDX,04A0H;A端口地址送DX INAL,DX;采集开关值MOVDX,04A2H;B端口地址送DX OUTDX,AL;输出开关值当采用查询方式传送数据时,利用端口C的高4位和低4位能分别作为输入或输出的特点,配合端口A和端口B进行输入数据和输出数据的操作,即A口和B口传送数据。23 (2)工作方式1:被称作选通输入/输出方式,在这种工作方式下,数据输入/输出操作要在选通信号控制下完成,端口A和端口B为数据传输口,可通过工作方式控制字设定为数据输入或数据输出,端口C某些位作为控制位,配合A口和B口进行数据的输入和输出。方式1通常用于查询方式或中断方式传送数据。图8.7工作方式1输入控制字格式24 C口某些位作为控制位时,根据输入和输出工作状态不同, 各位所代表的意义不同,现分为输入和输出两种情况进行介绍。 采用工作方式1进行输入操作时,需要使用的控制信号如下:——选通信号。由外设输入,低电平有效。IBF——输入缓冲存储器满信号。向外设输出,高电平有效。INTR——中断请求信号,高电平有效。INTE——中断允许信号25 显然,8255A中的端口A和端口B均可工作于方式1输入模式,其工作方式控制字格式如图8.7所示,端口状态如图8.8所示。 从图8.8可看出,当端口A和端口B同时被定义为工作方式1完成输入操作时,端口C的PC5~PC0被用作控制信号,只有PC7和PC6位可完成数据输入或输出操作,因此可构成两种组合状态:它们是端口A,B输入,PC7,PC6同时输入和端口A,B输入,PC7,PC6同时输出。(a)端口A方式1输入(b)端口B方式1输入图8.8方式1输入端口状态26 采用工作方式1也可完成输出操作,这时需要使用的控制信号如下:——输出缓冲存储器满信号。向外设输出,低电平有效。——外设应答信号。由外设输入,低电平有效。INTR——中断请求信号。高电平有效。INTE——中断允许信号。27 图8.9方式1输出控制字格式(a)端口A方式1输出(b)端口B方式1输出图8.10方式1输出端口状态28 如果将8255A中的端口A和端口B均定义为工作方式1输出模式,那么工作方式控制字的具体格式如图8.9所示,经这样定义的端口状态如图8.10所示。 从图8.10中可看出,当端口A和端口B同时被定义为工作方式1完成输出操作时,端口C的PC6,7和PC3~PC0被用作控制信号,只有PC4,5两位可完成数据输入或输出操作。因此可构成两种组合状态:①端口A,B输出,PC4,5同时输入;②端口A,B输出,PC4,5同时输出。【思考】采用工作方式1时,还允许将端口A和端口B分别定义为输入和输出端口,如将端口A定义为方式1输入端口,而将端口B定义为方式1输出端口等等。具体情况,请自行分析。29 (3)工作方式2被称作带选通的双向传送方式。8255A中只允许端口A处于工作方式2,可用来连接双向I/O设备或用于在两台处理机之间实现双向并行通信等。其有关的控制信号由端口C提供,并可向CPU发出中断请求信号。图8.11端口A工作在方式2的端口状态30 端口A工作于方式2的端口状态如图8.11所示。由图可看出,端口A工作于方式2所需要的5个控制信号分别由端口C的PC7~PC3来提供。如果端口B工作于方式0,那么PC2~PC0可用 作数据输入/输出;如果端口B工作于方式1,那么PC2~PC0用来作端口B的控制信号(图8.10中未示出)。 端口A工作于方式2所需控制信号如下: ①——输出缓冲器满信号。向外设输出,低电平有效。 ②——应答信号。由外设输入,低电平有效。 ③——数据选通信号。由外设输入,低电平有效。 ④IBFA——输入缓冲器满信号。向外设输出,高电平有效。 ⑤INTRA——中断请求信号,高电平有效。 ⑥INTE1——中断允许信号。 ⑦INTE2——中断允许信号。31 8255A中端口A工作方式2时,允许端口B工作于方式0或方式1,完成输入/输出功能。4种组合状态及其工作方式控制字格式如表8.3。32 8.1.48255A的应用实例1.8255A与打印机接口 (1)用方式0与打印机接口 目前打印机一般采用并行接口Centronics标准,其主要信号与传送时序如图8.12。打印机接收主机传送数据的过程是这样的:当主机准备好输出打印的一个数据时,通过8255A把数据送给打印机接口的数据引脚DATA0~DATA7,同时送出一个数据选通信号给打印机。打印机收到该信号后,把数据锁存到内部缓冲区,同时在BUSY信号线上发出忙信号。待打印机处理好输入数据时,打印机撤消忙信号,同时向主机送出一个响应信号。主机根据BUSY信号或信号决定是否输出下一个数据。33 本例中,CPU与8255A采用查询方式输出数据。端口A设置为方式0,输出打印数据,端口C的PC7产生负脉冲选通信号,PC2连接打印机的BUSY信号查询其状态,PC0连接打印机的信号。 假设8255A的A、B、C口的I/O地址为FFF8H、FFFAH和FFFCH,控制端口地址为FFFEH。 初始化程序段如下:MOVDX,0FFFEH MOVAL,81H;A口方式0输出,C口上半部输出,下半部输入OUTDX,AL;输出工作方式字MOVAL,0FH;C口的置位/复位控制字,使PC7=1,即置=1 OUTDX,AL;输出打印数据子程序,打印数据在AH中PUSHAX PUSHDX34 PM:MOVDX,0FFFCH INAL,DX;查询PC2 ANDAL,04H;BUSY=0? JNZPM;忙,则等待,D2=1表示忙MOVDX,0FFF8H;不忙,则输出数据MOVAL,AH OUTDX,ALMOVDX,0FFFEH MOVAL,0EH;使PC7=0,即置=0 OUTDX,AL NOP;适当延时,产生一定宽度的低电平NOP MOVAL,0FH;使PC7=1,置=1 OUTDX,AL POPDX POPAX RET35 (2)用方式1与打印机接口8255A的端口A工作于选通输出方式,PC7作为输出信号,PC6作为A输入信号,而PC3作为INTRA输出信号;另外,可用程序控制INTEA(PC6),决定是否采用中断方式。打印机接口的时序与8255A的选通输出方式的时序类似,但略有差别,用单稳电路74LS123即可满足双方的时序要求,见图8.13。   假设8255A的A、B、C口的I/O地址为FFF8H、FFFAH和FFFCH。控制端口的地址为FFFEH。以下为采用选通方式输出缓冲区BUF中的打印字符的子程序,输出的字节数为M。PRINTPROC PUSHAX;保护寄存器PUSHBX PUSHCX PUSHDX MOVDX,0FFFEH;设定A口为选通输出方式MOVAL,0A0H OUTDX,AL MOVAL,0CH;使INTEA(PC6)为0,禁止中断OUTDX,AL MOVCX,M;打印字节数送CX MOVBX,OFFSETBUF;取缓冲区首址送BX36 PRINT1:MOVAL,[BX];取一个数据MOVDX,0FFF8H OUTDX,AL;从A口输出MOVDX,0FFFCH PRINT2:INAL,DX;读C口TESTAL,80H;检测A(PC7)为1否?JZPRINT2;为0,则继续检测INCBX;为1,说明数据已输出LOOPPRINT1;准备取下一个数据输出POPDX;打印结束,恢复寄存器POPCX POPBX POPAXRET;返回PRINTENDP本例与上例的主要区别是:在上例中,由软件对PC7复位和置位来产生打印机的选通信号,而本例中,8255A工作在选通方式,当执行输出指令时,自动由硬件从PC7()输出负脉冲选通信号。当打印机变为有效时,自动将PC7置为高电平。37 2.8255A与键盘接口  键盘是微机系统中最常用的外部设备,数据、内存地址、命令及指令地址等都可以通过键盘输入到系统中。图8.14键盘的结构38 (1)键盘的工作原理最简单的键盘如图11.14(a)所示,其中每个键对应I/O端口的一位。没有键闭合时,各位均处于高电平;当有一个键按下时,就使对应位接地而成为低电平,而其它位仍为高电平。这样,CPU只要检测到某一位为0,便可判别出对应键已按下。   但是,用图8.14(a)的结构设计键盘有一个很大的缺点。这就是当键盘上的键较多时,引线太多,占用的I/O端口也太多。所以,这种简单结构只用在只有几个键的小键盘中。   通常使用的键盘是矩阵结构的。对于8×8=64个键的键盘,采用矩阵方式只要用16条引线和2个8位端口便完成键盘的连接。以3×3=9个键为例,如图8.14(b),这个矩阵分为3行3列,如果键5按下,则第1行和第2列线接通而形成通路。如果第1行线接低电平,则键5的闭合,会使第2列线也输出低电平。矩阵式键盘工作时,就是按行线和列线的电平来识别闭合键的。39 (2)键的识别为了识别键盘上的闭合键,通常可以采用两种方式:行扫描法和行反转法。①行扫描法图8.15是一个8行8列组成的键盘。行扫描法识别按键的原理如下:先使第0行接低电平,其余行为高电平,然后看第0行是否有键闭合。这是通过检查列线电位来实现的,即在第0行接低电平时,看是否有哪条列线变成低电平。如果有某列线变为低电平,则表示第0行和此列线相交位置上的键被按下;如果没有任何一条列线为低电平,则说明第0行没有任何键被按下。此后,再将第1行接低电平,检测是否有变为低电平的列线。如此重复地扫描,直到最后一行。在扫描过程中,当发现某一行有键闭合时,也就是列线输入中有一位为0时,便退出扫描,通过组合行线和列线即可识别此刻按下的是哪一键。   实际应用中,一般先快速检查键盘中是否有键按下,然后再确定按键的具体位置。为此,先使所有行线为低,然后检查列线。这时如果列线有一位为0,则说明必有键被按下,采用扫描法可进一步确定按键的具体位置。40 图8.15键盘接口电路41 图8.15中将行线与8255A端口B相连,端口B设置为输出。CPU使端口B的某一位为0,便相当于将该行线接低电平;某位为1,则该行线接高电平。为了检查列线的电平,将列线与端口A相连,端口A设置为输入。CPU只要读取端口A的数据,就可以判别是否有键被按下及是第几列的键被按下。 从上面的原理可知,键盘扫描程序的第一步应该判断是否有键被按下。为此,使输出端口各位全为0,即相当于将所有行线接低电平。然后,从输入端口读取数据,如果读得的数据不是FFH,则说明必有列线处于低电平,从而可断定必有键被按下。此时,为了消除键的抖动,调用延迟程序。如果读得的数据是FFH,则程序在循环中等待。这段程序如下:KEY1:MOVAL,00H MOVDX,ROWPORT;ROWPORT为行线端口地址OUTDX,AL;使所有行线为低MOVDX,COLPORT;COLPORT为列线端口地址INAL,DX;读取列值CMPAL,0FFH;判定是否有列线为低电平JZKEY1;没有,无闭合键,则循环等待CALLDELAY;有,则延迟20ms清除抖动42 键盘扫描程序的第二步是判断哪一个键被按下了。开始时,将计数值设置为行数,然后设置扫描初值。扫描初值11111110使第0行为低电平,其它行为高。输出扫描初值后,马上读取列线的值,看是否有列线处于低电平。若无,则将扫描初值循环左移一位,变为11111101,同时,计数值减1,如此下去,直到计数值为0。 如果在此过程中,查到有列线为低,则组合此时的行值和列值,进行下一步查找键值代码的工作,程序段如下:MOVAH,0FEH;扫描初值送AH MOVCX,8;行数送CX KEY2:MOVAL,AH MOVDX,ROWPORT OUTDX,AL;输出行值(扫描值)MOVDX,COLPORT INAL,DX;读进列值CMPAL,0FFH;判断有无接地线JNZKEY3;有,则转下一步处理ROLAH,1;无,则修改扫描值,准备下一行扫描LOOPKEY2;计数一次,未扫完8行,则继续循环JMPKEY1;所有行都没有键按下,则返回继续检测KEY3:…;此时,AL=列值,AH=行值,进行后续处理43 ②行反转法 行反转法也是识别键盘的常用方法。它的原理是:将行线接一个数据端口,先让它工作在输出方式;将列线也接到一个数据端口,先让它工作在输入方式。程序使CPU通过输出端口往各行线上送低电平,然后读入列线值。如果此时有某键被按下,则必定会使某列线值为0。接着,程序再对两个端口进行方式设置,使接行线的端口改为输入方式,接列线的端口改为输出方式。并且,将刚才读得的列值从列线所接端口输出,再读取行线的输入值,那么,闭合键所在的行线值必定为0。这样,当一个键被按下时,必定可以读得一对唯一的行值和列值。因此,要实现上述行反转法,行、列线所接的数据端口应能够改变输入、输出方式,而8255A的3个端口正好具有这个功能。 为了查找键代码,键盘程序设计时,可将各个键对应的行、列值放在一个表中,程序通过查表来确定哪一个键被按下,进而在另一个表中找到这个键的代码。如果遇到多个键同时闭合的情况,则输入的行值或者列值中一定有一个以上的0,而由程序预选建立的键值表中不会有此值,因而可以判为重键而重新查找。所以,用这种方法可以方便地解决重键问题。44 KEY1:…;设置行线接输出端口ROWPORT,列线接输入端口COLPORT,并判断是否有键按下KEY2:MOVAL,00H MOVDX,ROWPORT OUTDX,AL;行线全为低MOVDX,COLPORT INAL,DX;读取列值CMPAL,0FFH JZKEY2;无闭合键,循环等待PUSHAX;有闭合键,保存列值PUSHAX …;设置行线接输入端口ROWPORT,列线接输出端COLPORT MOVDX,COLPORT POPAX OUTDX,AL;输出列值MOVDX,ROWPORT INAL,DX;读取行值POPBX;结合行列值,此时MOVAH,BL;AL=行值,AH=列值45 ;查找键代码MOVSI,OFFSETTABLE;TABLE为键值表MOVDI,OFFSETCHAR;CHAR为键对应的代码MOVCX,64;键的个数KEY3:CMPAX,[SI];与键值比较JZKEY4;相同,说明查到INCSI;不相同,继续比较INCSIINCDILOOPKEY3JMPKEY1;全部比较完,仍无相同,说明是重键KEY4:MOVAL,[DI];获取键代码送AL …;判断按键是否释放,没有则等待CALLDELAY;按键释放,延时消除抖动…;后续处理TABLEDW0FEFEH;键0的行列值(键值)DW0FDFEH;键1的行列值DW0FBFEH;键2的行列值…;全部键的行列值CHARDB…;键0的代码DB…;键1的代码…;全部键的代码46 8.2可编程串行接口芯片8251A8.2.1串行通信概述如前所述,在计算机系统中,有两种数据传送方式:串行传送和并行传送。 并行数据传送的特点是8位、16位,甚至32位数据同时从一个设备传送到另一个设备。串行数据传送的特点是在传输过程中,数据一位一位地沿着一条传输线从一个设备传到另一个设备。以传送8位数据01101010为例,并行传送与串行传送的过程如图8.16所示。图8.16并行与串行传送数据的示意图47 从并行与串行的数据传送示意图可以看出,并行数据传送所需传输线的条数与位数有关,位数越多所需传输线越多;而串行数据传送只需一根线即可。 对于计算机系统内部或近距离的设备之间数据传送,可采用并行数据传送,并行通信数据线的传送速度快,工作效率高。对于远距离的设备之间的数据传送,经常采用串行数据传送。目前远距离通信利用电话线,比装并行电缆和放大器更经济、方便。48 1.数据传送过程微型计算机系统向外传送数据或者接收外面传送来的数据是以并行方式传送的,这是计算机内部数据所固有的特征。若要在计算机和外部设备之间进行串行通信,就需要一种接口电路,它具有把CPU传送来的并行数据转换为串行数据发送出去的功能,还具有把接收到外部设备传送来的串行数据转换成并行数据传送给CPU的功能。这种接口电路称为串行接口电路。 电路的工作过程是:接收数据时,移位寄存器接收输入线串行接口传送来的每一位,并把串行数据转换成并行数据存入接收数据寄存器,供CPU读取;发送数据时,CPU把数据传送给发送缓冲器,再通过移位寄存器在发送时钟的触发下一位一位地进行移位,把数据发送到输出线上。串并行互相转换如图8.17所示。49 A图8.18串行通信的3种连接方式B发送器接收器数据线(a)单工方式AABB发送器发送器发送器发送器接收器接收器接收器接收器(b)半双工方式(c)全双工方式数据线数据线数据线50 2.串行通信的连接方式串行通信时,数据是在两个站点A与B之间传送,具有单工(Simplex)、半双工(Half-Duplex)和全双工(Full-Duplex)3种连接方式,如图8.18所示。 (1)单工方式 这种方式中,数据只允许朝一个方向传输,如图8.18(a)所示,A站只能发送,B站只能接收。 (2)半双工方式 半双工方式中,数据可以在两个方向上传送,但通信双方不能同时收发数据,如图8.18(b)所示,A、B两个站点均具有接收或发送数据的器件,但两站点之间只有一条通信线路,故在任一时刻仍只能进行单向传送,双方可以通过切换开关来改变传送方向。 (3)全双工方式 全双工方式下,通信双方均可以在同一时刻发送和接收数据。如图8.18(c)所示,A、B两站点分别具备有一套完全独立的接收器和发送器,且两站点之间有两条信道,可以实现全双工传输。51 3.同步与异步通信方式为了保证数据通信的顺利进行,通信的双方必须共同遵守基本的通信规程,即通信协议。这里的所谓同步与异步通信方式,实际上是两类不同的通信协议中的一部分。 (1)异步通信(ASYNC)方式 异步通信(ASYNC——Asynchronousdatacommunication)方式中规定的字符格式如图8.19所示。异步通信方式的特点是,通信时以收发一个字符为独立的通信单位,两个传送的相邻字符之间的时间间隔可以是任意的,但通信空闲时,必须用“1”来填充(即不停地传输逻辑1。每个字符由4个部分组成: ①起始位:一位,逻辑0,表示字符的开始; ②数据位:可以是5~8位逻辑0/逻辑1,与双方约定的编码形式有关,如:ASCII码(7位),扩展的BCD码(8位)等,起始位之后紧跟着的是数据的最低位D0。 ③奇/偶校验位:一位逻辑0/逻辑1,双方可以约定采用奇校验、偶校验或无校验位。52 第n+1个字符第n个字符空闲位7位数据位空闲位011110D0D1D2D3D4D5D6图8.19异步通信字符格式④停止位:1位或1.5位或2位逻辑1,表示字符的结束,停止位的宽度,也是由双方预先约定。 异步传送过程中的起始位和停止位起着重要的作用。起始位标志着每一个字符的开始,停止位标志着每一个字符的结束。由于串行通信采用起始位为同步信号,接受端总是在接收到每个字符的头部即起始位处进行一次重新定位,保证每次采样对应一个数位。所以异步传送的发送器和接收器不必用同一个时钟,而是各有自己的局部时钟,只要是同一标称频率,略有偏差不会导致数据传送错误。53 (2)同步通信(SYNC)方式 在异步通信中,每个字符都要用起始位和停止位来使通信双方同步,这些附加的额外信息,使得异步通信的传输效率不高。在需传输大量数据的场合,为提高传输效率和速度,常去掉这些附加位,即采用同步通信SYNC(SynchronousdataCommunication),如图8.20所示。 同步通信的特点是,收、发双方以一个或两个预先约定的同步字符作为数据块传送的开始,数据块由几十到几千,甚至更多字节组成。对每个字符的检错一般可用奇校验,数据块的末尾用CRC(循环冗余码)对整个数据块进行校验。为了防止因收、发双方的时钟频率的偏差的积累效应而产生错位,从而导致通信出错,同步通信要求接收和发送的时钟完全同步,不能有误差。实际应用中,同步传送常在收、发双方间使用同一时钟,故硬件电路比较复杂。54 同步字符数据块CRC1CRC2同步字符2数据块CRC1CRC2同步字符1a.单同步格式b.双同步格式图8.20同步通信格式55 4.波特率与收/发时钟(1)波特率 计算机串行通信中常用波特率(Baudrate)来表示数据传输率,波特率的单位是bit/s,即每秒所传送的二进制位数。常用的标准值有110,300,600,1200,2400,4800,9600,19200波特等。 也可用位时间(Td)来表示传输率,它是波特率的倒数,表示每传送一位二进制位所需要的时间。例如某异步通信中每秒传送960个字符,而每个字符由10位(1个起始位、7个数据位、1个奇校验位、1个停止位)组成,则传送的波特率为:fd=10×960bit/s=9600bit/s传送一位的时间Td=1/9600=0.104ms56 (2)接收/发送时钟异步通信中,大多数串行端口发送和接收的波特率均可分别设置,由发送器和接收器各用一个时钟来确定,分别称为发送时钟和接收时钟。为了有利于收发双方同步,以及提高抗干扰的能力,这两个时钟频率fc一般不等于波特率fd,两者之间的关系为:fc=kfd。 其中,k称为波特率系数,其取值可为1、16、32或64。5.信号的调制与解调计算机的通信是一种二进制数字信号的传输,它要求传送线的频带很宽,而在进行远程数字通信时,往往是利用现有的模拟通信线路(如:电话线),其主要用途是传送音频信号,频带窄,一般为300~3400Hz。因此,若直接利用模拟信道作数字信号传输,则信号必然会发生畸变而导致出错。解决的办法是利用调制解调器,即MODEM(Modulator-Demodulator)。如图8.21所示,在发送方,用调制器把数字信号转换为模拟信号;经过模拟信道的传输到达接收方后,用解调器将模拟信号转换成数字信号再进入对方的计算机。57 图8.21中的MODEM是由调制器和解调器合在一起形成的一个装置,以用作双向通信。MODEM的类型一般可分为幅移键控(ASK)、频移键控(FSK)和相移键控(PSK)等。当通信波特率小于300bit/s时,常采用FSK调制方式,其基本原理是将数字信号“1”和“0”分别调制成不同频率的音频信号,例如将“1”转换成2400Hz的音频信号,而将“0”转换成1200HZ的音频信号。当到达接收方后,由解调器通过鉴频电路,将2400HZ和1200HZ的音频信号再还原为数字信号“1”和“0”。图8.21信号的调制与解调示意图58 可编程串行接口芯片有多种型号,常用的有Intel公司生产的8251A,Motorola公司生产的6850、6952、8654,ZILOG公司生产的SIO及TNS公司生产的8250等。这些芯片结构和工作原理大同小异,不必一一介绍。下面以Intel公司生产的8251A为例介绍可编程串行通信接口的基本工作原理、编程结构、编程方法及应用实例8.2.28251A的内部结构和工作过程8251A是一个通用串行输入/输出接口芯片,可用来将CPU传送给外设的信息以串行方式向外发送,或将外设输入给CPU的信息以串行方式接收并转换成并行数据传送给CPU。8251A的内部结构及引脚如图8.22所示。59 图8.228251A内部结构及引脚图60 1.发送器和接收器发送器和接收器是与外设交换信息的通道。下面对发送器和接收器的工作过程分别进行论述。 发送器包含发送缓冲器、发送移位寄存器、发送控制器三部分。工作过程: (1)接收到来自CPU的数据存入发送缓冲器。 (2)发送缓冲器存有待发送的数据后,使引脚TXRDY变为低电平,表示发送缓冲器满。 (3)当调制解调器做好接收数据的准备后,向8251A输入一个低电平信号,使引脚有效。 (4)在编写初始化命令时,使操作命令控制字的TXEN位为高,让发送器处于允许发送的状态下。 (5)满足以上(2)、(3)、(4)条件时,若采用同步方式,发送器将根据程序的设定自动送一个(单同步)或两个(双同步)同步字符,然后由移位寄存器从数据输出线TXD串行输出数据块;若采用异步方式,由发送控制器在其首尾加上起始位及停止位,然后从起始位开始,经移位寄存器从数据输出线TXD串行输出。61 (6)待数据发送完毕,使TXEMPTY有效。 (7)CPU可向8251A发送缓冲器写入下一个数据。 与发送器有关引脚信号如下:TXD:数据发送端,输出串行数据送往外部设备。TXRDY:发送器准备好信号。TXEMPTY:发送移位寄存器空闲信号。(注意与TXRDY的区别)      :发送时钟信号,外部输入。对于同步方式,TXC的时钟频率应等于发送数据的波特率。对于异步方式,由软件定义的发送时钟可是发送波特率的1倍(×1)、16倍(×16)或64倍(×64)。62 接收器包括接收缓冲器、接收移位寄存器及接收控制器三部分。工作过程: (1)当控制命令字的“允许接收”位RXE和“准备好接收数据”位有效时,接收控制器开始监视RXD线。 (2)外设数据从RXD端逐位进入接收移位寄存器中,接收中对同步和异步两种方式采用不同的处理过程。 异步方式时,当发现RXD线上的电平由高电平变为低电平时,认为是起始位到来,然后接收器开始接收一帧信息。接收到的信息经过删除起始位和停止位,把已转换成的并行数据置入接收数据缓冲器。    同步方式时,每出现一个数据位移位寄存器就把它移一位,把移位寄存器数据与程序设定的存于同步字符寄存器中的同步字符相比较,若不相等重复上述过程,直到与同步字符相等后,则使SYNDET=1,表示已达到同步。这时在接收时钟RXC的同步下,开始接收数据。RXD线上的数据送入移位寄存器,按规定的位数将它组装成并行数据,再把它送至接收数据缓冲器中。 (3)当接收数据缓冲器接收到由外设传送来的数据后,发出“接收准备就绪”RXRDY信号,通知CPU取走数据。63 与接收器有关的引脚信号如下:RXD:数据接收端,接收由外设输入的串行数据。RXRDY:接收器准备好信号。RXRDY=1表示接收缓冲器已装有输入的数据,通知CPU取走数据。若用查询方式,可从状态寄存器D1位检测这个信号。若用中断方式,可用该信号作为中断申请信号,通知CPU输入数据。RXRDY=0表示输入缓冲器空。SYNDET/BRKDET:双功能检测信号,高电平有效。 对于同步方式,SYNDET是同步检测信号,对于异步方式,BRKDET为间断检出信号,用来表示RXD端处于工作状态还是接收到断缺字符。RXC:接收时钟信号,输入。在同步方式时,RXC等于波特率;在异步方式时,可是波特率的1倍、16倍或64倍。64 2.数据总线缓冲器数据总线缓冲器是与CPU交换数据信息的通道。把8251A的8根数据线D7~D0和CPU系统数据总线相连,其功能有: (1)接收来自CPU的数据及控制字,传送数据给数据输出缓冲器,传送控制字也给数据输出缓冲器。对于控制字缓冲器不保存,接收到后马上发出相应控制,对于数据保存在输出缓冲器。当=0、TXEN=1条件满足时,才传送数据到发送移位寄存器。 (2)从数据输入缓冲器内取数据传送给CPU。 (3)从状态寄存器中读取状态字,确定8251A处于何种工作状态。65 3.读/写控制电路读/写控制电路是用来接收CPU送来的一系列控制信号。各信号的作用及动作过程是:RESET:芯片的复位信号。   :片选信号,低电平有效。C/D:控制/数据信号。根据C/D信号是1还是0,鉴别当前数据总线上信息流是控制字还是与外设交换的数据。对于8位的8088CPU系统,C/D端可直接连接到地址总线的A0端。对于16位的8086CPU系统,低8位数据总线上的数据访问偶地址端口或存储单元,高8位数据总线上的数据访问奇地址端口或存储单元。当8位的8251A的数据线连接到CPU低8位数据总线上,C/D端连接到地址总线的A1端,A0端不连接到8251A接口芯片上,保证8086CPU发给8251A的地址数为连续的俩个偶地址,使CPU与8251A交换的数据信息是在低8位数据总线上。对于8251A接收到的两个连续的偶地址,必定一个使C/D=0,一个使C/D=1。66 、、:读、写控制信号。在执行IN指令时,线有效,启动输入缓冲寄存器,数据总线上数据流方向由8251A流向CPU。 在执行OUT指令时,线有效,启动输出缓冲寄存器,数据流方向由CPU流向8251A。 上述信号配合起来可以决定8251A的操作,如表8.4所示。C/C/操作信息流向0001读数据CPU←8251A0010写数据8251A→CPU0101读状态字CPU←8251A0110写控制字8251A→CPU1×××未选中数据总线浮空67 4.调制解调器控制在远距离通信时,8251A提供了与调制解调器联络的信号;在近距离串行通信时,8251A提供了与外设联络的应答信号。 与调制解调控制电路有关的信号作用及控制方法如下:     :数据终端准备好信号,输出,低电平有效。此信号有效时,表示接收方准备好接收数据,通知发送方。   :数据装置准备好信号,输入,低电平有效。它是对DTR的回答信号,表示发送方准备好发送。   :发送方请求发送信号,输出,低电平有效。   :清除发送信号,输入,低电平有效。它是对RTS的回答信号,表示接收方作好接收数据的准备。   发送方与接收方是相对数据将要传送方向而决定的。当DTR与DSR为一对握手信号时,8251A为接收方,外设为发送方;当RTS和CTS为一对握手信号时,8251A为发送方,外设为接受方,如图8.23所示。68 69 8.2.38251A控制字及初始化方法8251A芯片在工作前要先对其初始化,以确定其工作方式。工作中CPU要向8251A发出一些命令,确定其动作过程,并要求了解其工作状态,以保证在数据传送中协调CPU与外设的数据传送过程。这样就需要有三种控制字,分别为工作方式控制字、操作命令控制字和状态控制字。70 1.工作方式控制字此控制字决定8251A是工作在异步方式还是同步方式。异步方式时,关于传送的数据位的位数、停止位的位数、传送速率等的约定;同步方式时,是双同步还是单同步等约定,都是通过执行输出指令由CPU向8251A写入一个工作方式控制字来完成的。 工作方式控制字各位的定义如图8.24所示。B2、B1二位有两个作用,一个作用是确定通信方式是同步方式还是异步方式;另一个作用是确定异步通信方式的数据传送速率。例如×64表示时钟频率是发送或接收波特率的64倍,其他类推。71 图8.248251A工作方式控制字72 2.操作命令控制字要使8251A处于发送数据或接收数据状态,通知外设准备接收数据或是发送数据,是通过CPU执行输出指令,发出相应的控制字来实现的。 操作命令控制字各位的定义如图8.25所示。图8.258251A操作命令控制字73 3.状态控制字CPU通过输入指令读取状态控制字,了解8251A传送数据时所处的状态,作出是否发出命令,是否继续下一个数据传送的决定。状态字存放在状态寄存器中,CPU只能读状态寄存器,而不能对它写入内容,状态控制字各位所代表的意义如图8.26所示。图8.268251A状态控制字74 在传送数据前要对8251A进行初始化,才能确定发送方与接收方的通信格式,以及通信的时序,从而保证准确无误地传送数据。由于三个控制字没有特征位,且工作方式控制字和操作命令控制字放入同一个端口,因而要求按一定顺序写入控制字,不能颠倒。正确顺序如图8.27所示。需要指出,工作方式控制字必须跟在复位命令之后。复位命令可用硬件的方法从RESET引脚输入一复位信号,也可通过软件方法发送复位命令,这样8251A才可重新设置工作方式控制字,改变工作方式完成其他传送任务。75 图8.278251A初始化流程76 [例8.3]编写一段通过8251A采用查询式接收数据的程序。将8251A定义为异步传送方式,波特率系数为64,采用偶校验,1位停止位,7位数据位。 设8251A数据口地址为04A0H,控制口地址为04A2H。初始化程序为:MOVDX,04A2H MOVAL,7BH;写工作方式控制字OUTDX,AL MOVAL,14H;写操作命令控制字OUTDX,AL WAIT∶INAL,DX;读入状态控制字ANDAL,02H JZWAIT;检查RXRDY是否为1 MOVDX,04A0H INAL,DX;输入数据77 [例8.4]编写使8251A发送数据的程序。将8251A定为异步传送方式,波特率系数为64,采用偶校验,1位停止位,7位数据位。8251A与外设有握手信号,采用查询方式发送数据。设8251A数据口地址为04A0H,控制口地址为04A2H。初始化程序如下:MOVDX,04A2H MOVAL,7BH;写工作方式控制字OUTDX,AL MOVAL,31H;写操作命令控制字OUTDX,AL WAIT∶INAL,DX ANDAL,01H;检查TXRDY是否为1 JZWAIT MOVDX,04A0H MOVAL,36H;输出的数据送AL OUTDX,AL78 [例8.5]编写接收数据的初始化程序。要求8251A采用同步传送方式、2个同步字符、内同步、偶校验、7位数据位和同步字符为16H。 设8251A数据口地址为04A0H,控制口地址为04A2H。初始化程序如下:MOVDX,04A2H;控制口地址送DXMOVAL,38H;写工作方式控制字MOVDX,AL MOVAL,16H;同步字符送AL OUTDX,AL OUTDX,AL;输入两个同步字符MOVAL,96H;写操作命令控制字OUTDX,AL79 8.2.48251A应用实例1.8251A作为接口芯片输出数据送给一个串入——并出寄存器74LS164,控制8个发光二极管,要求发光二极管从左到右轮流显示,并不断循环。(该题可用于模拟串口输出实验。)图8.2874LS164芯片引脚图80 (1)74LS164芯片引脚及工作过程CR:输出控制端。CR=0,输出Q7~Q0全为低电平;CR=1,输出Q7~Q0工作。DSA、DSB:输入控制和数据输入端。当DSA、DSB中一个为低电平时禁止另一个输入;当DSA、DSB中一个为高电平时允许另一个输入,在CP上升沿动作。 (2)硬件电路设计 硬件电路设计如图8.29所示。RTS信号为启动外部设备的选通信号。图8.29硬件电路设计81 (3)程序设计 因为外部接口芯片74LS164与8251A的通信是直接的,它不是可编程接口芯片,不能判断起始位、终止位、装配数据位,74LS164把从8251ATXD发来的数据都认为是真正的数据。所以为实现该实验,从8251A发出数据定为一位起始位,一位终止位,无奇偶校验,6位数据位。第一个灯对应起始位,永远不亮,第8个灯对应停止位,永远亮,只有中间6个灯显示的才为真正数据。 程序如下:ORG8000H CODESEGMENT ASSUMECS∶CODE START∶MOVDX,04A2H;8251A控制口地址送DX MOVAL,01000101B;设置8251A工作方式控制字,即异步、1位停止位,倍频系数为×1、6位数据OUTDX,AL MOVAH,06H;设置计数器初值82 AA1∶MOVAL,40H;点亮指示灯MOVBL,AL AA∶MOVAL,31H;操作命令控制字送AL OUTDX,AL WAIT∶INAL,DX;检测8251A工作状态ANDAL,05H;检查TXRDY是否为1、TXEMPTY是否为1 JZWAIT MOVDX,04A0H;8251A数据口地址送DX MOVAL,BL OUTDX,AL;输出数据MOVDX,04A2H;8251A控制口地址送DX MOVAL,31H;启动RTS线OUTDX,AL CALLDELAY;调延时子程序RORBL,1;循环点亮指示灯DECAH JNZAA JMPAA1 CODEENDS ENDSTART83 2.用两片8251A接口芯片实现两个8086CPU之间的串行通信如图8.30所示。图8.30两个8086CPU之间的串行通信84 8251A接口芯片的译码电路的设计也需考虑8位的接口芯片与16位的CPU之间进行数据交换,必须遵循低8位数据线上的数据对应于偶地址、高8位数据线上的数据对应于奇地址的原则,这已在8255A接口芯片译码电路的设计中作了详细说明。对于8251A,CPU是对其状态寄存器还是数据寄存器的访问,是传送命令字、控制字还是数据,可通过线为1还是为0加以区别。一般地,将地址线A1接到8251A的端,使8251A占用低2位地址线。因此,实例电路中假定8251A数据口的地址为04A0H,控制口地址为04A2H。假定1#8251A地址为04A0H,04A2H;2#8251地址为04A4H,04A6H。1#CPU发送100个数据给2#CPU,通信协议是采用异步传送方式,8位数据无校验,2位停止位,波特率因子为64。 在实际使用中,当未对8251A设置模式时,如果要对8251A进行复位,一般采用先送3个00H,再送40H的方法,这是8251A的编程约定。85 程序如下: ;1#CPU发送程序DATASETMENT FADBXX,XX,…;将要传送的数据DATAENDS STACKSEGMENTPARASTACK′STACK′ BUFFDB50DUP(?) STACKENDS CODESEGMENT ASSUMECS∶CODE,DS∶DATA,SS∶STACK START∶MOVAX,DATA;取数据段寄存器地址MOVDS,AX MOVAX,STACK;取堆栈段寄存器地址MOVSS,AX MOVDX,04A2H;8251A控制口地址送DX MOVBL,03H;复位8251A,先输入3个0 AA1∶MOVAL,00H OUTDX,AL NOP86 DECBL JNZAA1 MOVAL,40H;发复位命令OUTDX,AL MOVAL,0CFH;设置工作方式控制字OUTDX,AL MOVAL,31H;设置操作命令控制字OUTDX,AL LEASI,FA;取数据区偏移地址MOVCX,0064H;设置传送100个数据的计数器MOVDX,04A2H;设置8251A控制口地址WAIT1∶INAL,DX;读取状态字ANDAL,05H;检测TXEMPTY和TXRDY位JZWAIT1;发送器空,等待MOVDX,04A0H;设置8251A数据口地址MOVAL,[SI];取数据OUTDX,AL;将数据传送给另一台计算机INCSI;修改数据区地址指针DECCX JNZWAIT1 AA2∶JMPAA2 CODEENDS ENDSTART87 ;2#CPU接收程序DATASEGMENT SHOUDB64DUP(?) DATAENDS STACKSEGMENTPARASTACK′STACK′ BUFFDB50DUP(?) STACKENDS CODESEGMENT ASSUMECS∶CODE,DS∶DATA,SS∶STACK START∶MOVAX,DATA;取数据段寄存器地址MOVDS,AX MOVAX,STACK;取堆栈段寄存器地址MOVSS,AX MOVDX,04A6H;设置8251A控制口地址MOVBL,03H AA3∶MOVAL,00H;复位8251A,先输入三个0 OUTDX,AL NOP88 DECBL JNZAA3 MOVAL,40H;发复位命令OUTDX,AL MOVAL,0CFH;设置工作方式控制字OUTDX,AL MOVAL,16H;设置操作命令控制字OUTDX,AL LEADI,SHOU;接收数据缓冲区首址MOVCX,0064H;设置传送100个数据的计数器MOVDX,04A6;设置8251A控制口地址WAIT2∶INAL,DX;监测8251A工作状态MOVBL,AL ANDAL,02H;检测RXRDY是否为1 JZWAIT2 MOVAL,BL ANDAL,38H JNZERR;转出错处理程序MOVDX,04A4H;8251A数据口地址INAL,DX;接收数据MOV[DI],AL;保存数据INCDI;修改数据区地址指针DECCX JNZWAIT2 AA4∶JMPAA4 CODEENDS ENDSTART89 8.3可编程定时/计数器8253A8.3.1定时与计数定时计数技术在计算机中具有极为重要的作用。微机控制系统中,常要按一定的采样周期对处理对象进行采样或定时检测某些参数等。例如,定时中断、定时检测、定时扫描等定时功能;用计数器对外部事件计数,即记录外设提供的脉冲个数;IBMPC系列微机中需要一个实时时钟以实现计时功能,还要按一定时间间隔对DRAM定时刷新和用定时信号来驱动扬声器的发声等。在实时操作系统和多任务操作系统中,可以利用定时器产生的定时中断进行进程调度。 定时器和计数器都由数字电路中的计数电路构成。它们的工作原理一样,都是记录输入的脉冲个数。前者记录高精度晶振脉冲信号,因此可以输出准确的时间间隔,称为定时器,而当记录外设提供的具有一定随机性的脉冲信号时,它主要反映脉冲的个数(进而获知外设的某种状态),称为计数器。 定时的方法有3种:软件定时、不可编程的硬件定时和可编程的硬件定时。90 1.软件定时根据CPU执行每条指令需要一定的时间,重复执行一些指令就会占用一段固定的时间,通过适当地选取指令和循环次数便很容易实现定时功能,这种方法不需要增加硬件,可通过编程来控制和改变定时时间,灵活方便,节省费用。缺点是CPU重复执行的这段程序的本身并没有什么具体目的,仅为延时,从而降低了CPU利用率。2.不可编程的硬件定时这种方法采用数字电路中的分频器将系统时钟进行适当的分频产生需要的定时信号;也可以采用单稳电路或简易定时电路(如常用的555定时器)由外接RC电路控制定时时间。这样的定时电路比较简单,利用分频不同或改变电阻、电容值,还可以使定时时间在一定范围内改变。但是,这种定时电路在硬件接好后,定时范围不易由程序来改变和控制,使用不甚方便,而且定时精度也不高。3.可编程的硬件定时在微机系统中,常采用软件、硬件相结合的方法,用可编程定时计数器芯片构成一个方便灵活的定时计数电路。这种电路不仅定时值和定时范围可用程序确定和改变,而且具有多种工作方式,可以输出多种控制信号,它由微处理器的时钟信号提供时间基准,故计时也精确稳定。Intel8253定时器/计数器就是这样一种可编程序间隔定时器PIT(ProgrammableIntervalTimer)芯片。91 8.3.2Intel8253的基本功能和内部结构1.8253的基本功能 (1)3个独立的16位计数器,最大计数范围为0~65535; (2)每个计数器均可以按二进制或二—十进制计数; (3)计数器速率可达2MHz; (4)可编程6种不同的工作方式; (5)所有输入和输出都与TTL兼容。8253具有较好的通用性和使用灵活性,几乎适合于任何一种微处理器组成的系统。92 2.8253的内部结构8253的内部结构如图8.31所示,由数据总线缓冲器、控制寄存器、读/写控制逻辑和计数器等部分组成。 (1)数据总线缓冲器 该缓冲器为8位双向三态的缓冲器,8根数据线D0~D7可直接挂在CPU数据总线上。 (2)读/写控制逻辑 它是8253内部操作的控制部分,它决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向。 (3)控制字寄存器 接收从CPU来的控制字,并由控制字的D7、D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出。93 图8.318253的内部结构示意图94 图8.32计数器内部逻辑图内部总线图8.338253管脚图95 (4)计数器8253有3个独立的计数器通道,每个通道的结构完全相同,如图8.32所示。每一个通道有一个16位减法计数器,还有对应的16位初值寄存器和输出锁存器。每个计数器都可以对其CLK输入端输入的脉冲按照二进制或BCD码从预置的初值开始进行减1计数,当减至0时,从OUT端输出一个信号。计数的开始由软件启动或硬件门控信号GATE控制。计数开始前写入的计数初值存于初值寄存器。计数过程中,减法计数器的值不断递减,而初值寄存器中的初值不变。输出锁存器则用于写入锁存命令时锁定当前计数值。 当8253用作计数器时,加在CLK引脚上脉冲的间隔可以是不相等的;当它用作定时器时,则在CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值,即:定时时间=时钟脉冲周期Tc×预置的计数初值n。对8253来讲,外部输入到CLK引脚上的时钟脉冲频率不能大于2MHZ,否则需分频后才能送到CLK端。96 3.8253的引脚8253是一片具有3个独立通道的16位计数器/定时器芯片,使用单一+5V电源,24引脚双列直插式封装,如图8.33所示。 (1)D0~D7——三态双向数据线。与CPU数据总线相连,用于传递CPU与8253之间的数据信息、控制信息和状态信息。 (2)——片选信号(ChipSelect),输入,低电平有效。表示8253被选中,允许CPU对其进行读/写操作。通常连接I/O端口地址译码电路输出端。 (3)——写信号,输入,低电平有效,用于控制CPU对8253的写操作,可与A1,A0信号配合以决定是写入控制字还是计数初值。 (4)——读信号,输入,低电平有效。用于控制CPU对8253的读操作,可与A1,A0信号配合读取某个计数器的当前计数值。 (5)A0,A1——地址输入线。用于8253内部寻址的4个端口,即3个计数器和一个控制字寄存器。一般与CPU低位的地址线相连。8253的读/写操作逻辑如表8.5所示。97 A1A0寄存器选择和操作000000001011110000×100001111×100110011××01010101××写入计数器NO.0写入计数器NO.1写入计数器NO.2写入控制字寄存器读计数器NO.0读计数器NO.1读计数器NO.2无操作禁止使用无操作98 (6)CLK0(CLK1,CLK2)——时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。CLK可以是系统时钟脉冲,也可以是由其他脉冲源提供。如果输入是周期精确的时钟,则8253一般工作在定时方式,如果输入是周期不定的脉冲,或关心的只是脉冲的数量而不是脉冲的时间间隔,则此时8253一般作为计数器使用。8253规定加在CLK引脚的输入时钟周期不得小于380ns。 (7)GATE0(GATE1,GATE2)——门控输入端,用于外部控制计数器的启动或停止计数的操作。当GATE为高电平时,允许计数器工作,当GATE为低电平时,禁止计数器工作。两个或两个以上计数器连用时,可用此信号来同步,也可用于与外部信号的同步。 (8)OUT0(OUT1,OUT2)——计数输出端。在不同工作方式中,当计数器计数到0时,OUT引脚上必输出相应的信号。99 8.3.38253的工作方式8253是一种面向微机系统的专用接口芯片,它的每一个计数器都可以按照控制字的规定有6种不同的工作方式,如下所述。1.方式0—计数结束时中断方式(InterruptonTerminalCount)方式0的工作时序如图8.34所示。图中,CW表示8253的控制字,LSB表示低8位计数值。如果是16位计数方式,则还有高8位计数值MSB。 (1)计数过程 当写入方式0控制字后,OUT立即变为低电平,并且在计数过程中一直维持低电平。若GATE=1,写入初值后,在信号上升沿之后的下一个CLK脉冲计数值装入计数器,并开始计数,计数器减到零时,OUT输出变为高电平,且一直保持到该通道重新装入计数值或重新设置工作方式为止,此信号可用于申请中断。按方式0计数时,计数器只计一遍。100 (2)GATE信号的影响 门控信号GATE可以用来控制计数过程,GATE为高电平,允许计数;GATE为低电平,暂停计数;当GATE重新为高电平时又恢复计数。 (3)新的初值对计数过程的影响 方式0是写一次计数值,计一遍数,计数器不会自动重装初值重新开始计数。如果在计数过程中写入新的计数初值,则在写入新值后的下一个时钟下降沿计数器将按新的初值计数,即新的初值是立即有效的。 注意:8253写计数值是由CPU的信号控制的,在信号的上升沿,计数值被送入对应计数器的计数值寄存器,在信号上升沿之后的下一个CLK脉冲才开始计数。如果设置计数初值N,输出OUT是在写入命令执行后,第N+1个CLK脉冲之后,才变为高电平的。后面的方式1、2、4、5也有同样的特点。101 102 2.方式1—可编程单稳态触发器(ProgrammableOne―short) 方式1的工作波形如图8.35所示。 这种方式由外部门控信号GATE上升沿触发,使输出端变为低电平,产生一单拍负脉冲信号,脉冲宽度由计数值决定。 (1)计数过程 写入控制字后,OUT输出为高电平。写入计数初值N后,计数器并不开始计数,而要等到GATE上升沿后的下一个CLK输入脉冲的下降沿,OUT输出变低,计数才开始。计数结束时,OUT输出变高,从而产生一个宽度为N个CLK周期的负脉冲。103 (2)GATE信号的影响 方式1中,GATE信号的作用可从两个方面进行说明。第一,在计数结束后,若再来一个GATE信号上升沿,则下一个时钟周期的下降沿又从初值开始计数,而不需要重新写入初值,即门控信号可重新触发计数。第二,在计数过程中,若来一个门控信号的上升沿,也在下一个时钟下降沿从初值起重新计数,即终止原来的计数过程,开始新的一轮计数。 (3)新的初值对计数过程的影响 如果在计数过程中写入新的初值,不会立即影响计数过程。只有下一个门控信号到来后的第一个时钟下降沿,才终止原来的计数过程,按新值开始计数。若计数结束前没有GATE触发信号,则原来计数过程正常结束。即新的初值下次有效。104 3.方式2—速率发生器、分频器(RateGenerator) 方式2的工作波形如图8.36所示。 这种方式的功能如同一个N分频计数器,输出是输入时钟按照计数值N分频后的一个连续脉冲。 (1)计数过程 写入控制字后的时钟上升沿,输出端OUT变成高电平。若GATE=1,写入计数初值后的第一个时钟下降沿开始减1计数。减到1时,输出端OUT变为低电平,减到0时,输出OUT又变成高电平,从初值开始新的计数过程,,即方式2能自动重装初值,输出固定频率的脉冲。因此若装入计数初值为N,则OUT引脚上每隔N个时钟脉冲就输出一个负脉冲,其频率为输入时钟脉冲频率的1/N,故方式2也称为分频器。105 (2)GATE信号的影响 方式2中,GATE信号为低电平终止计数,而由低电平恢复为高电平后的第一个时钟下降沿重新从初值开始计数。由此可见,GATE一直维持高电平时,计数器方能作为一个N分频器。 (3)新的初值对计数过程的影响 如果在计数过程中写入新的初值,且GATE信号一直维持高电平,则新的初值不会立即影响当前的计数过程,但在计数结束后的下一个计数周期将按新的初值计数,即新的初值下次有效。图8.36方式2波形图106 4.方式3—方波发生器(SquareWaveGenerator) 方式3的工作波形如图8.37所示。图8.37方式3波形107 (1)计数过程方式3的计数过程按计数初值的不同分为两种情况: ①计数初值为偶数。写入控制字后的时钟上升沿,输出端OUT变成高电平。若GATE=1,写入计数初值后的第一个时钟下降沿开始减1计数。减到N/2时,输出端OUT变为低电平;减到0时,输出端OUT又变成高电平,并重新从初值开始新的计数过程。可见,输出端OUT的波形是连续的完全对称的方波,故称方波发生器。 ②计数初值为奇数。写入控制字后的时钟上升沿,输出端OUT变成高电平。若GATE=1,写入计数初值后的第一个时钟下降沿开始减1计数,减到(N+1)/2以后,输出端OUT变为低电平;减到0时,输出端OUT又变成高电平,并重新从初值开始新的计数过程。这时输出波形的高电平宽度比低电平宽度多一个时钟周期,为连续的近似方波。(2)GATE信号的影响GATE=1,允许计数,GATE=0,禁止计数,如果在输出端OUT为低电平期间,GATE变低,则OUT将立即变高,并停止计数。当GATE变高以后,计数器重新装入初值并重新开始计数。(3)新的初值对计数过程的影响如果在计数过程中写入新的初值,而GATE信号一直维持高电平,则新的初值不会立即影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数。若写入新的初值后,遇到门控信号的上升沿,则终止现行计数过程,从下一个时钟下降沿开始按新的初值进行计数。108 5.方式4—软件触发选通方式(SoftwareTriggeredStrobe) 方式4的工作波形如图8.38所示。(1)计数过程 写入方式控制字后,OUT输出高电平。若GATE=1,写入初值的下一个CLK脉冲开始减1计数,计数到达0值(注意:不是减到1),OUT输出为低电平,持续一个CLK脉冲周期后再恢复到高电平。方式4之所以称为软件触发选通方式,是因为计数过程是由软件把计数初值装入计数寄存器来触发的,计数初值n仅一次有效。若要继续计数,则需重新装入初值。109 (2)门控信号的影响GATE=1,允许计数;GATE信号变低,禁止计数,输出维持当时的电平,直到GATE变成高电平后继续计数,从OUT端输出一个负脉冲。 (3)新的初值对计数过程的影响 在计数过程中改变计数值,则在写入新值后的下一个时钟下降沿计数器将新的初值计数,即新值是立即有效的。110 图8.38方式4波形图图8.39方式5波形图111 6.方式5—硬件触发选通方式(HardwareTriggeredStrobe) 方式5的工作波形如图8.39所示。 (1)计数过程写入控制字后,输出OUT即为高电平。写入计数初值后,计数器并不立即开始计数,而是由门控脉冲的上升沿触发。计数结束(计数器减到0)时输出一个持续时间为一个TCLK的负脉冲,然后输出恢复为高电平。直到GATE信号再次触发。(2)门控信号的影响若在计数过程中,又有一个门控信号的上升沿,则立即终止当前的计数过程,且在下一个时钟下降沿,又从初值开始计数,如果计数过程结束后,来一个门控上升沿,计数器也会在下一个时钟下降沿,又从初值开始减1计数,即门控信号上升沿任何时候到来都会立即触发一个计数过程。(3)新的初值对计数过程的影响如果在计数过程中写入新的初值,则新的初值不会立即影响当前的计数过程,只有到下一个门控信号上升沿到来后,才从新的初值开始减1计数。即新的计数初值在下一个门控信号上升沿触发后有效。112 比较内容工作方式启动计数中止计数自动重复更新初值OUT波形方式0软件GATE=0无立即有效方式1硬件无下一轮有效方式2软/硬件GATE=0有下一轮有效方式3软/硬件GATE=0有下半轮有效方式4软件GATE=0无立即有效方式5硬件无下一轮有效N…………10N…………101N…….2N…N/2N/20N…….1N…0N…….1N…113 8.3.48253的控制字与初始化编程1.8253的控制字8253的控制字有4个主要功能*选择计数器; *确定计数器数据的读写格式; *确定计数器的工作方式; *确定计数器计数的数制。 控制字的格式如图8.40所示:114 D7D6D5D4D3D2D1D0计数器读/写格式工作方式数制0—二进制1—二-十进制(BCD)000—方式0001—方式1×10—方式2×11—方式3100—方式4101—方式500—计数器锁存命令10—只读/写高8位01—只读/写低8位11—先读/写低8位后读/写高8位00—选择计数器001—选择计数器110—选择计数器211—非法选择图8.408253控制字格式115 2.8253的初始化编程刚接通电源时,诸如8253之类的可编程外围接口芯片通道都处于未定义状态,在使用之前,必须用程序把它们初始化为所需的特定模式,这个过程称为初始化编程。对8253芯片进行初始化编程时,需按下列步骤进行: (1)写入控制字 用输出指令向控制字寄存器写入一个控制字,以选定计数器通道,规定该计数器的工作方式和计数格式。写入控制字还起到复位作用,使输出端OUT变为规定的初始状态,并使计数器清0。116 (2)写入计数初值用输出指令向选中的计数器端口地址中写入一个计数初值,初值设置时要符合控制字中有关格式的规定。初值可以是8位数据,也可以是16位数据。若是8位数,只要用一条输出指令就可完成初值的设置。如果是16位数,则必须用两条输出指令来完成,而且规定先送低8位数据,后送高8位数据。注意,计数初值为0时,若为16位计数,也要分成两次写入。 由于3个计数器分别具有独立的编程地址,而控制字寄存器本身的内容又确定了所控制的寄存器的序号,因此对3个计数器通道的编程没有先后顺序的规定,可任意选择某一个计数器通道进行初始化编程,只要符合先写入控制字,后写入计数初值的规定即可。8253工作过程中,CPU可用输入指令读取任一通道的计数值。CPU读到的是执行输入指令瞬间计数器的当前值。但8253的计数器是16位,所以要分2次读至CPU。因此,若不锁存的话,在前后两次执行输入指令的过程中,计数值可能已经变化了。锁存当前计数值有下面两种方法: ①利用GATE信号使计数过程暂停。 ②向8253写入一个方式控制字,令8253通道的锁存器锁存。8253的每个通道都有一个16位锁存器,平时它的值随着通道计数器的值变化。当向通道写入锁存的控制字时,它把计数器的当前值锁存(计数器可继续计数),于是CPU读取的就是锁存器的值。当对计数器重新编程,或读取计数值后,自动解除锁存状态,它的值又随计数器变化。117 [例8.6]在某微机系统中,8253的3个计数器的端口地址分别为3F0H、3F2H和3F4H,控制字寄存器的端口地址为3F6H,要求8253的通道0工作于方式3,BCD计数,并已知对它写入的计数初值n=1234(十进制数),则初始化程序为:MOVAL,00110111BOUTDX,ALMOVAL,34H MOVDX,3F0HOUTDX,ALMOVAL,12H OUTDX,AL在计数初值写入8253后,还要经过一个时钟脉冲的上升沿和下降沿,才能将计数初值装入实际的计数器,然后在门控信号GATE的控制下,对从CLK引脚输入的脉冲进行递减计数。118 8.3.58253应用举例1.8253定时功能的应用在计算机应用中,经常会遇到隔一定时间重复某一个动作的应用。 设某应用系统中,系统提供一个频率为10kHz的时钟信号,要求每隔100ms采集一次数据。 分析:在系统中,采用8253定时器的通道0来实现这一要求。将8253芯片的CLK0接到系统的10kHz时钟上,OUT0输出接到CPU的中断请求线上,8253的端口地址为10H~13H,如图8.41所示。 (1)选择工作方式 由于系统每隔100ms定时中断一次,则采样频率为10Hz,可选用方式2来实现。当8253定时器工作在方式2时,在写入控制字与计数初值后,定时器就启动工作,每到100ms时间,即计数器减到1时,输出端OUT0输出一个CLK周期的低电平,向CPU申请中断,CPU在中断服务程序中完成数据采集,同时按原设定值重新开始计数,实现了计数值的自动重装。119 图8.418253用于定时中断中断请求信号CPU总线OUT0120 (2)确定计数初值 已知fCLK0=10kHz,则TCLK0=0.1ms,所以,计数初值N=TOUT0/TCLK0=100ms/0.1ms=1000=03E8H(3)初始化编程 根据以上要求,可确定8253通道0的方式控制字为00110100B,即34H。 初始化程序段如下:MOVAL,34H;通道0,16位计数,方式2,二进制计数OUT13H,AL;写入方式控制字到控制字寄存器MOVAL,0E8H;计数初值低8位OUT10H,AL;写入计数初值低8位到通道0 MOVAL,03H;计数初值高8位OUT10H,AL;写入计数初值高8位到通道0121 2.8253计数功能的应用通过PC机系统总线在外部扩展一个8253,利用其通道0记录外部事件的发生次数,每输入一个高脉冲表示事件发生1次。当事件发生100次后就向CPU提出中断请求(边沿触发),假设8253片选信号的I/O地址范围为200H~203H,如图8.42。 根据要求,可以选择方式0来实现,计数初值N=100。8253初始化程序段如下:MOVDX,203H;设置方式控制字地址MOVAL,10H;设定通道0为工作方式0,二进制计数,只写入低字节计数值OUTDX,AL MOVDX,200H;设置计数器通道0的地址MOVAL,64H;计数初值为100 OUTDX,AL122 图8.428253用于外部事件的计数外部事件产生A0A1A2~A9译码电路123 3.8253计数通道的级联使用已知某8253占用I/O空间地址为320H~323H,如图8.43所示,输入其CKL1端的脉冲频率为1MHz,要求用8253连续产生10秒的定时信号。 分析:8253的一个通道的最大计数范围为65536,本例中要求输出10秒定时信号,则计数初值N=10/10-6=107,超过了8253一个通道的最大计数值,此时可以使用2个8253通道级连方式来实现。若级连前2个通道的初值为N1和N2,则级连后作为一个整体的计数值为N=N1×N2。图8.438253通道的级联通道1通道210秒定时输出124 设计数器初值N1=500=1F4H,N2=20000=4E20H,使用方式2,二进制计数,则通道1、2的初始化程序如下:MOVDX,323H MOVAL,74H;01110100B,通道1,写入16位初值,方式2,二进制计数OUTDX,AL;写入通道1方式字MOVDX,321H MOVAL,0F4H OUTDX,AL;写入初值500的低8位入通道1 MOVAL,01H OUTDX,AL;写入初值500的高8位入通道1 MOVDX,323H MOVAL,0B4H;10110100B,通道2,写入16位初值,方式2,二进制计数OUTDX,AL;写入通道2方式字MOVDX,322H MOVAL,20H OUTDX,AL;写入通道2初值20000的低8位MOVAL,4EH OUTDX,AL;写入通道2初值20000的高8位125 4.利用8253的计数功能产生波形8253计数器2产生频率为40KHz的方波,8253的端口地址为0040H~0043H,已知时钟端CLK2输入信号的频率为2MHz。试设计8253与8088总线的接口电路,并编写产生方波的程序。8253与8088总线的接口电路如图8.44所示。 为了使计数器2产生方波,应使其工作于方式3,输入的2MHZ的CLK2时钟信号进行50次分频后可在OUT2端输出频率为40KHz的方波,因此,对应的控制字应为10010111B,计数初值为十进制数50。程序如下所示:MOVAL,10010111B;对计数器2送控制字MOVDX,0043H     OUTDX,AL     MOVAL,50H;送计数初值50     MOVDX,0042H     OUTDX,AL126 图8.448253与8088总线的连接&ABC74LS138G1G2BG2A-1D0D7D0D7RD8253WRA0A1CS…&IORIOWA9A8A7A159A6A5A1A2A3A4A0CLK0GATE0OUT0CLK1GATE1OUT1CLK2GATE2OUT2127 8.4D/A与A/D转换器8.4.1D/A与A/D接口概述1.一个典型的计算机自动控制系统一个包含A/D和D/A转换器的计算机闭环自动控制系统如图8.45所示。生产过程传感器执行机构A/D转换器I/O接口计算机D/A转换器I/O接口128 2.D/A转换的原理与性能参数D/A转换器是指将数字量转换成模拟量的电路。数字量输入的位数有8位、12位和16位等,输出的模拟量有电流和电压两种。(1)D/A转换器工作原理D/A转换器用于将数字量转换成模拟量。它的输入量是数字量D,输出量为模拟量V0UT,要求输出量与输入量成正比,即:V0UT=D×VR其中VR为基准电压。 数字量是由一位一位的数字构成,每个数位都代表一定的权。例如10000001,最高位的权是27,所以此位上的代码1表示数值1×128。因此,数字量D可以用每位的权乘以其代码值,然后各位相加。具体公式如下:129 由以上两个式子可推导出:将输入的每一位数转换为与其权对应的模拟量,各位对应的模拟量相加得到D/A转换器的输出。模拟量输出与数字量输入成正比。130 (2)D/A转换器的性能参数①分辨率 这个参数反映了D/A转换器对模拟量的分辨能力,是最小输出电压(对应的输入数字量只有D0位为1)与最大输出电压(对应的输入数字量所有位全为1)之比。在实际使用中,一般用输入数字量的位数来表示分辨率大小。常说的8位D/A转换器,12位D/A转换器等等,分辨率取决于D/A转换器的位数。 ②转换精度 转换精度表明了模拟输出实际值与理想值之间的偏差。D/A转换器的转换精度与D/A转换器的本身芯片的结构和与外接电路的配置有关。外接运算放大器,外接参考电源,都可影响D/A转换器的精度。 ③温度灵敏度 这个参数表明D/A转换器受温度变化影响的特性。它是指数字输入不变的情况下,模拟输出信号随温度的变化。一般D/A转换器温度灵敏度为±50PPM/℃。1PPM为百万分之一。 ④建立时间 建立时间是指从数字输入端发生变化开始,到输出模拟值稳定在额定值的±1/2LSB时所需时间。它是表明了D/A转换速率快慢的一个重要参数。131 3.A/D转换的原理与性能参数A/D转换器是把模拟量转换为数字量的器件,又称为模拟/数字转换器(Analog-DigitalConverter),简称ADC。它是数据采集系统的核心,担负着将模拟信号变换成适合于数字处理的二进制代码的任务。它为外部环境的模拟信号与微机系统的数字信号之间提供了一种接口,广泛应用于面向自动测量的模拟输入系统中。(1)A/D转换原理 ①计数式A/D转换原理 记数式A/D转换线路比较简单,但转换速度比较慢。因此简单廉价的ADC多采用计数式。图8.46为计数式A/D转换的原理图。132 图8.46计数式A/D转换原理图133 ②逐次逼近式A/D转换原理逐次逼近式A/D转换既照顾了转换速度,又具有一定的精度,是目前应用最多的一种。逐次逼近式A/D转换器的转换原理图如图8.47所示。它主要由n位的逐次逼近寄存器SAR、n位的D/A转换器、比较器、控制时序及逻辑电路、输出缓冲寄存器五部分组成。图8.47逐次副近式A/D转换原理134 这种A/D转换采用对分搜索逐次比较、逐步逼近的原理进行转换,其最大的特点是用逐次逼近寄存器取代了计数式A/D转换中的加1计数器。 当转换器受到启动信号后,逐次逼近寄存器清0,通过内部D/A转换器使输出电压Vo为0,当启动信号结束后开始转换。在第一个时钟周期,控制电路使逐次逼近寄存器的最高位为“1”,其余为“0”,逐次逼近寄存器的数字量一方面作为输出用,另一方面经D/A转换器转换成模拟量Vo后,送到比较器,在比较器中与被转换的模拟电压Vi进行比较,控制逻辑根据比较器的输出进行判断,若Vi>Vo,则保留这一位为“1”;若Vi<Vo,则这一位清为“0”。最高位比较完后,在第二个时钟周期,控制电路再使逐次逼近寄存器的次高位置“1”,与其它位一起送入D/A转换器,转换后再送比较器与Vi比较,若Vi>Vo,则保留这一位为“1”;若Vi<Vo,则这一位清为“0”。如此一位一位地向低位比较下去,直到最后一位D0比较完毕为止。此时,发出转换结束信号表示转换结束。经过N次比较后,N位寄存器所存信息就是经过转换后与输入模拟量Vi对应的数字量,经过缓冲寄存器输出,即可得到A/D转换的结果。135 由此可见,逐次逼近寄存器从最高位开始逐位设置试探值,对于N位ADC只需要N个时钟周期即可完成转换,其转换速度比计数式A/D转换快得多,一般在几微秒到几百微秒之间。因此许多集成A/D转换芯片大多采用这种方法。136 ③双积分式A/D转换原理双积分式A/D转换的过程分为两个积分阶段:①固定积分时间对输入模拟电压Vin进行积分的阶段;②固定斜率对反极性标准电压VREF进行积分的阶段。如图8.48所示。图8.48双积分式A/D转换原理137 (2)A/D转换器的主要性能参数①分辨率(Resolution) 它表明A/D对模拟信号的分辨能力,由它确定能被A/D辨别的最小模拟量变化。一般来说,A/D转换器的位数越多,其分辨率则越高。实际的A/D转换器,通常为8,10,12,16位等。 ②量化误差(Quantizingerror)   在A/D转换中由于整量化产生的固有误差。量化误差在±1/2LSB(最低有效位)之间。 ③转换时间(Conversiontime) 转换时间是A/D完成一次转换所需要的时间。一般转换速度越快越好,常见有高速(转换时间<1us)、中速(转换时间<1ms)和低速(转换时间<1s)等。 ④绝对精度 对于A/D,指的是对应于一个给定量,A/D转换器的误差,其误差大小由实际模拟量输入值与理论值之差来度量。 ⑤相对精度 对于A/D,指的是满度值校准以后,任一数字输出所对应的实际模拟输入值(中间值)与理论值(中间值)之差。例如,对于一个8位0~+5V的A/D转换器,如果其相对误差为1LSB,则其绝对误差为19.5mV,相对误差为0.39%。138 8.4.2DAC0832数/模转换器DAC0832是一种相当普遍且成本较低的数/模转换器。该器件是一个8位转换器,它将一个8位的二进制数转换成模拟电压,可产生256种不同的电压值,DAC0832具有以下主要特性: ①满足TTL电平规范的逻辑输入 ②分辨率为8位 ③建立时间为1us ④功耗20mw ⑤电流输出型D/A转换器139 图8.49DAC0832的内部结构和引脚图140 一、DAC0832的内部结构与引脚图图8.49给出了DAC0832的内部结构和引脚图。DAC0832具有双缓冲功能,输入数据可分别经过两个锁存器保存。第一个是保持寄存器,而第二个DAC寄存器与D/A转换器相连。DAC0832中的锁存器的门控端LE输入为逻辑1时,数据进入锁存器;而当LE输入为逻辑0时,数据被锁存。DAC0832具有一组8位数据线D0~D7,用于输入数字量。一对模拟输出端IOUT1和IOUT2用于输出与输入数字量成正比的电流信号,一般外部连接由运算放大器组成的电流/电压转换电路。转换器的基准电压输入端VREF一般在-10V~+10V范围内。 各引脚的功能如下:141 D0~D7:8位数据输入端。:片选信号输入端。:两个写入命令输入端,低电平有效。:传送控制信号,低电平有效。IOUT1和IOUT2:互补的电流输出端。Rfb:反馈电阻,被制作在芯片内,与外接的运算放大器配合构成电流/电压转换电路。VREF:转换器的基准电压。VCC:工作电源输入端。AGND:模拟地,模拟电路接地点。DGND:数字地,数字电路接地点。142 二、DAC0832的工作模式DAC0832可工作在三种不同的工作模式。1.直通方式 当ILE接高电平,CS,WR1、WR2和XFER都接数字地时,DAC处于直通方式,8位数字量一旦到达D0~D7输入端,就立即加到D/A转换器,被转换成模拟量。在D/A实际连接中,要注意区分“模拟地”和“数字地”的连接,为了避免信号串扰,数字量部分只能连接到数字地,而模拟量部分只能连接到模拟地。这种方式可用于不采用微机的控制系统中。143 2.单缓冲方式 单缓冲方式是将一个锁存器处于缓冲方式,另一个锁存器处于直通方式,输入数据经过一级缓冲送入D/A转换器。如把WR2和XFER都接地,使寄存锁存器2处于直通状态,ILE接+5V,WR1接CPU系统总线IOW的信号,CS接端口地址译码信号,这样CPU可执行一条OUT指令,使CS和WR1有效,写入数据并立即启动D/A转换。3.双缓冲方式 即数据通过两个寄存器锁存后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。这种方式可在D/A转换的同时,进行下一个数据的输入,以提高转换速度。更为重要的是,这种方式特别适用于系统中含有2片及以上的DAC0832,且要求同时输出多个模拟量的场合。144 三、DAC0832与CPU的连接由于DAC0832内部含有数据锁存器,在与CPU相连时,使其可直接挂在数据总线上。DAC0832采用单缓冲方式与CPU的连接如图8.50所示。145 电路设计所要考虑的问题: ①从CPU送来的数据能否被保存DAC0832内部有二级锁存寄存器,从CPU送来的数据能被保存,不用外加锁存器,可直接与CPU数据总线相连。 ②二级输入寄存器如何工作 按题意采用单缓冲方式,即经一级输入寄存器锁存。假设我们采用第一级锁存,第二级直通,那么第二级的控制端WR2和XFER应处于有效电平状态,使第二级锁存寄存器一直处于打开状态。第一级寄存器具有锁存功能的条件是ILE、CS、WR1都要满足有效电平。为减少控制线条数,可使ILE一直处于高电平状态,控制WR1和CS端。 下面举例说明如何编写D/A转换程序。146 [例8.7]编写图8.51中DAC0832输出三角波的汇编程序,要求三角波的最低电压为0V,最高电压为5V。分析:软件设计所要考虑的问题: ①单缓冲方式下输出数据的指令仅需一条输出指令即可。 图8.50所示CS端与译码电路的输出端相连,其地址数既是选中该DAC0832芯片的片选信号,也是第一级寄存器打开的控制信号。 另外由于CPU的控制信号WR与DAC0832的写信号WR1相连,当执行OUT指令时,CPU的WR1写信号有效,与CS信号一起,打开第一级寄存器,输入数据被锁存。假设DAC0832地址为04A0H,输出0V电压程序如下:MOVAL,00H;设置输出电压值MOVDX,04A0H;DAC0832片选地址OUTDX,AL;输出数据,使DAC0832输出端得到0V模拟电压输出147 ②按题意产生三角波电压范围为0V~5V,那么所对应输出数据00H~FFH。所以三角波下降部分从FFH起减1,直到00H。三角波上升部分,从00H起加1,直到FFH。 相应的程序如下:MOVAL,FFH;设5V初值DOWN:MOVDX,04A0H;DAC0832片选地址OUTDX,AL;输出数据,使DAC0832输出端得到5V模拟电压,输出三角波最高点,下降段开始DECAL;输出值减1 CMPAL,00H;输出值到达0V?JNZDOWN;输出值未达到0V,则跳到DOWN UP:OUTDX,AL;输出模拟量到端口20H,三角波最低点,上升段开始INCAL;输出值加1 CMPAL,FFH;判别输出值是否到达5V JNZUP;输出值未达到5V则跳到UP JMPDOWN;输出值达到5V则跳到DOWN循环。148 图8.51DAC0832输出的波形图本例中DAC0832输出的三角波如图8.51所示。若8088的时钟频率为5MHz,则可计算出该三角波的周期大约为1.53ms,即频率约为654Hz。如果要进一步降低三角波的频率(增大其周期),可在每次D/A转换之后加入适当的延时。149 8.4.3ADC0809模/数转换器ADC0809是一种普遍使用且成本较低的、由National半导体公司生产的CMOS材料A/D转换器。它具有8个模拟量输入通道,可在程序控制下对任意通道进行A/D转换,得到8位二进制数字量。 其主要技术指标如下: ①电源电压:5V ②分辨率:8位 ③时钟频率:640kHZ ④转换时间:100us ⑤未经调整误差:1/2LSB和1LSB ⑥模拟量输入电压范围:0-5V ⑦功耗:15mW150 一、ADC0809的内部结构与引脚图图8.52给出了ADC0809转换器的内部结构和引脚图。图8.52ADC0809转换器的内部结构和引脚图151 图8.52(a)中ADC0809内部各单元的功能如下: ①通道选择开关 八选一模拟开关,实现分时采样8路模拟信号。 ②通道地址锁存和译码 通过ADDA、ADDB、ADDC三个地址选择端及译码作用控制通道选择开关。 ③逐次逼近A/D转换器 包括比较器、8位开关树型D/A转换器、逐次逼近寄存器。转换的数据从逐次逼近寄存器传送到8位锁存器后经三态门输出。 ④8位锁存器和三态门 当输入允许信号OE有效时,打开三态门,将锁存器中的数字量经数据总线送到CPU。由于ADC0809具有三态输出,因而数据线可直接挂在CPU数据总线上。152 图8.52(b)中各引脚功能如下:IN0~IN7:8路模拟输入通道。2-1、2-2、…、2-8:8位数字量输出端START:启动转换命令输入端,由1→0时启动A/D转换,要求信号宽度>100ns。OUTPUTENABLE:输出使能端,高电平有效。ADDA、ADDB、ADDC:地址输入线,用于选通8路模拟输入中的一路进入A/D转换。其中ADDA是LSB位,这三个引脚上所加电平的编码为000~111,分别对应IN0~IN7,例如,当ADDC=0,ADDB=1,ADDA=1时,选中IN3通道。ALE:地址锁存允许信号。用于将ADDA~ADDC三条地址线送入地址锁存器中。EOC:转换结束信号输出。转换完成时,EOC的正跳变可用于向CPU申请中断,其高电平也可供CPU查询。CLK:时钟脉冲输入端,要求时钟频率不高于640KHZ。REF(+)、REF(-):基准电压,一般与微机接口时,REF(-)接0V或-5V,REF(+)接+5V或0V。153 对ADC0809的控制过程是:第一步首先确定ADDA、ADDB、ADDC三位地址,决定选择哪一路模拟信号; 第二步使ALE端接受一正脉冲信号,使该路模拟信号经选择开关达到比较器的输入端; 第三步使START端接受一正脉冲信号,START的上升沿将逐次逼近寄存器复位,下降沿启动A/D转换;第四步EOC输出信号变低,指示转换正在进行。A/D转换结束,EOC变为高电平,指示A/D转换结束。此时,数据已保存到8位锁存器中。EOC信号可作为中断申请信号,通知CPU转换结束,可以读入经A/D转换后的数据。中断服务程序所要作的事情是:使OUTPUTENABLE信号变为高电平,打开ADC0809三态输出,由ADC0809输出的数字量传送到CPU。EOC信号也可作为查询信号,查询EOC端是否变为高电平状态。若为低电平状态等待,若为高电平状态,使OUTPUTENABLE信号变为高电平,打开ADC0809三态门输出数据。154 二、ADC0809与CPU的连接ADC0809与CPU的连接需考虑的问题如下:(1)ADDA、ADDB、ADDC三端可直接连接到CPU地址总线A0、A1、A2三端,但此种方法占用的I/O口地址多。每一个模拟输入端对应一个口地址,8个模拟输入端占用8个口地址,对于微机系统外设资源的占用太多,因而一般ADDA、ADDB、ADDC分别接在数据总线的D0、D1、D2端,通过数据线输出一个控制字作为模拟通道选择的控制信号。(2)ALE信号为启动ADC0809选择开关的控制信号,该控制信号可以和启动转换信号START同时有效。(3)ADC0809芯片只占用一个I/O口地址,即启动转换用此口地址,输出数据也用此口地址,区别是启动转换还是输出数据用IOR,IOW信号来区分。 硬件电路接线如图8.53所示。155 图8.53ADC0809和PC机系统总线的接线图156 下面举例说明如何编写A/D转换程序。[例8.8]利用图8.53,采用无条件传送方式,编写一段轮流从IN0~IN7采集8路模拟信号,并把采集到的数字量存入ADDBUF开始的8个单元内的程序。MOVDI,OFFSETADDBUF;设置存放数据的首址MOVBL,08H;采集8次计数器MOVAH,00H;选0通道AA1∶MOVAL,AH MOVDX,ADPORT;设置ADC0809芯片地址OUTDX,AL;Yi和IOW为低电平,使ALE、START有效,选择模拟通道0 MOVCX,0050H WAIT∶LOOPWAIT;延时,等待A/D转换INAL,DX;Yi和IOR为低电平,使OUTPUTENABLE有效,输入数据,见图8.52MOV[DI],AL;保存数据INCAH;换下一个模拟通道INCDI;修改数据区指针DECBL JNZAA1157 本章小结本章对可编程并行接口芯片8255A、可编程串行接口芯片8251A、可编程定时/计数器芯片8253和A/D、D/A转换芯片的相关概念、基本结构、工作原理作了详细地阐述。 通过本章的学习,应该掌握并行通信的概念和8255A的基本结构与工作原理,了解其工作方式,能够使用8255A设计简单的应用电路;掌握串行接口的概念,串行通信方式,串行数据传送模式;掌握8251A的基本结构与工作原理,能够使用8251A设计简单电路;掌握8253的基本结构与工作原理,掌握其工作方式及其应用,能够使用8253设计简单的定时/计数电路;这三种芯片都是可编程接口芯片,要求掌握初始化编程的步骤。 通过本章的学习,应该掌握D/A转换的工作原理及技术指标,熟悉D/A转换芯片;掌握A/D转换的工作原理及技术指标,熟悉A/D转换芯片。158'

您可能关注的文档