📄 8250.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0079)http://202.194.193.6/csnews/bkjx/doc/weijijiekou/second/chapter12/c2-12-5-3.htm -->
<HTML><HEAD><TITLE>微型计算机原理</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type><LINK
href="8250.files/Book_Contents.css" rel=stylesheet type=text/css>
<SCRIPT language=JavaScript>
<!--
function MM_reloadPage(init) { //reloads the window if Nav4 resized
if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->
</SCRIPT>
<SCRIPT language=JavaScript src="8250.files/newWindow.js">
</SCRIPT>
<META content="MSHTML 5.00.3700.6699" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<TABLE border=0 height=249 width="100%">
<TBODY>
<TR>
<TD vAlign=top width="100%">
<DIV align=center></DIV>
<P class=Title_3>12.5.3 8250内部寄存器及其编程方法</P>
<DIV align=left>
<P><FONT
color=#000000> 8250内部有10个可访问的寄存器,由于8250芯片只有3根地址线A0~A2,也就是只能产生8个寄存器选择地址,所以其中必有两个口地址为两个寄存器共用。为此,8250内部结构已指定,①发送保持寄存器(THR)和接收缓冲寄存器(RBR)共用一个口地址,而且是最低地址号,以"写"访问THR,以"读"访问RBR,以示区别。②除数寄存器的除数值分高低两个字节存放,它的低字节DLL和高字节DLH寄存器使用的两个口地址与别的寄存器相重。为了识别,专门在通信线路控制器中设置了一个除数寄存器访问允许位DLAB,当要访问除数寄存器时,必须使DLAB置1。若要访问其他寄存器时,则必须使DLAB置0。具体口地址分配如表12.7所示。图12.27中每个寄存器的右侧也表明了各自的口地址分配情况。
</FONT></P>
<P align=center><FONT color=#000000>表12.7 8250内部寄存器地址 </FONT></P>
<P align=center><IMG height=245 src="8250.files/b12.7.jpg" width=451></P>
<P align=center> </P>
<P><FONT color=#000000> 一.通信线路控制与通信线路状态寄存器
<BR><BR> 通信线路控制器(LCR)主要用来指定异步通信数据格式,同时它的最高位DLAB用来指定允许访问除数寄存器。它的内容不仅可以写入而且还是可读,LCR的各位意义如图12.27所示。
<BR> D0D1位:字长选择,指定发送和接收字符的位数。
<BR> WLS1WLS0=00,为5位;WLSIWLS0=01,为6位;WLS1WLS0=10,为7位;<BR> WLS1WLS0=11,为8位。
<BR> D2位:停止位选择,指定发送和接收的停止位位数。
<BR> STB=0,为1位;STB=1,为1.5位(字符长为5位时);或STB=1,为2位(字符长度为6,7,8位时)。
<BR> D3位:奇偶校验允许,指定是否要奇偶校验。 <BR> PEN=0,不要校验;PEN=1,要校验。
<BR> D4位:偶校验选择,指定是要偶校验吗? <BR> EPS=0,要奇校验;EPS=1,要偶校验。
<BR> D5位:附加奇偶标专位选择。 <BR> SP=0,不附加;SP=1,附加1位。
<BR> D6位:中止设定。指定发正常信号还是连续发空号(中止信号)。<BR> SB=0,正常;SB=1,中止。
<BR> D7位:除数寄存器访问允许。 <BR> DLAB=1,访问除数寄存器;DLAB=0,访问其他寄存器。
<BR> 其中位5是SP(STICK
PARITY)附加奇偶标志位选择位。当PEN=1(有奇偶校验)时,若SP=1,则说明在奇偶校验位和停止位之间插入了一个奇偶标志位,这种情况下,若采用偶校验,则这个标志为逻辑"0",若采用奇校验,则这个标志为逻辑"1"。选用这一附加位的作用是发送设备把采用何种奇偶校验方式也通过数据流告诉接收设备。显然,在收发双方已约定奇偶校验方式的情况下,就不需要这一附加位并使SP=0。位6是SB(SET
BREAK)设置中止方式选择位,若SB位置1,则发送端连续发送空号(逻辑"0"),当发空号的时间超过一个完整的数据字传送时间,接收端就视发送设备已中止发送。此时,接收设备发送中断请求,由CPU进行中止处理。
<BR> 例如,设置发送数据字长为8位,2位停止位,偶校验,其程序段为: <BR> MOV DX,3FBH ;LCR口地址
<BR> MOV AL, 00011111B ;LCR的内容,数据格式参数 <BR> OUT DX,AL
<BR> 通信线路状态寄存器(LSR)用来向CPU提供数据接收和发送时的状态。这些状态可以被CPU用查询方式获得,也可让它们以中断请求的方式主动向CPU报告。对LSR不仅可读,而且可写(除位6外),写LSR是为了人为地设置某些错误状态,供系统自检时使用。LSR的各位含义如图12.27所示。
<BR> D0位:接收数据准备好(接收缓冲器满)。
<BR> DR=1,指示接收器已接收到一个数据字符,并且接收移位寄存器的内容已传到接收缓冲器,即接收数据准备好;当CPU从接收缓冲器读取1个数据时,DR置0。
<BR> D1~D3位:这三位都是出错指示位。
<BR> OE=1,指示接收缓冲器的输入字符未取走,8250又接到新输入的数据,造成数据丢失错误。
<BR> PE=1,指示被接收的数据有奇偶错。 <BR> FE=1,指示接收的位流中停止位有错,称为数据格式错。
<BR> D4位:中止识别指示。 <BR> BI=1,指示发送设备进入中止状态;发送端发送正常时,BI=0。
<BR> D1~D4这4位均是错误状态,只要其中有一位置1,在中断允许的情况下,就发出接收数据线路状态中断。当CPU读取它们的状态时,自动清零,复位。
<BR> D5位:发送保持器空。 <BR> THRE=1,指示数据从发送保持寄存器送到发送移位寄存器;当数据写入发送保持器时,THRE置0。
<BR> D6位:发送移位寄存器空(只读)。
<BR> TSRE=1,指示数据从发送移位寄存器送到发送数据线上;当发送保持寄存器的内容被送入发送移位寄存器时,TSRE置0。
<BR> 接收数据准备好DR和发送保持寄存器空THRE这两位是串行接口最基本的标志位,它们决定了CPU能不能向8250进行读写操作,只有当DR=1时,CPU才能读数;只有当THRE=1时,才能写数。
<BR> 下面是利用线路状态寄存器的内容进行收发处理的程序段: <BR> STRAT: <BR> MOV DX,3FDH
;LSR口地址 <BR> IN AL,DX ;读取LSR的内容 <BR> TEST AL, 00011110B
;检查有无数据接收错误(D1~D4位) <BR> JNZ ERR ;有错,转出错处理 <BR> TEST
AL,01H ;无错,再查接收数据是否准备好,DR=1? <BR> JNZ
RECEIVE ;已准备好,则转接收程序<BR> TEST AL ,20H ;未准备好,再查发送保持寄存器是否空
;THRE=1? <BR> JNZ TRAS ;已空,则转发送程序 <BR> JMP STRAT
;不空,循环等待<BR> ERR: …… <BR> TRANS: ·····<BR> RECEIVE: ······
<BR><BR> 二.调制解调控制(MCR)及状态寄存器(MSR)
<BR><BR> 这两个寄存器用于发送和接收时8250与通信设备之间的联络与控制。MODEM控制寄存器MCR用来设置对MODEM的联络控制信号和芯片自检,而MODEM状态寄存器用来检测和记录来自MODEM的联络控制信号及其状态的改变。两个寄存器的各位定义如图12.27所示。<BR> 对于这两个寄存器的RTS、DTR、CTS、DSR、R1、RLSD以及OUT1、OUT2各位的定义前已述及,不再说明。现对MCR的位4(LOOP)的功能及使用方法加以说明。LOOP是供8250本身自检诊断而设置的。当这位置"1"时,8250处于诊断方式,在这种方式下,8250芯片内部实现自问自答,进行联络,并且SIN引脚与芯片内部逻辑脱钩,发送器的移位输出端自动和接收器的移位输入端接通,形成"环路"进行自发自收的操作。在正常通信时,LOOP位置"0"。
<BR> 例如,若要使MCR的DTR RTS有效,OUT1 OUT2以及LOOP无效,则可用下列程序段: <BR> MOV DX,3FCH
;MCR口地址 <BR> MOV AL, 00000011B ;MCR的控制字 <BR> OUT DX,AL
<BR> 若要自发自收进行诊断,则程序段为: <BR> MOV DX,3FCH ;MCR口地址 <BR> MOV
AL,00010011B ;LOOP位置"1" <BR> OUT DX,AL
<BR> MSR的低4位表示来自MODEM联络控制信号状态的改变,在CPU读MSR时,把这些位清0,如果其中△CTS、△DSR、△RLSD、△RI这4位当中某一位置"1",则说明在上次CPU读取MODEM状态寄存器(MSR)之后,状态寄存器的相应位RTS、DSR、RLSD、RI发生了改变,也就是来自MODEM的联络控制信号的逻辑状态发生了变化,信号由无效变为有效,或相反。△RI="1"时,表示MODEM来的RI信号由逻辑"1"状态变为逻辑"0"状态(由接通到断开)。MSR的D0~D3中的任意一位置"1",在中断允许时(IER中D3=1),均产生MODEM状态中断。MSR的高4位,分别表示收到了来自MODEM的控制信号,供CPU进行处理。
<BR><BR> 三.中断识别寄存器(IIR)和中断允许寄存器(IER)
<BR><BR> 8250具有很强的中断管理能力,内部设有4个中断优先级。它们的优先级顺序排列是:接收数据出错中断,接收缓冲器满中断,发送保持寄存器空中断,以及来自MODEM的控制信号状态改变的中断。为了具体识别究竟是哪种事件引起的中断(即中断源),8250内部设置了中断识别寄存器IIR。它保存着正在请求中断的优先级最高的中断类型编码,直到该中断请求被CPU响应并服务之后,才接受其他的中断请求。IIR是只读寄存器,它的内容随中断源而改变。最高5位总是零。具体格式如图12.27所示。
<BR> D0位:未决中断指示IP。 <BR> IP=0,表示有尚待处理的中断;IP=1,表示无中断产生。
<BR> D1D2位:中断类型标识ID1ID2。表示申请中断的中断源的中断类型编码。如图12.27所示。
<BR> 中断源提出的中断请求被允许还是被禁止,由中断允许寄存器IER控制,只要相应位写"0",就禁止中断请求,写"1"就允许中断请求。其格式如图12.27所示。
<BR> 在编写中断处理程序时应注意,若同一时间内允许有一个以上中断请求,则在处理完高一级的中断之后,中断返回之前一定要检查中断识别寄存器IIR的D0位IP是否为0,即是否尚有未被处理的中断源,否则,会造成某些中断不响应。异步通信适配器上的中断允许控制除了8250的IER之外,还使用8250的OUT2引脚,见图12.26)控制INTRPT是否送往CPU,因此,OUT2作为异步适配器中断允许总控制信号。
<BR><BR> 四.除数锁存器(DLL/DLH)
<BR><BR> 8250芯片串行数据传输的速率是由除数寄存器控制的。外接的1.8432MHZ基准时钟,通过除数寄存器给定的分频值,在8250内部产生不同的波特率,通过BOUDOUT引脚输出到RCLK,控制收发传输速率。除数(即分频值)的计算公式是:除数=1843200
/
(16×波特率)。表12.8列出了除数与波特率的对应关系,供用户选择使用。8250内部设置两个除数寄存器DLL/DLH,在初始化时将除数分低高两个字节分别写入DLL和DLH。
</FONT></P>
<P align=center><FONT color=#000000>表12.8 波特率与除数对照表 </FONT></P>
<P align=center><IMG height=202 src="8250.files/b12.8.jpg" width=440></P>
<P align=center> </P>
<P><FONT
color=#000000> 例如,若选取波特率为2400,则除数寄存器相应的除数值为00H(高8位)和30H(低8位),其装入程序段为:
<BR> MOV DX,3F8H ;置LCR口地址 <BR> MOV AL,80H <BR> OUT DX,AL
<BR> MOV DX,3F8H ;DLL的口地址 <BR> MOV AL,30H ;低字节除数 <BR> MOV
DX,3F9H ;DLH的口地址。 <BR> MOV AL, 00H ;高字节除数 <BR> OUT
DX,AL<BR><BR> 五.发送保持寄存器(THR)和接收缓冲寄存器(RBR)
<BR><BR> 发送时,CPU首先将待发送的字符写到8250的发送保持寄存器THR,然后进入发送移位寄存器,在发送时钟的作用下,从SOUT引脚输出。一旦THR的内容送到发送移位寄存器TSR后,THR变空,就使LSR的THRE位置"1",产生中断请求,要求CPU发送下一个字符。CPU向THR写入一个字符后,THRE置"0"。如此重复,直到全部数据发送完毕。<BR> 接收时,串行数据在接收时钟作用下,从SIN引脚以串行移位的方式输入到接收移位寄存器RSR,然后由RSR并行输入到接收缓冲寄存器RBR,一旦RBR变满,就使LSR的DR位置"1"产生中断请求,要求CPU读取数据字符。CPU从RBR读取一个字符后,DR置"0"。如此重复,直到全部数据接收完毕。
</FONT><FONT
color=#000000></FONT></P></DIV></TD></TR></TBODY></TABLE></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -