1、1307接口技术全册配套最接口技术全册配套最 完整精品课件完整精品课件1 微机原理与接口 技术 第1章 概 述 第第1章章 概概 述述 *1.1 微型计算机基本构成 1.1.1 硬件系统 1.1.2 软件系统 1.1.3 微型计算机的工作过程 * 1.2 数据表示与运算 1.2.1 进位计数制与不同基数制之间的转换 1.2.2 二进制数和十六进制数运算 1.2.3 数据表示 1.2.4 定点数与浮点数 *1.3 计算机语言基本概念 1.3.1 机器语言 1.3.2 汇编语言 1.3.3 高级语言 * 1.4 微机接口基本概念 1.4.1 接口的定义 1.4.2 为什么要专门研究接口 1.4.3
2、 接口的分类 1.1 微型计算机基本构成 v1.1.1 硬件系统 微型计算机的硬件系统概念框图如图1.1所示。 图1.1 微型计算机硬件系统概念框图 1.1 微型计算机基本构成 v微型计算机主要由如下几个部分组成:微处理器或称中 央处理单元(CPU)、内部存储器(简称内存)、输入/输出 接口(简称接口)及系统总线。 1. CPU vCPU是一个复杂的电子逻辑元件,它包含了早期计算机 中的运算器、控制器及其他功能,能进行算术、逻辑及 控制操作。 2. 内存 v顾名思义,所谓内存就是指微型计算机内部的存储器。 1.1 微型计算机基本构成 3. 系统总线 v所谓系统总线就是用来传送信息的一组通信线。
3、 由图1.1可以看到系统总线将构成微型计算机的 各个部件连接到一起,实现了微型计算机内部各 部件间的信息交换。由于这种总线在微型计算机 内部,故也将系统总线称为内总线。 4. 接口 v微型计算机广泛地应用于各个部门和领域,所连 接的外部设备是各式各样的。它们不仅要求不同 的电平、电流,而且要求不同的速率,有时还要 考虑是模拟信号,还是数字信号。 1.1 微型计算机基本构成 v1.1.2 软件系统 1. 系统软件 v系统软件用来对构成微型计算机的各部分硬件, 如CPU、内存、各种外设进行管理和协调,使 它们有条不紊、高效率地工作。 2. 应用软件 v应用软件是针对不同应用、实现用户要求的功能 软
4、件。例如,Internet网点上的Web页、各部门 的MIS(管理信息系统)程序、CIMS(计算机集成 制造系统)中的应用软件以及生产过程中的监测 控制程序等。 1.1 微型计算机基本构成 v1.1.3 微型计算机的工作过程 vCPU进行简单的算术运算或逻辑运算,如从存储器取数、 将数据存放于存储器,或由接口取数、向接口送数。这 些都是一些基本操作,也称为CPU的操作。 v例如用微型计算机求解“7+10=?”这样一个极为简单的 问题时,必须利用指令告诉计算机该做的每一个步骤, 先做什么,后做什么。具体步骤就是: 7AL AL+10AL v其含义就是把7这个数送到AL里面,然后将AL中的7和 1
5、0相加,把获得的结果存放在AL里。 1.2 数据表示与运算 v1.2.1 进位计数制与不同基数制之间的转换 1. 二进制数、八进制数和十六进制数 1)二进制数 v日常生活中我们一般采用十进制进行计数,但计 算机只能识别0、1代码,也就是说计算机采用 二进制进行计数。二进制数只有0、1两个数码, 其基数为2,遵循逢二进一的原则,它的第k位 权以2k表示。 v二进制数anan-1 a0b-1b-2 b-m的值是: van2n+an-12n-1+ +a020+b-12-1+b-22- 2+b-m2-m 1.2 数据表示与运算 v中an、bm为0、1两个数码中的1个。二进 制的描述是在其尾部加注字母B
6、,例如: v10100101B=127+026+125+024 +023+122+021+120=128+32+4 +1=165 vN位二进制数可以表示2N个数。例如3位二 进制数可以表示8个数,如表1.1所示。 1.2 数据表示与运算 v中an、bm为0、1两个数码中的1个。二进 制的描述是在其尾部加注字母B,例如: v10100101B=127+026+125+024 +023+122+021+120=128+32+4 +1=165 vN位二进制数可以表示2N个数。例如3位二 进制数可以表示8个数,如表1.1所示。 1.2 数据表示与运算 二进制数000001010011100101110
7、111 相应的十进制数 0 1 2 3 4 5 6 7 表1.1 3位二进制与十进制数对应表 1.2 数据表示与运算 二进制数00000001001000110100010101100111 相应的十进制数 01 2 3 4 5 6 7 二进制数10001001101010111100110111101111 相应的十进制数 8 9 10 11 12 13 14 15 4位二进制数则表示十进制的位二进制数则表示十进制的015共共16个数,如表个数,如表1.2所示。所示。 表1.2 4位二进制与十进制数对应表 1.2 数据表示与运算 v从表1.2可以看出位数越多二进制数越长,不便于人们阅 读、书
8、写和记忆,因此人们经常使用八进制数或十六进 制数来表示二进制数。它们的基数和数码表示如表1.3所 示。 2) 八进制数 v八进制数有0、1、2、3、4、5、6、7八个数码,其基数 为8,遵循逢八进一的原则,它的第k位权以8k表示。八 进制数的描述是在其尾部加注字母O或Q。 v八进制数anan-1 a0b-1b-2 b-m的值是: van8n+an-18n-1+ +a080+b-18-1+b-28-2+ +b- m8-m v例如: 534Q=582+381+480=564+38+41=348 1.2 数据表示与运算 3) 十六进制数 v十六进制数有0、1、2、3、4、5、6、7、8、9、A、B、
9、 C、D、E、F十六个数码,其中A、B、C、D、E、F表 示10到15六个数码,其基数为16,遵循逢十六进一的原 则,它的第k位权以16k表示。十六进制的描述是在其尾 部加注字母H。 v十六进制数anan-1 a0b-1b-2 b-m的值是: van16n+an-116n-1+ +a0160+b-116-1+b-216- 2+ +b-m16-m v例如: 2ACH=2162+10161+12160=2256+1016+12 1=684 v表1.3列出了几种常用的进位制的基数和数码。 1.2 数据表示与运算 进位计数制基 数数 码 十六进制数160、1、2、3、4、5、6、7、8、9、A、B、C
10、、D、E、F 十进制数100、1、2、3、4、5、6、7、8、9 八进制数 8 0、1、2、3、4、5、6、7 十进制数 20、1 表1.3 几种常用的进位制的基数和数码 1.2 数据表示与运算 2. 不同基数制之间的转换 1)非十进制数转换为十进制数 v各非十进制数码乘以与其对应的权之和即 为该数对应的十进制数。例如: v1011100.1011B=126+124+123+1 22+12-1+12-3+12-4=92.6875 D vA031H=10163+3161+1160=41009 v1001Q=183+180=513 1.2 数据表示与运算 2) 十进制数转换为非十进制数 v十进制数
11、转换为非十进制数,一般整数部分采用除基数 取余法,小数部分采用乘基数取整法。除基数取余法的 具体操作是把待转换的十进制数的整数部分不断除以要 转换为的非十进制基数,并记下余数,直到商为0时为止; 乘基数取整法的具体操作是把待转换的十进制数的小数 部分不断乘以要转换为的非十进制基数,逐次记下乘积 整数部分的值,直到小数部分为0为止。 v现以十进制数转换为二进制数为例进行说明,二进制数 的“基数”为2,就成了除2取余法和乘2取整法,即对 整数部分的处理是把待转换的十进制数的整数部分不断 除以2,并记下余数,直到商为0时为止;对小数部分的 转换是把待转换的十进制数的小数部分不断乘以2,逐次 记下乘积
12、整数部分的值,直到小数部分为0为止。 1.2 数据表示与运算 v【例1.1】 将N=137.8125D转换为二进制数。 v整数部分为137D,按除2取余法有: v137/2=68 (a0=1) v68/2=34 (a1=0) v34/2=17 (a2=0) v17/2=8 (a3=1) v8/2=4 (a4=0) v4/2=2 (a5=0) v2/2=1 (a6=0) 1.2 数据表示与运算 v1/2=0 (a7=1) v故137D=10001001B v小数部分为0.8125D,按乘2取整法有: v0.81252=1.625 (b-1=1) v0.6252=1.25 (b-2=1) v0.2
13、52=0.5 (b-3=0) v0.52=1.0 (b-4=1) v故0.8125D=0.1101B v所以 N=137.8125D=10001001.1101B v十进制数转换为十六进制数和八进制数的方法与十进制 数转换为二进制数的方法类同。 1.2 数据表示与运算 3)十六进制数与二进制数之间的转换 v因为16=24,所以一个十六进制数中的每一位可以用4位 二进制数表示,便可形成相应的二进制数。 v【例1.2】 C B 9 A 1100 1011 1001 1010 v即 CB9AH=1100101110011010B v反之,二进制数只要把它从低位到高位每4位组成一组, 再用十六进制数来
14、表示就可以了。 v【例1.3】 01110101 10111111 v 7 5 B F v即 0111010110111111B=75BFH 1.2 数据表示与运算 v1.2.2 二进制数和十六进制数运算 1. 二进制数的运算 v加法规则: 乘法规则: v0+0=0 00=0 v0+1=1 01=0 v1+0=1 10=0 v1+1=10 (1为进位) 11=1 1.2 数据表示与运算 2. 十六进制数的运算 1) 十六进制加法 v十六进制数的运算按照逢十六进一的规则进行,即当两个1位数之 和S小于16时,与十进制数同样处理,如两个1位数之和S16时, 则应该用S-16及进位1来取代S。 v【
15、例1.4】 15C3H + 3D45H 5308H v2) 十六进制数的减法 v与十进制数类似,够减时可以直接相减,不够减时服从向高位借1 为16的规则。 【例1.5】 3DA6H -0FC3H 2DE3H 1.2 数据表示与运算 v1.2.3 数据表示 v计算机内的数据有多种形式,其中最主要的是数 值数据和字符数据。 1. 数值数据的表示 v数值数据可以用不同的码制来表示,常用的有原 码、补码和反码表示法。由于加减运算时补码表 示法的符号位可以参加运算,而且不影响运算结 果的正确性,所以多数机器的有符号整数都采用 补码表示法。这里只介绍补码表示法。 1.2 数据表示与运算 1) 数的补码表示
16、 (1)补码表示法中正数的表示 v正数采用符号-绝对值法表示,即数的最高有效 位为0表示符号为正,数的其余部分则表示数的 绝对值。 v例如:假设机器字长为8位,则 +0补=00000000B +1补=00000001B +100补=01100100B 1.2 数据表示与运算 (2)补码表示法中负数的表示 v用补码表示法来表示负数时可以采用“求反加1”的方法 来完成:先写出与该负数相对应的正数的补码表示(用符 号-绝对值法),然后将其按位求反(即0变为1,1变为0), 最后在末位(最低位)加1,就可以得到该负数的补码表示 了。 v【例1.6】 机器字长为8位,写出N=-27的补码表示。 +27D
17、可表示为 0001 1011 按位求反为 1110 0100 末位加1后为 1110 0101 v用十六进制数表示为E5H。 v即 -27补=E5H。 1.2 数据表示与运算 v【例1.7】 机器字长为16位,写出N=-32768的 补码表示。 v32768D可表示为 1000 0000 0000 0000 v按位求反为 0111 1111 1111 1111 v末位加1后为 1000 0000 0000 0000 v用十六进制数表示为 8 0 0 0 v即-32768补=8000H 1.2 数据表示与运算 (3)数的表示范围 有符号数的表示范围 v一般说来,n位二进制补码表示的数的表示范围是
18、: -2n-1N2n-1-1 v8位二进制数可以表示28=256个数。因为在补码表示法 中0只有一种表示,即00000000;对于10000000这个数, 在补码表示法中被定义为-128。这样,8为补码能表示 的范围为-128127。 vn=16时的数的表示范围是:-32768N+32767 无符号整数的表示范围 v在作无符号数处理时,我们把最高有效位作为数值处理。 因此,16位无符号数的表示范围是0N65535,8位无 符号数的表数范围是0N255。 1.2 数据表示与运算 2)补码的运算 (1)求补运算 v(X补)求补=-X补 v【例1.8】117补=0075H -117补=FF8BH v
19、对-117补作求补运算: v-117补为 11111111 10001011 v按位求反后得 00000000 01110101 v末位加1后得 00000000 01110101 v此数正是+117补=0075H。 1.2 数据表示与运算 (2)补码的加、减法运算 v补码的加法规则是: X+Y补=X补+Y补 v补码的减法规则是: X-Y补=X补+-Y补 v其中的-Y补只要对Y补求补就可得到。 1.2 数据表示与运算 v例1.9】 机器字长假定为8位,完成下列补码加法运算。 v 十进制 二进制 v 23 00010111 v + 36 +00100100 v 59 00111011 v 36
20、00100100 v +(-23) +11101001 v 13 (进位1)00001101 v 23 00010111 v +(-36)+11011100 v -13 11110011 1.2 数据表示与运算 v -23 11101001 v +(-36) +11011100 v -59 (进位1) 11000101 v可以看出,例1.9的4个计算结果都是正确的, 在和中,从最高有效位向高位的进位 由于机器字长的限制而自动丢失,但这并 不会影响运算结果的正确性。 1.2 数据表示与运算 v 【例1.10】 机器字长假定为8位,完成下列 补码减法运算。 v 十进制 补码 二进制 v 23 00
21、010111 00010111 v -36 00100100 +11011100 v -13 11110011 v 36 0010010000100100 v -(-23) 11101001 +00010111 v 59 00111011 1.2 数据表示与运算 v -23 11101001 11101001 v -(+36) 00100100 +11011100 v -59 (进位为1)11000101 v -23 11101001 11101001 v -(-36) 11011100 +00100100 v 13 (进位为1)00001101 1.2 数据表示与运算 2. 字符数据的表示
22、v计算机内的常见字符包括: v字母:AZ az v数字:09 v标点符号:!,?;:、等 v算术运算符号:+ - / v关系运算符号: exe2bin exe程序名 程序名.com 4.3 汇编语言程序的结构 v4.3.2 程序正常返回DOS的方法 程序的结束,可用以下4种方法之一返回DOS。 (1)功能调用4Ch。 在程序的代码段结束之前用下面两条命令: MOV AH,4Ch INT 21H (2)一条INT 20H指令。 (3)用JMP 0指令。 (4)用功能调用00H。 MOV AH,00H INT 21H 4.3 汇编语言程序的结构 v【例4.12】 在显示器上显示“HOW ARE Y
23、OU!” vSTACKSEGMENT STACK vDB200 DUP(0) vSTACKENDS vDATASEGMENT vBUFDB HOW ARE YOU! vDATAENDS vCODESEGMENT vASSUME CS:CODE,DS:DATA,SS: STACK vBEGIN:MOV AX,DATA 4.3 汇编语言程序的结构 vMOV DS,AX vLEA DX,BUF vMOV AH,9 vINT 21H ;DOS功能调用,显示DX指示的缓 冲区的数据 vMOVAH,4CH vINT 21H ;DOS功能调用,结束程序返回 v DOS vCODEENDS vEND BEGI
24、N 4.4 高级汇编语言技术 v4.4.1 条件汇编条件汇编 v汇编程序能根据条件把一段源程序包括在汇编语言汇编程序能根据条件把一段源程序包括在汇编语言 程序内或者把它排除在外,这里就用到条件伪指令。程序内或者把它排除在外,这里就用到条件伪指令。 条件伪指令的一般格式是:条件伪指令的一般格式是: IF XX 程序段程序段1 ELSE 程序段程序段2 ENDIF v功能:对程序有选择地进行汇编。汇编时根据条件功能:对程序有选择地进行汇编。汇编时根据条件 是否满足,对某段程序进行汇编或不汇编。具体说是否满足,对某段程序进行汇编或不汇编。具体说 明如下:明如下: 4.4 高级汇编语言技术 (1) 表
25、达式的值表示条件,其值可为真表达式的值表示条件,其值可为真(TRUE)或假或假 (FLASE),当它为真时执行程序段,当它为真时执行程序段1,否则,若有,否则,若有ELSE语句语句 则执行程序段则执行程序段2,若无,若无ELSE语句就跳过语句就跳过ENDIF汇编以下的程汇编以下的程 序;序;ELSE及程序段及程序段2为可选项。为可选项。 (2) 条件伪指令中的条件伪指令中的XX表示条件汇编的多种伪操作指表示条件汇编的多种伪操作指 令,常用令,常用XX有如下几个。有如下几个。 IF表达式。汇编程序求出表达式的值,如此值不为表达式。汇编程序求出表达式的值,如此值不为0 则满足条件,执行程序段则满足
26、条件,执行程序段1,否则跳过。,否则跳过。 IFE表达式。如求出表达式的值为表达式。如求出表达式的值为0,则满足条件,执,则满足条件,执 行程序段行程序段1, 否则跳过。否则跳过。 4.4 高级汇编语言技术 IFDEF 符号。如符号已在程序中定义,或者已用 EXTRN伪指令说明该符号是在外部定义的,则满足条件, 执行程序段1,否则跳过。 IFNDEF 符号。如符号未定义或未通过EXTRN说明为外部符 号,则满足条件,执行程序段1,否则跳过。 IFB 。如参数为空,则满足条件,执行程序段1,否则跳 过。 IFNB。如参数不为空,则满足条件,执行程序段1,否 则跳过。 IFIDN ,。如果字符串和
27、字符串相同,则满足条件,执行程序段1,否则跳过。 IFDIF ,。如果字符串和字符串不相同,则满足条件,执行程序段1,否则跳过。 4.4 高级汇编语言技术 【例4.13】 vAEQU 40H vIF A-40H vMOV CL,4 vSAL AL,CL vELSE vMOV CL,4 vSAR AL,CL vENDIF vM EQU 100 vIF M GT 50 4.4 高级汇编语言技术 vD1 DB 100 DUP(?) vELSE vD2 DW 100 DUP(?) vENDIF 4.4 高级汇编语言技术 v4.4.2 宏汇编 v当需要重复执行的程序很短,或需要传送的参数很多时, 就可以
28、使用宏汇编语句。“宏”是汇编语言源程序中一 段具有独立功能的程序代码,宏的使用是先定义后调用。 1. 宏定义与宏调用 1)宏定义的一般格式 v宏指令名 MACRO 形式参数表 v宏体 vENDM 4.4 高级汇编语言技术 其中: (1)MACRO和ENDM是一必须成对出现的伪指令。这对 伪指令之间的宏体是一组具有独立功能的程序代码。 (2)宏指令名给出该宏定义的名称,调用时就使用宏指令 名来调用该宏定义。宏指令名可以与伪指令、机器指令的助 记符同名,但它具有比机器指令、伪指令更高的优先权。 (3)形式参数表(也叫哑元表)可有可无,它给出了该宏定 义中所用到的形式参数(或称虚参),每个形式参数之
29、间用逗 号隔开。形参个数不限,但字符个数不得超过132个。 4.4 高级汇编语言技术 2) 宏调用 经宏定义后的宏指令在源程序中的调用称为宏调用。 宏调用的格式: 宏指令名 实在参数表 其中: (1)宏指令名必须与宏定义中的宏指令名一致。 (2)实在参数表中的实在参数(简称实参)必须与宏定义中 的形参按位置一一对应,如果实参的个数多于形参的个数 时,多余的实参被忽略;如果实参的个数少于形参的个数 时,缺少的实参被处理为空白。实参可以和形参同名。 4.4 高级汇编语言技术 2. 宏的使用 v宏定义可以无参数,宏定义的使用有如下一些形式。 【例4.14】 v宏定义: SAVEREGMACRO PU
30、SH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI ENDM v宏调用: SAVEREG v因为宏定义无形参,所以宏调用无实参。 4.4 高级汇编语言技术 3. 形参可以是操作数或操作码 【例4.15】 v宏定义: AS MACRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM v宏调用: AS NUM,INC,AX v宏展开: + MOVAX,NUM + INCAX v上述带“+”的部分是宏的展开,即将宏定义中的形参按位置对应关 系替换成形参。其中P2参数在宏调用时与操作符INC对应。 4.4 高级汇编语言技术 4. 形参可以是操作码的一
31、部分,但在宏定义体中必须用 ;输入输入1616位数据位数据 v IN AL,PORT IN AL,PORT ; ;输入输入8 8位数据位数据 v输出输出 OUT OUT PORT,AX PORT,AX ; ;输出输出1616位数据位数据 v OUT OUT PORT,AL PORT,AL ; ;输出输出8 8位数据位数据 6.1 I/O端口的寻址方式 v若用双字节地址作为端口地址,则最多可寻址若用双字节地址作为端口地址,则最多可寻址 64K64K个端口。个端口。I/OI/O扩展的接口控制卡,采用双字扩展的接口控制卡,采用双字 节地址,并且是寄存器间接寻址方式,端口地节地址,并且是寄存器间接寻址
32、方式,端口地 址放在寄存器址放在寄存器DXDX中。其指令格式为:中。其指令格式为: v输入输入MOVMOVDX,XXXXHDX,XXXXH v IN AX,DX IN AX,DX ;16;16位传送位传送 v或或 IN IN AL,DX AL,DX ;8;8位传送位传送 v输出输出 MOV MOV DX,XXXXHDX,XXXXH v OUT OUT DX,AX DX,AX ;16;16位传送位传送 v或或 OUT OUT DX,AL DX,AL ;8;8位传送位传送 6.1 I/O端口的寻址方式 (2)80286和80386还支持I/O端口直接与RAM之 间的数据传送。 v输入MOV DX,
33、PORT v LES DI,BUFFER_IN v INSB ;8位传送 v (INSW) ;16位传送 v输出 MOV DX,PORT v LDS SI,BUFFER_OUT v OUTSB ;8位传送 v (OUTSW) ;16位传送 6.1 I/O端口的寻址方式 v这里的输入/输出是对RAM而言的。输入 时,用DX:DI指向目标缓冲区 BUFFER_IN;输出时,用DX:SI指向源 缓冲区BUFFER_OUT。在INS和OUTS指 令前加上重复前缀REP,则可实现I/O设备 与RAM之间成批数据的传输。 v在PC系列微机中,不仅汇编语言支持端口 的读/写操作,C语言、Basic语言等同样
34、 支持端口的读/写操作。 6.1 I/O端口的寻址方式 (3) C语言中的端口读语言中的端口读/写函数。写函数。 v在在PC系列微机上运行的几种系列微机上运行的几种C语言版本,都支持端口的语言版本,都支持端口的 输入输入/输出操作,输出操作,C语言中的几个库函数就是为端口读语言中的几个库函数就是为端口读/写写 设置的,这些库函数实际上是调用了汇编的设置的,这些库函数实际上是调用了汇编的IN/OUT指令,指令, 因为这些函数已存在于因为这些函数已存在于C语言的库函数中,由于语言的库函数中,由于Turbo C提供了程序库支持,使我们可在提供了程序库支持,使我们可在Turbo C集成操作环集成操作环
35、 境下,从编辑源程序,到编译、链接、执行及排错皆可境下,从编辑源程序,到编译、链接、执行及排错皆可 一气呵成,大大提高程序设计效率。在接口设计中,常一气呵成,大大提高程序设计效率。在接口设计中,常 用到的用到的Turbo C函数如下:函数如下: vinportb() voutport() vclrscr() vgetch() vkbhit() vdelay() vsound() 6.1 I/O端口的寻址方式 【例例6.16.1】 利用利用inportb()inportb()函数从指定的输入端口函数从指定的输入端口2F0H2F0H读读 取一个字节的数据,并显示在屏幕上。取一个字节的数据,并显示在
36、屏幕上。 vInportb()Inportb()的原型为:的原型为: inport(int port);inport(int port); v头文件为:头文件为: dos.hdos.h v程序:程序: vmain()main() v unsigned char c; unsigned char c; v c=inport(0 x2f0); c=inport(0 x2f0); v printf(data=%0 x,c); printf(data=%0 x,c); 6.1 I/O端口的寻址方式 【例6.2】 将一个字节输出到输出端口360H。 voutport()的原型: void outport
37、b(int port,unsigned char value); v头文件为: dos.h v程序: vmain() v v outport(0 x360,0 x55); v 6.1 I/O端口的寻址方式 (4) 运行于运行于Windows 9x环境下的环境下的Visual C+程序程序 中,对中,对I/O端口的访问有两种方法,第一种方法是在端口的访问有两种方法,第一种方法是在 C源程序中嵌入汇编代码,例如:源程序中嵌入汇编代码,例如: v_asm v mov dx,264h vmov al,100 vout dx,al v v第二种方法是调用函数第二种方法是调用函数_inp 和和_outp,
38、前者用来读字节,前者用来读字节 型端口的数据,后者将数据输出到字节型端口。型端口的数据,后者将数据输出到字节型端口。 6.1 I/O端口的寻址方式 (5)在Windows 2000环境下,它的安全机制以及 对多种硬件平台的支持,使得用户已不能直接访问 机器的硬件资源,要和端口打交道,必须编写相应 的设备驱动程序。在将编好的设备驱动程序安装之 后,在Visual C+源程序中对I/O端口最直接的访问 是调用控制I/O操作的API函数(DeviceIo Control)。 Visual Basic本身不支持对I/O端口的访问,可以编 写动态链接库的方法,使其能实现对I/O端口的访问。 6.1 I/
39、O端口的寻址方式 v6.1.4 I/O6.1.4 I/O端口地址分配和选用端口地址分配和选用 v不同的微机系统对不同的微机系统对I/OI/O端口地址的分配是不同的。例如端口地址的分配是不同的。例如 PCPC系列机把系列机把I/OI/O端口地址空间分成两部分,即系统板上端口地址空间分成两部分,即系统板上 的的I/OI/O芯片和芯片和I/OI/O扩展槽上的接口控制卡端口地址。扩展槽上的接口控制卡端口地址。 vPC/XTPC/XT和和PC/ATPC/AT系统提供了系统提供了A0A9A0A9这这1010位地址线作为位地址线作为I/OI/O端端 口地址,总共口地址,总共10241024个端口。其中,前个
40、端口。其中,前256256个端口个端口 (0000FFH)(0000FFH)供系统板上的供系统板上的I/OI/O接口芯片使用,如表接口芯片使用,如表6.16.1所所 示;后示;后768768个端口个端口(1003FFH)(1003FFH)为扩展槽上的为扩展槽上的I/OI/O接口控制接口控制 卡使用,如表卡使用,如表6.26.2所示。两表中所示的是端口的地址范所示。两表中所示的是端口的地址范 围,实际使用时,有的围,实际使用时,有的I/OI/O接口可能仅用到其中的前几接口可能仅用到其中的前几 个地址。个地址。 6.1 I/O端口的寻址方式 I/O接口名称PC/XTPC/AT DMA控制器1000
41、00FH00001FH DMA控制器20C00DFH DMA页面控制器080083H08009FH 中断控制器1020021H02003FH 中断控制器20A00BFH 定时器040043H04005FH 并行接口芯片060063H 键盘控制器06006FH RT/CMOS RAM07007FH NMI屏蔽寄存器0A0H 协处理器0F00FFH 表6.1 系统板上芯片的端口地址 6.1 I/O端口的寻址方式 I/O接口名称PC/XTPC/AT 游戏控制卡20020FH20020FH 扩展器/接收器21021FH 并行口控制卡137037FH37037FH 并行口控制卡227027FH27027
42、FH 串行口控制卡13F83FFH3F83FFH 表6.2 扩展槽上接口控制卡的端口地址 6.1 I/O端口的寻址方式 I/O接口名称PC/XTPC/AT 串行口控制卡22F02FFH2F02FFH 原型插件板30031FH30031FH 同步通信卡13A03AFH3A03AFH 同步通信卡238038FH38038FH 单显MDA3B03BFH3B03BFH 彩显CGA3D03DFH3D03DFH 彩显EGA/VGA3C03CFH3C03CFH 硬驱控制卡32032FH1F01FFH 软驱控制卡3F03F7H3F03F7H 6.1 I/O端口的寻址方式 v只要设计I/O接口电路,就必然要使用
43、I/O端口地 址。在选定I/O端口地址时要注意: v(1)凡是已被系统配置所占用的地址一律不能使 用。 v(2)原则上讲,未被占用的地址用户可以使用, 但对计算机厂家申明保留的地址,不要使用,否 则,会发生I/O端口地址重叠和冲突造成你开发 的产品与系统不兼容而失去使用价值。 v(3)一般用户可使用30031FH地址,这是IBM- PC系列机留作实验卡用的。在用户可用的I/O地 址范围内,为了避免与其他用户开发的插板发生 地址冲突,最好采用地址开关。 6.2 I/O端口地址译码 v6.2.1 I/O端口地址译码方法 v每当CPU执行IN或OUT指令时,就进入了I/O端 口读/写周期,此时首先是
44、端口地址有效,然后 是I/O读/写控制信号 或 有效,把对端口地址 译码而产生的译码信号同 或 结合起来一同 控制对I/O端口的读或写操作。但是PC微机所支 持的端口地址数目很多,每次端口操作是针对哪 个端口呢?这就要根据对端口地址译码所产生的 地址选择信号来选中指定的端口,然后由 或 控制其读或写操作,没有被选中的端口不产生任 何动作。 IORIOW IOW IOR IORIOW 6.2 I/O端口地址译码 v按照上面分析的原则,似乎就可以进行I/O端口 的选通与读/写操作了。但是,实际上I/O地址译 码电路不仅与地址信号有关,而且还与控制信号 有关,它把地址和控制信号进行组合,产生对芯 片
45、的选择信号。因此,I/O地址译码电路除了要 受A0A9这10根地址线所限定的地址范围之外, 还要考虑下面的一些控制信号,如: v利用 、 信号控制对端口的读/写。 v用AEN信号控制非DMA传送。 v用 信号控制是8位还是16位的I/O端口。 v用SBHE(或BHE)信号控制端口奇偶地址。 IOWIOR 16I/O CS 6.2 I/O端口地址译码 v由以上分析可知,在设计地址译码电路时,除了 精心选择地址范围之外,还要根据CPU与I/O端 口交换数据时的流向(读/写),数据宽度(8位/16 位),以及是否采用奇偶地址的要求来引入相应 的控制信号,从而形成地址译码电路。 v微机中包括许多不同的
46、I/O接口,如串行接口、 并行接口、磁盘接口、显示器接口等,但任何时 刻只有一种装置与CPU通信,外界的各个外设 均是通过数据总线与PC做信息交换,各个数据 总线是并接在一起的。那么系统是如何区分选择 6.2 I/O端口地址译码 要通信的外设呢?各个外设装置本身均有一个控制信号要通信的外设呢?各个外设装置本身均有一个控制信号 如如片选信号片选信号(CHIP SELECT(CHIP SELECT,) ),一般低电平有效,例如,一般低电平有效,例如 要选取外设一做数据传送,则令外设一的控制信号有效,要选取外设一做数据传送,则令外设一的控制信号有效, 则外设一的内部数据总线就会打开,而其他各个外设因
47、则外设一的内部数据总线就会打开,而其他各个外设因 为控制信号无效而内部呈现高阻抗,自然就与系统数据为控制信号无效而内部呈现高阻抗,自然就与系统数据 总线隔离开来。外设的控制信号就是这样通过总线隔离开来。外设的控制信号就是这样通过I/OI/O地址地址 译码而产生的。也就是说,给不同的外设分配不同的端译码而产生的。也就是说,给不同的外设分配不同的端 口地址,而端口地址通过译码电路产生控制信号来选择口地址,而端口地址通过译码电路产生控制信号来选择 外设。当外设。当CPUCPU与某外设进行数据传送时,只要在地址总与某外设进行数据传送时,只要在地址总 线上送出其相应的端口地址,就能选中该外设,再配合线上
48、送出其相应的端口地址,就能选中该外设,再配合 其他控制信号,完成数据传送。其他控制信号,完成数据传送。 6.2 I/O端口地址译码 v以PC/XT机为例,8088对外部I/O接口芯片或部 件的译码是使用A0A9地址线,结合 、 、 AEN等控制信号线来完成的。其中AEN信号线 必须使用。AEN=0时,即不是DMA操作时译码 才有效;AEN=1时,即DMA操作时,使译码无 效,避免在DMA周期影响对外设的数据传送。 v译码电路在整个I/O接口电路设计中占有重要的 地位。译码电路的输出信号,通常是低电平有效, 高电平无效。 IORIOW 6.2 I/O端口地址译码 v6.2.2 6.2.2 固定式
49、端口地址译码固定式端口地址译码 v所谓固定译码是指接口中用到的端口地址不能更改。一所谓固定译码是指接口中用到的端口地址不能更改。一 般接口卡中大部分都采用固定式译码。般接口卡中大部分都采用固定式译码。 (1)(1)用门电路进行端口地址译码。用门电路进行端口地址译码。 v这是一种最基本最简单的端口地址译码方法,它一般采这是一种最基本最简单的端口地址译码方法,它一般采 用与门、与非门、反相器及或非门等,如用与门、与非门、反相器及或非门等,如74LS0874LS08、 74LS3274LS32、74LS3074LS30等。如图等。如图6.16.1所示为可译出所示为可译出2F8H2F8H读操作读操作
50、端口地址的译码电路,图端口地址的译码电路,图6.16.1中中AENAEN参加译码,它对端口参加译码,它对端口 地址译码进行控制,从而避免了在地址译码进行控制,从而避免了在DMADMA周期,由周期,由DMADMA控制控制 器对这些器对这些I/OI/O端口地址的非端口地址的非DMADMA传送方式的外部设备进行传送方式的外部设备进行 读操作。读操作。 6.2 I/O端口地址译码 v如果接口电路中需要两个端口地址,一个用于输 入,一个用于输出,译码输出可用 和 信号 进行控制,以分别实现读/写访问,此时的一个 端口地址等效于两个端口地址。如图6.2表示了 这种控制电路。 IOW IOR 6.2 I/O