第六章“输入输出及接口”习题答案

合集下载

微机原理与接口第六章答案

微机原理与接口第六章答案

出问题较多的题目6.4 在CPU与外设之间的数据接口上一般加有三态缓冲器,其作用如何?参考答案要点:1)实现CPU和不同外设的速度匹配。

CPU通过数据总线和I/O设备交换数据,但大多数外设的速度比CPU慢很多,无法在时序上和CPU同步,因此,需在I/O接口电路中设置缓冲器,暂存数据,以使高速工作的CPU与慢速工作的外设起协调和缓冲作用,实现数据传送的同步。

2)实现外设和数据总线的有效隔离。

众多外设中,在某一时段仅允许被CPU 选中的设备通过接口享用总线与CPU 交换信息,这就要求接口电路具备使外设与总线隔离的作用。

因此,需选用起缓冲和隔离作用的三态门电路,只有当CPU 选中此接口,三态门选通时,才允许选定的输入设备将数据送至系统数据总线,而其他没有被选中的输入设备,此时相应的接口三态门“关闭”,从而达到与数据总线隔离的目的。

存在的问题:大多数同学对于第2点的回答有欠缺。

6.8 CPU响应(可屏蔽)中断有哪些条件?为什么需要这些条件?参考答案要点:三个条件:1)CPU执行完当前指令;2)有中断请求,且无NMI请求和DMA请求;3)CPU开放中断(或中断允许标志IF=1)。

存在的问题:部分同学把有中断请求这个条件忽略了。

6.9 CPU在中断周期要完成那些主要的操作?参考答案要点:1)关中断;2)保存程序断点和PSW;3)获取中断服务程序入口地址,转入相应的中断服务程序。

存在的问题:中断周期IT这个概念有明确的含义,是响应过程的一个专用的过渡周期,有的机器称之为中断响应总线周期。

在这个周期中依靠硬件(也称中断隐指令)实现程序切换。

中断周期结束后,就进入取指周期。

我们教科书(P213)把中断周期和中断的全过程混为一谈了,容易误导大家。

6.16试比较保护断点与保护现场的主要异同点。

参考答案要点:相同点:二者均用于程序切换时保存原程序的运行数据或状态信息。

不同点:1)保护断点是把程序的断点值(IP和CS值)压栈保存;而保护现场则是把相关寄存器和PSW的值保存起来(通常是压栈保存);2)保护断点通常是在中断响应阶段完成,而保护现场则通常在中断处理阶段完成(8086/8088系统保存PSW的值在中断响应阶段完成)。

PLC第六章习题答案

PLC第六章习题答案

第六章习题答案1、简述可编程控制器设计的一般原则和步骤可编程控制系统设计时应遵循以下原则:(1)最大限度地满足被控对象的要求;(2)在满足控制要求的前提下,力求使控制系统简单、经济、适用及维护方便;(3)保证系统的安全可靠;(4)考虑生产发展和工艺改进的要求,在选型时应留有适当的余量。

由于PLC的结构和工作方式与一般微机和继电器相比各有特点,所以其设计的步骤也不尽相同,具体设计步骤如下:(1)详细了解被控对象的生产工艺过程,分析控制要求;(2)根据控制要求确定所需的用户输入/输出设备;(3)选择PLC类型;(4)分配PLC的I/O点,设计I/O连接图;(5)PLC软件设计,同时可进行控制台的设计和现场施工;(6)系统调试,固化程序,交付使用。

2、可编程控制器的选型需要考虑哪些问题?(1)PLC容量的选择①首先要对控制任务进行详细的分析,把所有的I/O点找出来,包括开关量I/O和模拟量I/O 这些I/O点的性质。

②然后要对用户存储器容量进行估算。

总存储器字数=(开关量输入点数+开关量输出点数)×10+模拟量点数×150。

然后按计算存储器字数的25%考虑余量。

(2)PLC机型的选择由于生产PLC的厂家众多,实现的功能虽基本相同,性能、价格和编程语言却有较大差别,一般从以下几个方面考虑。

①功能方面:所有PLC一般都具有常规的功能,但对某些特殊要求,就要知道所选用的PLC 是否有能力完成控制任务。

②价格方面:不同厂家的PLC产品价格相差很大,有些功能类似、质量相当、I/O点数相当的PLC的价格能相差40%以上。

在使用PLC较多的情况下,性价比是一个重要的因素。

③售后服务:应考虑相关的技术支持,统一型号方便维护,系统改造、升级等因素。

3、附加题:电动葫芦起升机构的动负荷试验控制要求如下:①可手动上升、下降(点动)②自动运行时,选择开关转向自动位置,葫芦就开始运行,即:上升5秒→停10秒→下降5秒→停10秒,然后发出声光信号,并停止运行。

机电-第6章输入输出及DMA接口技术

机电-第6章输入输出及DMA接口技术
第六章 输入输出及DMA接口技术
本章主要内容:
1. I/O概述 2. I/O指令和I/O地址译码 3. 8237DMA控制器
6.1概述
• CPU与外设间交换的信息
1.数据信号
(1)数字量 (2)模拟量 (3)开关量
2. 状态信号
状态是反映外设当前工作状态的信号。CPU通过对外设状态信号的 读取可得知其工作状态。
查询方式下,中央处理器需要花费较多的时间去“询问”状态,而接口处于被动 状态。 特点:接口就绪后,才进行数据传送,否则只能等待或转入其它程序段。适用于 CPU与外设工作不同步。 优点:传送数据前,CPU先检测接口的状态,保证数据传送的正确率高。 缺点:CPU要不断地查询外设,当外设没有准备好时,CPU要等待,CPU的利 用率不高。
2、I/O端口独立编址 ●这种编址方式是外设端口地址和存储器单元地址,分别是 建立地址空间。 ●专用的I/O指令访问I/O端口。
① 优点:其一是I/O端口不占用内存空间; 其二是访问I/O端口指令仅需两个字节,执行 速度快; 其三是读程序时只要是I/O指令,即知是CPU 访问I/O端口。
② 缺点:其一是要求CPU有独立的I/O指令; 其二是CPU访问I/O端口的寻址方式少。
6.4 8237DMA控制器
一、主要功能 (1)在一个芯片中有4个独立的DMA通道,每个通道均可独立地传送数据。 (2)每个通道的DMA请求都可以分别允许和禁止。 (3)每个通道的DMA请求有不同的优先权,优先权可以是固定的,也可以是旋 转的。 (4)每个通道—次传送的最大长度可达64KB。可以在存储器与外设间进行数 据传送,也可以在存储器的两个区域之间进行传送。 (5)8237的DMA有单字节传送、数据块传送、请求传送方式、级连方式等4种 传送方式。 每一种方式下,都能接收外设的请求信号DREQ,向外设发出响应信号DACK, 向CPU发出DMA请求信号HRQ,当接收到CPU的响应信号HLDA后就可以接 管总线,进行DMA传送。每传送1个数据,即修改地址指针,字节数减l,当 规定的传送长度减到0时,会发出TC信号结束DMA传送或重新初始化。 (6)有一条结束处理的输入信号,允许外界用此输入端来结束DMA传送或重新 初始化。 (7)8237可以级联、任意扩展通道。

Ch6 微型计算机原理与接口技术 答案

Ch6 微型计算机原理与接口技术  答案
能。 I/O端口的编址方式通常有两种:一是与内存单元统一编址,二是独立编址。8088/8086系统采用I/O端口独立编 址方式。 6.2 试比较4种基本输入输出方法的特点。(不要求) 解:在微型计算机系统中,主机与外设之间的数据传送有4种基本的输入输出方式: 无条件传送方式、查询工作方式、中断工作方式、直接存储器存取(DMA)方式。 它们各自具有以下特点: (1)无条件传送方式适合与简单的、慢速的、随时处于“准备好”接收或发送数据的外部设备,数据交换与指令的 执行同步,控制方式简单。 (2)查询工作方式针对并不随时“准备好”、且满足一定状态才能实现数据的输入/输出的简单外部设备,其控制方 式也比较简单,当CPU的效率比较低。 (3)中断工作方式是由外部设备作为主动的一方,在需要时向CPU提出工作请求,CPU在满足响应条件时响应该 请求并执行相应的中断处理程序。这种工作方式使CPU的效率提高,但控制方式相对较复杂。 (4)DMA方式适合于高速外设,是4种基本输入/输出方式中速度最高的一种。
解:16位地址信号通过译码电路与74LS244芯片连接。其连接如下图所示。
74LS244
...

IOR
A 15
A 13
A 12
A 11

A 10

A9

A8
线
A2
A 14
A7
A6
A5 A4 A3
A A
01
DB
≥1 ≥1
&
D0
I0
I1 D7
. . .
E1 I7
E2
2
www.khd课后a答w案.网com
断点的逆过程。即CPU会自动地将堆栈内保存的断点信息弹出到IP、CS和FLAG中,保证被中断 的程序从断点处继续往下执行。 6.11 CPU满足什么条件能够响应可屏蔽中断?

第6章作业参考答案

第6章作业参考答案
2.30 对8251A芯片的偶地址端口进行读操作时,可从状态寄 存器中读出状态信息。 (×)
9
三、简答题
3.1 8255A的方式选择控制字和端口C置0/置1控制字都是写 入控制端口的,8255A是怎样识别的? 解:通过最高位识别,D7=1,为方式选择控制字;D7=0, 为端口C置0/置1控制字。
率因子为16,则波特率为
。 (A)
A. 1200 B. 2400 C. 9600
D. 19200
5
二、判断对错,对的打“√”,错的打“χ”
2.1 锁存器即可作为输出接口,又可作为输入接口使用。 (×)
2.2 CPU送给8255A的控制字,以及输入数据和输出数据都通过 8255A内的数据总线缓冲器传送。 ( √ )
B. -5V~+5V
C. -15V~+15V D. 0~+15V
1.16 异步串行通信中,常采用波特率的16倍频作为接收时钟,
其目的是
。 (B)
A. 提高采样精度 B. 识别正确的起始位 C. 提高接收速率 4
1.17 在异步串行输入/输出接口中,实现并行数据与串行数 据的转换的主要功能部件是 。(A)
2.6 利用8255A的C口按位置位/复位功能,一次可使C口的几 位同时置1或置0。 (×)
2.7所谓并行接口和串行接口,顾名思义,就是指I/O接口与
CPU和外设之间的通信方式都是一个为并行,一个为串行。 (×)
6
2.8 8255A工作于方式2时,C口的8条线均不能用于输入/输 出。 (×)
3
1.12 两台PC机通过其串行口直接通信时,通常只使用

根信号线。(A)
A. TXD、RXD和GND

习题解答(第六章)

习题解答(第六章)

C 语言程序设计习题解答(第六章)6.1 题目略[解答] (1) A (2) A (3) C (4) D6.2 略6.3 从键盘输入3个整数, 要求设3个指针变量p1, p2, p3, 使p1指向3个数中的最大者, p2指向次大者, p3指向最小者, 最后按由大到小的顺序输出这3个数.[解答]#include <stdio.h>void main(){int x1, x2, x3, *p1=&x1, *p2=&x2, *p3=&x3, *p;printf("请输入3 个整数: ");scanf("%d%d%d", &x1, &x2, &x3);if(*p1<*p2){p=p1; p1=p2; p2=p;}if(*p1<*p3){p=p1; p1=p3; p3=p;}if(*p2<*p3){p=p2; p2=p3; p3=p;}printf("从大到小: %d, %d, %d\n", *p1, *p2, *p3);}6.4 想使指针变量pt1指向a和b中的较大者, pt2指向a和b中的较小者, 请问以下程序能否达到此目的?#include <stdio.h>void swap(int *p1, int *p2){int *p;p=p1; p1=p2; p2=p;}int main(void){int a, b;int *pt1, *pt2;scanf("%d, %d", &a, &b);pt1=&a; pt2=&b;if(a<b) swap(pt1, pt2);printf("%d, %d\n", *pt1, *pt2);return 0;}请分析此程序的执行情况, 指出pt1和pt2的指向并修改程序, 使之能够实现题目要求. [解答]main函数调用swap函数时, 将指针pt1和pt2的值分别赋给形式参数p1和p2, pt1与p1虽然都指向变量a, 但它们是不同的指针变量, 同样, pt2与p2也是不同的指针变量, swap函数中虽然改变了p1和p2的指向, 但不影响main函数中pt1和pt2的指向. 为了实现题目的要求, 可以修改程序, 将pt1与pt2的地址传给函数swap, 同时将swap的形式参数改为二级指针. 正确的程序如下:#include <stdio.h>void swap(int **p1, int **p2){int *p;p=*p1; *p1=*p2; *p2=p;}int main(void){int a, b;int *pt1, *pt2;scanf("%d, %d", &a, &b);pt1=&a; pt2=&b;if(a<b) swap(&pt1, &pt2);printf("%d, %d\n", *pt1, *pt2);return 0;}6.5 略6.6(1) 想输出数组a的10个元素, 用以下程序行不行? 为什么?#include <stdio.h>void main(){int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;for(i=0; i<10; i++, a++)printf(“%d”, *a);}请修改程序使之能实现题目要求.(2) 想输出数组a的10个元素, 用以下程序行不行? 请与上题对比并进行分析, 得到必要的结论.#include <stdio.h>void print_arr(int a[], int n){int i;for(i=0; i<n; i++, a++)printf("%d", *a);}void main(){int arr[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};print_arr(arr, 10);}请修改程序使之能实现题目要求.[解答](1) 不行, 因为数组名a表示该数组的首地址, 是一个指针常量, 其值是不能改变的, 因此不能进行++ 运算. 正确的程序如下:void main(){int a[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, i;for(i=0; i<10; i++)printf("%d ", *(a+i));}(2) 可以, 因为形参数组本质上是一个指针变量, 其值可以改变, 可以进行++ 运算.6.7 有一个数列, 含有20个整数, 现要求编一个函数, 能够对从指定位置开始的几个数按相反顺序排列, 并在main函数中输出新的数列. 例如, 原数列为:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20若要求对从第5个数开始的10个数进行逆序处理, 则得到的新数列为1, 2, 3, 4, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 15, 16, 17, 18, 19, 20[解答]#include <stdio.h>#define N 20void reverse(int a[], int m, int k) /* 将数组a 从第m 个数开始的k 个数按相反顺序排列*/ {int temp, *p, *q;for(p=a+m-1, q=p+k-1; p<q; p++, q--) /* p, q 初始时分别指向要反序的起始与终止位置*/{temp=*p; *p=*q; *q=temp;}}void main(){int i, m, k, a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};printf("请输入要反序的数列的起始位置和长度: ");scanf("%d%d", &m, &k);reverse(a, m, k);printf("反序后的数列为: ");for(i=0; i<N; i++)printf("%d ", a[i]);printf("\n");}6.8 有n个人围成一圈, 顺序排号, 从第1号开始报数, 从1报到m, 凡报到m的人退出圈子.问最后留下的是原来第几序号的人? 要求如下:(1) 用函数实现报数并退出;(2) n和m的值由main函数输入并通过实参传递给该函数, 最后结果由main函数输出;(3) 要求使用指针.[解答]#include <stdio.h>#define N 100int baoshu(int a[], int n, int m) /* n 个人围成一圈, 从1 到m 报数的函数*/{int i, cnt, num, *p, last;for(i=0; i<n; i++) /*给每一个人赋予一个初始位置号*/*(a+i)=i+1;cnt=0; /* cnt 用于从1 到m 记数, 模拟报数*/num=0; /* num 用于记录出圈人数*/while(num<n)for(p=a; p<a+n; p++) /* 报数*/if(*p) /* 若*p 在圈中*/{cnt++; /* 报数记数器加1 */if(cnt==m) /* 若报数记数器到达m */{/* 处理出圈事宜*/last=*p; /* 用last 记录当前出圈者的位置号*/*p=0; /* 位置号清零, 表示从圈中删除此人*/cnt=0; /* 报数记数器清零, 下一个人重新开始报数*/num++; /* 出圈人数加1 */}}return last;}void main(){int n, m;int a[N]; /* 用数组 a 记录每一个人在圈中的位置 */printf("输入人数 n (<%d) 和所报的最大数 m: ", N);scanf("%d%d", &n, &m);printf("最后留下的是原来第 %d 号的人.\n", baoshu(a, n, m));}6.9 有一个二维数组a, 大小为53⨯, 其元素为⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=2927252321191715131197531a (1) 请说明以下各表达式的含义:a, a+2, &a[0], a[0]+3, *(a+1), *(a+2)+1, *(a[1]+2), &a[0][2], *(a[0][2]), *(*(a+2)+1), a[1][3].(2) 如果输出a+1和&a[1][0], 它们的值是否相等? 为什么? 它们各代表什么含义?[解答](1)a : 数组首地址, 等价于 &a[0]a+2 : 第 2 行的地址, 等价于 &a[2]&a[0] : a[0]的地址, 即第0行的地址, 也是整个数组的首地址, 等价于a a[0]+3 : 第 0 行第 3 列元素的地址, 即 &a[0][3]*(a+1) : 第 1 行第 0 列元素的地址, 等价于 a[1] 和 &a[1][0]*(a+2)+1 : 第 2 行第 1 列元素的地址, 即与 &a[2][1] 等价*(a[1]+2) : 第 1 行第 2 列元素的值, 即 a[1][2] = 15&a[0][2] : 第 0 行第 2 列元素的地址*(a[0][2]) : 无意义*(*(a+2)+1) : 第 2 行第 1 列元素的值, 即 a[2][1] = 23a[1][3] : 第 1 行第 3 列元素的值, 等于 17.(2) 如果输出a+1和&a[1][0], 它们的值相等, 但它们有着不同的含义, a+1 等价于 &a[1], 表示第1行的首地址, 是一个二级指针; &a[1][0] 表示第1行第0列的地址, 是一个一级指针. 由于a[1][0] 是第1行的首元素, 因此它的地址刚好就是第1行的首地址, 从而两者输出的值相等.6.10 有一个整型二维数组, 大小是n m ⨯, 要求找出最大值所在的行和列以及该最大值, 请编写一个程序max, 要求如下:(1) 以数组名和数组大小为该函数的形参;(2) 数组元素的值在main 函数中输入, 结果在max 函数中输出.[解答]#include <stdio.h>#define M 3#define N 4void max(int a[], int m, int n){int i, j, row=0, col=0, max=*a;for(i=0; i<m; i++)for(j=0; j<n; j++, a++)if(*a>max){max=*a;row=i;col=j;}printf("最大值是%d, 在第%d, 第%d 列.\n", max, row, col);}void main(){int i, j, a[M][N];printf("请输入%d * %d 个整数:\n", M, N);for(i=0; i<M; i++)for(j=0; j<N; j++)scanf("%d", &a[i][j]);max(*a, M, N);}6.11 有n个学生, 每个学生参加m门课程的考试, 要求编写一函数, 能检查n个学生有无不及格的课程, 如果某个学生有一门或一门以上课程不及格, 就输出该学生的学号(学号从0算起, 即0, 1, 2, …) 及其全部课程成绩.[解答]#include <stdio.h>#define M 5 /*学生数*/#define N 3 /*课程数*/void proc(float s[][N]){int i, j, k;for(i=0; i<M; i++){for(j=0; j<N; j++)if(s[i][j]<60.0) break;if(j<N){printf("第%d 个学生有不及格的课程, 其各门课的成绩为:\n", i);for(k=0; k<N; k++)printf("%7.2f", s[i][k]);printf("\n");}}}void main(){float score[M][N];int i, j;for(i=0;i<M;i++){printf("请输入第%d 个学生的成绩: ", i);for(j=0;j<N;j++)scanf("%f", &score[i][j]);}proc(score);}6.12 输入3行字符(每行60个字符以内), 要求统计出其中共有多少个大写字母, 小写字母, 空格及标点符号.[解答]#include <stdio.h>#include <string.h>#define M 3#define N 60void main(){int i, j, upper=0, lower=0, blank=0, punc=0; /* upper, lower, blank, punc 分别记录大写字母, 小写字母, 空格及标点符号的个数*/char str[M][N];printf("请输入%d 行字符, 每行不超过%d 个字符:\n", M, N);for(i=0; i<M; i++)gets(str[i]);for(i=0; i<M; i++)for(j=0; j<N && str[i][j]!='\0'; j++)if(str[i][j]>='A' && str[i][j]<='Z')upper++;else if(str[i][j]>='a' && str[i][j]<='z')lower++;else if(str[i][j]==' ')blank++;else if(str[i][j]>' ' && str[i][j]<'0' || str[i][j]>'9' && str[i][j]<127)punc++;printf("大写字母, 小写字母, 空格及标点符号的个数分别是%d, %d, %d, %d.\n", upper, lower, blank, punc);}6.13 指出下列程序的错误, 并分析出错的原因.#include <stdio.h>void Print(char *[], int len);int main(void){char *pArray[]={"Fred", "Barrey", "Wilma", "Betty"};int num=sizeof(pArray)/sizeof(char);printf("Total string numbers = %d\n", num);Print(pArray, num);return 0;}void Print(char *arr[], int len){int i;for(i=0; i<len; i++)printf("%s\n", arr[i]);}[解答]程序第6行试图计算指针数组pArray所含元素的个数, 但这是错误的, 一个数组所含元素个数应该等于数组大小除以数组元素类型的大小, 这个数组的元素是字符指针类型, 而不是字符类型, 正确的语句是:int num=sizeof(pArray)/sizeof(char *);6.14 建立一个动态二维数组, 用来存储1~10的1~4次幂.[解答]#include <stdio.h>#include <stdlib.h>#define M 10#define N 4void main(){int i, j, (*p)[N], pow;p=(int (*)[N])malloc(M*N);if(!p){printf("内存分配出错.\n");exit(1);}for(i=0; i<M; i++){pow=1;for(j=0; j<N; j++)p[i][j]=pow*=(i+1);}for(i=0; i<M; i++){for(j=0; j<N; j++)printf("%6d", p[i][j]);printf("\n");}// free(p);}6.15 略.6.16 题目略.[解答] (1) A (2) C.。

第六章_基本输入输出接口技术


20
6.3 CPU与外设之间的数据传送方式
[例] 设状态端口地址为086H,数据端口地址为084H,外 设忙碌D7=1,请用查询方式写出CPU从存储器缓冲区 Buffer送出1KB的数据给外设的程序段。 LEA SI , Buffer ;取Buffer的有效地址送SI MOV CX , 1000 ;循环次数 W1: MOV DX, 086H ;状态端口地址送DX W2: IN AL , DX ;从状态端口读入状态信息 AND AL,80H ; BUSY=0? JNZ W2 ; BUSY=1,返回继续查询 MOV AL,[SI] ; BUSY=0,取数据 MOV DX, 084H ;数据端口地址送DX OUT DX,AL ;数据输出到数据端口 INC SI ;SI指向下一个字节数据 LOOP W1 ;CX-1送CX≠0,循环 HLT ;CX=0,传送结束
FFFFF
内存 空间 I/O 空间
10
§6-2 I/O端口的编址与访问
二、 I/O端口地址的译码方法:
I/O端口地址译码的一般原则是:把CPU用于I/O端口寻址 的地址线分为高位地址线和低位地址线两部分:
将低位地址线直接连到I/O接口芯片的相应地址引脚, 实现片内寻址,即选中片内的端口。 将高位地址线与CPU的控制信号组合,经地址译码电 路产生I/O接口芯片的片选信号。 常见的译码器: 2/4线译码器74LS139 3/8线译码器74LS138
返回断点

6.3 CPU与外设之间的数据传送方式
关于中断的几点说明:
采用中断的数据传送方式时,外设处于主动申请地 位,CPU配合进行数据传送;CPU不必反复去查询 外设的状态,而是可以与外设“并行工作”,因此 提高了CPU的工作效率,并且更具有实时性。

第6章_ 输入输出接口

第六章输入输出接口6.1 微机接口技术为了使CPU能适应各种各样的外设,就需要在CPU与外设之间增加一个接口电路,由它完成相应的信号转换、速度匹配、数据缓冲等功能,以实现CPU与外设的连接,完成相应的输入输出操作。

一个接口的基本作用是在系统总线和I/O设备之间架起一座桥梁,以实现CPU与I/O设备之间的信息传输。

CPU内存终端、调制解调器A/D转换器D/A转换器键盘、鼠标、麦克风、扫描仪打印机显示器磁盘、U盘、光盘通信接口信号接口输入接口输出接口外存接口DB AB CB1.采用I/O接口的必要性速度不匹配:CPU速度高,外设的速度低。

不同的外设速度差异大,如硬盘速度高,每秒能传送兆位数量级,串行打印机每秒钟只能打印百位字符,而键盘的速度则更慢。

信号不匹配:CPU的信号为数字信号,数据采集输入的是模拟信号,需要对外部信号进行模/数转换,才能被计算机处理;同样,计算机输出的是数字信号,需要输出模拟信号时,必须要通过数/模转换。

信号格式不匹配:计算机接收和处理的是并行数据,而有些外部设备的信号为串行数据,这就需要使用接口电路进行串行数据和并行数据转换。

提高CPU的传输效率,需要利用接口电路对外设进行控制。

2.接口的功能:1)寻址功能识别是否是I/O口的操作信号,识别是否为端口的片选信号,识别是芯片的哪个寄存器被访问。

2)输入/输出功能根据CPU通过控制总线送来的读写信号决定是输入操作还是输出操作。

3) 可编程功能有些接口具有可编程特性,可以通过指令设定接口的工作方式,工作参数,以满足不同外设的要求。

4) 数据转换功能当外设提供的数据形式不是CPU能直接接受的形式时,则通过接口转换成CPU可接受的形式。

如A/D,串/并转换等,反之也一样。

5) 联络功能当CPU要访问外设时,首先要查询外设状态,能否接受访问,接口应将外设状态准备好,供CPU 查询;或向CPU发特定的信号通知外设已准备好。

6) 数据缓冲功能主机与外设速度相差很大,为了防止数据丢失,I/O接口均设有双向数据缓冲器。

第6章 基本输入输出接口


面向微机系统的专用接口芯片
与CPU和系统配套使用,以增强其总体功能
§6.1 接口的基本概念
接口电路的可编程性 许多接口电路具有多种功能和工作方式, 可以通过编程的方法选定其中一种 接口需进行物理连接,还需编写接口软件 接口软件有两类:
初始化程序段——设定芯片工作方式等 数据交换程序段——管理、控制、驱动外设, 负责外设和系统间信息交换
EN
输入
o
其中EN开门: 输入为1时 输入为0时
输出为1 输出为0
其中EN关门: 输入为1/0,输出为高阻
§6.1 接口的基本概念
(3)数据转换功能:对信号的形式和数据的格式进行 变换; (4)联络功能:与CPU和I/O设备进行联络就绪信号, 忙信号等; ⑸中断管理:发出中斯请求信号、接收中断响应信 号、发送中断类型码的功能。并具有优先级管理 功能; ⑹复位:接收复位信号,从而使接口本身以及所连 的外设进行重新启动; ⑺可编程:用软件来决定其工作方式,用软件来设 置有关的控制信号;
缺点:
I/O指令没有存储器指令丰富
0
80x86采用I/O端口独立编址
§6.1 接口的基本概念
对于8086,M和IO的不同之处: 地址线的条数:20、16 地址的范围:220、216、 指令不同产生的信号不同:M/IO
8088/8086的输入输出指令
输入输出指令举例 输入指令(IN:将外设数据传送给CPU内的AL/AX) IN AL,8 ;字节输入 演示 IN AL,DX ;字节输入 IN AX,8 ;字输入 IN AX,DX ;字输入 输出指令(OUT:将CPU内的AL/AX数据传送给外设) 演示 OUT 8,AL ;字节输出 OUT DX,AL ;字节输出 OUT 8,AX ;字输出 OUT DX,AX ;字输出

操作系统第6章1

设备管理的可扩充性,包括设备的增加和删除以及 对新的设备类型的适应性 2
第六章 输入输出系统
6.1.1 设备管理的功能 1)提供设备使用的用户接口
命令接口和编程接口 2)设备分配和释放
分配设备及相应的通道、设备控制器 3)设备的访问和控制
并发访问及差错处理 4) I/O缓冲和调度
提高I/O访问效率,缓解CPU与外设矛盾
设备管理程序用于控制与管理实现信息输入、输出和 存储的设备。由于I/O设备不仅各类繁多,而且彼此特性 和操作方式相差较大,从而使设备管理成为操作系统中 最繁杂且与硬件紧密相关的部分。 主要目标:
方便用户使用,实现对不同类型设备的统一管理、 使用并协调各台外围设备的并发运行
提高系统I/O效率,缓解CPU和各种不同处理速度的 外围设备之间的矛盾
3)直接内存存取型I/O控制方式 DMA控制器、数据传输单位扩大
4)通道型I/O控制方式 通道、I/O操作组织和数据传送的独立
11
第六章 输入输出系统
程序I/O控制方式(读操作为例)
12
第六章 输入输出为例)
13
第六章 输入输出系统
直接存储器访问方式
(1) 数据传输单位:数据块
25
第六章 输入输出系统
2. 设备驱动程序的特点 (1) 用于I/O请求进程与设备控制器间通信,具体说,它将 抽象的I/O请求转换成具体的I/O操作后传送给控制器。又把控 制器中所记录的设备状态和I/O操作完成情况,及时地反映给 请求I/O的进程。 (2) 与设备控制器以及I/O设备的硬件特性紧密相关,对于 不同类型的设备,应配置不同的驱动程序。 (3) 与I/O设备所采用的I/O控制方式紧密相关。 (4) 与硬件紧密相关,故部分程序代码必须用汇编语言书 写。目前有很多驱动程序的基本部分已经固化在ROM中。 (5) 驱动程序应允许可重入。一个正在运行的驱动程序常 会在一次调用完成前被再次调用。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1
第六章 输入输出及接口
〔习题6.2〕
I/O端口与存储器地址常有_____和_____两种编排方式,8088/8086处理器
支持后者,设计有专门的I/O指令。其中指令IN是将数据从_____传输到_____,
执行该指令时8088/8086处理器引脚产生_____总线周期。指令“OUT DX, AL”的目
的操作数是_____寻址方式,源操作数是_____寻址方式。
〔解答〕
(I/O端口与存储器地址)统一编址
(I/O端口与存储器地址)独立编址
外设
处理器
I/O读
(I/O端口的DX)寄存器间接
寄存器
〔习题6.4〕
基于教程P142图6-7接口电路,编程使发光二极管循环发光。具体要求是:单独按下
开关K0,发光二极管以L0、L1、L2、……L7顺序依次点亮,每个维持200ms,并不断重复,
直到有其他按键操作;单独按下开关K1,发光二极管以L7、L6、L5、……L0顺序依次点亮,
每个也维持200ms,并不断重复,直到有其他按键操作;其他开关组合均不发光,单独按下
开关K7,则退出控制程序。延时200ms可以直接调用子程序DELAY实现。
〔解答〕
again: mov dx,6000h
mov al,0ffh
out dx,al ;全不亮
again1: in al,dx
cmp al,7fh ;D7~D0=0111111B ?
jz done ;单独按下K7,退出
cmp al,0feh ;D7~D0=11111110B ?
jz next1 ;单独按下K0,转移到next1
cmp al,0fdh ;D7~D0=11111101B ?
jz next2 ;单独按下K1,转移到next2
jmp again ;其它情况不点亮
next1: mov cx,8
mov al,1 ;从K0开始
next11: out dx,al ;某个LED电亮
call delay ;延时200ms
shl al,1 ;rol al,1
loop next11
jmp again1

next2: mov cx,8
2

mov al,80h ;从K7开始
next21: out dx,al ;某个LED电亮
call delay ;延时200ms
shr al,1 ;ror al,1
loop next21
jmp again1

done: mov al,0ffh
out dx,al ;全不亮

〔习题6.5〕
有一个查询输入接口电路类似图6-9,但其数据端口为8F40H、状态端口为8F42H。从
状态端口最低位可以获知输入设备是否准备好一个字节的数据:D0=1表示准备好,D0=0
说明没准备好。不考虑查询超时,编程从输入设备读取100个字节保存到INBUF缓冲区。
〔解答〕
mov bx,offset inbuf
mov cx,100
again: mov dx,8f42h
status: in al,dx ;查询一次
test al,01h
jz status
mov dx,08f40h
in al,dx ;输入一个字节
mov [bx],al
inc bx
loop again ;循环,输入100个字节

〔习题6.5〕(第二版)
请描述采用查询方式进行CPU与外设间传送数据的过程。如果有一个输入设备,其数
据口地址为FFE0H,状态口地址为FFE2H,当状态标志D0=1时,表明一个字节的输入数
据就绪,请编写利用查询方式进行数据传送的程序段。要求从该设备读取100个字节并写到
从2000H:2000H开始的内存中。注意在程序中添加注释。
〔解答〕

通过读取状态寄存器的标志位来检查外设是否就绪。若不就绪就继续查询,即程序不
断循环;直至就绪。然后,进行下一步的传送工作。
mov bx,2000h
mov ds,bx
mov cx,100
again: mov dx,0ffe2h
status: in al,dx ;查询一次
test al,01h
jz status
mov dx,0ffe0h
3

in al,dx ;输入一个字节
mov [bx],al
inc bx
loop again ;循环,输入100个字节
〔习题6.6〕
有一个查询输出接口电路类似图6-10,但其数据端口和状态端口均为8000H,并从状
态端口的D6位获知输出设备是否能够接收一个字节的数据:D6=1表示可以接收、D6=0
说明不能接收。不考虑查询超时,编程将存放于缓冲区OUTBUF处的字符串(以0为结束
标志)传送给输出设备。
〔解答〕
mov bx,offset outbuf
mov dx,8000h
again: mov ah,[bx]
cmp ah,0
jz done
status: in al,dx ;查询一次
test al,40h
jnz status
mov al,ah
out dx,al ;输出一个字节
inc bx
jmp again ;循环
done: ……

〔习题6.6〕(第二版)
某字符输出设备,其数据口和状态口的地址均为80H。在读取状态时,当标志位D7=0
时,表明该设备闲,可以接收一个字符,请编写利用查询方式进行数据传送的程序段。要求
将存放于符号地址ADDR处的一串字符(以$为结束标志)输出给该设备。注意在程序中添
加注释。
〔解答〕
mov bx,offset addr
again: mov ah,[bx]
cmp ah,’$’
jz done
status: in al,80h ;查询一次
test al,80h
jnz status
mov al,ah
out 80h,al;输出一个字节
inc bx
jmp again ;循环
done: ……
〔习题6.7〕
结合中断传送的工作过程,简述有关概念:中断请求、中断响应、中断关闭、断点保护、
4

中断源识别、现场保护、现场恢复、中断开放、中断返回、以及中断优先权和中断嵌套。
〔解答〕参看教程P147-150。
中断源识别:处理器明确此次中断的具体来源,以便转向为其服务的程序中。
中断嵌套:当一个中断服务时处理器又响应新的中断请求就形成中断嵌套。

〔习题6.7〕(第二版)
以可屏蔽中断为例,说明一次完整的中断过程主要包括哪些环节?8088响应可屏蔽中
断请求,需要先满足哪些前提条件?
〔解答〕
习题6.7解答:参考教材第6.4.2节(第165页)
〔习题6.10〕
查询、中断和DMA传送是微机中常用的外设数据交换方式,请说明各自的特点。
〔解答〕参看教程P143-152及课件。

〔习题6.10〕(第二版)
DMA的意思是,主要用于高速外设和内存间的数据传送。进行DMA传送的一般
过程是:外设先向DMA控制器提出,DMA控制器通过信号有效向CPU提出总
线请求,CPU回以信号有效表示响应。此时CPU的三态信号线将输出状态,即
将它们交由进行控制,完成外设和内存间的直接数据传送。
〔解答〕

DMA的意思是 直接存储器存取 ,主要用于高速外设和内存间的数据传送。进行DMA
传送的一般过程是:外设先向DMA控制器提出 DMA请求 ,DMA控制器通过 总线请求
HOLD 信号有效向CPU提出总线请求,CPU回以 总线响应HLDA 信号有效表示响应。此
时CPU的三态信号线将输出 高阻 状态,即将它们交由 DMAC(DMA控制器) 进行控制,
完成外设和内存间的直接传送。

相关文档
最新文档