📄 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-5.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.5 中断方式异步串行通信编程</P>
<DIV align=left>
<P align=left><FONT color=#000000> 一.要求 <BR><BR>
甲乙两台PC机采用中断方式进行异步串行通信共传送3840字节。发送和接收缓冲区的首址分别定为5000:8000H及5000:4000H。8250的中断请求线连到8259的IRQ4端,中断类型号为0CH。
<BR> 通信格式为:字长8位,停止位1位,奇校验,数据传输率为9600bit/S。 <BR><BR> 二.接口硬件 <BR><BR>
分两部分考虑,一部分是以8250为核心建立CPU与RS-232C之间的适配器接口电路;另一部分是两台PC机之间的连接。<BR>
1.PC/XT异步通信适配器 <BR> 适配器原理框图见图12.26。适配器除INS
8250芯片外,还设有振荡器(18.432MHz)经10分频后提供外部时钟信号以及在8250与RS-232C之间采用SN75150和SN75154实现TTL与RS-232C之间的电平转换,另外将8250的RCLK与<IMG
height=20 src="8250'.files/BOUDOUT.jpg"
width=69>引脚外部连接使发送和接收时钟相同,并且用OUT2信号来控制8250的中断请求引脚INTRPT的输出。该引脚接到8259A的IR4输入端口,表明所使用的是第一个串口COM1。
<BR> 2.两台PC机之间的连接 <BR>
由于是近距离通信,可不用MODEM,只要把两机异步通信适配器的发送数据端2和接收数据端3互相交叉连接,把信号地(7)对接起来就行。这种方式称为零调制解调器方式如图12.18所示。<BR>
3.异步通信中断程序 <BR> 根据通信中断程序的特点,并结合一般中断处理的编程原则与方法,异步通信中断编程,一般包括: <BR>
(1)通信中断初始化 <BR>
①修改中断向量表,按使用的串口COM1和COM2,接管中断0CH或中断0BH,使新的中断向量指向自行编制的通信中断程序。 <BR>
②确定8250操作方式,设置中断允许寄存器相应位的允许或禁止(选择中断源类型),并允许中断操作(置MODEM控制寄存器<IMG height=20
src="8250'.files/out2.jpg" width=44>有效(D3=1))。<BR>
③确定起止式通信协议,设置通信波特率及数据帧传输格式。<BR>
④开放通信中断,对8259A-5中断控制器的屏蔽寄存器编程(OCW1),允许中断IRQ4或IRQ3。 <BR> (2)通信中断主程序
<BR> 访该程序无法给出统一的模式,完全随用户应用的要求自行编制。<BR> (3)通信中断服务程序 <BR>
该程序是中断处理的核心。一般分成如下三段: <BR>
①判断发生中断的中断源类型,通过读取中断标识寄存器的标识位,找到相应中断服务程序的入口地址。<BR>
②中断处理,对不同的中断类型,进行不同的处理:如果是接收器数据寄存器就绪中断(D2D1D0=100),则从8250数据寄存器读取数据;如果是发送器保持寄存器空中(D2D1D0=010),则从内存读取字符写到8250保持寄存器;如果是接收数据出错引起的中断(D2D1D0=110),则从8250线路状态寄存器读取状态进行分析,根据错误或间断,作出相应的处理;如果是MODEM状态变化引起的中断(D2D1D0=000),则从8250的MODEM状态寄存器读取状态进行分析,根据状态变化,作出相应的处理。
<BR> ③判断有否尚未处理的中断。每种中断源处理后;要继续判别中断标识寄存器的最低位
IP是否为0。若为0,则再输入标识位指示的相应中断处理;若为1,则结束中断处理(通常发中断结束命令EOI到中断控制器),并以IRET返回被中断的通信子程序。
<BR> 程序分主模块和中断服务程序两部分。程序中使用了6个字型变量,其中RV-BYTE和
RV-POINT单元分别存放待收数据的个数及接收缓冲区的地址指针;TR-BYTE和TR-POINT单元分别存放待发数据的个数及发送缓冲区的地址指针;INT-SEG和INT-OFF单元分别存放原中断向量段基址及偏移地址。具体程序如下:
<BR><BR> STACK SEGMENT STACK'STACK' <BR> DW 256
DUP(0)<BR> STACK ENDS<BR> ORG 5000H <BR> DATA
SEGMENT'DATA' <BR> INT-SEG DW ? <BR> INT-OFF DW ?
<BR> RV -POINT DW 4000H <BR> TR-POINT DW
8000H <BR> RV-BYTE EQU 3840 <BR> TR-BYTE
EQU 3840 <BR> DATA ENDS <BR> CODE SEGMENT 'CODE' <BR>
ASSUME CS:CODE,DS:DATA,SS:STACK <BR> START: MOV AX,DATA
;建立数据段寻址 <BR> MOV DS,AX
;保存中断向量,接管中断0CH <BR> MOV AL,0CH
;指定中断号0CH即COM1〕 <BR> MOV AH,35H
;获取中断0CH向量 <BR> INT 21H <BR>
MOV INT-OFF,BX ;将返回的向量ES:BX <BR> MOV BX,ES
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -