现代微型计算机原理与接口技术习题解答(接口部分内容摘要:

8255A怎样区分这两种控制字。 写出 A端口作为基本输入, B 端口作为基本输出的初始化程序。 解: ( 1) 8255A 的方式选择控制字和 C 口按位控制字的端口地址一样,它们之间的区别在控制字的 D7 位(特征位)的值不同, 8255A的方式选择控制字 D7=1,而 C口按位置位 /复位控制字 D7=0。 ( 2) 初始化程序:(设端口地址为, A口: 200H, B口: 201H,控制口: 203H) MOV AL, 90H MOV DX, 203H OUT DX, AL 2. 用 8255A的 A端口接 8位二进制输入, B端口和 C端口各接 8只发光二极管显示 二进制数。 编写一段程序,把 A端口读入的数据送 B端口显示,而 C端口的各位则采用置 0/置 1的方式显示 A端口的值。 解:(设端口地址为, A口: 200H, B口: 201H, C口: 202H,控制口: 203H) MOV AL, 90H ; 8255A初始化: MOV DX, 203H ; 8255A各组方式 0, A口输入 OUT DX, AL ; B、 C 口输出 MOV DX, 200H IN AL, DX ;读 A口输入值 MOV DX, 201H OUT DX, AL ;送 B 口输出 MOV AH, AL ; A口输入值转存在 AH 中 MOV DX, 203H MOV CX, 08 ; CX 置循环次数初值 MOV AL, 00H ; C 端口置 0/置 1 控制字初值 LPA: AND AL, 0FEH ;清除最低位 SHR AH, 1 ; A端口一位转入 CF ADC AL, 0 ; A端口一位从 CF 转入命令字 OUT DX, AL ; A端口一位从送往 C端口对应位 ADD AL, 02H ;形成下一个命令字 LOOP LPA ;处理 C 端口下一位 3. 将 8255A用作两台计算机并行通信的接口电路 , 请画出采用查询式输入 /输出方式工作的接口电路 , 并写出采用查询式输入 /输出方式的程序。 解: 用两片 8255作两台计算机 8088_A与 8088_B之间并行通信的接口电路,两片 8255之间的连接如下图所示。 两片 8255 均在方式 查询方式下工作。 8088A8255A8088BD7~D0A0A1A0A1D7~D0A口B口A口A0A1A0A1A0A1地址译码CS 地址译码地址译码PC6( ACK )PC4( STB )A口CS8255A 8255BPC0PC0 ( 1) 8088_A输出程序: ( 8255_A 的 A 口作为数据输出口, C 口的 PC0作为“数据输出选通”信号,负脉冲输出。 C 口的 PC6作为“应答”信号输入,负脉冲有效。 端口地址: A口: 200H, C口: 202H,控制口: 203H) DATA SEGMENT Buffer DB “This is a example. ”, 0DH, 0AH, 1 DATA ENDS CODE SEGMENT START: MOV AX, DATA MOV DS, AX LEA BX, Buffer ;输出缓冲区指针送 BX MOV DX, 203H MOV AL, 0A0H ; 8255_A的方式选择字, A口工作在方式 输出 , C口低四位输出 OUT DX, AL MOV AL, 1 OUT DX, AL ;将 PC0 置 1 CALL DELAY ;延时等待对方完成初始化 ; A口查询方式输出 NEXT: MOV DX, 202H IN AL, DL TEST AL, 80H ;判别 OBF 是否有效 JZ NEXT ;数据尚未取走,等待 MOV DX, 200H MOV AL, [BX] OUT DX, AL ;输出一项数据 INC BX MOV DX, 203H MOV AL, 0 OUT DX, AL NOP NOP INC AL OUT DX, AL ;通过 PC0 向对方发选通信号(负脉冲) CMP BYTE PTR[BX1], 1 ;判断输出是否完成 JNE NEXT ;未完成,继续 MOV AX, 4C00H INT 21H CODE ENDS END START ( 2) 8088_B输入程序: ( 8255_B的 A口作为输入,方式 1, PC4作为“数据输入选通”信号,输入,负脉冲有效。 PC0为“应 答”信号输出,负脉冲有效。 端口地址: A口: 210H, C口: 212H,控制口: 213H) DATA SEGMENT Buffer DB 80 DUP(。 ) DATA ENDS。 CODE SEGMENT START: MOV AX, DATA MOV DS, AX LEA BX, Buffer ;输入缓冲区指针送 BX MOV DX, 213H MOV AL, 0B0H ; 8255_B的方式选择字, A口工作在方式 1,输入, C口低四位输出。 OUT DX, AL MOV AL, 01H OUT DX, AL ; PC0 置 1,表示没有“应答”信号 CALL DELAY ;延时等待对方状态就绪 ; A口查询方式输入 AGA: MOV DX, 212H IN AL, DX TEST AL, 20H JZ AGA ; PC5 ( IBF )是否为 1,不是,无数据输入,继续查询 MOV DX, 210H IN AL, DX MOV [BX], AL MOV DX, 212H MOV AL, 0 OUT DX, AL INC BX NOP NOP INC AL OUT DX, AL ;通过 PC0向发送方发“应答”负脉冲 CMP BYTE PTR[BX1], 1 ;数据接收完了吗。 JNE AGA ;未完,继续 MOV AX, 4C00H INT 21H CODE ENDS END START 说明: 这道题有多种可选的解法,上面的方法是程序比较简单的一种。 这种方法实施时,应先启动 8088B,使它首先“就绪”,然后开始通讯。 由于双方都用负脉冲进行选通,联络过程比较简单,也比较可靠。 可选的另一种方法是:在上述连接 的基础上用中断方式进行数据传输,以提高 CPU的工作效率。 需要编制双方的中断服务程序,初始化时要设置中断向量,允许 8255中断,开放中断等操作。 当然也要连接相应的中断请求信号线。 可选的第三种方法是:双方用一根状态线( C 端口某一位)送往对方,用这两根线进行联络(“握手”)。 这种方法看似简单,其实程序是比较复杂的。 双方联络的过程如下图。 ①②③④⑤⑥A 状态数 据B 状态 8088B 在初始化完成后,把它的状态线置为“高电平”,表示可以开始接受数据。 而 8088A在初始化完成后,把它的状态线置为“低电平”,表示数据传输尚未开始。 ① 8088A查询 8088B的状态,在发现 8088B“就绪”(状态线为高电平)后,把数据发往 8255 的( A或 B)端口。 ② 8088A发出数据之后把本机状态置为“就绪”(高电平),表示数据已经送到端口的数据线上。 ③ 8088B查询 8088A的状态,得知 8088A的状态线“就绪”,知道 8088A已经把数据送出,于是从 8255 接收数据,并把自身的状态线置为“未就绪”,表示已经把8088A发出的数据接收。 ④ 8088A 查询到 8088B 的状态线变为低电平,知道对方已经把数据接收完成,于是把本机的状态线置为“低电平”,表示这个数据的发送已 经完成,而下一个数据尚未发出。 ⑤ 8088B查询到 8088A的状态线变为“低电平”,知道对方已经结束了第一个数据的传输,在本机做好下一个数据的接收准备之后(例如,把数据存入缓冲区,如果缓冲区满,则把缓冲区内容存入磁盘文件),把本机状态线置为“高电平”,表示已经做好了接收下一个数据的准备。 ⑥ 8088A 得知 8088B 做好准备,发送下一个数据。 于是,下一个数据的传输可以由此开始 (转① )。 这种方法实施时,应首先启动 8088A。 4. 设计一个用 8255A作为 8个七段显示器的接口电路,并设计一个把内存地址为 ADDRA的 8 个数字在这 8 个七段显示器上显示的程序。 解:设 8 个七段显示器采用共阳接法, A口控制段的显示, B口控制位的显示。 端口地址 A口: 200H, B口: 201H,控制口: 203H DATA SEGMENT ADDRA DB , , , , , , , TABLE DB 40H, 4FH, 24H, 30H, 19H DB 12H, 02H, 78H, 00H, 10H DISPBIT DB ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV AL, 80H ;对 8255A初始化,方式 0,输出 MOV DX, 203H OUT DX, AL LEA BX, TABLE ; BX 置为七段码表首地址 MOV DISPBIT, 7FH ;置位码初值为 7FH LEA SI, ADDRA ; SI 置为显示缓冲区首地址 MOV CX, 8 ; CX 置为循环次数初值 8 AGA: MOV AL, 0FFH MOV DX, 201H OUT DX, AL ;熄灭所有数码管 MOV AL, [SI] ;取出一个待显示数 XLAT ;转换成七段码 MOV DX, 200H OUT DX, AL ;送入段码端口 MOV AL, DISPBIT ; MOV DX, 201H OUT DX, AL ;送当前位码,点亮一个数码管 ROR DISPBIT, 1 ;产生下一个位码 INC SI ;修改指针,指向下一个待显示数据 CALL DELAY ;延时 LOOP AGA ;处理下一个数码管的显示 MOV AX, 4C00H INT 21H CODE ENDS END START 5. 8254定时 /计数器的定时与计数方式有什么区别。 8254在方式 0工作时,各通道的 CLK、 GATE信号有什么作用。 各通道的控制字地址都相同, 8254 是怎样区分的。 解: ( 1) 8254作为计数器使用时,对 CLK端的输入脉冲进行单纯的减法计数,这时 CLK端输入的脉冲不作为计时基准。 此外,用作计数器时,计数完成后必须重新初始化,只能使用一次。 8254作为定时器使用时,要求 CLK 端输入的脉冲必须作为时钟基准,通过对该基准时钟脉冲的计数来实现精确定时。 用作定时器时,计数的过程周而往复,重复进行。 ( 2) 8254 工作在方式 0 时, CLK 端输入计数用的脉冲信号; GATE 信号为高电平时,对 CLK 端输入的脉冲进行计数; GATE信号为低电平时,暂停计数; GATE信号重新为高电平后,恢复原先的计数。 ( 3) 由 8254的方式控制字中的 D D6 两位来选择计数通道。 6. 设 8254的端口地址为 0240H~ 0243H,通道 0输入的 CLK频率为 1MHz,为使通道 0 输出 1KHz 的方 波,编写初始化程序。 如果让通道 0 与通道 1 级联(即 OUT0 接 CLK1)实现 1秒钟定时,则初始化程序如何编制。 解: ( 1) 通道 0 输出 1KHz的方波: 计数初值为 1MHz/1KHz = 1000,等于十六进制数 03E8H,控制字设定为先写低 8位,后写高 8 位,方式 3 工作,二进制计数方式,所以控制字为 36H。 初始化程序如下: MOV AL, 36H; MOV DX, 243H ;写入通道 0的控制字 OUT DX, AL ; MOV DX, 240H ; MOV AL, 0E8H ;写入通道 0的时间常数 OUT DX, AL ; MOV AL, 03H ; OUT DX, AL ; (。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。