第8章作业.docx
《第8章作业.docx》由会员分享,可在线阅读,更多相关《第8章作业.docx(23页珍藏版)》请在冰豆网上搜索。
![第8章作业.docx](https://file1.bdocx.com/fileroot1/2023-1/27/c5974cd1-b861-4dfd-be75-c7cdf90c1b79/c5974cd1-b861-4dfd-be75-c7cdf90c1b791.gif)
第8章作业
第8章接口技术
教材习题解答
1.填空题
(1)8255A内部包括两组控制电路,其中A组控制______的工作方式和读写操作,B组控制______的工作方式和读写操作。
(2)8255A的端口A工作于方式2时,使用端口C的______位作为与CPU的外部设备的联络信号。
(3)当8255A的端口A和端口B均工作于方式1输出时,端口C的PC4和PC5可以作为_____使用。
(4)8255A的端口A工作于方式2时,端口B可以工作于______。
(5)8255A中,可以按位进行置位/复位的端口是______,其置位/复位操作是通过向______口地址写入_______实现的。
(6)8251A工作在同步方式时,最大波特率为______;工作在异步方式时,最大波特率为______。
(7)8251A工作在异步方式时,每个字符的数据位长度可以是______,停止位长度可以是______。
(8)8251A从串行输入线接收到一个字符后,将信号______置为有效。
(9)8251A工作在同步方式时,同步检测引脚SYNDET可以作为输入或者输出信号使用。
若工作在外同步方式,该引脚作为______;若工作在内同步方式,该引脚作为______。
(10)8253工作于方式0下,控制信号GATE变成低电平后,对计数器的影响是______。
【解】
(1)端口A、端口C高4位(PC7~PC4)
端口B、端口C低4位(PC3~PC0)
(2)PC3~PC7
(3)
(端口A的选通输入信号)、IBFA(输入缓冲器满信号)
(4)方式0或方式1
(5)端口C;控制;控制字
(6)64Kbit/s;19.2Kbit/s
(7)5、6、7、或8位;1个、1.5或2位
(8)RXRDY
(9)输入端;输出端
(10)计数暂停
2.已知8255A的端口A、B、C和控制口地址分别为120H、122H、124H和126H,试按下列要求设计初始化程序:
(1)将端口A和端口B设置成方式0,端口A、端口C作为输出口,端口B作为输入口。
(2)将端口A设置成方式2,端口B设置成方式1,端口B作为输出口。
(3)将端口A和端口B均设置成方式1的输入状态,且PC6、PC7设置成输出位。
【解】
(1)方式选择控制字的内容:
82H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
0
0
1
0
控制字标志
端口A设置成方式0
端口A为输出口
端口C(7-4)作为输出口
端口B设置成方式0
端口B为输入口
端口C(3-0)作为输出口
初始化程序:
MOVAL,82H;方式选择控制字送AL
OUT126H,AL;方式选择控制字输出给8255A控制端口
(2)方式选择控制字的内容:
0C4H
D7
D6
D5
D4
D3
D2
D1
D0
1
1
×
×
×
1
0
×
控制字标志
端口A设置成方式2
端口B设置成方式1
端口B为输出口
初始化程序:
MOVAL,0C4H;方式选择控制字送AL
OUT126H,AL;方式选择控制字输出给8255A控制端口
(3)方式选择控制字的内容:
0B6H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
0
1
1
×
控制字标志
端口A设置成方式1
端口A为输入口
端口C(7-4)作为输出口
端口B设置成方式1
端口B为输入口
初始化程序:
MOVAL,0B6H;方式选择控制字送AL
OUT126H,AL;方式选择控制字输出给8255A控制端口
3.某一外部输入设备,当它准备好一个数据时,那个发出一个数据准备好的状态信号READY(高电平有效)。
当CPU把数据取走后,要求CPU通过
线向外设发一负脉冲,以便外设清除READY信号。
试用8255A作为接口芯片,分别用查询和中断方式从外设读入100个数据,将其存入从DAT_BEG开始的内存区。
要求:
画出8255A与外设之间的连线,并进行编程。
【解】
(1)用查询方式从外设读入数据时,8255A与外设之间的连线如图8-30所示,使用端口C传送控制和状态信息。
图8-308255A与外设之间的连线
方式选择控制字的内容:
91H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
1
0
×
×
1
控制字标志
端口A设置成方式0
端口A为输入口
端口C(7-4)作为输出口
端口B
端口B
端口C(3-0)作为输入口
设在系统中8255A的端口地址为:
端口A:
00E0H端口B:
00E2H端口C:
00E4H控制口:
00E6H
读入数据的程序:
DATASEGMENT;数据段开始
DAT_BEGDB100DUP(?
)
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
LEABX,DAT_BEG;传送变量的地址
MOVAL,91H;方式控制字送AL
OUT0E6H,AL;方式控制字写入8255A控制口
MOVAL,09H;用置位方式使PC4=1
OUT0E6H,AL;使
为高
MOVCX,9
RDLP:
INAL,0E4H;读入端口C的内容(READY信号)
ANDAL,04H
JZRDLP;未准备好,则等待
INAL,0E0H;已准备好,则从端口A输入数据
MOV[BX],AL;将输入数据保存到内存中
INCBX
MOVAL,08H;用置位方式使PC4=0
OUT0E6H,AL;使
为低
CALLDELAY;一段定时程序,形成负脉冲
MOVAL,09H;用置位方式使PC4=1
OUT0E6H,AL;使
为高
LOOPRDLP
MOVAH,4CH
INT21H;返回DOS
DELAYPROC;定义延时子程序
MOVCX,100;向CX中送延时常数,决定延时的时间
DELAY2:
NOP
LOOPDELAY2
RET
DELAYENDP;定义延时子程序结束
CODEENDS;代码段结束
ENDSTART;源程序结束
(2)用中断方式从外设读入数据时,8255A与外设之间的连线如图8-31所示,使用端口C传送控制和状态信息。
将PC3连到8259A的中断请求信号输入端IR3,其对应的中断类型号为0BH,由于0BH×4=002CH,所以应该将中断向量写入0000:
002CH开始的4个单元中。
假设8259A在系统程序中已经完成初始化。
方式选择控制字的内容:
0B0H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
×
×
×
×
控制字标志
端口A设置成方式1
端口A为输入口
端口C
端口B
端口B
端口C
设在系统中8255A的端口地址为:
端口A:
00E0H端口B:
00E2H端口C:
00E4H控制口:
00E6H
图8-318255A与外设之间的连线
读入数据的程序:
DATASEGMENT;数据段开始
DAT_BEGDB100DUP(?
)
DATAENDS;数据段结束
CODESEGMENT;代码段开始
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;装填数据段
MOVAL,0B0H;方式控制字送AL
MOVAL,0BH;用置位方式使PC5=1
OUT0E6H,AL;使
为高
MOVAX,0
MOVES,AX;ES为0,指向中断向量表
MOVAX,0100H;取中断服务子程序入口地址偏移量
MOVES:
[002CH],AX
MOVAX,3200H;取中断服务子程序入口地址段值
MOVES:
[002EH],AX
MOVAL,0DH
OUT0E6H,AL;置8255A之INTEA=1,允许端口A中断
STI;8086CPU开放中断
┇
中断服务子程序如下:
PUSHAX
PUSHBX
LEABX,DAT_BEG;传送变量的地址
INAL,0E0H;已准备好,则从端口A输入数据
MOV[BX],AL;将输入数据保存到内存中
INCBX
MOVAL,0AH;用置位方式使PC4=0
OUT0E6H,AL;使
为低
DELAY:
MOVCX,100;向CX中送延时常数;一段延时程序,形成负脉冲
DELAY1:
LOOPDELAY1
MOVAL,0BH;用置位方式使PC4=1
OUT0E6H,AL;使
为高
POPBX
MOVAL,20H;向8259A发EOI
OUT20H,AL
POPAX
STI
IRET;中断返回
4.试用8255A和8253芯片配合,设计一个交通信号自动控制系统。
设计要求如下:
(1)在某一南北方向和东西方向的十字路口,每个方向都有红、黄、绿三色信号灯,如图8-79所示。
要求信号灯按下列规则变化:
首先使某一方向绿灯亮,另一方向红灯亮。
当出现下述情况之一时,开始变灯:
其一是红灯已亮30s;其二是红灯路口停留的车辆已达5辆。
变灯遵循的规律:
首先使绿灯闪烁5s(注:
0.5s灭,0.5s亮,重复5次),接着绿灯灭、黄灯亮,黄灯亮5s后,使得黄灯灭、红灯亮,紧接着使另一方向的红灯变为绿灯。
在一个方向由绿灯变红灯的过程中,另一方向的红灯保持不变。
(2)画出硬件框图,编写控制程序。
提示:
用8253来实现定时和检测车辆。
用8255A某一端口的6根线控制交通灯。
对于检测车辆,假设另有传感器电路配合,此传感器电路每当有一辆车时会发出一个脉冲信号。
【解】用8255的端口A的6根线控制交通灯:
(输出1时灯亮)
PA7
PA6
PA5
PA4
PA3
PA2
PA1
PA0
未用
未用
东西红灯
东西黄灯
东西绿灯
南北红灯
南北黄灯
南北绿灯
设8253的端口地址分别为:
0D0H(端口A),0D2H(端口B),0D4H(端口C),0D6H(控制口)。
设8255的端口地址分别为:
1E0H(通道0),1E2H(通道1),1E4H(通道2),1E6H(控制口)。
硬件框图如图8-32所示。
图8-32交通灯控制硬件框图
8253方式选择控制字的内容:
82H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
×
0
1
×
控制字标志
端口A设置成方式0
端口A为输出口
端口C
端口B设置成方式0
端口B为输入口
端口C
8255控制字的内容:
34H
计数初值:
0FFFFH(65535),使用8086的时钟信号(频率:
6MHz)
D7
D6
D5
D4
D3
D2
D1
D0
0
0
1
1
×
1
0
0
计数器0
读写16位
方式2
二进制
8255控制字的内容:
54H,计数初值:
46
D7
D6
D5
D4
D3
D2
D1
D0
0
1
0
1
×
1
0
0
计数器1
只读写低8位
方式2
二进制
8255控制字的内容:
90H,计数初值:
05H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
1
0
0
0
0
计数器2
只读写低8位
方式0
二进制
在程序中使用如下寄存器作为标志量:
BL:
最低位为0时,表示当前状态是“东西方向红灯亮”
最低位为1时,表示当前状态是“南北方向红灯亮”
BH:
红灯计时单元,初值为0,每0.5秒加1,值为60时,说明某一红灯已亮30秒。
DL:
绿灯闪烁计数单元,初值为0,每0.5秒加1,值为10时,说明某一绿灯已闪烁5秒。
DH:
黄灯计时单元,初值为0,每0.5秒加1,值为10时,说明某一黄灯已亮5秒。
CH:
绿灯闪烁时标志当前绿灯的状态,最低位为0时,表示当前状态是“灭”。
中断服务程序流程图如图8-33所示,初始化程序段如下:
MOVAL,82H;初始化8255
OUT0D6H,AL
MOVAL,34H;初始化8253
OUT1E6H,AL
MOVAL,54H
OUT1E6H,AL
MOVAL,90H
OUT1E6H,AL
MOVAL,FFH;8253通道0计数初值
OUT1E0H,AL
OUT1E0H,AL
MOVAL,46;8253通道1计数初值
OUT1E2H,AL
MOVAL,05H;8253通道2计数初值
OUT1E4H,AL
XORDX,DX;清各标志单元
XORBX,BX
MOVAL,21H
OUT0D0H,AL;设初始状态:
东西方向红灯亮,南北方向绿灯亮
MOVCH,01H;初始时,某一绿灯亮
STI;开中断
…………
中断服务程序如下:
INAL,0D2H
ANDAL,01H
JNZCHANGE;不为0,说明车辆计数≥5,转移到变灯处理
INCBH
CMPBH,60
JAECHANGE;≥60,转移到变灯处理
ANDBL,01H
JNZCHANG1;BL0=1,当前状态:
南北红灯亮
MOVAL,21H
OUT0D0H,AL;东西红灯亮,不变灯
JMPRETURN;中断返回
CHANG1:
MOVAL,0CH
OUT0D0H,AL;南北红灯亮,不变灯
JMPRETURN;中断返回
CHANGE:
INCDL;变灯处理开始
CMPDL,10
JAYELLO;绿灯已闪烁5秒,转移到变黄灯处理
ANDBL,01H
JNZGREEN1;BL0=1,当前状态:
南北红灯亮,转移
ANDCH,01H
JNZGREEN2;CH0=1,当前状态:
绿灯亮
MOVAL,21H
OUT0D0H,AL;南北绿灯亮,东西红灯亮(不变)
MOVCH,01H;改变绿灯亮的标志
JMPRETURN;中断返回
GREEN2:
MOVAL,20H
OUT0D0H,AL;南北绿灯灭,东西红灯亮(不变)
MOVCH,00H;改变绿灯亮的标志
JMPRETURN;中断返回
GREEN1:
ANDCH,01H
JNZGREEN3;CH0=1,当前状态:
绿灯亮
图8-33交通灯控制中断服务程序流程图
MOVAL,0CH
OUT0D0H,AL;东西绿灯亮,南北红灯亮(不变)
MOVCH,01H;改变绿灯亮的标志
JMPRETURN;中断返回
GREEN3:
MOVAL,04H
OUT0D0H,AL;东西绿灯灭,南北红灯亮(不变)
MOVCH,00H;改变绿灯亮的标志
JMPRETURN;中断返回
YELLO:
INCDH;黄灯亮处理开始
CMPDH,10
JAYELLO1;黄灯已亮5秒,转移到变红灯处理
ANDBL,01H
JNZYELLO2;BL0=1,当前状态:
南北红灯亮,转移
MOVAL,22H
OUT0D0H,AL;东西红灯亮,南北黄灯亮
JMPRETURN;中断返回
YELLO2:
MOVAL,14H
OUT0D0H,AL;南北红灯亮,东西黄灯亮
JMPRETURN;中断返回
YELLO1:
ANDBL,01H
JNZRED1;原状态:
南北红灯亮
MOVAL,0CH
OUT0D0H,AL;南北红灯亮,东西绿灯亮
JMPRED
RED1:
MOVAL,21H
OUT0D0H,AL;东西红灯亮,南北绿灯亮
RED:
ADDBL,01H;南北标志取反
XORDX,DX
XORBH,BH
MOVCH,01H
RETURN:
STI
IRET;中断返回
5.图8-80(见教材)是一个检测开关状态并控制相应的继电器通断的电路。
要求当开关S0~S7之一闭合时,使相应的继电器K0~K7之一吸合(即让驱动电流流过继电器线圈);若开关处于断开状态,则使相应的继电器释放。
系统每隔20ms应检测一遍开关状态,并对继电器做相应控制。
图中8255A的4个端口地址分别为2C0H、2C2H、2C4H和2C6H。
试完成:
(1)8255A的初始化编程(初始状态所有继电器的线圈均无电流通过)。
(2)设系统中具有一个2MHz的时钟信号源,另由一片8253来实现20ms的定时,每当20ms到时自动向CPU申请中断。
编写中断服务程序,并在其中完成开关的检测和继电器的控制。
【解】
(1)8255A的初始化编程:
8255A的方式选择控制字的内容:
82H
D7
D6
D5
D4
D3
D2
D1
D0
1
0
0
0
×
0
1
×
控制字标志
端口A设置成方式0
端口A为输出口
端口C
端口B设置成方式0
端口B为输入口
端口C
初始化程序:
MOVAL,82H;方式选择控制字送AL
OUT2C6H,AL;方式选择控制字输出给8255A控制端口
MOVAL,00H;
OUT2C0H,AL;8255APA端口输出0,使所有继电器的线圈均无电流通过
(2)开关S0~S7之一闭合时,相应的PB0~PB7的输入为1;PA0~PA7输出高电平
(1)时,可以使相应的继电器K0~K7吸合;
中断服务程序:
PUSHAX
INAL,2C2H;从端口B输入数据
OUT2C0H,AL;从端口A输出数据
POPAX
STI
IRET;中断返回
6.设8086系统中有一片8251A芯片,其端口地址分别为130H和132H。
请按以下要求分别编出8251A的初始化程序:
(1)全双工异步方式通信,波特率系数为16,每个字符数据为7位,偶校验,1.5个停止位,传送过程错误不复位,且不使用调制解调器。
(2)全双工同步方式通信,每个字符数据为8位,不带校验,内同步,两个同步字符分别为EFH和FEH。
【解】
(1)8251A的方式选择控制字的内容:
0BAH
D7
D6
D5
D4
D3
D2
D1
D0
1
0
1
1
1
0
1
0
1.5个停止位
偶校验
每个字符数据为7位
波特率系数为16
初始化程序:
MOVAL,0BAH;方式选择控制字送AL
OUT132H,AL;方式选择控制字输出给8255A控制端口
(2)8251A的方式选择控制字的内容:
0CH
D7
D6
D5
D4
D3
D2
D1
D0
0
0
×
0
1
1
0
0
内同步,两个同步字符
无校验
每个字符数据为8位
同步方式
初始化程序:
MOVAL,40H
OUT132H,AL;复位8251A
MOVAL,0CH;方式选择控制字送AL
OUT132H,AL;方式选择控制字输出给8255A控制端口
MOVAL,0EFH
OUT132H,AL;写入第一个同步字符
MOVAL,0FEH
OUT132H,AL;写入第二个同步字符
7.两台计算机均利用8251A芯片进行串行通信,通信规则为:
一方进行发送、另一方进行接收的半双工异步通信方式,波特率系数取16,每个字符传送7位,奇校验,2个停止位。
试用查询方式实现串行通信,设计出逻辑电路图,并编写通信程序。
【解】
【解】逻辑电路图如图8-34所示,设8251A的口地址:
1A0H、1A2H。
图8-34两台计算机串行通信的逻辑电路图
8251A的方式选择控制字的内容:
0DAH
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0
1
1
0
1
0
2个停止位
奇校验
每个字符数据为7位
波特率系数为16
8251A的操作命令控制字(内部复位)的内容:
40H
D7
D6
D5
D4
D3
D2
D1
D0
0
1
0
0
0
0
0
0
使8251A退回到接受方式选择控制字状态
8251A的操作命令控制字(允许发送)的内容:
37H
D7
D6
D5
D4
D3
D2
D1
D0
0
0
1
1
0
1
1
1
请求发送
全部错误标志复位
正常工作
接收允许
数据终端准备好
允许发送
(1)发送程序
MOVDX,1A2H
MOVAL,00
OUTDX,AL;复位→方式命令→工作命令
MOVAL,40H
OUTDX,AL;内部复位(D6=1)
NOP
MOVAL,0DAH
OUTDX,AL;方式选择控制字输出给8251A控制端口
MOVAL,37H
OUTDX,AL;工作命令:
D0=1允许发送
MOVCX,2DH;发送字节数
MOVSI,300H;发送首址
L1:
MOVDX,1A2H
INAL,DX
ANDAL,01H;D0=1:
发送准备好
JZL1;发送状态(TXRDY)未准备好
MOVDX,1A0H
MOVAL,[SI]
OUTDX,AL;发送数据
INCSI
LOOPL1
MOVAX,4C00H
INT21H
8251A的操作命令控制字(允许接收)的内容:
14H
D7
D6
D5
D4
D3
D2
D1
D0
0
0
0
1
0
1
0
0
使全部错误标志复位
正常工作
接收允许
(2)接收程序
MOVDX,1A2H;复位→方式命令→工作命令
MOVAL,00
OUTDX,AL