微型计算机原理及应用
――――实验指导
编写: 梁亚玲
华南理工大学 2006年8月
前言
结合当前电子类专业本科生微型计算机原理及应用理论课的教学我们编写了本实验指导书,旨在培养学生运用汇编语言程序进行编程及用汇编来实现硬件控制的能力。本书分为两部分,软件部分和硬件部分。
软件实验部分
实验一
一、实验目的
1、学会如何建立汇编源文件ASM
2、学会调用MASM宏汇编程序对源文件进行汇编,获得目标程序 OBJ及LST列
文件
3、学会调用LINK连接程序汇编后的目标文件OBJ连接成可执行的文件 EXE
4、学会使用DEBUG调试程序把可执行文件装入内存并调试运行,用D命令显示目标程序,用U命令对可执行文件反汇编,用G命令运行调试。
二、实验设备
装有MASM 软件的IBM PC机
三、实验内容
1、汇编程序对源程序进行翻译,生成扩展名为OBJ的目标文件;连接程序是将目标程序和库文件进行连接、定位,生成扩展名为EXE的可执行文件;调试程序是对目标文件进行调试,验证它的正确性。
2、DEBUG程序各种命令的使用方法
功能
命令格式
使用说明
显示内存单元内容
D地址
从指定地址开始显示40H个字节或80H个字节
修改内存单元内容
E地址
先显示地址和单元内容等待输入修改的内容
检查和修改寄
存器的内容
R
显示全部寄存器和标志位及下条指令单元十六进制数码和反汇编格式
反汇编
U地址
从指定地址开始反汇编16个或32个字节
汇编
A地址
从指定地址直接输入语句并从指定指定汇编装入内存
跟踪
T=地址
从指定地址开始逐条跟踪指令
运行
G=地址
无断点,执行正在调试的指令
退出
Q
退出DEBUG返回DOS
3、实验过程
①、在edit环境,写字板,记事本等中输入源程序。或双击屏幕上“未来汇编”快捷方式进入编辑环境输入源程序。
②、保存,输入文件名如A1.asm,并将其与MASM的三个可执行文件放在同一目录下。
③、在DOS环境下(可用windows下的命令提示符进入),用MASM生成目标文件A1.OBJ
进入DOS环境,将当前目录设置为存放MASM的路径.如图所示:
如果MASM 的软件放在C:\TOOLS\WJYL 则先要进入到该子目录下,进入该子目录的方法为,cd c:\ 退到c盘的根目录下,cd tools
cd WJYL
则如上所述进入该目录下,然后
输入MASM ,可见屏幕上有四个提问,按如下格式回答:
Source filename [.ASM]:a1↙
Object filename [A1.OBJ]: ↙
Source listing [NUL.LST]: a1↙
Cross-reference [NUL.CRF]:a1 ↙
④、键入DIR/W可见目标文件A1.OBJ和列表文件A1.LST。
⑤、在DOS环境下,用连接文件LINK连接程序生成可执行文件A1.EXE输入LINK,可见屏幕有四个提问,按以下格式回答:
Object Modules [.OBJ]:A1↙
RUN File [A1.EXE]: ↙
List File [NUL.MAP]:↙
Libraries [.LIB]:A1↙
用DIR命令,查看生成的各文件
⑥、用TYPE A1.LST↙ 命令观看列表文件
⑦、在DOS环境下,用DEBUG跟踪程序来安装运行A1.EXE 程序
1) 输入DEBUG A1.EXE↙可见有提示符“—”
2)输入-R ↙可见CPU内所有寄存器内容和标志位状态如下:
AX=0000 BX=0000 CX=0100 DX=0000 SP=0028 BP=0000 SI=0000 DI=0000 DS=1112 ES=1112 SS=1126 CS=1129 IP=0000 NV UP DI PL NZ NA PO NC
1129:0000 B82211 MOV AX,1122
3)输入-U,可看到11行指令,再用U命令可看到余下的各指令。
4)输入运行命令-G=00 28 可见程序执行到 INT 21H 句便停下来,屏幕展示此刻各寄存器的内容如下:
AX=4C00 BX=0007 CX=0001 DX=0000 SP=0028 BP=0000 SI=0000 DI=0000 DS=1122 ES=1112 SS=1126 CS=1129 IP=0028 NV UP DI PL ZR AC PE CY
1129:0028 CD21 INT 21
5)输入-R IP 可修改指令指针
6)输入-T↙可看到执行第一条指令的结果
输入-T=0 3↙ 可看到3条指令执行的过程
7)输入-Q ↙退出DEBUG,回到DOS状态。
注:如果masm的过程中出现错误,可参看错误提示,在相应的行和列去寻找错误。可直接在dos 环境下键入edit进入编辑环境。
附:标志寄存器对应的含义
实验例程1:
DATA SEGMENT
ARRAY1 DB 2,5,0,3,-4,5,0,0AH,0FH
ARRAY2 DB 3,5,4,-2,0,8,3,-0AH,20H
COUNT DB $-ARRAY2
LEN DB ?
SUM DB 20H DUP(0)
DATA ENDS
STACK1 SEGMENT PARA STACK 'STACK'
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV BX,-1
MOV CX,0
MOV CL,COUNT
NOZERO: INC BX
MOV AL,ARRAY1[BX]
ADD AL, ARRAY2[BX]
MOV SUM [BX],AL
LOOPNE NOZERO
JE ENDO
INC BL
ENDO: MOV LEN,BL
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验例程2:显示字符串
;SAMPLE PROGRAM DISPLAY MESSAGE ;注释行
STACK SEGMENT PARA STACK ‘STACK’ ;定义堆栈段
DB 1024 DUP (0) ;在存储器的某个区域建立一个堆栈区
STACK ENDS
DATA SEGMENT ;定义数据段
MESSAGE DB ‘THIS IS A SAMPLE PROGRAM. $’ ;在存储器中存放供显示的数据
DATA ENDS ;数据段结束
CODE SEGMENT ;定义代码段
ASSUME CS:CODE,DS:DATA,SS:STACK ;告诉汇编程序段范围
START: PROC FAR ;将程序定义为远过程
PUSH DS
MOV AX,0 ;可用XOR AX,AX
PUSH AX ;标准序,以便返回DOS操作系统
MOV AX,DATA
MOV DS,AX ;初始化DS
LEA DX, MESSAGE ;MESSAGE 地址偏移量给BX
MOV AH,9
INT 21H ;调用 DOS 9号中断功能显示字符串。
RET ;返回DOS 操作系统
START ENDP ;过程结束
CODE ENDS ;代码段结束
END START ;整个程序汇编结束
例3 人机交互:
DATA SEGMENT
BUF DB 100 ;缓冲区长度
DB ? ;预留用来存放实际长度
DB 100 DUP(?) ;接收来自键盘的输入下信息
MESG DB ‘WHAT IS YOUR NAME ? $’
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA, CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV DX OFFSET MESG
MOV AH, 09H ;屏幕显示提示信息
INT 21H
MOV DX OFFSET BUF
MOV AH, 0AH ;接收键盘输入
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验二 数码转码编程及程序调试
1. 实验目的
1.掌握不同进程数及编码相互转换的程序设计方法,加深对数码转换的理解;
2. 进一步熟悉键盘使用方法;
3. 进一步熟悉调试程序的方法。
二. 实验设备
装有汇编软件的IBMPC 机一台
3. 实验内容及步骤
计算机输入设备输入的信息一般ASCii码或BCD码表示的数据或字符,CPU处理信息一般均用二进制数进行计算或其它处理,处理结果输出的外设有必须一外设的
变为ASCII码,BCD码或七段显示码等。因此,在应用软件中各累数制的转换和代码的转换是必不可少的。
计算机于外设间的数码转换关系如图2-1所示,数码对应关系如表2-1所示。
1. 将ASCII码表示的十进制数转换为二进制数
十进制数可表示为:
EMBED Equation.3
代表十进制1,2,3,···9,0;
EMBED Equation.3
由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn开始作乘10加次位的操作,将结果再乘10再加下一个次位,如此重复,则可求出二进制的数结果来。程序流程图如图2-2。这里我们规定:被转换的ASCII码十进制数存放在3500h~3504h单位中。而转换结果在3510~3511单位中。
实验步骤
(1) 输入程序并检查无误。
(2) 在3500~3504h单元存入十进制12的ASCII码,即e3500,并输入3030303132。
(3) g=2000,运行程序,并用CTR+C来中断程序返回监控态。
(4) 用d3510查看结果,应为3510 0C 00
(5) 反复试几组数,考查程序的正确性。
(6) 参考流程图如图2-2
2. 将从键盘输入的五位十进制数的ASCII码已存在3500起始的内存单元中。把它转换成BCD码后,再按位分别存入350A起始的内存单元内。若输入的不是十进制的ASCII码,则显示FF.
程序流程图如图2-3
实验步骤
(1) 输入程序并检查无误。
(2) 在3500~3504H单元存入五位十进制数的ASCII码,即e3500
并输入31,32,33,34,35。
(3) G=2000,运行以上程序。
(4) D350A,显示结果为:0000:350A 01 02 03 04 CC…
(5) 反复试几组数,考查程序的正确性。
(6) 参考流程图如下
3. 将十六为二进制数转换为ASCII码表示的十进制数。
十六进制数的值域为0~65535,最大可转换为五位十进制数。
实验步骤
(1) 输入程序并检查无误。
(2) 在3500~3501H单元中存放0C00,运行程序并检查结果,应看到3510~3514H单元中的数依次为3030303132。
(3) 参考流程图见图2-4
4. 十六进制数椟换为ASCII码
设经过CPU处理后的十六进制存放在起始地址为3500H的内存中,把它们转换成ASCII码之后,再分别存入起始地址为3510的内存单元中。参考流程图如图2-5所示。
实验步骤
(1) 输入程序并检查无误。
(2) 在3500~3501H单元中存入四位16进制数203B,即:e3500,并输入3B,20。
(3) G=2000,运行程序
(4) D350A,显示结果为:
0000:350A 42 33 30 32 CC`
输入数与结果ASCII码对应顺序相反。
(5) 参考流程图如下
5. BCD码转换为二进制码
设四个二位十进制的BCD码存放在起始地址为3500H的单元中,转换出的二进制数码存入起始为3510的内存单元中,程序流程图如图2-6。
实验步骤
(1) 输入程序并检查无误
(2) 在3500~3501H单元中存入四个十进制数(12,34,56,78)的BCD码,即e3500,输入01.02.03.04.05.06.07.08。
(3) G=2000,运行程序
(4) D3510,显示结果为3510 0C 00 22 00 38 00 4E 00
(5) 参考流程图见图2-6
4. 程序及调试过程
图2-2
图2-3
图2-4
4、 十六进制数转换为ASCII码
图2-5
5、BCD码转换为二进制码
图2-6
微机实验三 分支和循环程序设计实验
一、分支程序设计实验
1.实验目的
1.掌握分支程序的结构。
2掌握分支程序的设计、调试方法。
2.实验设备
微机一台
3.内容
设计一数据块间的搬移程序
设计思想:
程序要求把内存中一数据区(称为源数据块)传送到另一存贮区(称为目的数据块)。源数据块和目的数据块在存贮中可能有三种情况。
对于两个数据块分离的情况,数据的传送从数据块的首址开始,或者从数据块的末址开始均可,但对于有部分重叠的情况,则要加以
,否则重叠部分会因“搬移”而遭破坏。
可以得出以下结论:当源数据块首址〉目的块首址时,从数据块首址开始传送数据。当源数据块首址〈目的块首址时,从数据块末地址开始传送数据。
流程图:
结果:
在源数据块中存入6个数,分别使SI大于、等于、小于DI均发觉数据正确传送。可见程序正确。
二、循环程序设计实验
1.实验目的
(1)加深对循环结构的理解。
(2)掌握循环结构程序设计的方法。
(3)熟练掌握调试循环程序的方法。
2.实验设备
TDS-MD微机一台
3.内容
(1)编制程序使S=1+2*3+3*4+4*5+……N(N+1),直到N(N+1)项大于200为止。
流程图:
结果与分析:
运行结果为45FH,与实际相符,程序正确。
(2)求某个数据区内负数的个数
设数据区的第一单元存放区内数据的个数,从第二单元开始存放数据,在区内最后一个单元存放结果。
为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。
流程图:
结果与分析:
输入数据个数为6
输入12、88、82、90、22、33得结果03
结果与实际相符,程序正确。
实验四 子程序设计
1. 实验目的
1、学习子程序的定义和调用方法。
2、掌握子程序、子程序嵌套的结构。
3、掌握子程序的程序设计、编制及调试方法。
2. 实验内容
程序采用菜单式选择,可接收用户输入的命令(1~5),各命令如下:
按1键完成字符串小写字母变大写字母
用户输入一由英文大小写字母或数字0~9组成的字符串(以回车结束),程序逐个检查字符串中各字符,将原串中小写字母变成大写字母,其它字符不变,并在屏幕上显示。用户按任一键,重做,按ESC键,返回主菜单。
按2键完成找最大值(二选一)
1、接收用户输入的可显示字符串(以回车结束),程序将其中ASCII码值最大的字符显示出来。
2、接收用户输入若干无符号8位数(以空格或逗号为分隔符,以回车结束),程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。
按3键完成排序(二选一)
1、接收用户输入的可显示字符串,以回车结束。程序按ASCII码值大小由大到小排序并输出显示。
2、接收用户输入若干个有符号8位数(以空格逗号为分隔符,以回车结束)。程序将其中最大的数显示出来。用户按任一键,重做,按ESC键,返回主菜单。
按4键显示时间
首先提示用户对时,即用户输入时,分,秒(以空格或冒号分隔,以回车结束),然后,在屏幕上不断显示时间,格式为:××(时):××(分):××(秒),最好定点显示。用户按任一键,重新对时,按ESC键,返回主菜单。
按5键,结束程序运行,返回系统提示符。
三. 程序与流程图
主程序的简略流程 子程序一的简略流程图 子程序二的简略流程图
子程序三的简略流程图 子程序4,显示时间流程图
运行结果:
主菜单:
分支一(小写字母转大写字母):
分支二(找出ASCII码最大的字符):
分支三(按ASCII码把字符从大到小排列):
分支四(显示跳动的时间):
分支五(退出程序):
错误的输入:
硬件部分实验
一、概述
八十年代以来,国内大中专院校很多专业都相继开设了“微机原理及应用”方面的课程,讲授内容主要是8位机(Z80),实验设备多采用TP801单板机。随着计算机技术的发展,讲授内容开始逐步转向16位或32位的PC系列微机,实验设备亦需更新,“TPC-2003A通用32位微机接口(PCI)实验系统”是我公司继“TPC-2003通用32位微机接口实验系统”的基础上,综合了各学校讲课及实验老师的意见之后推出的微机硬件实验教学设备的新产品。该仪器增加了实验系统的开放能力和灵活性。它不仅使一些典型的微机接口实验方便,而且对一些计算机硬件要求较高的专业提供了锻炼学生动手能力,发挥创造才能的平台。该系统主要有以下特点:
★ 实验电路连接采用了国家专利、获奖产品“自锁紧”插座及导线,消除了连线接触不良的现象。
★ 电路设计中增加了多项保护措施,可有效的避免由于学生实验时错接、错编程损坏主机或接口集成电路的现象。
★ 接口实验增加了实用性、趣味性的项目,使用C语言进行实验的程序。
★ 实验台上增加了逻辑笔、通用IC插座等电路。可作为数字电路实验仪器使用,也可以用于学生毕业设计、实验数据的采集及科研开发。
仪器硬件包括接口卡、实验台(箱)两部分组成,两者之间通过50线扁平电缆相连。
接口卡可以插入PC系列微机中任意一个PCI扩展插槽,它的主要功能是将与实验有关的总线信号加以驱动后引到实验台上,同时引出信号还有与“中断”和“DMA”实验操作有关的信号及+5V、+12V、-12V电源。
实验台上设有I/O地址译码电路、总线插孔、接口实验常用集成电路、外围电路及通用IC插座等部分组成。外围电路包括逻辑电平开关电路、LED显示电路、时钟电路、单脉冲电路、逻辑笔、复位电路、七段数码管显示电路、基本门电路、继电器及步进电机、小直流电机的驱动电路。
使用说明书中介绍了四十多个微机接口实验。覆盖了大中专院校微机接口实验教学大纲中的内容。教师可以根据课时计划安排选作,也可以在此基础上重新设计新的实验项目。
二、安装
1、实验装置基本组成:
(1)、硬件:PCI接口卡一块;实验台(箱)一个;50线扁平电缆一根;自锁紧导线50根;集成电路芯片(8251、74LS273、74LS244、6116)共4片。
该实验装置在PC系统中的位置如图所示(斜线标出):
(2)、软件:光盘一张。
(3)、资料:学生实验指导书一本。
(4)、附件:话筒一个,测试表笔一只,50芯实验连接线。
(5)、可选附件:
(A)32位数据扩展实验套件(包括扩展卡及34线扁平电缆各一个)
(B)实验盒(包括:步进电机、小直流电机、喇叭、指示灯各一个)
(C)TPC-H键盘显示控制器实验板
(D)总线扩展PCI卡
2、安装步骤:
(1)关上PC机电源,打开微机主机箱。
(2)将PC总线接口卡插在任意扩展槽中。接口卡的结构如图1。
(3)用50芯线扁平电缆线连接接口卡和实验台。
(4)接上PC机电源,启动微机,Windows提示发现新硬件,请安装光盘“Disk驱动”目录里的安装配置文件(TPC.inf)
(5)重新启动计算机后,运行光盘里的Setup程序安装运行支持库文件
PLX9054PCI总线扩展卡结构,该卡使用PLX9054和CPLD把PCI总线时序转换成50芯ISA总线时序,提供给微机实验台使用。
三、实验台结构:(见上页)
1、I/O地址译码电路
如图-3所示,地址空间:280H~2BFH共分8条译码输出线:Y0~Y7,其地址分别是280H~287H;288H~28FH;290H~297H;298H~29FH;2A0H~2A7H;2A8H~2AFH;2B0H~2B7H;2B8H~2BFH,8根译码输出线在实验台“I/O地址”处分别由“自锁紧”插孔引出,供实验选用。
2、总线插孔
采用“自锁紧”插座在标有“总线”区引出数据总线D7~D0;地址总线A9~A0;读、写信号IOR、IOW;中断请求信号IRQ;DMA请求信号DRQ1;DMA响应信号、DACK1;及AEN信号,供学生搭试各种接口实验电路使用。
3、时钟电路
如图-4所示,可以输出1MHZ、2MHZ两种信号,供A/D转换器、定时器/计数器、串行接口实验使用。
图 4
4、逻辑电平开关电路
12
如图-5所示,实验台右下方设有8个开关K7~K0,开关拨到“1”位置时开关断开,输出高电平,向下打到“0”位置时开关接通输出低电平,电路中串接了保护电阻,使接口电路不直接同+5V、GND相连,可有效地防止学生因误操作、误编程损坏集成电路现象。
图 5 图 6
5、LED显示电路
如图-6所示,实验台上设有8个发光二极管及相关驱动电路(输入端L7~L0),当输入信号为“1”时发光,为“0”时灭。
6、七段数码管显示电路
如图-7所示,实验台上设有两个共阴极七段数码管及驱动电路,段码为同相驱动器,位码为反相驱动器,从段码与位码的驱动器输入端(段码输入端:a、b、c、d、e、f、g、dp,位码输入端:s1、s2)输入不同的代码即可显示不同数字或符号。
图 7
13
7、单脉冲电路
如图-8所示,采用RS触发器产生,实验者每按一次开关即可以从两个插座上分别输出一个正脉冲及负脉冲,供“中断”、“DMA”、“定时器/计数器”等实验使用。
图 8 图 9
8、逻辑笔
如图-9所示,当输入端Ui接高电平时红灯(D2)亮;接低电平时绿灯亮。
9、继电器及驱动电路
如图-10所示,实验台上设有一个+5V直流继电器及相应的驱动电路,当其开关量输入端输入数字量“1”时,继电器动作:常开触点闭合、常闭触点断开。通过相应的实验使学生了解开关量控制的一般原理。
图 10 图 11
10、复位电路
如图-11所示,能在上电时,或按下复位开关S2后产生一个高电平的复位信号供8255、8251等接口芯片使用。
14
11、接口集成电路
实验台上有微机原理硬件实验最常用接口电路芯片,包括:可编程定时器/计数器(8253)、可编程并行接口(8255)、数/模转换器(DAC0832)、模/数转换器(ADC0809),这里芯片与CPU相连的引线除片选信号CS外都已连好,与外界连接的关键引脚在芯片周围用“自锁紧”插座引出,供学生实验时使用。其中数/模转换器附有双极性输出,模/数转换器附有双极性输入插座。具体电路可见下面实验说明。
12、跳线开关(JP)
实验台上共有5个跳线开关,其中Ja、Jb、Jc在实验台的左上角,50线总线插座的左方。Ja用来选择用主机电源还是用外加电源的,当用主机电源时,应将JA上+5V、+12V、-12V三个短路片插好。若想使用外加电源,必须首先将JA上的三个短路片全部拔掉,才能将外接电源加入。JB和JC是在使用ISA卡时来选择实验类型的,I/O实验时JB、JC上的短路片都应插在标有“I/O”的位置。做存储器实验时,短路片应插在标有“MEM”的位置。做DMA实验时JB应插在“I/O”位置,JC应插在DMA位置。实验台出厂时短路片在I/O实验位置。
实验台上另外两个跳线开关为JP2和JP3,在实验台的左下角,分别用于模/数转换器模拟量输入极性选择,将JP2的1、2短路时IN2(J2)可输入双极性电压(-5V~+5V),2、3短路为单极性(0~+5V),JP3用于选择IN1的输入极性,方法与JP2相同。
13、+5V电源插针
为了减少主机+5V电源的负担和各主要芯片的安全,在主要接口芯片的左上角都有相应的电源连接插针(标记为+5V),当实验需要该芯片时,用短路块短接插针即可接通+5V电源。对用不到的芯片可将短路片拔掉,以确保芯片安全。
14、通用集成电路插座
实验台上设有4个通用数字集成电路插座,其中插座A、B为20P,插座D为40P,插座D可以插入一个24~40脚的集成电路芯片或者2个8~20脚的集成电路芯片。每个插座引脚附近都有相应的“自锁紧”插座,部分实验(简单并行接口、DMA、串行通讯、集成电路测试)电路是利用这些插座搭试的。要求高的学校可以让学生自己搭试更多的实验,以提高学生动手能力。利用这些插座可以开发新的实验,也可以进行数字电路实验,及学生毕业设计。自锁紧插座插入导线时,应稍加力并延顺时针方向旋转一下,才能保证接触良好,拔出时,应先逆时针方向旋转待插头完全松开后,再向上拔出。
15、数字电路实验区
实验台上有一块数字电路实验区,设有三种基本门电路(与、或、非)及D触发器,供学生在接口实验或数字电路实验时直接使用。
16、接线端子
如图-2所示实验台上设有J7,J8共2个接线端子。J7用于外接用户开发的实验板,J7是一个20芯通用插座,用于外接用户开发的实验板,本系统中8279键盘显示实验板就从此插头引出。J8为用户外接开发实验板时外接板的片选信号端。J7各引脚信号安排如下:
15
19 17 15 13 11 9 7 5 3 1
D0
D1
D2
D3
D4
D5
D6
D7
IRQ
CS
RES
+5V
+5V
IOR
IOW
A0
A1
CLK
GND
GND
20 18 16 14 12 10 8 6 4 2
17、50线总线插座信号安排
18、直流电源开关(K1)和存储器地址选择开关(K2)
实验台上有一直流电源开关(K1),在实验台的左上角。在主机电源打开后,再打开实验台上开关K1,实验台才会加电。另外,实验台上还有一个四位拨动开关K2,在实验台8255芯片的右方。K2是在做存储器实验时选择存储器地址使用的。
19、使用外加直流电源注意事项:
《1》用户可以使用主机电源,也可以使用外加直流电源,主机电源通过总线扩展卡引入到实验台的50芯插座上,再通过短路子JA接到电源开关上。该实验台出厂时是按使用主机电源连接的。
《2》用户若想使用外加电源。必须首先将JA上的三个短路片全部拔掉,将主机电源断开,才能将外部电源接入。
《3》用户电源通过外接电源插座J0接到实验台上。插入以前应仔细检查电源插头上各路电源与J0上标注的是否相同,如不相同应修改电源插头,否则会损坏实验台。
《4》外接电源插入以前,应检查各路电源输出是否正确,如不正确应修改或更换电源。
《5》以上各项都正常后,打开电源即可进行实验。
20、高位地址选择电路
16
如图所示,实验台上设有一高位地址选择电路,将高位地址线A19、A18、A17、A16与设置开关K2的设置值进行比较,都相同时MEMCS输出低电平。因此可以选择出16个64K的地址空间。
译码表如下:
1
2
3
4
译码地址
1
2
3
4
译码地址
1
ON
ON
ON
ON
00000H
9
OFF
ON
ON
ON
80000H
2
ON
ON
ON
OFF
10000H
10
OFF
ON
ON
OFF
90000H
3
ON
ON
OFF
ON
20000H
11
OFF
ON
OFF
ON
A0000H
4
ON
ON
OFF
OFF
30000H
12
OFF
ON
OFF
OFF
B0000H
5
ON
OFF
ON
ON
40000H
13
OFF
OFF
ON
ON
C0000H
6
ON
OFF
ON
OFF
50000H
14
OFF
OFF
ON
OFF
D0000H
7
ON
OFF
OFF
ON
60000H
15
OFF
OFF
OFF
ON
E0000H
8
ON
OFF
OFF
OFF
70000H
16
OFF
OFF
OFF
OFF
F0000H
17
几点约定
1、实验电路介绍中凡不加“利用通用插座”说明的均为实验台上已固定电路。
2、实验电路连线在图中均用虚线表示,实线为已连好电路。
实验一 I/O地址译码
一、实验目的
掌握I/O地址译码电路的工作原理。
二、实验原理和内容
实验电路如图11所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。译码输出端Y0~Y7在实验台上“I/O地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,⋯⋯ 当CPU执行I/ O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
例如:执行下面两条指令
MOV DX,2A0H
OUT DX,AL(或IN AL,DX)
Y4输出一个负脉冲,执行下面两条指令
MOV DX,2A8H
OUT DX,AL(或IN AL,DX)
Y5输出一 个负脉冲。
注意:命令中的端口地址 D820、D82A 是根据PCI卡的基址再加上偏移量计算出来的,不同的微机器PCI卡的基址可能不同,需要事先查找出来,查找方法见本书末尾文章中的介绍。计算公式如下:
计算出的地址 = 查找出的PCI卡的基址 + 偏移量; (其中:偏移量 = 2A0H - 280H 或 2A8H –A80H) 20
图 11
利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、⋯⋯),时间间隔通过软件延时实现。
三、编程提示
1、实验电路中D触发器CLK端输入脉冲时,上升沿使Q端输出高电平L7发光,CD端加低电平L7灭。
2、由于TPC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法请参看汇编程序使用方法的介绍。(也可使用自动获取资源分配的程序取得中断号)
实验二 可编程定时器/计数器(8253)
一、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
1. 按图16虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
图 16
2. 按图17连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
图 17
三、编程提示
1、 8253控制寄存器地址 283H
计数器0地址 280H
计数器1地址 281H
CLK0连接时钟 1MHZ
2、参考流程图(见图18、19):
开 始读计数器值显示计数值有键按下吗?开 始送计数器初值NY结 束结 束设计数器0为工作方式0向计数器0送初值1000先送低字节后送高字节向计数器1送初值1000先送低字节后送高字节设计数器0为工作方式3设计数器1为工作方式3
图 18 图 19
实验三、 可编程并行接口(一)(8255方式0)
一、实验目的
掌握8255方式0的工作原理及使用方法。
二、实验内容
1.实验电路如图20,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2. 编程从8255C口输入数据,再从A口输出.
开 始设置8255C口输入A口输出从C口输入数据将此数据自A口输出有键按下吗?NY结 束
图 20 图 21
三、编程提示
1、8255控制寄存器端口地址 28BH
A口的地址 288H
C口的地址 28AH
2、参考流程图(见图21):
实验四 交通灯控制实验
一.实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二.实验内容
如图-29,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。
红黄绿 红黄绿
图 29
三.编程提示: 十字路口交通灯的变化规律要求:
(1) 南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2) 南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3) 南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4) 南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5) 转(1)重复。
四、参考流程图
设置8255A口输出C口输出开 始南北路口黄灯闪,东西路口红灯亮南北路口绿灯亮,东西路口红灯亮长延时南北路口红灯亮,东西路口绿灯亮长延时是否有键按下NY返回DOS南北路口红灯亮,东西路口黄灯闪
实验五 中断
一、实验目的
1、掌握PC机中断处理系统的基本原理。
2、学会编写中断服务程序。
二、实验原理与内容
1、实验原理
PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:
中断源 中断类型号 中断功能
IRQ0 08H 时钟
IRQ1 09H 键盘
IRQ2 0AH 保留
IRQ3 OBH 串行口2
IRQ4 0CH 串行口1
IRQ5 0DH 硬盘
IRQ6 0EH 软盘
IRQ7 0FH 并行打印机
8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:
中断源 中断类型号 中断功能
IRQ8 070H 实时时钟
IRQ9 071H 用户中断
IRQ10 072H 保留
IRQ11 O73H 保留
IRQ12 074H 保留
IRQ13 075H 协处理器
IRQ14 076H 硬盘
IRQ15 077H 保留
PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。
图中断电路
2、实验内容
实验电路如图31,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。要求每按一次开关产生一次中断,在屏幕上显示一次“TPC pci card Interrupt”,中断10次后程序退出。
三、编程提示
1. 由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。
2. 由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。(也可使用自动获取资源分配的程序取得中断号)
3. 在纯DOS环境下,有些微机的BIOS设置中有将资源保留给ISA总线使用的选项,致使在纯DOS环境(WINDOWS环境下不会出现此问
)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为使用即插即用。
4. 在纯DOS环境下,有些微机的BIOS设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,BIOS将不会给TPC卡分配系统资源,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。
5. 由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:
mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,使能中断
33
in ax,dx
or ax,0900h
out dx,ax
其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。(也可使用自动获取资源分配的程序取得),+68H的偏移是关于中断使能的寄存器地址,设置含义如下:
设置INTCSR(68H)寄存器,中断模式设置
BITS
功能
8
1:能够产生PCI中断
0:禁止产生PCI中断
11
1:能够LOCAL端输入的中断送到PCI端
0:禁止LOCAL端输入的中断送到PCI端
其它位为零即可,更多内容参看9054芯片数据手册
程序退出前还要关闭9054的中断,代码如下:
mov dx,ioport_cent+68h ;设置 tpc 卡中9054芯片io口,关闭中断
in ax,dx
and ax,0f7ffh
out dx,ax
6. PC机中断控制器8259 的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:
MOV AL,20H
OUT 20H,AL
中断结束返回DOS时应将IMR对应位置1,以关闭中断。
四、参考流程图
实验六 可编程并行接口(二)(8255方式1)
一、实验目的
1.掌握8255工作方式1时的使用及编程。
2.进一步掌握中断处理程序的编写。
二、实验内容
1.按图33(A)8255方式1的输出电路连好线路。
2.编程:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H,04H,08H,10H,20H,40H,80H使L0~L7依次发光,中断8次结束。
3.按图33(B)8255方式1输入电路,连好线路。
(A) 输出电路 (B) 输入电路
图 33
4.编程:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。
三、参考流程图:
(A) 输出主程序 (B) 输出中断服务程序
图 34
实验七 串行通讯
一、实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验内容
1、按图43连接好电路,(8251插通用插座)其中8253计数器用于产生8251的发送和接收时钟,TXD和RXD连在一起。
2、编程:从键盘输入一个字符,将其ASCII码加 1 后发送出去,再接收回来在屏幕上显示,实现自发自收。
图 43 串行通讯电路
三、实验提示
1、图示电路8251的控制口地址为2B9H,数据口地址为2B8H。
2、8253计数器的计数初值=时钟频率 /(波特率×波特率因子),这里的时钟频率接 1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
3、收发采用查询方式。
四、参考流程图
汇编程序使用方法
汇编程序支持win9x系统
因为pci总线结构支持p&p即插即用功能,每台微机分配给pci扩展板的资源是动态浮动的,不像isa总线是固定死的,因此分配给设备的i/o基地址、mem基地址空间及int中断号会因为不同的微机而变化(详细介绍请参看pci总线规范文档或本设备的教师实验指导书),所以实验前需要确定当前微机中pci卡的资源,并用其替换程序中的相应值,重新编译链接后才能实现实验效果。
如果发现您的微机中tpc卡的设置与以下内容所描述的不一致,这应该是系统没有分配好资源导致的,实验可能做不了,您可以将驱动卸掉再重新安装,看看还出现这种情况否,或是换一台机器试一下,确认是tpc卡的问题还是操作系统安装驱动程序时出现的问题。
需要替换的基地址值为每个汇编程序头中的定义行:
io基地址为:
。。。
ioport equ 0d400h-0280h ;tpc 卡中设备的io地址
。。。
或
。。。
ioport_data equ 0d400h-0280h ;tpc 卡中设备的io地址
。。。
或
。。。
ioport_cent equ 0d800h ;tpc 卡中PCI接口芯片的io地址
。。。
或
。。。
mem基地址为:
mem_data equ 0f6000000h ;tpc 卡中设备的mem地址
。。。
其中”0d400h”是pci接口在微机中被动态分配的io基地址,即需要替换的地址,相当于设备中的地址0280h。
”0d800h”是TPC卡中PCI接口芯片上的设置寄存器组占用的io地址,因为某些实验需要设置该芯片的寄存器。
”0f6000000h”是pci接口在微机中被动态分配的mem基地址,也是需要替换的地址,相当于设备存储器的起始地址0h。
替换方法如下:
步骤1:参照实验指导书安装接口卡及其驱动程序
步骤2:启动微机并打开“控制面板”-〉“系统”-〉“设备管理器”并查到“微机原理教学实验装置”
打开“TPC”
找到两个输入/输出范围(数值可能不会与图中相同),其中一个范围大小是0ffh的是PCI接口芯片上的设置寄存器组占用的io地址空间,另一个范围大小是07fh的是TPC设备的io地址空间;两个内存范围(数值可能不会与图中相同),一个范围大小是0ffh的是PCI接口芯片占用的mem地址空间,另一个范围大小是0fffffh的是TPC设备的mem地址空间。
它们的起始地址即为我们需要的基址值,图中PCI接口芯片输入输出范围是c000-c0ff,基址为c000;TPC设备的输入输出范围是c400-c47f,基址为c400;TPC设备的内存范围是f5800000-f58fffff,基址为f5800000。
记录下基址值。
步骤3:
用记录下的基址值替换每个汇编程序头中的定义行中的值,并重新编译链接后即可。
io基地址为:
。。。
ioport equ 0d400h-0280h ;tpc 卡中设备的io地址
。。。
或
。。。
ioport_data equ 0d400h-0280h ;tpc 卡中设备的io地址
。。。
或
。。。
ioport_cent equ 0d800h ;tpc 卡中PCI接口芯片的io地址
。。。
mem基地址为:
。。。
mem_data equ 0f6000000h ;tpc 卡中设备的mem地址
。。。
即替换“0d400h”为“0c400h”,“0d800h”为“0c000h”,“0f6000000h”为“0f58000000h”,并重新编译链接后即可。
如果程序中使用了中断,则需要根据TPC属性窗口中的中断请求号码来修改程序中的中断向量、中断掩码的参数,并重新编译链接后即可。
汇编程序使用方法_FOT_NT_2K_XP
适用环境:
该方法支持在NT/2K/XP环境中运行涉及直接I/O口操作的程序。
使用方法:
待调试程序的编写、编译、链接方法与在DOS/95/98下相同。
运行编译、链接好的待调试程序前执行程序命令行如下:
allowio /a
注意:命令后缀的参数“/a”中的字符“a”,必须使用小写,否则会提示错误命令。
之后即可运行待调试的程序。
使用说明:
建议使用系统自带的命令行(CMD)窗口中运行待调试的程序。
如无异常,只需运行一次该程序,即可在本次