第十一章串行通信与串行接口8251A
1.试从广义角度概括接口有哪些功能?
答:寻址、输入输出、数据转换、联络、中断管理、复位、可编程,及错误检测等八种功能。
2.设异步通信时标准数据格式中的8个字符位为10101110,若采用偶校验设置,则奇偶校验位应为几?
答:应为1。
因为偶校验要保证信息中(包括校验位)1的个数为偶数。
3.什么是覆盖错误?接口部件如何反映这种错误?
答:是指输入缓冲寄存器或输出缓冲寄存器中的数据在被CPU或外设取走之前,又被新到数据所覆盖而产生的错误。
在产生覆盖错误时,接口会通过在状态寄存器中设置相应的状态位来反映。
4.从结构上看,可以把一个接口分为几部分?分别具有什么特点?
答:分为两部分。
(1) 第一部分用来与I/O设备相连。
这部分的接口结构是和I/O设备的传输要求及数据格式有关的,所以,各接口之间互不相同。
(2) 第二部分用来与系统总线相连。
由于各接口都要连在同一总线上,因此,所有接口的这部分结构都非常类似。
5.在实际使用时,为什么对串口中的四个内部寄存器一般使用1位低位地址来寻址?答:因为,
四个内部寄存器中有2个可读寄存器,为一组,另2个可写寄存器为一组。
即控制寄存器和数据输出寄存器是只写的,状态寄存器和数据输入寄存器是只读的,所以,可以先用读、写信号来区分两组寄存器,再用1位低位地址就可区分一组中的两个寄存器了。
47
6.异步通信方式的特点是什么?适合应用在什么场合?
答:采用异步通信时,两个字符之间的传输间隔是任意的,所以,每个字符的前后都要用一些数位来作为分隔位。
适于传输在不固定的时间间隔处出现字符所构成的信息流。
7.什么是波特率因子?
答:在用异步方式进行通信时,发送端需要用发送时钟来决定每一位对应的时间长度,接收端需要用接收时钟来测定每一个位的时间长度。
发送时钟和接收时钟的频率可以是位传输率(波特率)的16倍、32倍、64倍,这个倍数称为波特率因子。
8.设在异步通信时,每个字符对应1个起始位,7个信息位,1个奇偶校验位,1个停止位,波特率为9600bps,则每秒钟能传输的最大字符数是多少?
答:因为,
1+7+1+1=10(位),
所以,
每秒钟能传输的最大字符数为9600/10=960(个)。
9.在8251A的编程结构中,有几个可读写的端口?给它们分配了几个端口地址?为什么?
答:共有7个可读写端口。
给它们分配了2个端口地址。
其中,偶地址对应数据输入寄存器和数据输出寄存器;奇地址对应其他寄存器(模式寄存器,2个同步字符寄存器,控制寄存器,状态寄存器)。
在这7个端口中,只读端口有2个(一个状态寄存器,一个数据输入寄存器),只写端口有5个(一个模式寄存器,一个控制寄存器,二个同步字符寄存器,一个数据输出寄存器)。
因为根据读写控制信号,再加上8251A的初始化流程按次序写入的约定是可以做到使用2个端口地址将7个端口区分开。
48
10.对8251A进行编程时,必须遵守什么约定?
答:三个约定:
①芯片复位后,CPU往奇地址端口第一次写入的值作为模式字进入模式寄存器。
②如果模式字中规定了8251A工作在同步模式,那么,CPU接着往奇地址端口输出
的1个或2个字节就作为同步字符被写入同步字符寄存器。
③这之后,只要不是复位命令,不管是同步模式还是异步模式,由CPU往奇地址端
口写入的值将作为控制字送到控制寄存器,而往偶地址端口写入的值将作为数据送到数据输出缓冲寄存器。
11.8251A内部的功能模块有哪些?
答:7个功能模块:
发送缓冲器、发送控制电路、接收缓冲器、接收控制电路、数据总线缓冲器、读写控制逻辑电路和调制解调控制电路。
49
12.8251A与外设之间的连接信号有哪些?
答:分为两类:
数据信号——TxD,RxD;
收发联络信号——DTR,DSR,RTS,CTS
13.试按要求写出异步模式下的模式字:2个停止位,偶校验,7个数据位,波特率因子为16。
答:11111010B,
即,模式字为FAH。
14.试按要求写出异步模式下的控制字:使发送允许,接收允许,DTR端输出低电平,RTS端输出低电平,使TxD成为低电平,不进行内部复位,使状态寄存器中3个出错标志复位。
答:00111111B,
即,控制字为3FH。
15.试按要求编写同步模式下的模式字:内同步,同步字符的数目为2,奇校验,7个数据位,“奇”端口地址为66H。
答:MOV AL,18H ;0001 1000 B
OUT 66H,AL ;写入模式寄存器
16.试按要求编写采用异步通信方式,利用状态位测试,将内存缓冲区100个字符输出的程序段。
设,波特率因子为64,7个数据位,1个停止位,偶校验,8251A的端口地址为40H和42H,内存缓冲区首地址用标号BUFFER表示。
答:
MOV AL,7BH ;设置模式字
OUT 42H,AL
MOV AL,35H ;设置控制字
OUT 42H,AL
50
MOV DI,0 ;变址寄存器初始化
MOV CX,100 ;共100个字符要输出
BEGIN:IN AL,42H
TEST AL,01H ;读取状态字,测试T X RDY位是否为1
JZ BEGIN
MOV DX,OFFSET BUFFER ;取缓冲区首地址的偏移量
MOV AL,[DX+DI] ;将缓冲区字符送累加器
OUT 40H,AL ;输出字符
INC DI ;修改缓冲区指针
IN AL,42H ;读取状态字
TEST AL,38H ;测试有无错误。
若有,则转到出错处理程序
JNZ ERROR
LOOP BEGIN ;如没有错,则再输出下一个字符
JMP EXIT ;如果输出满100个字符,则结束
ERROR:CALL ERR_OUT ;调用出错处理程序
EXIT:……
51。