计算机系统的通信实验.docx
《计算机系统的通信实验.docx》由会员分享,可在线阅读,更多相关《计算机系统的通信实验.docx(18页珍藏版)》请在冰豆网上搜索。
![计算机系统的通信实验.docx](https://file1.bdocx.com/fileroot1/2023-2/9/6e408c32-7fb3-42ce-adc6-30320139ad10/6e408c32-7fb3-42ce-adc6-30320139ad101.gif)
计算机系统的通信实验
计算机系统的通信实验
一.目的:
了解计算机间的数据通信的基本技术;
了解RS─232C的结构及使用方法。
RS----232C9芯连接器插针定义如下:
1保护地1
2发送数据TXD2
3接收数据RXD3
4请求发送RTS4
5准允发送CTS5
6数据装置准备好DSR6
20数据终端准备好DTR20
8载波检测CD8
7信号地7
二.使用设备:
带有RS─232C通信接口的微型计算器及一根多芯电缆。
三.8250异步串行接口:
8250的逻辑框图如下:
内部总线路SIN
接收数据寄存器移位寄存器
数据总线
线控制寄存器接收定时CLK
和控制
分频寄存器(L)波特率
地址分频寄存器(H)产生器
总线
地
址发送定时
选线状态寄存器和控制
择SOUT
控制线等发送保持寄存器移位寄存器
控
制Moden控制寄存器ModenRTSCTS
逻控制DTRDSR
辑逻辑RIOUT1
Moden状态寄存器OUT2RLSD
中断允许寄存器中断控INTRPT
制逻辑
中断标识寄存器
四8250应用程序举例
(一).查询方式
1.要求:
任何从键盘上输入的信息,一方面显示在CRT上,另一方面从串行接口输出;任何从串行接口输入的信息都将在CRT上显示出来;在键盘上输入“Esc”键时,则退出程序运行。
(1)收发处理程序
测线路状态寄存器(3FDH)的值以判通信接口处于发送或接收就绪状态。
举例如下:
REPEAT:
MOVDX,3FDH
INAL,DX
TESTAL,01H
JNZRECEIV
TESTAL,20H
JZREPEAT
.
.
.
MOVDX,3F8H;发送字符
OUTDX,AL
JMPREPEAT
RECEIV:
MOVDX,3F8H;接收字符
INAL,DX
.
.
.
JMPREPEAT
(2)键盘输入程序举例
MOVAH,01H
INT16H
JZREPEAT
MOVAH,00H
INT16H
CMPAL,27
JZRE
.
.
.
JMPREPEAT
RE:
RET
(3)显示通信字符举例
PUSHAX
PUSHBX
MOVBL,00H
MOVAH,0EH
INT10H
POPBX
POPAX
2.程序的流程图如下:
波特率、数据位数、校
验位、停止位的初始化
Modem控制寄存器初始化,
使DTR、RTS有效,输出
反馈输入
线状态寄存器→AL
Y
显示“?
”接收有错?
NY
接收数据准备好?
NN
发送保持寄存器空?
输入字符代码入AL
YY
键盘缓冲区空?
调BIOS子程序显示
NN
从键盘缓冲区取出字符输出是回车字符?
Y
显示换行
3.程序清单:
ATASEGMENT
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVDX,3FBH
MOVAL,80H
OUTDX,AL;线控制寄存器设置波特率
MOVDX,3F8H
MOVAL,0C0H
OUTDX,AL;600波特率的分频器L
MOVDX,3F9H
MOVAL,00H
OUTDX,AL;600波特率的分频器H
MOVDX,3FBH
MOVAL,1BH
OUTDX,AL;8位偶校验
MOVDX,3FCH
MOVAL,03H
OUTDX,AL;MODEM控制器初始化
MOVDX,3F9H
MOVAL,00H
OUTDX,AL;中断允许寄存器初始化
REPEAT:
MOVDX,3FDH
INAL,DX
TESTAL,01H;检测是否可以接收数据
JNZRECEIVE
TESTAL,20H;检测是否可以发送数据
JZREPEAT;如果不可以接收和发送数据,则重新执行REPEAT
MOVAH,01H;键盘是否有按键
INT16H
JZREPEAT
MOVAH,00H
INT16H
CMPAL,27
JZRE
MOVDX,3F8H
OUTDX,AL;发送数据
PUSHAX
PUSHBX
MOVBL,00H
MOVAH,0EH
INT10H;显示一个通信字符
POPBX
POPAX
JMPREPEAT
RECEIVE:
MOVDX,3F8H
INAL,DX;接收数据
PUSHAX
PUSHBX
MOVBL,00H
MOVAH,0EH
INT10H;显示一个通信字符
POPBX
POPAX
JMPREPEAT
RE:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
JMPREPEAT
(二).中断方式
1.要求:
使用IBMPC串口1,编制一个简易的仿终端程序,其功能如下:
当按键时,将该键的ASCII码送串口输出,并将从串口1收到的字符送显示器显示,假设接收用中断方式,发送用程序查询方式。
并设串口参数为:
8位数据位,无效验,2位停止位,波特率为9600BIT/S。
2.8259A中断控制器
在IBMPC微机系统中,8088管理三类中断:
(1)内部中断,即软中断,包括由PSW的状态标志所产生的溢出中断,陷阱中断。
(2)非屏蔽中断NMI,外部中断产生。
(3)可屏蔽中断INTR,由8级外部中断产生。
8259A是一种可编程的中断控制器芯片,每片8259A可以管理8级优先级中断。
8259A的中断管理功能如下:
●记录各级中断源的中断请求;
●判优,确定是否应该响应和响应哪一级中断请求;
●响应中断时,向CPU传送中断类型号。
8259A所管理的8个中断源的类型号为8----0FH
中断优先级中断源中断类型码
IRQ0电子钟时间基准08H
IRQ1键盘09H
IRQ2为用户保留的中断0AH
IRQ3异步通信(COM2)0BH
IRQ4异步通信(COM1)0CH
IRQ5硬盘0DH
IRQ6软磁盘0EH
IRQ7并行打印机0FH
IBMPC系统板上的8259A占有两个端口地址:
20H,21H。
2.可屏蔽中断传送数据的全过程:
(1)主程序为中断传送作准备
A.系统初始化中布置8259A以及其他接口
将IBMPC系统板上的8259A布置为单级,缓冲,普通非指定EOI方式。
IBMPC系统板上的8259A的初始化程序段在ROMBIOS中。
B.应用程序进行的初始化
包括将中断服务程序首址的偏移和段值填入中断向量表相应类型号位置。
开放8259A对应中断(IRQ4),有关编程接口的布置,等等。
应强调,初始化布置必须在关中断条件下进行。
例:
开放IRQ4:
INAL,21H
ANDAL,0EFH
OUT21H,AL
设置中断向量:
CLI;关中断
MOVAX,00
MOVES,AX
MOVDI,4*12
MOVAX,OFFSETRINT
CLD;在串操作时,使地址增量
STOSW;将AX的内容传送到由DI作为指针的目的串中
MOVAX,CS
STOSW
串操作指令:
SI寻址源操作数,现行段在DS中
DI寻址目的操作数,现行段在ES中
或:
用DOS系统功能调用(INT21H)
DS:
DX=中断向量
AL=中断类型号
AH=25H
MOVDX,OFFSETRINT
MOVAX,SEGRINT
MOVDS,AX
MOVAL,0CH;COM1的中断类型码
MOVAH,25H
INT21H
(2)中断申请
当外设准备好数据,则向8259A提出中断申请。
8259A将新申请的中断和正在服务的中断进行比较判优。
假设新的中断请求最优,则8259A就通过INTR引脚向CPU申请中断。
(3)响应中断
8088在执行当前指令的最后一时钟周期,检测INTR,如果为“1”,在标志寄存器中断使能位IF为1并且在没有NMI请求的条件下,下一个时钟周期进入INTR中断响应周期。
第一个中断响应周期,主8259A向从8259A送选择码。
IBMPC为单级,无此操作。
第二个中断响应周期,8088CPU接收8259A送来的向量号N,此外还做一系列内部操作:
1.标志寄存器压栈保存。
2.将断点的段值和偏移值压栈保存。
3.将标志寄存器的中断允许位IF和单步标志位TF复位。
4.将存储器4N字单元内容送IP,4N+2字单元内容送CS。
然后转到CS:
IP去执行,即转到中断服务程序首址去执行。
应该强调的是上述中断响应的操作是直接由CPU硬件逻辑完成的,而不是由程序完成的。
3.程序框图如下:
主程序中断程序
初始化开中断,保护现场
否是否是
按键否?
线路状态错否?
否是
发送寄存器空?
接收字符放缓冲区
否是
键码送串口输出缓冲区满否?
否是
ELFLAG=“1”?
置BFFLAG
显示线路错置ELFLAG
否是
BFFLAG=“1”?
发EOI
显示缓冲区满恢复现场
否是
缓冲区有字符吗?
返回
取字符显示
4中断程序清单:
DATASEGMENT
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVDX,3FBH
MOVAL,80H
OUTDX,AL;线控制寄存器设置波特率
MOVDX,3F8H
MOVAL,0CH
OUTDX,AL;9600波特率的分频器L
MOVDX,3F9H
MOVAL,00H
OUTDX,AL;9600波特率的分频器H
MOVAL,07H
OUTDX,AL;8位无校验,2位停止
MOVDX,3FCH
MOVAL,0BH
OUTDX,AL;MODEM控制器初始化
MOVDX,3F9H
MOVAL,01H
OUTDX,AL;中断允许寄存器初始化
MOVDX,3FAH
MOVAL,04H
OUTDX,AL;中断标识寄存器初始化
REPEAT:
MOVDX,3FDH
INAL,DX
TESTAL,01H;检测是否可以接收数据
JNERECEIVE
TESTAL,20H;检测是否可以发送数据
JZREPEAT;如果不可以接收和发送数据,则重新执行REPEATMOVAH,01H;键盘是否有按键
INT16H
JZREPEAT
MOVAH,00H
INT16H
CMPAL,27
JZRE
;将键入的字符转换为ASCII码
MOVDX,3F8H
OUTDX,AL;发送数据
PUSHAX
PUSHBX
MOVBL,00H
MOVAH,0EH
INT10H;显示一个通信字符
POPBX
POPAX
JMPREPEAT
RECEIVE:
INAL,21H
ANDAL,0EFH
OUT21H,AL
CLI;关中断
MOVAX,00
MOVES,AX
MOVDI,4*12
MOVAX,OFFSETRINT
CLD;在串操作时,使地址增量
STOSW;将AX的内容传送到由DI作为指针的目的串中
MOVAX,CS
STOSW
MOVDX,OFFSETRINT
MOVAX,SEGRINT
MOVDS,AX
MOVAL,0CH;COM1的中断类型码
MOVAH,25H
INT21H
RE:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
JMPREPEAT
心得与体会:
我们知道串口通讯有查询与中断两种方式,但是对于两种方式的区别很多人并不是非常清楚,对于两者的实现到底有和不同呢?
让我们简单的总结如下:
查询方式:
发送数据——先发后查;
接收数据——先查后收。
中断方式:
发送数据——发送、等待中断、中断中发送;
接收数据——等待中断、在中断中接收。
所以我们在不同方式下对发送数据和接收数据的处理是不同的,我们应注意对其的处理,在其中也应注意各个程序的正确性。
通过本次实验也学会了串口通讯的两种方式,收获颇丰!