版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章用接口器件7.1可编程并行接口82557.2可编程定时器82537.3可编程串行通信接口16550习题7.1可编程并行接口82557.1.1引脚及内部结构1.外部引脚8255的外部引脚如图7.1所示。
图7.1可编程并行接口8255引脚图
D0~D7:双向数据信号线。用来传送数据和控制字。
RD:读信号线。与其他信号线一起实现对8255接口的读操作。通常接系统总线的IOR信号。
WR:写信号线。与其他信号一起实现对8255接口的写操作。通常接系统总线的IOW。
CS:片选信号线。当它为低电平(有效)时,才能选中该8255芯片,也才能对8255进行操作。
A0、A1:口地址选择信号线。8255内部有3个口(即A口、B口、C口)和一个控制寄存器,它们可由程序寻址。A0、A1的不同编码可分别寻址上述3个口和一个控制寄存器,具体规定如下:
A1 A0
选择
0 0 A口
0 1 B口
1 0 C口
1 1 控制寄存器
通常,在8088系统中,A0、A1分别接系统总线的A0、A1,它们与一起来决定8255的接口地址。而在8086系统中,A0、A1分别接系统总线的A1、A2。
RESET:复位输入信号。此端上的高电平可使8255复位。复位后,8255的A口、B口和C口均被定义为输入状态。
PA0~PA7:A口的8条输入/输出信号线。该口的这8条线工作于输入、输出还是双向(输入/输出)方式可由软件编程来决定。
PB0~PB7:B口的8条输入/输出信号线。利用软件编程可指定这8条线是输入还是输出。
PC0~PC7:C口的8条线。根据8255的工作方式,可将C口的这8条线用作数据的输入或输出线,也可以用作控制信号的输出线或状态信号的输入线。
2.内部结构8255的内部结构框图如图7.2所示。
图7.28255的内部结构框图
7.1.2工作方式
1.工作方式0(基本输入/输出方式)在此方式下,可分别将A口的8条线、B口的8条线、C口高4位对应的4条线和C口低4位对应的4条线定义为输入或输出。因为上述4部分的输入或输出是可以独立定义的,故它们的输入、输出可有16种不同的组合,例如有A口、B口、C口高4位、C口低4位均为输出;A口为输入,B口、C口高4位以及C口低4位为输出等。在这种方式下,定义为输出的口均可锁存数据,而定义为输入的口可缓冲数据但无锁存能力。而且,在方式0下,C口还有按位置位和复位的能力。有关C口的按位操作见后面的叙述。
表7.18255在方式0下的输入、输出组合
A组B组A口(PA0~PA7)C口(PC4~PC7)B口(PB0~PB7)C口(PC0~PC3)入入入入入入入出入入出入入入出出入出入入入出入出入出出入入出出出出入入入出入入出出入出入出入出出出出入入出出入出出出出入出出出出
2.工作方式1(选通输入/输出方式)在这种方式下,A口和B口仍作为数据的输出口或输入口,同时还要利用C口的某些位作为控制和状态信号。当8255工作于方式1时,A口和B口可任意由程序指定为输入口还是输出口。为了阐述问题方便,我们分别以A口、B口均为输入或均为输出加以说明。将来在实际应用时,A口、B口的输入或输出完全可以由软件编程来指定。
1)方式1下A口、B口均为输出为了使A口或B口工作于方式1下,必须利用C口的6条线作为控制和状态信号线。如图7.3所示,在方式1下用A口或B口输出时,所用到的C口线是固定不变的,A口使用PC3、PC6和PC7,而B口使用PC0、PC1和PC2。
图7.3方式1下,A、B口均为输出的信号定义
C口提供的信号功能如下:
(1)OBF为输出缓冲器满信号,低电平有效。利用该信号告诉外设,在规定的口上已由CPU输出了一个有效数据,外设可从此接口获取该数据。
(2)ACK为外设响应信号,低电平有效。该信号用来通知接口,外设已将数据接收并使OBF=1。
(3)INTR为中断请求信号,高电平有效。当外设接收到一个数据后,由此信号通知CPU,刚才的输出数据已经被接收,可以再输出下一个数据。
(4)INTE为中断允许状态。由图7.3可以看到,A口和B口的INTR均受INTE的控制。只有当INTE为高电平时,才有可能产生有效的INTR。
图7.4方式1下的数据输出时序
2)方式1下A口、B口均为输入与方式1下A、B两口均为输出类似,为实现选通输入,同样要利用C口的信号线。其定义如图7.5所示。
图7.5方式1下A、B口均为输入时的信号定义
在端口为输入时所用到的控制信号的定义如下:
(1)STB为低电平有效的输入选通信号,它由外设提供。利用该信号可将外设数据锁存于8255口的输入锁存器中。
(2)IBF为高电平有效的输入缓冲器满信号。当它有效时,表示已有一个有效的外设数据被锁存于8255口的锁存器中。可用此信号通知外设数据已被锁存于接口中,尚未被CPU读走,暂不能向接口输入数据。
(3)INTR为中断请求信号,高电平有效。对于A、B口可利用C口位操作分别使PC4=1或PC2=1,此时若IBF和STB均为高电平,则可使INTR有效,向CPU提出中断请求。也就是说,当外设将数据锁存于接口之中,且又允许中断请求发生时,就会产生中断请求。
(4)INTE为中断允许状态。见图7.5,在方式1下输入数据时,INTR同样受中断允许状态INTE的控制。A口的INTEA是由PC4控制的,当它为1时允许中断,当它为0时禁止中断。B口的INTEB是由PC2控制的。利用C口的按位操作即可实现该控制。
方式1下数据输入的过程为:当外设有数据需要输入时,将数据送到8255口上,并利用STB脉冲将数据锁存,同时产生INTR信号并使IBF有效;有效的IBF通知外设数据已锁存,中断请求要求CPU从8255的端口上读取数据;CPU响应中断,读取数据后使IBF和INTR都变为无效。上述过程可用图7.6的简单时序图进一步说明。
图7.6方式1下的数据输入时序
3.工作方式2(双向输入/输出方式)这种工作方式只有8255的A口才有。在A口工作于双向输入/输出方式时,要利用C口的5条线才能实现。此时,B口只能工作在方式0或方式1下,而C口剩下的3条线可作为输入/输出线使用或用作B口工作在方式1下的控制线。
A口工作于方式2时,各信号的定义如图7.7所示。图中未画B口和C口的其他引线。
图7.7方式2下的信号定义
当A口工作在方式2时,其控制信号OBF、ACK、STB、IBF及INTR与前面的叙述是一样的,不同之处主要有:
(1)在方式2下,A口既作为输出又作为输入,因此,只有当ACK有效时,才能打开A口输出数据三态门,使数据由PA0~PA7输出。当ACK无效时,A口的输出数据三态门呈高阻状态。
(2)该方式下,A口的输入、输出均具备锁存数据的能力。CPU写A口时,数据锁存于A口,外设的STB也可将输入数据锁存于A口。
(3)在这种方式下,A口的数据输入或数据输出均可引起中断。由图7.7可见,输入或输出中断还受到中断允许状态INTE2和INTE1的影响。INTE2是由PC4控制的,而INTE1是由PC6控制的。利用C口的按位操作,通过PC4或PC6的置位或复位,可以允许或禁止相应的中断请求。
A口在方式2下的工作过程简要叙述如下。工作在方式2的A口,可以认为是按方式1下的输入和输出进行分时工作的结果。其工作过程和方式1的输入和输出过程一样。值得注意的是,在这种工作方式下,8255与外设之间是通过A口的8条线PA0~PA7交换数据的。在PA0~PA7上,可能出现8255A口输出数据到外设,也可能出现外设通过PA0~PA7将数据传送给8255。这就要防止PA0~PA7上的数据线竞争问题。在方式2下工作的时序如图7.8所示。
图7.8方式2下工作的时序图
7.1.3方式控制字与状态字
1.控制字
8255的控制字由8位二进制数构成,各位的控制功能如图7.9所示。
图7.98255的控制字格式
当控制字的bit7=1时,控制字的bit6~bit3这4位用来控制A组,即A口的8位和C口的高4位。而控制字的低3位bit2~bit0用来控制B组,包括B口的8位和C口的低4位。当控制字的bit7=0时,指定该控制字仅对C口进行位操作——按位置位或按位复位。对C口按位置位/复位操作的控制字格式如图7.10所示。如前所述,在必要时可利用C口的按位置位/复位控制字来使C口的某一位输出0或1。
图7.10C口的按位操作控制字格式
2.状态字当8255的A口、B口均工作在方式1或A口工作在方式2时,通过读C口的状态,可以检测A口和B口的状态。当8255的A口和B口均工作在方式1的输入时,由C口读出的8位信息的意义如图7.11所示。
图7.11A、B口均为方式1输入时的状态字
当8255的A口和B口均工作在方式1的输出时,由C口读出的状态字各位的意义如图7.12所示。
图7.12A、B口均为方式1输出时的状态字
当规定8255的A口工作于方式2时,由C口读入的状态字如图7.13所示。图中状态字的D0~D2由B口的工作方式来决定。当B口工作在方式1输入时,其定义同图7.11的D0~D2;当B口工作在方式1输出时,其定义如图7.12的D0~D2。
图7.13A口在方式2工作时的状态字
7.1.4寻址与连接使用
8255占外设编址的4个地址,即A口、B口、C口和控制寄存器各占一个外设接口地址。对同一个地址分别可以进行读/写操作。例如,读A口可将A口的数据读出;写A口可将CPU的数据写入A口并输出。利用8255的片选信号、A0、A1以及读/写信号,即可方便地对8255进行寻址。这些信号的功能如表7.2所示。
表7.28255的寻址
图7.14PC机中8255的连接
由图7.14可见,8255与8088总线的连接是比较容易的,只是图中为了简化起见未画出AEN的形成。这里我们可以认为只要CPU正常地执行指令,AEN就为低电平。这样,在图7.14中,8255是由A9~A0这10条地址线来决定其地址的,它所占的地址为380H~383H。用全部A0~A15地址线连接两片8255构成外设接口,其连接图如图7.15所示。由图中的译码电路可以看到,两片8255的接口地址分别为FBC0H~FBC3H和FBC4H~FBC7H。
图7.15两片8255连接到8088系统总线上
7.1.5初始化与应用举例
8255可编程接口芯片的初始化十分简单,只要将控制字写入8255的控制寄存器即可实现。现在举例说明8255的应用,即利用8255来实现打印机的接口。例7.1
利用8255方式0实现打印机接口。
8255与总线的连接如图7.14所示,
8255工作在方式0下时,与打印机的连接如图7.16所示。
图7.168255与打印机的连接
图7.17是打印机的工作时序图。接口将数据传送到打印机的D0~D7,利用一个负的锁存脉冲(宽度不小于1μs)将其锁存于打印机内部,以便打印机进行处理。同时,打印机送出高电平的BUSY信号,表示打印机正忙。一旦BUSY变低,表示打印机又可以接收下一个数据。
图7.17打印机的工作时序
为了与打印机接口,A组、B组均工作在方式0下,而通过A口的PA0~PA7与打印机的D0~D7相连接;C口的PC6用作输出,与连接;PC1用作输入,与STROBE打印机的忙信号BUSY连接。为此,应初始化A口为输出,C口的高4位为输出,C口的低4位为输入,B口保留,暂时未用。初始化程序如下:
INIT55:MOVDX,0383HMOVAL,10000011BOUTDX,ALMOVAL,00001101BOUTDX,AL
以上程序在对8255进行初始化的同时,通过C口按位操作控制字,使PC6输出为1。若利用此打印机接口打印一批字符,且字符串长度在当前数据段的BLAK单元中,要打印的字符在由DATA单元开始的当前数据段中顺序排列,则打印程序如下:
PRINT: MOVAL,BLAKMOVCL,ALMOVSI,OFFSETDATAGOON:
MOVDX,0382HPWAIT:INAL,DXANDAL,02HJNZPWAIT ;等待不忙MOVAL,[SI]MOVDX,0380HOUTDX,AL ;送数据MOVDX,0382HMOVAL,00HOUTDX,ALMOVAL,40HOUTDX,AL ;送STROBE脉冲INCSIDECCLJNZGOONRET
例7.2
利用8255方式1以查询方式实现打印机接口。若利用图7.14所示的8255的接口地址,在方式1下,8255与打印机的连接如图7.18所示。
图7.188255与打印机的另一种连接
在8255的A口工作于方式1时,利用查询8255工作状态的方法可以将以DATA为起始单元的一批字符输出到打印机(输出数量由BLAK单元的内容决定),初始化程序如下:
INIT8255:MOVDX,0383HMOVAL,10100000B;A口方式1,输出
OUTDX,AL一批字符的输出控制程序如下:POLLPRINT:MOVAL,BLAKMOVCL,ALMOVSI,OFFSETDATAGOON:MOVDX,0382HPWAIT:INAL,DXANDAL,80H;检测
JZPWAITMOVAL,[SI]MOVDX,0380HOUTDX,AL;送数据
INCSIDECCLJNZGOONRET
例7.3
利用8255方式1以中断方式实现打印机接口。在图7.18中,8255的A口工作在方式1下,此时A口的PA0~PA7用作数据输出。利用OBF的下降沿触发一单稳触发器,产生打印机所需要的选通脉冲STROBE。打印机产生的ACK加到8255上,产生有效的INTR输出。此信号可加到8259的八个中断请求(IR)输入端之一。为了初始化8255,首先应确定其控制字。A口工作于方式1的输出方式;B口和C口的其余线均可用控制字的规定位来定义。为简单起见,在本例中我们规定B口工作于方式0;C口的PC0、PC1、PC2、PC4、PC5这5条线均定义为输出,故控制字为10100000B,即A0H。
为了在打印机输出低电平的ACK时,通过8255的PC3产生有效的中断请求信号INTR,必须使A口的中断请求允许状态INTE=1。使A口的中断允许状态为1,实际上就是通过按位复位/置位操作将PC6置1。为此,可将0×××1101B写入8255的控制寄存器,选择×××三位均为0,故按位操作的控制字为0DH。
下面是对8255进行初始化的程序:
MOVDX,0383HMOVAL,10100000BOUTDX,ALMOVAL,00001101BOUTDX,AL将图7.18中8255的PC3(INTRA)引脚接至图6.36中8259的IR0,采用与6.5.4节中相同的对8259及中断向量表进行初始化的程序,则当8255的INTRA有效时,在中断允许的情况下,CPU将执行以下中断处理程序(设要打印输出的数据存于SI指针指示的存储单元中,CL中记录将要输出的数据量,执行一次中断,输出一个数据到打印机):
OUTPRINT:PUSHDXPUSHAXMOVDX,0380HMOVAL,[SI]OUTDX,ALINCSIDECCLMOVDX,0FF00HMOVAL,20HOUTDX,AL POPAXPOPDX IRET7.2可编程定时器82537.2.1引脚及内部结构可编程定时器8253的外部引脚如图7.19所示,相应的内部结构框图如图7.20所示。
图7.19可编程定时器8253的引脚图
图7.20可编程定时器8253的内部结构框图
8253与总线相连接的引脚主要有:
D0~D7:双向数据线,用以传送数据和控制字。计数器的计数值亦通过此数据总线进行读/写。
CS:输入信号,低电平有效。当它有效时,才能选中该定时器芯片,实现对它的读或写。
RD:读控制信号,低电平有效。
WR:写控制信号,低电平有效。
以上两信号输入到8253上,与其他信号一起,共同完成对8253的读/写操作。
A0、A1为8253的内部计数器和一个控制寄存器的编码选择信号,其功能如下:A1 A00 0 可选择计数器0计数寄存器0 1 可选择计数器1计数寄存器1 0 可选择计数器2计数寄存器1 1 可选择控制寄存器
A0、A1与其他控制信号(如CS、RD、WR)共同实现对8253的寻址。细节将在后面说明。
CLK0~2:每个计数器的时钟输入端。计数器对此时钟信号进行计数。CLK的最高频率可达5MHz。
GATE0~2:门控信号,即计数器的控制输入信号,用来控制计数器的工作。
OUT0~2:计数器输出信号,用来产生不同工作方式下的输出波形。
7.2.2工作方式从图7.20的内部结构可以看到,可编程定时器8253的内部有3个相同且独立的16位计数器,每个计数器对各自的CLK输入信号进行减法计数,在每一个时钟周期计数器减1,3个计数器都能够以6种方式工作。图7.21显示出8253分别在6种方式下工作时的时序。
图7.218253的6种工作方式时序图
1.方式0(计数结束产生中断)当设定方式0后,计数器的输出OUT变低。在GATE信号为高电平(允许计数)时,写入计数初值N,输出OUT保持低,并在下一个CLK脉冲的下降沿将计数初值从计数初值寄存器送到减1计数器中,启动计数器工作。当计数减到零,即计数结束时,输出OUT在保持了N+1个CLK时钟周期的低电平后变高。该输出信号即可以作为中断请求信号来使用。如果在计数过程中修改了计数值,则写入第一个字节后使原先的计数停止,写入第二个字节后开始以新写入的计数值重新计数。采用方式0时,计数过程受计数器的门控信号GATE的控制。当GATE为高电平时,允许计数;当GATE为低电平时,禁止计数,输出不变;若再次允许计数,则计数继续进行。方式0可用于事件计数。
2.方式1(可编程单稳)当设定方式1、写入计数值N后,计数器的输出OUT变高。在门控信号GATE的上升沿出现时计数器被启动,计数器的OUT输出低电平。计数结束时,OUT输出高电平。这样就可以从计数器的OUT端得到一个由GATE的上升沿开始到计数结束为止的宽度为N个CLK时钟周期的负脉冲。若想再次获得一个所希望宽度的负脉冲,可用GATE上升沿重新触发一次计数器,或重新装入计数值后再用GATE上升沿触发计数器。
如果在形成单个负脉冲的计数过程中改变了计数值,则不会影响正在进行的计数。新的计数值只有在前面的OUT负脉冲形成后又出现GATE上升沿时才起作用。但是,若在形成单个负脉冲的计数过程中又出现了新的GATE上升沿,则当前计数停止,而后面的计数以新装入的计数值开始工作。这时的负脉冲宽度将包括前面未计完的部分,所以会加宽。
3.方式2(频率发生器)在方式2下,写入方式控制字后,计数器OUT输出高电平。在GATE信号为高电平(允许计数)时,写入计数初值N,输出OUT保持高,并在下一个CLK脉冲的下降沿将计数初值送入减1计数器中,启动计数器工作。计数开始后,计数器的输出OUT将以N倍的CLK时钟周期为输出周期,周期性地输出一个CLK时钟周期宽的负脉冲。在此方式下,计数周期数应包括负脉冲所占的那一个时钟周期。也就是说,计数减到1时开始送出负脉冲,并再次用计数初值加载计数器,开始新一轮计数。
在这种方式下,门控信号GATE可用作电平控制信号,当GATE为高电平时,允许计数器计数,当GATE为低电平时,暂停计数并强迫OUT输出高电平;门控信号GATE也可用作边沿控制信号,当GATE由低变高时,GATE的上升沿使计数器被重新加载计数初值,启动计数重新开始。当计数通道用作对外部事件计数时,GATE的正跳变可用作外部事件的同步控制信号。在计数过程中,若改变计数值,则不影响当前的计数过程,但在下一轮计数时,将采用新的计数值。利用方式2,通过设置不同的计数值可达到对CLK时钟脉冲的分频,而分频结果就是OUT输出;也可以利用OUT输出产生实时钟中断。
4.方式3(方波发生器)在这种方式下,可以从OUT得到对称的方波输出。当装入的计数值N为偶数时,前N/2计数过程的OUT为高电平,后N/2计数过程的OUT为低电平,如此这般一直进行下去。若N为奇数,则前(N+1)/2计数期间的OUT保持高电平,后(N-1)/2计数期间的OUT为低电平。在此方式下,当GATE为高电平时,OUT输出对称方波;当GATE为低电平时,强迫OUT输出高电平;当GATE由低变高出现正跳变时,计数器被重新以初始计数值启动计数。当计数通道用作对外部事件计数时,GATE正跳变可用作外部事件的同步控制信号。在产生方波过程中,若装入新的计数值,则方波的下一个电平将反映新计数值所规定的方波宽度。利用方式3,8253除了可以作为方波发生器外,还可以作为波特率发生器、实时钟中断产生器。
5.方式4(软件触发选通)设置此方式后,输出OUT立即变为高电平。一旦装入计数值,计数立即开始。当经过N个CLK时钟周期计数结束后,由OUT输出一个宽度为一个时钟周期的负脉冲。注意:计数的启动并不受GATE的控制。此方式同样受GATE信号的控制。只有当GATE为高电平时,计数才进行;当GATE为低电平时,禁止计数。若在计数过程中装入新的计数值,则计数器从下一时钟周期开始以新的计数值进行计数。
6.方式5(硬件触发选通)设置此方式后,OUT输出为高电平。GATE的上升沿使计数开始。当经过N个CLK时钟周期计数结束后,由输出端OUT送出一宽度为一个时钟周期的负脉冲。在此方式下,GATE电平的高低不影响计数,计数由GATE的上升沿启动。若在计数结束前又出现了GATE上升沿,则计数从头开始。利用这种计数情形可实现电源掉电检测,即只有在电源掉电时,OUT端才会结束负脉冲。从8253的6种工作方式中可以看到,门控信号GATE十分重要,而且对不同的工作方式,其作用不一样。现将各种方式下GATE的作用列于表7.3中。
表7.3GATE信号功能表
7.2.3控制字
图7.228253的控制字格式7.2.4寻址与连接
1.寻址
8253占用4个接口地址,地址由CS、A0、A1来确定。同时,再配合RD、WR控制信号,可以实现对8253的各种读/写操作。上述信号的组合功能由表7.4来说明。
表7.4各寻址信号组合功能
当对8253的计数器进行读操作时,可以读出计数值,具体实现方法有如下两种:
(1)在计数器停止计数时读计数值。先写入控制字,规定好RL1和RL0的状态,也就是规定好读一个字节还是读两个字节。若其编码为11,则一定读两次,先读出计数值低8位,再读出高8位。若只读一次同样会出错。为了使计数器停止计数,可用GATE门控信号或自己设计的逻辑电路。
(2)在计数过程中读计数值。这时可读出当前的计数值而不影响计数器的工作。为做到这一点,首先在8253中写入一个特定的控制字:SC1SC000××××,即锁存命令。其中,SC1和SC0与图7.22中的定义一样,后面两位刚好定义RL1和RL0为00。将此控制字写入8253后,就可将选中的计数器的当前计数值锁存到计数锁存器中。而后,利用读计数器操作——两条输入指令即可把16位计数值读出。
2.连接为了用好8253,读者必须能熟练地将它连接到系统总线上。图7.23就是8253与8088系统总线连接的例子。
图7.238253与8088系统总线的连接
图7.24是8253用于PC机系统的例子。在这里,采用的仍然是外设接口地址的部分译码方式。译码器74138的控制端G1由5个信号译码得来。当CPU执行程序时,译码输出为高电平,保证G1输入有效。图中的HRQ为DMA请求,高电平有效。
图7.24PC机中8253的连接简图
7.2.5初始化与应用举例由于8253每个计数器都有自己的地址,控制字中又有专门两位来指定计数器,因此8253的初始化编程十分灵活方便。对计数器的编程实际上可按任何顺序进行。也就是说,不必一定按照计数器0、1、2的顺序初始化。实际使用中经常采用以下两种初始化顺序:
(1)逐个对计数器进行初始化。对某一个计数器先写入方式控制字,接着写入计数值(一个字节或两个字节),如图7.25所示。图中表示的是写入两个字节计数值的情况。图7.25一个计数器的初始化顺序
(2)先写所有计数器的方式字,再装入各计数器的计数值,其过程如图7.26所示。
图7.26另一种初始化编程顺序
例7.4IBM-PC机的BIOS中对8253的初始化例程。图7.24是简化了的IBM-PC机的8253连接图。在IBM公布的软件BIOS中,有专门对8253初始化的程序。我们摘录该段程序如下:MOVAL,36H ;计数器0,双字节,方式3,十六进制计数OUT43H,AL ;写入控制寄存器MOVAL,0OUT40H,AL ;写低字节;OUT40H,AL ;写高字节
程序中用0000H作为计数值。此时计数器0的计数值最大,为65536。以上是初始化计数器0的程序。由于规定8253工作在方式3,因而在OUT0输出端可以获得对称方波。下面是对计数器1的初始化程序。MOVAL,54H
;计数器1,只写低字节,方式2,二进制计数OUT43H,AL ;写入控制寄存器MOVAL,18 ;将低字节计数值18写入计数器1OUT41H,AL计数器的输入时钟是由PCLK二分频得到的,大约为1.19318MHz。该段程序将计数器1初始化为方式2,并且将计数值设置为18,则计数器1工作于对时钟进行18次分频的状态下,大约15μs输出一个负脉冲。在该系统中,用它产生对DMAC的总线请求,实现大约每15μs一次的动态存储器的刷新操作。下面是对计数器2的初始化程序:
MOVAL,0B6H ;选择计数器2,写双字节,方式3,二进制计数OUT43H,AL ;装入控制寄存器MOVAX,533HOUT42H,AL ;送低字节MOVAL,AHOUT42H,AL ;装入高字节
例7.58253应用分析。下面我们以图7.23所示的连接图为例,写出8253的初始化程序。请读者分析此程序的初始化顺序以及各计数器的工作方式。
SET8253: MOVDX,0FF07H MOVAL,36HOUTDX,ALMOVAL,71HOUTDX,ALMOVAL,0B5HOUTDX,ALMOVDX,0FF04HMOVAL,0A8HOUTDX,ALMOVAL,61HOUTDX,ALMOVDX,0FF05HMOVAL,00HOUTDX,ALMOVAL,02HOUTDX,ALMOVDX,0FF06HMOVAX,0050HOUTDX,ALMOVAL,AHOUTDX,AL
例7.6
电源掉电检测。我们目前使用的220V电源为50Hz交流电(国外通常使用110V、60Hz交流电),它通常作为微机系统的系统电源。当系统电源因各种原因出现故障时,为了保护系统的工作状态,需要在备用电源的支持下对重要信息进行保护等处理,以便系统恢复正常供电后能够继续原来的工作,这就需要进行电源掉电检测。
利用8253实现电源掉电检测的设计思想是,利用电源信号经检波、整流生成8253的GATE,这样GATE信号每20ms/16.67ms(对应50Hz/60Hz)产生一次脉冲。只要使计数值N取得足够大,在方式1下,使得计数器在20ms(16.67ms)内始终不能减到0,这样,不断出现的GATE脉冲上升沿就会使8253计数器不断被重启计数,使OUT输出一直维持为0,从而不能对8086CPU产生NMI。当电源出现故障时,GATE信号不再产生,计数器最终会计数到0,从而使OUT输出为1,产生对8086CPU的掉电中断NMI。
若CLK为2.4576MHz,GATE在20ms内产生一个触发信号,即GATE信号周期为49152个时钟周期,则应取计数值N>C000H=49152。使图7.27电路有效工作的8253初始化程序如下(设8253的I/O地址为200H~207H中的偶地址):
MOVDX,0206HMOVAL,00110010B
;选计数器0,16位计数长度,方式1,二进制计数OUTDX,ALMOVDX,0200HMOVAL,02H;取计数值N=C002HOUTDX,ALMOVAL,C0HOUTDX,AL图7.27电源掉电检测电路
7.3可编程串行通信接口165507.3.1异步串行通信及数据格式微机与外设(包括其他微机)之间通常以两种方式通信,即串行通信和并行通信。并行通信是指将构成一组数据的各位同时传送,例如8位数据或16位数据并行传送。串行通信是指将数据一位接一位地传送。并行通信利用并行接口予以实现,串行通信利用串行(通信)接口来实现。并行与串行通信各有其优缺点。一般地说,串行通信使用的传输线少,传送距离远,传输速率比较低,而并行通信与此相反。故远距离通信通常采取串行传输实现。
在串行通信中,有两种最基本的通信方式:同步通信和异步通信。所谓同步通信,是指在约定的波特率(每秒钟传送的位数)下,发送端和接收端的频率保持一致(同步)。因为发送和接收的每一位数据均保持同步,故传送信息的位数几乎不受限制,通常一次通信传送的数据有几十到几百个字节。这种通信的发送器和接收器比较复杂,成本较高。异步通信是指收、发端在约定的波特率下,不需要有严格的同步,允许有相对的迟延,即两端的频率差别在1/10以内,不需要时钟或定时信号,就能正确地实现通信。异步通信的数据格式如图7.28所示。
图7.28异步通信的数据格式
异步通信传送一个字符时,由一位低电平的起始位开始,接着传送数据位,数据可以是5位、6位、7位或者8位,由程序指定。在传送时,按低位在前,高位在后的顺序传送。数据位的后面可以加上一位奇偶校验位,也可以不加这一位,由程序来指定。最后传送的是一位、一位半或两位高电平的停止位。这样,一个字符就传送完毕了。在传送两个字符之间的空闲期间,要由高电平1来填充。异步通信每传送一个字符,要增加大约20%的附加信息位,这必然会降低传送效率。但是,这种通信方式可靠,实现容易,故广泛地应用于各种微机系统中。
7.3.2串行通信接口16550
1.功能描述
16550与Intel微处理器完全兼容,用在PC机的COM端口,可以0~1.5Mb/s工作。16550UART具有并串转换功能,它可以将所接收的并行数据(5/6/7/8位)转换成串行格式输出,也可以将所接收的串行格式数据转换成并行数据输出,所以它被用于需要串并转换的通信线路中。它具有中断请求的能力,可以支持微机系统与串行外设以中断方式进行通信。它可以直接连接控制Modem(调制解调器),使得通信可以更方便地在电话系统或无线通信系统中实现。它内部有一个可编程波特率产生器,可以控制串行通信的速度。特别是它内部具有的接收和发送FIFO,使它更容易与微处理器之间实现高速数据通信。
1)数据的发送与接收
16550UART有两个完全独立的部分:接收器和发送器,这使得16550能够以单工、半双工、双工模式进行数据通信。在发送和接收信息时,两个独立的16字节接收FIFO和发送FIFO缓冲器可以一次缓冲多至16字节的数据,起到协调收、发方速度,提高CPU效率的作用。
16550的串行发送器由发送保持寄存器(THR)与发送移位寄存器组成(TSR)。当THR或TSR为空时,写THR,将使数据总线的内容传入THR。THR中待发送的数据会自动并行送到TSR。TSR在发送时钟的激励下,一位接一位地将数据从SOUT发送出去。在发送过程中,它会按照事先由程序规定好的格式加上启动位、校验位和停止位。在微处理器等待发送器发送数据之前,16550会保持16字节数据。
由通信对方送来的数据在接收时钟RCLK的作用下,通过SIN逐位进入接收移位寄存器(RSR)。当RSR接收到一个完整的数据后,会立即自动将数据并行传送到接收缓冲寄存器(RBR)中。读RBR,接收的数据会通过数据总线进入微处理器。当16550接收了16字节数据后,它会告知微处理器。
2)FIFO工作模式
FIFO可以采用两种模式工作:查询模式与中断模式。当FIFO控制寄存器(FCR)的bit0=1时,使中断控制寄存器(ICR)的bit3~0=0000,则可将FIFO设置为以查询模式工作。因为接收器和发送器是独立控制的,所以两者或其一利用线路状态寄存器(LSR)可以在查询模式下工作。当允许接收FIFO(FCRbit0=1)且允许中断(ICRbit0=1)时,以下状况将引起接收中断:●
当FIFO已达到被编程的触发级别时,接收数据有效中断将发送到CPU;当FIFO降到被编程的触发级别之下时,接收中断将被清除。
●当FIFO触发级别达到时,中断状态寄存器(ISR)的接收数据有效指示也会引起该中断;类似地,当FIFO降到触发级别之下时,该中断被清除。●
字符一旦从移位寄存器传送到接收器FIFO,数据就绪位(LSRbit0)就置位;当FIFO空时,该位复位。
2.引脚
16550UART芯片有两种封装形式:40引脚DIP(DualIn-LinePackage)或44引脚PLCC(PlasticLead-lessChipCarrier),图7.29显示了40引脚DIP封装的16550UART芯片的外部引脚。
图7.2916550UART芯片的外部引脚
表7.5加电复位状态
3.内部寄存器
1)线路控制寄存器(LineControlRegister,LCR)线路控制寄存器是一个8位的寄存器,其主要功能如图7.30所示,它主要用于决定在串行通信时所使用的数据通信格式。其中:L1、L0选择接收与发送数据的位数;S选择停止位数,当S=1时,对5位数据使用1.5停止位,对6/7/8位数据使用2停止位;ST、P、PE决定校验状况,见表7.6;SB确定是否从SOUT引脚发送一个间断(一个间断定义为至少连续两帧逻辑0数据);应特别注意该控制字的DL位,当允许对波特率产生器进行除数锁存时,应将该字的DL置1,而在读/写其他寄存器时,应使其为0。
图7.3016550线路控制寄存器
表7.6ST和校验位的操作
2)波特率产生器(BaudRateGenerator,BRG)波特率产生器用于提供串行传输时钟。通过改变波特率产生器中的除数锁存器的内容,可以改变串行通信的波特率。除数值由下式确定:
表7.7与波特率对应的除数
3)线路状态寄存器(LineStatusRegister,LSR)线路状态寄存器是一个8位寄存器,提供了UART和远程UART之间传输数据的状态,包含了接收器和发送器的错误条件和状态信息,其各位定义如图7.31所示。其中:
DR为数据就绪标志,一个字节一旦出现在接收FIFO,该位就置1。
OE是超限错标志,它表示数据已超过内部的接收FIFO缓冲器。超限错仅出现在接收FIFO满之前软件从UART读数据失败时。
图7.31线路状态字
PE为奇偶校验错标志,它表示接收的数据中包含错误的校验。通常在信息传输中遇到噪声干扰时容易产生校验错。
FE为结构错标志,它表示一帧数据的起始与停止位不在它们正确的位置上。当接收器正在以不正确的波特率接收数据时会出现结构错。
BI为线路间断标志,它表示一个间断(两个连续的逻辑0帧)在UART的SIN引脚上出现。
出现以上4种状态中的任何一种都会使16550发出线路中断。TH指示发送FIFO为空的时刻。 TE指示发送FIFO和发送移位寄存器(TSR)两者为空的时刻。ER指示接收FIFO中出现任何错误的时刻。
4)FIFO控制寄存器(FIFOControlRegister,FCR)
FIFO控制寄存器用来对16550UART中的FIFO进行设置,它可以允许或禁止发送与接收FIFO,清除发送FIFO和接收FIFO(包括将它们各自的计数器复位到0,但移位寄存器不受影响),为接收器FIFO中断设置触发门限,选择DMA传输信号的模式。其各位定义如图7.32所示。
图7.32FIFO控制寄存器
5)中断控制(允许)寄存器(InterruptControlRegister/InterruptEnableRegister,ICR/IER)中断控制寄存器对4个中断源的允许或禁止状况进行控制,格式如图7.33所示。如果该寄存器的D0~D3均为0,则禁止16550提出中断。线路中断包括超限错、奇偶错、结构错及间断等由中断源引起的中断。
图7.33中断控制寄存器
6)中断标识(状态)寄存器(InterruptIdentificationRegister/InterruptStatusRegister,IIR/ISR)中断标识寄存器为8位,高4位为0,低4位用来指示是否有正在悬挂的中断以及中断类型,格式如图7.34所示,编码说明见表7.8。
图7.34中断标识寄存器
表7.816550的中断标识码
16550有5个中断源,4个优先级,其优先级的顺序为:最高优先级为1级,是接收线路错中断,包括超限错、奇偶错、结构错、间断等。读线路状态寄存器可使此中断复位。接收器数据有效中断为2级优先级。读出数据可复位此中断。字符暂停中断为2级优先级,它表示至少在4个字符时间内没有从接收器FIFO取出数据。读出数据可复位此中断。
发送器空中断为3级优先级。写发送器可使这一中断复位。最低优先级(4级)为Modem状态中断,包括发送结束、数传机准备好、振铃指示、接收线路信号检测等Modem状态中断源。读Modem状态寄存器可复位该中断。注意,中断标识寄存器(只读)与FIFO控制寄存器(只写)共享I/O端口。
7)调制解调器控制寄存器(ModemControlRegister,MCR)调制解调器控制寄存器是一个8位寄存器,用以控制Modem或其他数字设备。各位功能如图7.35所示。
DTR、RTS、OUT1和OUT2位用以控制16550的相关输出引脚。当它们为1时,对应引脚输出为0;当它们为0时,对应引脚输出为1。
LB位允许内部循回检测,实现16550的自测试。当LB=1时,SOUT为高电平状态,SIN与系统分离,由发送器送出的数据将由16550内部直接回送到接收器的输入端,Modem用以控制16550的4个信号CTS、DSR、DCD和RI与系统分离,同时,16550用来控制Modem的4个输出信号RTS、DTR、OUT1和OUT2在16550芯片内部与CTS、DSR、DCD和RI连接,使信号在16550芯片内部实现返回。这样,16550发送的串行数据立即在16550内部被接收,从而完成16550的自检(不需要外部连线)。
图7.35调制解调器控制寄存器
8)调制解调器状态寄存器(ModemStatusRegister,MSR)
Modem状态寄存器提供来自调制解调器、数据组或外围设备到处理器的控制线路当前状态的信息。当来自Modem的控制信号变化时,Modem状态寄存器的低4位被相对应地置1。在读此寄存器时,使这4位同时清零。而利用该寄存器的高4位可以检查16550相关引脚上的信号状态。Modem状态字的格式如图7.36所示。
图7.36调制解调器状态寄存器
9)发送保持寄存器(TransmitHoldingregister,THR)发送保持寄存器用来存储正在发送的数据。
10)接收缓冲寄存器(ReceiveBufferRegister,RBR)接收缓冲寄存器用来存储正在接收的数据。
11)高速暂存寄存器(ScratchPadRegister,SPR)高速暂存寄存器又称便笺式寄存器,用作一个便笺本,即一个临时存储寄存器,可以让主机存储一个8位数据字节。
4.初始化及应用举例
16550内部有11个8位可编程使用的寄存器,利用片选CS0、CS1和选中16550,再利用片上的A2、A1、A0地址线,以及线路控制字的最高位(DL)、读/写控制信号就可以对这些寄存器进行选择。地址分配如表7.9所示。表7.916550的寻址图7.3716550与8088系统的连接例7.716550初始化。
16550初始化时,通常首先使线路控制字的D7=1,即使DL为1。在此条件下,将除数低8位和高8位分别写入16550内部的波特率产生器。然后再以不同的地址分别写线路控制字、FIFO控制字、Modem控制字及中断控制字等。其具体做法可按图7.38所示的顺序依次进行。在图7.37中,16550的地址为03F8H~03FFH。根据该图,对16550进行初始化的程序如下:INT50:MOVDX,3FBH MOVAL,80H OUTDX,AL;置线路控制寄存器D7=1即DL=1 MOVDX,3F8H MOVAL,60H OUTDX,AL;锁存除数低8位
INCDX MOVAL,0 OUTDX,AL;锁存除数高8位
MOVDX,3FBH MOVAL,0AH OUTDX,AL;初始化线路控制寄存器
MOVDX,3FAH MOVAL,07H OUTDX,AL;初始化FIFO控制器
MOVDX,3FCH MOVAL,03H OUTDX,AL;初始化Modem控制器
MOVDX,3F9H MOVAL,0 OUTDX,AL;写中断控制寄存器图7.3816550初始化顺序
例7.8
以查询方式串行发送与接收数据。采用图7.37的连接电路及例7.7中的初始化程序,发送数据的控制程序接在初始化程序之后。若采用查询方式发送数据,且待发送数据的字节数放在BX中,待发送的数据顺序存放在以SEDATA为首地址的内存区中,则发送数据的程序如下:SEDPG:MOV DX,3FDH
LEA SI,SEDATAWAITSE:IN AL,DX
TEST AL,20H
JZ WAITSE
PUSH DX
MOV DX,3F8H
MOV AL,[SI]
OUT DX,AL
POP DX
INC SI
DEC BX
JNZ WAITSE同样,在初始化后,可以利用查询方式实现数据的接收。下面是16550接收一个数据的程序:REVPG:MOV DX,3FDHWAITRE:IN AL,DX
TEST AL,1EH
JNZ
ERROR
TEST AL,01H
JZ WAITRE
MOV
DX,3F8H
IN AL,DX
AND AL,7FH
例7.9
以中断方式串行接收数据。通过16550实现串行异步通信的电路仍以图7.37的连接形式为例。为了简单起见,将图7.37中16550的INTR引脚仍接至图6.36中8259的IR0,采用与6.5.4节中相同的对8259及中断向量表进行初始化的程序。我们假设系统以查询方式发送数据,以中断方式接收数据,则对16550的初始化的程序如下:INISIR:MOVDX,3FBH
MOVAL,80H
OUTDX,AL ;置DL=1
MOVDX,3F8H
MOVAL,0CH
OUTDX,AL
MOVDX,3F9H
MOVAL,0 ;置除数为000CH,规定波特率为9600OUTDX,ALMOVDX,3FBHMOVAL,0AHOUTDX,AL ;初始化线路控制寄存器
MOVDX,3FAH MOVAL,07H OUTDX,AL ;初始化FIFO控制器
MOVDX,3FCHMOVAL,0BHOUTDX,AL;初始化Modem寄存器,OUT2引脚输出为0MOVDX,3F9HMOV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 居家养老食堂合同(2篇)
- 2025年度O2O电商代运营团队培训与支持合同3篇
- 二零二五年度酒吧服务员全职雇佣合同规范文本3篇
- 二零二五年度生物科技园开发与管理承包合同2篇
- 二零二五版绿色环保办公楼房地产买卖代理合同3篇
- 基于二零二五年度的采购合同2篇
- 二零二五年摄影摄像与后期制作合同2篇
- 二零二五版板材模板设计与制造技术服务合同3篇
- 二零二五年度电力系统用变压器安装及节能降耗合同3篇
- 二零二五版土地购置与绿色生态农业合作合同3篇
- 银行会计主管年度工作总结2024(30篇)
- 教师招聘(教育理论基础)考试题库(含答案)
- 2024年秋季学期学校办公室工作总结
- 上海市12校2025届高三第一次模拟考试英语试卷含解析
- 三年级数学(上)计算题专项练习附答案集锦
- 长亭送别完整版本
- 《铁路轨道维护》课件-更换道岔尖轨作业
- 股份代持协议书简版wps
- 职业学校视频监控存储系统解决方案
- 《销售心理学培训》课件
- 2024年安徽省公务员录用考试《行测》真题及解析
评论
0/150
提交评论