搜索
您的当前位置:首页正文

微机原理与接口技术实验指导书

来源:哗拓教育


微机原理与接口技术

实验指导书

武汉理工大学华夏学院教务处

二零零九年九月

1

目 录

实验一 系统认识实验..........................................................................3 实验二 DEBUG调试实验....................................................................8 实验三 实验四 实验五 实验六 实验七 实验八 8255实验九 8253实验十 8251

运算类编程实验....................................................................16 指令系统................................................................................23 分支程序设计........................................................................26 循环程序设计........................................................................28 中断特性及8259应用编程实验...........................................31 并行接口应用实验........................................................44 定时/计数器应用实验..................................................50 串行接口应用实验........................................................60

2

实验一 系统认识实验

1.1 汇编语言程序上机应具备的工具软件

汇编语言程序上机操作,必须经过文件的“建立—汇编—连接—执行”四个阶段。因此,系统磁盘上还应具备下列工具软件:

1. 全屏幕编辑程序。用以将程序键入内存,经编辑生成源文件(.ASM)

存盘。常用的编辑程序有EDIL.EXE,SK.EXE,Word97。

2. 宏汇编程序,如MS的MASM.EXE,用以将源文件(.ASM)汇编生成

二进制代码的目标文件(.OBJ)、列表文件(.LST)、及符号交叉引用表文件(.CRF)。

3. 连接程序LINK.EXE。用以将目标问价(.OBJ)与欲使用的库文件(.LIB)

及其他目标模块,连接装配生成一个可执行文件(.EXE)、及各段空间分配的列表文件(.MAP)。

4. 调试程序DEBUG.COM。用以对.EXE或.COM文件进行调试,排错。 值得指出的是,人工输入的现成程序,或自编程序,难免不出现键入错误,疏漏错误,语法错误及逻辑错误。虽然在静态自查及汇编阶段均可被查出, 但程序内在的逻辑功能性错误,还必须借助调试工具,在检测环境下动态运行程序时才能表露出来。因此程序调试这一环必不可少。 1.2 汇编语言程序上机过程

先用如下流程图简明表述汇编语言程序上机操作的四个阶段。注意第2章起的所有实验程序均按此流程进行操作。图中用的是EDIT编辑程序。附录2给出了汇编出错信息,供排错时参考。

3

开始>程序>附近>命令提示符(屏幕显示:命令提示符街面) 键入“EDIT” 出现 C:\\ 命令提示符-Edit界面,输入源程序 按alt+F弹出文件菜单,选择“Sava AS” 存盘,出现Sava As界面 屏幕显示 File Name:[E:\\Masm1\\文件名.ASM„] 按Tab键移动光标,选中“OK” 再按alt+F弹出文件菜单,选择Exit退出 屏幕显示 命令提示符 C:\\界面 C:\\„„>E: E:\\>CD Masm1 E:\\ Masm>masm 文件名.asm (将源文件转换成用二进制代码表示 的目标文件) 屏幕显示 e[文件名.OBJ]:—(在当前盘上生成以OBJ为扩展名的目标文件,此文件一定要。若在其他盘上还应指明盘符及路径。) Source listing[KUL.LST]:—(生成以LST为扩展名的列表文件,此文件可有可无,若需要则输入文件名和回车,不需要则输入回车) Cross reference[NUL.CRF]:—(生成以CRF为扩展名的交叉符号表,此文件可有可无,若需要则输入文件名和回车,不需要则输入回车) 屏幕显示 0 Warning Severs(警告性错误) 0 Errers Errore(语法性错误) 无错误

4

有错误 E:masm1>LINK 文件名(将OBJ文件转换成可执行的EXE文件) 屏幕显示 Run File[文件名.exe]:—(生成以EXE为扩展名的执行文件) List File[NUL.MAP]:—(生成以MAP为扩展名的列表分配文件。不用,则输入回车) Liabaries[.LIB]:—(当用户到函数库时,则需输入库函数名,没有则键入回车即可) E:\\masm1>文件名(运行执行程不正确 运行结果正确吗? 正确 结束 图1.2.1 汇编语言程序上机过程流程图

1.3 汇编语言程序上机过程实例 一、假定要在显示器显示如下一行信息:

I am a student! 其汇编程序的过程如下:

STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT BUF DB’I am astudent!$’ DATA ENDS CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

5

STAPT: MOV AX,DATA MOV DS,AX LEA DX,BUF MOV - AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS

ENDS START

二、实验步骤

汇编程序上机操作步骤

(一)建立源程序EDIT1、开始→程序→附件→命令提示符(出现命令提示符界面)2、键入EDIT↙(出现命令提示符—edit界面,输入源程序)注:按Alt+Enter键进行窗口切换(放大、还原)

按Alt+F激活File(文件)菜单。 选择

Seve As(另存为)命令,出现

File name:[E:\\masm1\\Li.asm ] C:\\„„„\\ 驱动器 A: B: C: D: . OK . . Seve As界面

在对话框中用“Tab”键移动光标,点击“OK”

4、再按Alt+F激活File(文件)菜单。选择Exit推出出现命令提示符界面,C:\\„>E:\\MASM1\\MASM 文件名↙

文件夹 汇编命令 源程序名或(1)C:\\„>E:↙ (切换到E:盘)(2)E:>CD MASM↙ (进入子目录MASM)(3)E:\\MASM>MASM 文件名↙汇编后生成目标程

6

序,以.OBJ为后缀

(三)连接LINKE:\\MASM>Link 文件名↙连接后生成可执行程序,以.exe为后缀(四)执行程序E:\\MASM>文件名↙(五)在汇编和后若提示有错误,再次进入编辑1、E:\\MASM>EDIT↙(出现命令提示符—edit界面)2、按Alt+F激活File(文件)菜单选择Open命令 移动←↑→↓键选中待编辑的文件,修改完后再存盘。

运行结果如下: I am sutdent!

7

实验二 Debug调试实验

2.1 DEBUG使用方法 一、实验目的

1. 熟悉DEBUG提供的调试环境。

2. 学习使用Debug的常用命令,汇编、运行小段程序。

3. 学习8088/8086的寻址方式、指令功能。观察计算机执行简单程序的工作过程。

二、实验内容与操作指导

Debug子命令的功能与使用格式见上章的列表介绍。下面通过8个程序小段实例,学习其用法。

(一)由DOS进入DEBUG调试环境

1.点击“开始”→程序→附件→命令提示符→DEBUG 将调试程序装入内存 注意:当机器控制权由DOS成功转移给调试程序后,将显示“—”号,它是debug的状态提示符,表示可以接受调试命令了。

2.—R(回车键)显示CPU中各寄存器当前初始内容。请记录于下列各项,后面实验将用到。

AX=0000 BX=0000 CX=0000 BP=0000 SI=0000 DI=0000 DS=B8C ES=B8C SS=B8C SP=FFEE CS=138C IP=0100

FLAG寄存器中的8各标志状态值(已填入,其含义见下页的介绍)是:

OF NV 说明:

(1)此时,调试工作区的4各段值相同,指向同一起点。表明共用一个64KB

空间。

(2)SS:SP指向堆栈顶单元。SP为FFFE或FFEE,正好是本段的最高可用

地址。表明对栈自动使用最高地址,栈区由底往上(低址方向)生长。 (3)CS:IP为约定的调试工作区地点(IP=0100),可由此装入待调试程序

代码,或汇编键入的程序小段。工作区由(低址)往下使用。 (4)Debug用符号给出寄存器中8个标志位的当前状态。其含义如下表所

8

DF UP IF EI SF PL ZF NZ AF NA PF PO CF NC 示。

(5)当运行程序至断点处停下时,或单步多步跟踪执行指令时,Debug均

显示各寄存器的当时内容,便于及时观察结果。

标志位含义 OF 益处 DF 方向 IF 中断 SF 符号 ZF 全零 AF 辅助进位 PF 奇偶性 CF 进位 (二)汇编运行小段程序 1.1求和运算

给程序1.1人工直接给寄存器赋初值 (1)给AX、BX赋值

—RAX

AX 显示AX当前内容 :FDAA 键入被加数 —RBX

BX 显示BX当前内容 :FBCE 键入加数

(2)汇编小段程序。注意:每行指令后用回车结束,机器即惊醒汇编,出错将有提示。调试状态下操作的输入和显示均为HEX十六进制,故不必加后缀H。

—ACS:100

:0100 ADD AX,BX ;求和 :0102 MOV CX,AX ;转存和数

:0104 INT 20 ;结束程序(软中断调用) :0106

“1”的对应符号 “0”的对应符号 OV 有 DN 递减 EI 允许 NG 负 ZR 零 AC 有 PE 偶 CY 有 NV 无 UP 递增 DI 禁止 PL 正 NZ 非零 NA 无 PO 奇 NC 无 9

—R(回车键)查看各寄存器内容。因程序尚未运行,故无运算结果。 (3)单步跟踪执行程序。注意观看有关寄存器内容及各标志位值的变化。

—t(回车键)从当前地址(CS:0100)处执行加法指令。记录有关结果。 AX= BX= CX= IP=

OF DF IF SF ZF AF PF CF —t(回车键)在执行传送指令,记下有关结果

AX= BX= CX= IP=

OF DF IF SF ZF AF PF CF 分析两部结果,解释内容变化或不变化的原因。 (4)结束程序,返回Debug

—G(回车键)执行软中指令INT20,机器将显示“程序正常终止”的信息。并显示“—”,表明仍处在debug的调控控制状态下。注意这里未用t命令,因为我们不想进入到20H中断处理程序中去。 程序1.2让机器通过指令给寄存器送立即数 (1)汇编小段程序

—ACS:106(回车键)

:0106 MOV AX,1234 ;被加数 :0109 MOV BX,2345 ;加数 :101C MOV CX,0 ;清0 :101F ADD AX,BX ;求和 :0111 MOV CX,AX ;转存结果

:0113 INT 20 ;结束程序 :0115 ;结束汇编

(2)运行程序。注意:必须先修改指令指针IP,使其指向本程序的首条指令。然后才能执行程序。当然也可以再t或G命令中指出程序起点地址。

—RIP(回车键)

IP 0100 显示当前值

10

:0106(回车键)指向本程序入口

—R(回车键) 显示各寄存器当前内容及首条指令

—T3(回车键) 跟踪执行三条赋值传送指令,看有关寄存器及标志值 —T2(回车键) 跟踪执行相加及送和数指令,看有关寄存器及标志值 —G(回车键) 执行20H号中断,结束程序 程序1.3采用直接寻址方式从内存区读写数据

(1)汇编程序 —ACS:116(回车键)

:0116 MOV AX,[0125] :0119 MOV BX,[0127] :011D ADD BX,AX :011F MOV [0129],BX :0123 INT 20 :0125 DW 222 :0127 DW 888

:0129 DW 0 ;和单元 :012B(回车键)

注意:①由于当前DS=CS,故直接寻址从内存取存的数据,可与指令代码在一起。

②A命令能汇编处理DB及DW两条伪指令定义的变量数据,但不得用变量符号。

(2)设置断点(观察点)分段运行程序

—G=CS:116 11D(回车键);从指令入口运行程序,至断点11D停。可见了;

两个数已取至AX,BX,但还没有求和。

—G123(回车键) ;从上一断点运行至新断点停。已完成求和并存

入指定结果单元。

—G(回车键) ;结束程序 (3)用两种方式观看内存内容

—DCS:116 12B(回车键) 显示本程序小段目标代码和数据单元内容 —UCS:116 124(回车键) 反汇编指定范围的内存区内容

11

机器码 0AF5:0116 A12501 OAF5:0119 8B1W2701 OAF5:011F 01C3 OAF5:011F 891E2901 OAF5:0123 CD20 2.求n*10的运算

程序1.4用一位指令实现乘法运算 (1)汇编小端茶程序

—ACS:0130(回车键)

程序 MOV AX,[0125] MOV BX,[0127] ADD BX,AX MOV [0129],BX INT 20 :0130 MOV AL,08 ;设n=08h :0132 SHL AL;1 ;的AL=10h :0134 MOV BL,AL :0136 MOV CL,2

:0138 SHL AL,CL ;得AL=40h :013A ADD AL,BL ;得AL=50h :013C INT 20 :013E(回车键)

(2)运行程序。可用单步跟踪,多步跟踪,设断点或连续运行等方式来监控程序德执行。

程序1.5用乘法指令运算且显示结果

—ACS:140(回车键)

:0140 MOV AL,06 ;设n=06h :1042 MOV CL,0A

:0144 MUL CL ;06h*0Ah :0146 MOV DL,AL

:0148 MOV AH,02 ;用2号功能调用显示结果 :014A INT 21 :014C INT 20

12

:014E(回车键)

运行程序。请注意观察结果数据如何求出及表示的。还可更改n值,重新运行程序。

3.向指定内存区置数(程序1.6) (1)汇编小段程序

—ACS:150

:0150 MOV AX,1000 ;置数据段值 :0153 MOV DS,AX

:0155 MOV AL,42 ‘B’=42h :0157 MOV SI,0 ;置偏移地址初值 :015A MOV [SI],10 ;填写字符B :015C INC SI ;指向下一单元 :015D CMP SI,10 ;已填完吗? :0160 JNZ 015A ;否,继续循环 :0162 INT 20 ;是,结束程序

(2)运行程序。注意:这是循环程序。由比较指令和条件转移指令控制循环。到底循环了对少次呢?请先用D命令观看待置数内存的原内容(—D1000:0 2F)。然后单步或多步执行程序,看程序循环填数的控制过程。最后再用D命令看数据区内容,检查填数效果(—DDS:0 2F 为什么此处可用ds指定段值呢?) (3)用F命令向内存区填数

—FDS:10 2F‘C’ (回车键) 用C字符填写1000:10~2F内存区 —FDS:30 L20‘*’ (回车键) 用*字符填写1000:30~4F内存区 —FDS:50 L10‘123456789ABCDEF’ (回车键) 填写字节串

—DDS:0(回车键) 观看数据区的内容(显示128个字节单元) 4.接受、显示从键盘输入的字符(遇空格符择推出)

(1)汇编小段程序(程序1.7) —ACS:170(回车键)

:0170 MOV AH,1 ;1号功能调用,等待键盘输入 :0712 INT 21

13

:0174 CMP AL,20 ;是空格符吗? :0176 JZ 0180 ;是,推出循环 :0178 MOV DL,AL

:017A MOV AH,2 ;2号功能调用,显示一个字符 :017C INT 21

:017E JMP 0170 ;继续循环 :0180 INT 20 ;结束程序 :0182(回车键)

(2)运行程序。这也是条件控制的循环程序。利用了连个功能调用。可连

续运行程序,观看循环控制过程,观看程序效果。请问:为什么屏幕显示的是双字符呢?按回车键,有什么现象出现?按其它键呢?

5.在屏幕上显示字符串信息

(1)汇编小段程序(程序1.8) —ACS:190

:0190 PUSH CS ;使DS=CS :0191 POP DS

:0192 MOV DX,19B ;字符串入口地址

:0195 MOV AH,9 ;9号功能调用,显示字符串 :0197 INT 21 :0199 INT 20

:019B DB ‘Welcome to use the DEBUG!$’ :01B6(回车键)

(2)连续运行程序,观看显示效果。你可以从19B处重新汇编,改变字符串内容,再运行程序。 (三)文件存取操作

1.文件存盘

大家或许注意到:上列8个程序小段在内容上没有彼此覆盖。目前,仍保存在CS:100~1B5的调试工作区内。我们可以吧这段代码作为一个文件(取名MYABC)写入磁盘保存起来。其操作步骤是:

14

(1) 文件长度送入BX:CX。这里要存盘的内存信息长度是1B5-100+1=B6请用R

命令将0写入BX,将B6写入CX。 (2) 定义文件名写入磁盘

—NA:MAYABC 定义文件标示符

—W 将约定的工作区起点(CS:100)至算出的终点(B6为长度) 2.装入磁盘文件

让我们先将调试工作区德起始256个单元清0.并检查清0效果,再将刚才盘上生成的实验程序文件,装入工作区,看它是否真的又回调到内存。所用的命令串如下:

—FCS:100 1FF 0(回车键) ;清0 —DCS:100 1FF(回车键) ;检查是否为0

—NA:MYABC(回车键) ;定义待装入的文件标示符 —L(回车键) ;从工作区起点装入文件 —DCS:100 1FF ;检查装入内容。你还可按前面实验程序汇编的起始地址,用反汇编命令查看这几个程序小段。

(四)退出Debug返回DOS

—Q(回车键)返回DOS后,可用DIR命令查看文件MYABC的目录注册情况。

15

实验三 运算类编程实验

一. 实验目的

1. 掌握使用运算类指令编程及调试方法。

2. 掌握运算类指令对各状态标志位的影响及其测试方法。 二. 实验设备

TDN86/51或TDN86/88教学实验系统一台 三. 实验内容及步骤

8086/8088指令系统提供了实现加、减、乘、除运算的基本指令,可对表3-1所示的数据类型进行算术运算。 数 制 运算符 操作数 二进制 带符号 无符号 组合 +、- 字节(二位数字) BCD码 非组合 +、-、×、÷ 字节(一位数字) +、-、×、÷ 字节、字、多精度 表3-1 数据类型算术运算表

1. 二进制双精度加法运算

计算X+Y=Z,将结果Z存入某存储单元。实验程序如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS DATA SEGMENT

XL DW ? ;请在此处给X低位赋值 XH DW ? ;请在此处给X高位赋值 YL DW ? ;请在此处给Y低位赋值 YH DW ? ;请在此处给Y高位赋值

ZL DW ? ZH DW ? DATAENDS CODE SEGMENT

16

ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX

MOV AX, XL ;X低位送AX MOD AX, YL ;X低位加Y低位 MOV ZL, AX ;存低位和 MOV, AX, XH ;X高位送AX ADC AX, YH ;X高位加Y高位 MOV ZH, AX Al: JMP Al CODE ENDS END START

本实验程序是双精度(2个16位,既32位)运算,利用累加器AX,先求低十六位和,并存入低址存储单元,后求高16位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC指令,则低位相加有进位时,CF=1,高位字相加时,同时加下CF中的1。

实验步骤

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)用U0000:2000查看MOV AX,XXXX(DATA)语句,即得到数据段地址CS:XXXX用E命令EXXXX:0000↙给XL,XH,YL,YH赋值存入二进制数A0 65 15 00和9E B7 21 00。

(3)运算以上程序。

(4)显示计算结果:3E 1D 37 00 CC …。 (5)反复试几组数,考察程序的正确性。 2. 十进制数的BCD码减法运算

计算X-Y=Z,其中,X、Y、Z为BCD码。实验程序及流程如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS DATA SEGMENT

17

X DW ? ;请在此处给X赋值 Y DW ? ;请在此处给Y赋值 Z DW ? DATAENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA MOV DS, AX MOV AH, OOH

SAHF

MOV CX, OOO2H MOV SI, OFFSET X MOV DI, OFFSET Z

Al: MOV AL, [SI] SBB AL, [SI+O2H] DAS PUSHF AND AL, OFH POPF MOV [DI], Al INC DI INC SI LOOP Al A2: JMP A2

CODE ENDS END START 实验步骤:

18

(1)输入实验程序并检查无误,经汇编、连接后装入系统。 (3)运行以上程序。

(4)显示计算结果:08 02 CC …。 (5)反复试几组数,考察程序的正确性。 3. 乘法运算

本实验实现十进制数的乘法,被乘数和乘数均以BCD码形式存放于内存中,乘积在屏幕上显示,实验程序及流程如下:

STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS DATA SEGMENT

DATA1 DB 5 DUP(?) ;乘数, DATA2 DB ? ;被乘数 RESULT DB 6 DUP(?) ;乘积 DATA ENDS CODE SEGMENT

ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX CALL INIT

MOV SI, OFFSET DATA2 MOV BL, [SI] AND BL, OFH CMP BL, 09H

JNC ERROR

MOV SI, OFFSET DATAl MOV DI, OFFSET RESULT MOV CX, 0005H A1: MOV AL, [SI+04H]

AND AL, 0FH

19

CMP AL, 09H JNC ERROR DEC SI MUL BL AAM

ADD AL, [DI+05H] AAA

MOV [DI+05H], AL DEC DI

MOV [DI+05H], AH MOV CX, 06H

MOV SI, OFFSET RESULT

DISPLAY: MOV AH, 01H MOV AL, [SI] ADD AL, 30H INT 10H

INC SI

LOOP DISPLAY

A2: JMP

INIT: MOV SI, OFFSET RESULT MOV CX, 0003H MOV, AX, 0000H A3: MOV [SI], AX INC SI INC SI LOOP A3 RET

ERROR:MOV AX, 0145H INT 10H JMP A2

20

CODE ENDS END START 实验步骤:

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)用U2000↙命令查看MOV AX,XXXX语句,即得数据段地址CS:XXXX。

(3)用EXXXX:0000↙命令在对应数据段填入乘数与被乘数。 (4)运行程序,屏幕显示结果。用CTRL+C可终止程序运行。 (5)反复试几组数,考察程序的正确性。 4. 用减奇数开平方运算

8086/8088指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。用减奇数法可求得近似平方根,获得平方根的整数部分。我们知道,N个自然数中的奇数之和等于N2,即:

1+3+5=9=32 1+3+5+7=16=42 1+3+5+7+9+11+13+15=64=82

若要做S的开方运算,那么就可以从S中逐次减去自然数中的奇数1,3,5,7…,一直进行到相减数为0或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。实验程序及流程如下:(设开平方数为正整数,存放在3500H单元)

STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV SI, 3500H MOV AX, [SI] MOV CL, 00H MOV DX, 0001H

Al: SUB AX, DX

21

JB A2 INC CL ADD DX, 02H

JMP A1 A2: MOV SI, 350AH

MOV [SI], CL A3: JMP A3 CODE ENDS

END START

实验步骤

(1)输入程序并检查无误,经汇编、连接后装入系统。 (2)在3500-3501H单元中存入被开方数0010,即:

E3500↙,输入10、00。 (3)运行以上程序。

(4)D350A↙,显示结果为:350A 04 00 CC …。 (5)反复试几组数,考察程序的正确性。 四. 思考题

1. 编写有符号数A1B1+A2B2的程序,A1,A2,B1,B2均为符号数。 2. 编写两个数值长度不等的BCD码相加程序。

3. 试编写由键盘输入一个十进制数,并将其转换为二进制数,进行开平方运算的程序。

22

实验四 指令系统

一、实验目的

在DEBUG环境下,了解指令的功能,理解各类指令的执行过程。 二、实验要求

1.观察指令结构运行过程,将偏移地址写在程序前。

2.填写8086/8088有哪几种转移指令: 三、实验程序 1.条件跳转指令 ——ACS:0100 :0100 MOV AH,9E MOV AL,A2 ADD AL,AH JC 010ª

(1)执行上述指令后,IP= ,CF= ,OF= , (2)将JC改为JNC,IP= ,CF= ,OF= , (3)将JC改为JS或JO,IP= ,CF= ,OF= , 2.测试、位移、跳转指令 ——ACS:0100 :0100 MOV AX,[0200] MOV CX,0 TEST AX,FFFF JZ 0112 SHL AX,1 JNC 0110 INC CX JMP 0106 INT 20

(1)记录SHL AX,1执行后,AX= ,PF= ,SF= , ZF= ,CX= ,值。

23

(2)该程序功能为 。 3.条件比较指令 ——ACS:0150 :0150 MIV AX,1000 MOV DS,AX MOV AL,42 MOV SI,0 MOV [SI],AL INC SI CMP SI,10 JNZ 015ª INT 20

(1)指令执行前,——D1000:0000到000F单元的内容为

指令执行后,——D1000:0000到000F单元的内容为 (2)该程序功能为 循环结束。 (3)该程序循环 次,控制循环的寄存器为

(4)该程序功能如果用DEBUG命令替代,应为 4.循环控制指令 ——ACS:0100 :0100 MOV AX,01 MOV BX,02 MOV CX,03 MOV DX,04 INC AX ADD AX,BX SHR DX,1 LOOP 010C INT 20

(1)用T命令执行指令,观察CX的变化,程序执行后AX= ,

24

BX= ,CX= ,DX= (2)将LOOP改成LOOPEN,程序执行后AX= ,BX= ,

CX= ,DX=

(3)将LOOP改成LOOPE,程序执行后AX= ,BX= ,

CX= ,DX= 5.子程序调用及返回指令 ——ACS:0100 :0100 MOV AX,0200 MOV DX,1E4F CALL AX MOV DX,167C ADD DH,DL MOV[0300],DX INT 20 ——ACS:0200 :0200 MOV AX,010B PUSH AX POP AX RET

(1)用T命令跟踪执行程序,记录IP、SP及CALL、RET执行过程中堆栈区

变化IP= ,SP= , 堆栈 (2)程序执行后,DS:0300中内容为 (3)程序执行过程中,调用与返回地址偏移 (4)简述子程序调用与返回过程。

25

实验五 分支程序设计

一. 实验目的

1. 掌握分支程序的结构。

2. 掌握分支程序的设计、调试方法。 二. 实验设备

TDN86/51或TDN86/88教学实验系统一台 三. 实验内容及步骤 设计一数据块间的搬移程序

设计思想:程序要求把内存中一数据区(称为源数据块)传送到另一存储区(或为目的数据块)。源数据块和目的数据块在存储中可能在三种情况。

对于两个数据块分离的情况,数据的传送从数据的首址开始,或者从数据块的末址开始均可。但对于有部分重叠的情况,则要加以分析,否则重叠部分会因“搬移”而遭破坏,可以得出以下结论:

当源数据块首址>目的块首址时,从数据块首地址开始传送数据。 当源数据块首址<目的块首址时,从数据块末地址开始传送数据。 实验程序及流程如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT

ASSUME CS:CODE

START: MOV CX, 0010H ;取搬家字节数(16个字节) MOV SI, 3100H ;取源块首址 MOV DI, 3200H ;取目的块首址 CMP SI, DI ;从首址开始? JA A2 ;是,转移

ADD SI, CX ;否,以末地址开始搬家 ADD DI, CX DEC SI

26

DEC DI

A1: MOV AL, [SI]

MOV [DI], AL DEC SI DEC DI DEC CX JNE A1 JMP A3 A2: MOV AL, [SI]

MOV [DI], AL INC SI INC DI DEC CX JNE A2 A3: JMP A3 CODE ENDS

END START

实验步骤:

(1)按实验流程图设计编写实验程序。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)用E命令在以SI为起址的单元中填入16个数。 (4)运行实验程序。

(5)用D命令查看DI为起址的单元中的数据是否与SI单元中数据相同。 (6)试改变SI、DI的取值,观察在三种不同的数据块情况下程序的运行。

四. 思考题

为什么当源数据块首址>目的块首址时,应从数据块首地址开始传送数据。而当源数据块首址<目的块首址时,应从数据块末地址开始传送数据?

27

实验六 循环程序设计

一. 实验目的

1. 加深对循环结构的理解。 2. 掌握循环结构程序设计的方法。 3. 熟练掌握调试循环程序的方法。 二. 实验设备

TDN86/51或TDN86/88教学实验系统一台 三. 实验内容及步骤 1. 编制程序

使S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止。 实验程序及流程如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX, 0001H MOV BL, 02H

A1: MOV AL, BL INC BL MUL BL ADD DX, AX CMP AX, 00C8H JNA A1

A2: INT 03H CODE ENDS END START 2. 求某数据区内负数的个数

设数据区的第一单元存放区内单元数据的个数,从第二单元开始存放数据,

28

在区内最后一个单元存放结果。为统计数据区内负数的个数,需要逐个判断区内的每一个数据,然后将所有数据中凡是符号位为1的数据的个数累加起来,即得区内所包含负数的个数。

实验程序及流程如下: STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE

START: MOV DI, 3000H ;设数据区首址 MOV CL, [DI] ;送数据个数 XOR CH, CH ;CH清0 MOV BL, CH ;BL清0

INC DI ;指针指向第一个数据 A1: MOV AL, [DI]

TEST AL, 80H ;数据首位是否为1

JE A2

INC BL ;负数个数累加

A2: INC DI LOOP A1

MOV [DI], BL ;存结果 INT 03H

CODE ENDS

END START

实验步骤

(1)按流程图编制实验程序。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)E3000↙输入数据如下:

3000=06(数据个数)

29

3001=12、88、82、90、22、33。 (4)运行实验程序。 (5)显示结果03。 四. 思考题

修改程序2,使其能分别求出数据区中正数、零和负数的个数。

30

实验七 中断特性及8259应用编程实验

一. 实验目的

1. 认识TDN86/51系统的中断特性。 2. 掌握8259中断控制器的工作原理。 3. 掌握8259可编程中断控制器的应用编程。 4. 学习掌握8259级连方式的使用方法。

5. 学习在接口实验单元上构造连接实验电路的方法。 二. 实验设备

1. TDN86/51或TDN86/88教学实验系统。 2. 排线、导线若干。 三. 实验内容及步骤 (一)系统中的8259芯片 1. 8259A可编程中断控制器介绍

中断控制器8259A是Inter公司专为控制优先级中断而设计开发的芯片。它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中,因此无需附加任何电路,只需对8259A进行编程,就要以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。同时,在不需增加其他电路的情况下,通过多片8259A的级连,能构成多达64级的矢量中断系统。

8259A的编程,就是根据应用需要将初始化命令字ICW1-ICW4和操作命令OCW1-OCW3分别写入初如化命令寄存器组和操作命令寄存器组。ICW1-ICW4各命令字格式如表7-1所示。

IBMPC、PC/XT机内有一片8259A中断控制器,可以提供8个中断源: 中断源 中断类型号 中断功能 IRQ0 08H 时钟 IRQ1 09H 键盘 IRQ2 0AH 保留 IRQ3 0BH 串行口2 IRQ4 0CH 串行口1 IRQ5 0DH 硬盘

31

IRQ6 0EH 软盘 IRQ7 0FH 并行打印机

表7-1 8259A的初始化命令字ICW

ICW3 ICW1 1,需要ICW4 D0 0,不要ICW4 8086/80881,单片8259 D1 0,多片8259 设为0 8086/8088中 D2 不用,设为0 各 中断请求信号位 作用方式: 含 D3 1,电位触发 义 0,边沿触发 D4 ICW1标志位:1 D5 8086/8088中不D6 用,设为0 D7 系统 13H 设定值 系统 20H 口地址 21H 21H - 21H 08H - - 0DH 不用 8086/8088中断向量不用 地址0,一般嵌套方式 T3~T7位 1,特殊嵌套方式 0,无级连从片 0,非缓冲方式 连从片 1,缓冲方式 线上有级1,IRQi001,„IRQ7为11 1,主8259 0,从8259 中不用,000,IRQ1为0,正常EOI 别码。IRQ0为1,自动EOI 应的从片的识0,8080/8085模式 ICW2 (主) 与主片IRQi对1,8086/8088模式; ICW3(从) ICW4 2. 系统中的8259A芯片

系统中的8259A芯片工作于单片方式,但可由用户扩展连接成级连方式。其线路如图7-1所示。图中的圈点表示此为排针形式引出脚。(注:以下线路图中的圈点均为排针形式引出脚,以后不再另作说明)。

32

XDO 11XD1 10XD2 9XD3 8XD4 7XD5 6XD6 5XD7 4D0D1D2D3D4D5D6D7INTINTA8088INTRINAQS11726IOY1XIORXIOWXA0主8259IR0IR1IR2IR3IR4IR5IR6IR718 IRQ019 IRQ120 IRQ221 IRQ322 IRQ423 IRQ524 IRQ625 IRQ7SP/EN1613227CSRDWRA0CAS0CAS1CAS212 CAS013 CAS115 CAS2INTA图7-1 系统中的8259A芯片

系统启动时,8259A被初如化,其初始化是通过系统中的初始化程序设置初始化命令字ICW来实现的。系统初始化时,规定0#和4#中断源分别提供给实时钟和与PC微机联机的串口通讯,用户可以使用其余的中断源。在进入监控后,只有4#中断源处于开启状态,其他中断源都被屏蔽了。中断矢量地址与中断号之间的关系如下表。

中断序号 功能调用 0 08H 20H 矢量地址 | 23H 说 明 可用 1 09H 24H | 27H 可用 2 0AH 28H | 2BH 可用 3 0BH 2CH | 2FH 串口2 4 0CH 30H | 33H 串口1 5 0DH 34H | 37H 可用 6 0EH 38H | 3BH 可用 7 0FH 3CH | 3FH 可用 3. 接口实验单元中的级连实验用8259A芯片

除系统中的8259A芯片外,在接口实验单元中专门提供了另一片8259A芯片,以便进行8259级连实验。其线路如图7-2所示。

33

DO 11D1 10D2 9D3 8D4 7D5 6D6 5D7 4INT17INTA26CSRDWRD0D1D2D3D4D5D6D7INTINTA从8259IR0IR1IR2IR3IR4IR5IR6IR71618 IR019 IR120 IR221 IR322 IR423 IR524 IR625 IR7SPENXA013227系统总线CSRDWRA0CAS0CAS1CAS212 CS013 CS115 CS2

图7-2 接口实验单元中的级连用8259A芯片线路

4. 接口实验单元中的R-S触发器电路

KK1(+)KK1+5VKK1(-)74001K

KK2(+)KK2+5VKK2(-)74001K

图7-3 R-S触发器电路

(二)实验内容 1. 8259应用实验(1)

34

KK2(-)KK2(+)KK1(-)KK1(+)KK UNIT8259IRQ7

图7-4 实验(1)线路

按图7-4所示实验线路编写程序,使每次响应外部中断IRQ7时,显示字符“7”,中断10次后,程序退出。实验程序及流程如下: STACK STACK CODE START:

SEGMWNT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE PUSH DS MOV AX, 0000H MOV DS, AX

MOV, AX, OFFSET IRQ7 ADD AX, 2000H MOV SI, 003H MOV [SI], AX MOV AX, 0000H MOV SI, 003EH MOV [SI], AX CLI POP DS IN AL, 21H AND AL, 7FH OUT 21H, AL

;保存数据段

;数据段清零

;取中断程序入口地址(相对地址) ;加装载时IP=2000H地址(绝对地址) ;填8259中断7中断矢量 ;填偏移量矢量 ;段地址CS=0000H

;填段地址矢量 ;关中断 ;弹栈

;读8259中断屏蔽字 ;开8259中断7

35

MOV CX, 000AH A1: CMP CX, 0000H

;读8259中断屏蔽字 ;关8259中断7

;中断程序入口

JNZ A2 IN AL, 21H OR AL, 80H OUR 21H, AL STI HLT A2: STI

IRQ7:

JMP A1 MOV AX, 0137H INT 10H MOV AX, 0120H INT 10H DEC CX MOV AL, 20H OUT 20H, AL CLI IRET

CODE ENDS

END START

编码提示:

PC机中断控制器8259A的地址为20H、21H,编程时要根据中断类型号设置中断矢量;中断屏蔽寄存器IMR对应位要清零(允许中断);中断服务结束返回前要使用中断结束命令;

MOV AL,20H OUT 20H,AL

中断结束返回DOS时应将IMR对应位置1,以关闭中断。

36

修改IRQ7中断矢量修正IMR,使IRQ7中断允许显示“7”CX=CX-1CX=000AH屏蔽IRQ7开中断停机关中断CX=0?开中断返回

实验步骤

(1)按图7-4连接实验线路。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)重复按KK2微动开关,显示屏上应用“7”来响应,直到按10次后,系统处于停机状态,用CTRL+C返回监控。

3. 8259应用实验(2)

按图7-5-所示实验线路,编写程序,完成下面的要求:

KK2(-)KK2(+)KK1(-)KK1(+)KK UNIT8259IRQ7

图7-5 实验(2)线路

当无中断请求时,执行主程序,延时显示“main”,若有中断请求,则执行其中断服务程序,显示该中断号“6”或“7”;若正在执行较低级的中断服务程序,则允许此它优先级高的中断被响应(IRQ6>IRQ7)。主程序在执行过程中,每显示一个“main”,空一格。实验程序如下:

37

STACK SEGMWNT STACK

DW 64 DUP(?)

;定义堆栈段

;定义数据段

STACK ENDS CODE DATA SEGMENT

TABLE DB 4DH, 41H, 49H, 4EH, 20H, 00H ENDS

CODE

START:

SEGMENT

ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AX PUSH DS MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET IRQ6 ADD AX, 2000H MOV SI, 0038H MOV [SI], AX MOV AX, 0000H MOV SI, 003AH MOV [SI], AX

MOV AX, OFFSET IRQ7 ADD AX, 2000H MOV SI, 003CH MOV [SI], AX MOV AX, 0000H MOV SI, 003EH MOV [SI], AX POP DS MOV AL, 13H

38

加装载时IP=2000H地址(绝对地址)8259中断6中断矢量 6偏移矢量 CS=0000H 6段地址矢量

加装载时IP=2000H地址(绝对地址)8259中断7中断矢量 7偏移矢量 CS=0000H 7段地址矢量 ;定义代码段

;主程序开始;填数据段地址;保存数据段

;数据段清零;取中断程序入口地址(相对地址); ;填;填中断;段地址

;填中断;取中断程序入口地址(相对地址); ;填;填中断;段地址

;填中断;弹栈

OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 09H OUT 21H, AL MOV AL, 3DH OUT 21H, AL

STI

A1: MOV CX, 0007H

MOV AX, 010DH

INT 10H A2: MOV AH, 06H

MOV BX, OFFSET TABLE INT 10H CALL DALLY LOOP A2

JMP A1

IRQ6: STI

CALL DALLY MOV AX, 0136H INT 10H MOV AL, 20H OUT 20H, AL IRET IRQ7: STI

CALL DALLY MOV AX, 0137H INT 10H

MOV AL, 20H

;回车换行

;取数据段中ASCII码存放地址;调字符串显示“MAIN” ;调延时子程序

;到7次换行

;8259中断6程序入口

;显示“6”

;显示空格

;中断返回

;8259中断7程序入口

;显示“7”

;显示空格

39

OUT 20H, AL IRET

;中断返回 ;延时子程序入口

;子程序返回

;程序结束

DALLY: PUSH CX

PUSH AX MOV CX, 0040H A3: MOV AX, 056CH A4: DEC AX

JNE A4 LOOP A3 POP AX POP CX RET

CODE ENDS

END START 实验步骤:

(1)画出以下程序流程图。 (2)按图7-5连接实验电路。

(3)输入程序并检查无误,经汇编、连接后装入系统。

(4)运行实验程序,则连续显示MAIN,先后按动KK1和KK2微动开关来模拟中断请求信号,记录请求顺序及显示结果。

3. 8259级连实验

本实验旨在掌握8259级连方案的硬件接线及编程。

本实验是以系统中的8259作为主片,外接另一片8259作为从片,构成8259级连方式的中断实验线路,如图7-6所示,其中规定主片的IRQ7上连接一片从片,从片上的IRQ7接外中断申请电路(R-S单脉冲触发器),并规定从片的中断矢量编号为30-37H,其命令寄存器组编址为00和01。

40

CAS0CAS1CAS2INTAIRQ7XA0IOY0XIOW系XIOR统XDO 总线CS0CS0CS0INTAINTA0CSWRRDD0IR7KK1(+)KK UNIT8259A从片XD7 D7

图7-6 8259级连实验线路

实验程序如下: STACK STACK CODE

SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE

START: CLI

MOV AL, 11H OUT 20H, AL MOV AL, 08H OUT 21H, AL MOV AL, 80H OUT 21H, AL MOV AL, 1DH OUT 21H, AL MOV AL, 7DH OUT 21H, AL MOV AL, 11H

41

A1: IRQ7: OUT 00H, AL MOV AL, 30H OUT 01H, AL MOV AL, 07H OUT 01H, AL MOV AL, 09H OUT 01H, AL MOV AL, 7FH OUT 01H, AL PUSH DS MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET IRQ7 ADD AX, 2000H MOV SI, 00DCH MOV [SI], AX MOV AX, 0000H MOV SI, 00DEH MOV [SI], AX POP DS STI HLT JMP A1 MOV AX, 0137H

INT 10H MOV AX, 0120H INT 10H MOV AL, 20H OUT 00H, AL

42

OUT 00H, AL IRET CODE ENDS

END START 实验步骤:

(1)画出以下程序的流程图。

(2)按图7-6搭接实验线路,其中INTA连接必须在开机上电之后。 (3)输入程序并检查无误,经汇编、连接后装入系统。

(4)运行实验程序,并通过按动KK1微动开关向从片申请中断,每按动一次KK1,显示屏上显示一个“7”字符,表明CPU响应了一次中断。

四. 思考题

在实验(2)中,若先按动KK2,在按动KK1(此时尚未显示“7”),显示结果会是什么?为什么?

43

实验八 8255并行接口应用实验

一. 实验目的

1. 学习并掌握8255的各种工作方式及其应用。 2. 学习在系统接口实验单元上构造实验电路。 二. 实验设备

TDN86/51或TDN86/88教学实验系统 三. 实验内容及步骤 (一)系统中的8255芯片 1. 8255可编程交行接口芯片介绍

8255可编程外围接口芯片是Intel公司生产的通用并行I/0接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:

方式0——基本输入/出方式 方式1——选通输入/出方式 方式2——双向选通工作方式

8255的内部结构及引脚如图10-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图7-1所示。

2. 系统中的8255芯片

8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,其线路如图10-3所示,端口地址如表8-1所示。

44

系统总线XDO 34XD1 33XD2 32XD3 31XD4 30XD5 29XD6 28XD7 27INTXIOR5XIOW369XA08XA1RESET35IOY36D0D1D2D3D4D5D6D7PA0PA1PA2PA3PA4PA5PA6PA743214039383718 19 202122 23242514 1516171312 1110

WRRD8255A0A1RESETCSPB0PB1PB2PB3PB4PB5PB6PB7PC0PC1PC2PC3PC4PC5PC6PC7图8-1 系统中的8255线路 表8-1 8255端口地址

信 号 线 寄 存 器 A口 I0Y3 B口 C口 控制寄存器 3. 接口实验单元中的开关和发光二级管电路

编 址 60H 61H 62H 63H 45

+5V1Kx8. . .. . .D0K0.4.7Kx8.+5VSW-LED UNIT. . .. . .. . .10D7K78

图8-2 接口实验中的开关和发光二极管电路

(二)8255接口应用实验 1. 8255接口应用实验(1)

PA0...PA7PB0...PB7D0...D7K0...K7SW-LED UNIT8255

图8-3 实验线路图

按图7-3所示实验线路编写程序,使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组发光二级管上,然后通过对8255芯片编程来实现输入/出功能。实验程序如下: STACK STACK

SEGMENT STACK DW 64 DUP(?) ENDS

46

CODE

SEGMENT ASSUME CS:CODE

START: MOV AL, 82H

OUT 63H, AL A1: IN AL, 61H

OUT 60H, AL JMP A1

CODE ENDS

END START 实验步骤: (1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)运行程序,拨动开关组,观察发光二级管应一一对应。 2. 8255接口应用实验(2)

(8259)IRQ7KK UNITKK1PC0PC2PA0...PA7PB0...PB7D0...D7K0...K7SW-LED UNIT8255图8-4 8255实验(2)接线图(KK1-初态为“1”)

按图7-4所示接线,编写程序,使8255端口A工作在方式0并作为输出口,端口B工作于方式1并作为输入口,则端口C的PC2成为选通信号输入端STBB,PC0成为中断请求信号输出端INTRB。当B口数据就绪后,通过发STBB信号来请求CPU读取端口B数据并送端口A输出显示。 STACK STACK CODE

SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT

47

ASSUME CS:CODE

START: CLI

MOV AL, 86H OUT 63H, AL MOV AL, 05H OUT 63H, AL PUSH DS MOV AX, 0000H MOV DS, AX

MOV AX, OFFSET IRQ7 ADD AX, 2000H MOV SI, 003CH MOV [SI], AX MOV AX, 0000H MOV SI, 003EH MOV [SI], AX POP DS IN AL, 21H AND AL, 7FH OUT 21H, AL A1: STI

HLT JMP A1 IRQ7: IN AL, 61H

OUT 60H, AL MOV AL, 20H OUT 20H, AL IRET

CODE ENDS

48

END START 实验步骤:

(1)按图8-4搭接实验线路。

(2)输入源程序并检查无误,经汇编、连接后装入系统。

(3)运行实验程序,然后拨动开关组K0-K7,准备好后,按动拨动开关KK1,观察光二极管组,应与开关组信号对应。

49

实验九 8253定时/计数器应用实验

一. 实验目的

1. 熟悉8253在系统中的典型接法。 2. 掌握8253的工作方式及应用编程。 二. 实验设备

TDN86/51或TDN86/88教学实验系统一台 三. 实验内容及实验设备 1. 8253可编程定时/计数器介绍

8253可编程定时/计数器是Inter公司生产的通用外围芯片之一。它有3个独立的十六位计数器,计数频率范围为0-2MHz。它所有的计数方式和操作方式都通过编程控制。

8253的功能是: (1)延时终端 (2)可编程频率发生器 (3)事件计数器 (4)倍频器 (5)实时时钟 (6)数字单稳 (7)复杂的电机控制器 8253的工作方式: (1)方式0:计数结束中断 (2)方式1:可编程频率发生器 (3)方式2:频率发生器 (4)方式3:方波频率发生器 (5)方式4:软件触发的选通信号 (6)方式5:硬件触发的选通信号 2. 系统中的8253芯片

系统中装有一片8253芯片,其线路如图9-1所示。

50

系统总线XDO 8XD17XD26XD35XD44XD53XD62XD71IOY2XIORXIOW212223D0D1D2D3D4D5D6D7CSRDWROUT0GATE0CLK0101198259-IRQ0+5VOPCLK(1.19MHz)825313OUT114GATE113CLK18251-TXCLK+5V1.843MHz+5VXA0XA119 A020A117OUT216GATE218CLK2OUT2GATE2CLK2

图9-1 系统中的8253线路

系统中,8253的0#通道输出线与8259的0#中断请求线,作为实时钟中断信号。1#通道入口接1.8432MHz的信号源,输出接8251的收发时钟端,供串行通迅使用,这里的1#计数器仅当作一个分频器使用。2#通道以排针形式引出,开放给用户使用,系统中的8253端口地址如表8-1所示。

表9-1 系统中的8253端口地址

信 号 线 寄 存 器 0#计数器 IOY2 1#计数器 2#计数器 控制寄存器 (二)8253计数器应用实验 1. 8253计数器应用实验(1)

设定8253的2#通道工作方式为方式0,用于事件计数,当计数值为5时,发出中断请求信号,显示“M”。其实验线路如图9-2所示。

地 址 40H 41H 42H 43H 51

+5V1KA127400B4567400KK1CLK23GATE2OUT2(8253)KK1IRQ7(8253)系统总线1K+5V图9-2 实验(1)线路

实验程序及流程:

主程序IRQ7显示“M”8259初始化8253初始化返回延时等待

STACK STACK CODE

SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE

START: IN AL, 21H

AND AL, 7FH

52

OUT 21H, AL MOV AL, 90H OUT 43H, AL A1: MOV AL, 05H

OUT 42H, AL HLT STI JMP A1

MOV AX, 014DH INT 10H MOV AX, 0120H INT 10H MOV AL, 20H OUT 20H, AL IRET

CODE ENDS

END START 实验步骤 (1)按图接线。

(2)输入程序并检查无误,经汇编、连接后装入系统。

(3)运行程序,并按动KK1键,观察是否每按6次,屏幕上显示一个“M”字符。

2. 8253定时器应用实验(2)

利用8253的0#通道来定时中断(IRQ0),循环显示“0”-“9”十个数,实验线路如图9-3。

53

+5VGATE0CLK082598253OUT0IRQ0

1.19MHz图9-3 8253实验(2)线路

实验程序及流程如下:

填IRQ0 中断矢量DL=3A?NYDL=30;换行初始化8259显示DL值并空一格DL=DL+1延时返回初始化8253,使DL=30等待

STACK STACK CODE

SEGMENT STACK DW 64 DUP(?) ENDS

SEGMENT ASSUME CS:CODE

START: PUSH DS

MOV AX, 0000H MOV DS, AX

54

MOV AX, OFFSET IRQO ADD AX, 2000H MOV SI, 0020H MOV [SI], AX MOV AX, 0000H MOV SI, 0022H MOV [SI], AX POP DS MOV AL, OFCH OUT 21H, AL MOV AL, 15H OUT 43H, AL MOV AL, OFFH OUT 40H, AL MOV DL, 30H A1: STI

JMP A1

IRQO: MOV AH, 01H

MOV AL, DL CMP AL, 3AH JNZ A2 MOV AL, 0DH INT 10H MOV AL, 30H A2: INT 10H

INC AX MOV DL, AL MOV AX, 0120H INT 10H

55

CALL DALLY MOV AL, 20H OUT 20H, AL IRET

DALLY: PUSH AX

MOV CX, 0100H A3: MOV AX, 0560H A4: DEC AX

JNZ A4 LOOP A3 POP AX RET

CODE ENDS

END START 实验步骤

(1)输入程序并检查无误,经汇编、连接后装入系统。

(2)运行程序,显示屏上应连续逐行显示“0”“-9”十个数,直到用“RESET”复位开关来终断。

(3)修改8253的0#时常,再运行程序,观察显示的快慢程度。 3. 电子发声实验(3)

系统的OPCLK(1.1625MHz)作为音乐节拍,由表格查出每个音符对应的时常送给计数器2(工作在方式3:方波频率发生器),以确定音调,驱动扬声器产生音乐。实验接线图如下:

56

+5V系统1.1625MHz总线OPCLKCLK28253OUT2SPKSPK UNIT

图9-4 实验(3)接线图

实验程序如下: STACK SEGMENT STACK

DW 64 DUP(?)

STACK ENDS DATA

SEGMENT

TABLE DB 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 26H, 2DH, 2DH, 26H, 2DH, 33H

DB 33H, 33H, 33H, 33H, 33H, 4DH, 45H, 3DH, 3DH, 3DH, 45H, 4DH, 45H DB 45H, 45H, 45H, 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H DB 26H, 28H, 2DH, 2DH, 26H, 26H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H DB 39H, 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 2DH, 2DH DB 26H, 26H, 26H, 26H, 26H, 26H, 28H, 28H, 2DH, 28H, 26H, 26H, 26H DB 26H, 2DH, 28H, 26H, 2DH, 2DH, 33H, 3DH, 4DH, 45H, 45H, 45H, 45H DB 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 28H, 2DH DB 2DH, 26H, 2DH, 33H, 33H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H, 39H DB 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 00H

DATA CODE

ENDS SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA

57

MOV DS, AX

MOV BX, OFFSET TABLE MOV AL, [BX] MOV AH, 00H A1: MOV DL, 25H MUL DL PUSH AX MOV AL, 0B7H OUT 43H, AL POP AX OUT 42H, AL MOV AL, AH OUT 42H, AL INC BX MOV AH, 00H MOV AL, [BX] TEST AL, OFFH JZ A3

MOV CX, 77FFH A2: PUSH AX POP AX LOOP A2 JMP A1

A3: MOV BX, OFFSET TABLE MOV AL, [BX] MOV AH, 00H JMP A1 CODE ENDS

END START

58

实验步骤

(1)按图接线,并检查无误。

(2)输入程序并检查,经汇编、连接后装入系统。 (3)运行程序,即可听到扬声器发出音乐声。 四. 思考题

在将计数初值赋给8253后,马上就可以启动并进行定时或计数吗?

59

实验十 8251串行接口应用实验

一. 实验目的

了解8251在半双工双机通讯情况下的软件编制,硬件连接技术。 二. 实验设备

1. TDN86/51或TDN86/88微机教学系统两台。

2. 如果使用TDN-MD教学实验系统进行本实验,需将8251的口地址81改为C1,80改为C0,详见《TDN-MD微机教学实验及开发系统小汇编参考程序》。

三. 实验内容

(一) 系统中的8251芯片 1. 系统中的8251芯片

系统装有一片8251芯片,并和标准RS-232接口相连好,如图9-1所示。在实验系统中,该电路用来完成同PC微机以及串行监控操作的实现,其8251端口地址如表10-1所示。

XDO 27XD128XD21XD32XD45XD56XD67XD78242015TXRDY14RXRDY25RXCLK9TXCLK221731488IRQ4(主8259)153.6KHz6531489RS-232C7系统总(COH)IOY611线BIOR13(2325MHz)D0D1D2D3D4D5D6D7CSRDWR/DTXD19RTS23DTR24BIOWXA0PCLKREST1012系统用825119 CLK20RESETDSRCTSRXD图10-1 系统中的8251芯片

表10-1 8251端口地址

信号线 寄存器 数据口 控制寄存器 编址 COH C1H IOY6 60

2.实验单元另装有一片8251芯片,用于各种串行口实验,如图10-2所示,

8251端口地址如表10-2所示。

XDO 27XD128XD21XD32XD45XD56XD67XD78D0D1D2D3D4D5D6D7CSRDWR/D1934TXDRXDGND系统总(80H)IOY411线BIOR13(2325MHz)BIOWXA0PCLKREST1012实验用825120CLK21RESET15TXRDY14RXRDY25RXCLK9TXCLK22DSR24DTR17CTS23RTSIRQ4(主8259)153.6KHz

图10-2 实验单元中的8251

表10-2 8251端口地址

信号线 寄存器 数据口 控制寄存器

双机通讯实验

本实验需用两台TDN-86/51(TDN86/88)教学实验系统,并通过排线将两台仪器相连,具体接线如图10-3所示。

编址 80H 81H IOY4 61

+5V系统OPCLK总(1.19MHz)线一号机GATE2CLK2OUT2TXDRXDGND8253 UNIT-5VTXC/RXC8251 UNIT系统OPCLK总线(1.19MHz)二号机GATE2CLK2OUT28253 UNITTXC/RXC8251 UNITGNDTXDRXD图10-3 双机通信

其中1号机用做接收机,2号机用做发送机。实验目的是将2号机中的3000 -3009H十个单元中的代码传送到1号机的3000-3009H单元中,1、2号机各自的实验程序如下:

1号机实验程序: STACK STACK CODE START:

SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV AL, 76H OUT 43H, AL MOV AL, 0CH OUT 41H, AL MOV AL, 00H OUT 41H, AL CLI CALL INIT CALL DALLY

62

A1:

A2: INIT:

MOV AL, 7EH OUT 81H, AL CALL DALLY MOV AL, 34H OUT 81H, AL CALL DALLY MOV AX, 0152H INT 10H MOV DI, 3000H MOV CX, 000AH IN AL, 81H AND AL, 02H JZ A1 IN AL, 80H AND AL, 7FH MOV [DI], AL INC DI LOOP A1 MOV AL, 00H MOV SI, 300AH MOV [SI], AL MOV AH, 06H MOV BX, 3000H INT 10H STI JMP A2 MOV AL, 00H

OUT 81H, AL CALL DALLY

63

OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 80H, AL CALL DALLY OUT 80H, AL CALL DALLY MOV AL, 40H OUT 81H, AL RET DALLY: PUSH CX

MOV CX, 3000H A3: PUSH AX

POP AX LOOP A3 POP CX

RET

CODE ENDS

END START 2号机实验程序:

STACK SEGMENT STACK DW 64 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV AL, 76H OUT 43H, AL

MOV AL, 0CH

64

OUT 41H, AL MOV AL, 00H OUT 41H, AL CALL INIT CALL DALLY MOV AL, 7EH OUT 81H, AL CALL DALLY MOV AL, 34H OUT 81H, AL CALL DALLY MOV DI, 3500H MOV CX, 000AH A1: MOV AL, [DI]

CALL SEND CALL DALLY INC DI LOOP A1 A2: JMP A2 INIT: MOV AL, 00H

OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 80H, AL CALL DALLY OUT 80H, AL

65

DALLY:

CALL DALLY MOV AL, 40H OUT 81H, AL RET PUSH CX MOV CX, 3000H A4: PUSH AX

SEND:

POP AX LOOP A4 POP CX RET PUSH AX MOV AL, 31H OUT 81H, AL POP AX OUT 80H, AL A3: IN AL, 81H

AND AL, 01H JZ A3 RET

CODE ENDS

END START 实验步骤

(1)分析程序,写出相应的流程图,以及8251的工作特征。 (2)按图10-3将1、2号机连接起来。

(3)两台机器上电后,均输入程序,并要求2号机用E命令在3000-3009H

十个单元中填入十个ASCII码,如:

3000:30 31 32 33 34 35 36 37 38 39

(4)先使1号机程序运行,等待串行接收数据,然后再运行2号机程序,

66

发送字串到串口,当数发送、接收完毕时,1号机显示相应的ASCII码字符串,如:R 0 1 2 3 4 5 6 7 8 9,用CTRL+C可使程序中断,返回监控。

(5)检查1号机的3000-3009H单元,应和2号机一致。

串口自发自收实验

一. 实验目的

掌握8251串行通讯方式的硬件接口电路及软件编程。 二. 实验设备

1. TDN86/51或TDN86/88数学实验系统一台。

2. 如果使用TDN-MD教学实验系统进行本实验,需将8251的口地址81改为C1,80改为C0,详见《TDN-MD微机教学实验及开发系统小汇编参考程序》。

三. 实验内容及步骤

对于串行传输的数据格式,本实验有如下规定:

一个字有一个逻辑“1”起始位,8位ASCII码数据位,1位逻辑“1”停止位,传输波特率为9600baut。实验接线如图10-4所示。

实验用TXD8251RXD

图10-4 实验接线图

实验程序如下: STACK STACK CODE START:

SEGMENT STACK DW 64 DUP(?) ENDS SEGMENT ASSUME CS:CODE MOV AL, 76H OUT 43H, AL

67

MOV AL, 0CH OUT 41H, AL MOV AL, 00H OUT 41H, AL CALL INIT CALL DALLY MOV AL, 7EH OUT 81H, AL CALL DALLY MOV AL, 34H OUT 81H, AL CALL DALLY MOV DI, 3000H MOV CX, 000AH A1: MOV AL, [SI] PUSH AX MOV AL, 37H OUT 81H, AL POP AX OUT 80H, AL A2: IN AL, 81H AND AL, 01H JZ A2 CALL DALLY A3: IN AL, 81H AND AL, 02H JZ A3 IN AL, 80H

MOV [DI], AL

68

A4: INIT: DALLY:

INC DI INC SI LOOP A1 JMP A4 MOV AL, 00H OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 81H, AL CALL DALLY OUT 80H, AL CALL DALLY OUT AL, 40H OUT 81H, AL RET PUSH CX MOV CX, 3000H A5: PUSH AX

CODE

POP AX LOOP A5 POP CX RET ENDS END START 实验步骤

(1)按图10-4将TXD和RXD短接。

69

(2)输入程序并检查无误,经汇编、连接后装入系统。 (3)用E命令在4000-4009单元赋值。

(4)运行程序,用D命令观察3000-3009单元内容和4000-4009单元内容是否一致。

四. 思考题

使两机分别工作在中断方式下,画出流程图,并编制程序。

70

因篇幅问题不能全部显示,请点此查看更多更全内容

Top