微机原理实验报告

发布时间:2018-06-29 23:52:38   来源:文档文库   
字号:

微机原理与接口技术

实验报告

学院:信息工程学院

班级:

学号:

姓名:

实验一:系统认识实验

1 实验目的:

掌握TD-PITE 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。

2 实验设备:

PC机一台,TD-PITE 实验装置一套。

3 实验内容:

编写实验程序,将00H0FH 16 个数写入内存3000H 开始的连续16 个存储单元中。

4 实验步骤:

1. 运行Wmd86 软件,进入Wmd86 集成开发环境。

2. 环境调试,“设置”选项中选择汇编语言。

语言环境选择界面

3. 新建文档,编写程序,程序如下:

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:SSTACK

START: PUSH DS

XOR AX, AX

MOV DS, AX

MOV SI, 3000H

MOV CX, 16

AA1: MOV [SI], AL

INC SI

INC AL

LOOP AA1

AA2: JMP AA2

CODE ENDS

END START

4. 编译连接,程序无误下载:

信息界面

5. 连接PC与实验系统的通讯电缆,打开实验系统电源。

6. 下载程序,查看内存3000H 开始的连续16 个存储单元中的内容,显示如下:

8. 由于该内存段原始数据与实验数据相同,便于区分观察,将该内存段初始化,然后查看:

9. 点击运行程序,在此查看该段内存:

10. 设置断点,执行程序:

5 操作练习

编写程序,将内存3500H 单元开始的8 个数据复制到3600H 单元开始的数据区中。通过调试验证程序功能,使用E命令修改3500H单元开始的数据,运行程序后使用D命令查看3600H单元开始的数据。

1、编写程序如下:

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE,SS:SSTACK

START: PUSH DS

XOR AX, AX

MOV DS, AX

MOV SI, 3500H

MOV DI, 3600H

MOV CX, 8

AA1: MOV AL, [SI]

MOV [DI], AL

INC SI

INC DI

LOOP AA1

AA2: JMP AA2

CODE ENDS

END START

2、执行过程如上,内存变化如下:

程序执行前

程序执行后

实验二:数制转换实验

1、实验目的

1. 掌握不同进制数及编码相互转换的程序设计方法,加深对数制转换的理解;

2. 熟悉程序调试的方法。

2、实验设备

PC机一台,TD-PITE 实验装置一套。

3、实验内容

ASCII码表示的十进制数转换为二进制数 将十进制数的ASCII码转换为BCD

4、步骤

第一部分:将十进制数的ASCII码转换为BCD

1、画流程图如下:

2、根据流程图写出代码:

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV AX,0000H

MOV DS,AX

MOV CX, 0005H ;转换位数

MOV DI, 3500H ;ASCII码首地址

A1: MOV BL, 0FFH ;将错误标志存入BL

MOV AL, [DI]

CMP AL, 3AH

JNB A2 ;不低于3AH则转A2

SUB AL, 30H

JB A2 ;低于30H则转A2

MOV BL, AL

A2: MOV AL, BL ;结果或错误标志送入AL

MOV [DI+0AH],AL ;结果存入目标地址

INC DI

LOOP A1

A3: JMP A3

CODE ENDS

END START

3、编译链接,下载运行程序:

第二部分:将十六位二进制数转换为ASCII码表示的十进制数

十六位二065535,最大可转换为五位十

五位十可表示

N =D4 104 +D3 103 +D2 102 +D1 10 +D0

Di:表示十09

十六位二数转换为五位ASCII 表示的十,就是求D1D4并将它们转换为ASCII 。自行制程序流程编写程序可考例程。例程中源存放于3500H3501H中,转换结果存放于3510H3514H 元中。

实验步骤

(1)编写程序,经编译接无后,装入系

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV SI,3500H ;据地址

MOV DX,[SI]

MOV SI,3515H ;标数据地址

A1: DEC SI

MOV AX,DX

MOV DX,0000H

MOV CX,000AH ;10

DIV CX ;得商送AX, 得余DX

XCHG AX,DX

ADD AL,30H ;DiASCII

MOV [SI],AL ;存入目地址

CMP DX,0000H

JNE A1 ;断转换结束否,未则转A1

A2: CMP SI,3510H ;地址得首地址比

JZ A3 ;等于首地址则转A3,否则将剩余地址中30H

DEC SI

MOV AL,30H

MOV [SI],AL

JMP A2

A3: JMP A3

CODE ENDS

END START

2)在3500H3501H 中存入0C 00

3行程序,然后停止行;

4检查运果,D3510应为30 30 30 31 32

(5)可反复测试组数据,验证程序的正确性

例如;3500h,3501H中存入01 02,j结果如下:

第三部分:十六进制数转换为ASCII

由表1-2-1 中十六数与ASCII 对应关系可知:十六0H09H 加上30H后得到相ASCIIAHFH 加上37H 可得到相ASCII四位十六存放于起始地址3500H 元中,把它们转换为ASCII 后存入起始地址350AH 元中。自行制流程

实验步骤

(1)编写程序,经编译接无后装入系统;

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV CX,0004H

MOV DI,3500H ;十六源地址

MOV DX,[DI]

A1: MOV AX,DX

AND AX,000FH ;取低4

CMP AL,0AH

JB A2 ;小于0AH则转A2

ADD AL,07H ;AFH,需多加上7H

A2: ADD AL,30H ;转换为ASCII

MOV [DI+0DH],AL ;果存入目地址

DEC DI

PUSH CX

MOV CL,04H

SHR DX,CL ;十六右移4

POP CX

LOOP A1

A3: JMP A3

CODE ENDS

END START

2)在3500H3501H 中存入四位十六203B,即E3500,然后3B 20

3)先行程序,然后再停止行;

4D350A0000:350A 32 30 33 42 CC …;

(5)复输入几组数据,验证程序功能。

例如键入E3500,然后输入2D,46,显示结果如下:

实验三:循环程序设计实验

1、实验目的

1. 加深对循环结构的理解;

2. 掌握循环结构程序设计的方法以及调试方法。

2、实验设备

PC机一台,TD-PITE 实验装置一套。

3、实验内容

计算S12×33×44×5+…+NN1),直到NN1)项大于200为止,求某数据区内负数的个数。

4、步骤

第一部分:计算S12×33×44×5+…+NN1),直到NN1)项大于200为止

1、构思程序,画流程图:

2、写出程序:

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX,0001H

MOV BL,02H

A1: MOV AL,BL

INC BL

MUL BL

ADD DX,AX ;结果存于DX

CMP AX,00C8H ;判断N(N+1)200的大小

JNA A1

A2: JMP A2

CODE ENDS

END START

3、编译连接,下载程序,运行:

4.修改数据后验证如下,其中将00C8H改为00D8

第二部分:求某数据区内负数的个数

1、构思程序结构,画出流程图:

2、写出程序:

SSTACK SEGMENT STACK

DW 64 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DI, 3000H ;数据区首地址

MOV CL, [DI] ;取数据个数

XOR CH, CH

MOV BL, CH

INC DI ;指向第一个数据

A1: MOV AL, [DI]

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

JE A2

INC BL ;负数个数加1

A2: INC DI

LOOP A1

MOV [DI], BL ;保存结果

A3: JMP A3

CODE ENDS

END START

3、编译、链接无误后装入系统键入E3000,输入数据如下:300006 300112300288300382300490300522300633

4、查看内存检验结果如下:

5.修改数据,编译、链接无误后装入系统键入E3000,输入数据如下:3000=06,3001=823002=863003=883004=903005=11,3006=22

6.修改后检验的结果如下:

实验四:8259 中断控制实验

1、实验目的

1. 掌握8259 中断控制器的工作原理;

2. 学习8259 的应用编程方法;

3. 掌握8259 级联方式的使用方法。

2、实验设备

PC机一台,TD-PITE 实验装置一套。

3、实验内容及步骤

1. 中断控制器8259 简介

Intel 386EX 芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A 是一致的,操作方法也相同。从片的INT连接到主片的IR2 信号上构成两片8259 的级联。

TD-PITE 实验系统中,将主控制器的IR6IR7 以及从控制器的IR1 开放出来供实验使用,主片8259 IR4 供系统串口使用。

2、按下图链接好实验电路:

3、写出实验程序如下:

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: PUSH DS

MOV AX, 0000H

MOV DS, AX

MOV AX, OFFSET MIR7 ;取中断入口地址

MOV SI, 003CH ;中断矢量地址

MOV [SI], AX ;IRQ7的偏移矢量

MOV AX, CS ;段地址

MOV SI, 003EH

MOV [SI], AX ;IRQ7的段地址矢量

CLI

POP DS

;初始化主片8259

MOV AL, 11H

OUT 20H, AL ;ICW1

MOV AL, 08H

OUT 21H, AL ;ICW2

MOV AL, 04H

OUT 21H, AL ;ICW3

MOV AL, 01H

OUT 21H, AL ;ICW4

MOV AL, 6FH ;OCW1

OUT 21H, AL

STI

AA1: NOP

JMP AA1

MIR7: STI

CALL DELAY

MOV AX, 0137H

INT 10H ;显示字符7

MOV AX, 0120H

INT 10H

MOV AL, 20H

OUT 20H, AL ;中断结束命令

IRET

DELAY: PUSH CX

MOV CX, 0F00H

AA0: PUSH AX

POP AX

LOOP AA0

POP CX

RET

CODE ENDS

END START

4、编译链接,下载程序运行:

实验五:8255 并行接口实验

1 实验目的

1. 学习并掌握8255 的工作方式及其应用;

2. 掌握8255 典型应用电路的接法。

2 实验设备

PC机一台,TD-PITE 实验装置一套。

3 实验内容

1. 基本输入输出实验。编写程序,使8255 A口为输入,B口为输出,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。

2. 流水灯显示实验。编写程序,使8255 A口和B口均为输出,数据灯D7D0由左向右,每次仅亮一个灯,循环显示,D15D8D7D0 正相反,由右向左,每次仅点亮一个灯,循环显示。

4 实验原理

并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有ABC三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。8255 的内部结构及引脚如图2-6-1 所示,8255工作方式控制字和C口按位置位/复位控制字格式如图

5 实验步骤

本实验使8255 端口A工作在方式0 并作为输入口,端口B工作在方式0 并作为输出口。用一组开关信号接入端口A,端口B 输出线接至一组数据灯上,然后通过对8255 芯片编程来实现输入输出功能。具体实验步骤如下述:

1、按下图按图电路

2、编写程序:

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX, 0646H

MOV AL, 90H

OUT DX, AL

AA1: MOV DX, 0640H

IN AL, DX

CALL DELAY

MOV DX, 0642H

OUT DX, AL

JMP AA1

DELAY: PUSH CX

MOV CX, 0F00H

AA2: PUSH AX

POP AX

LOOP AA2

POP CX

RET

CODE ENDS

END START

3运行程序,改变拨动开关,同时观察LED 显示,验证程序功能。

4.结果:拨动K0...K7,以及D0...D7开关时据灯的示就会对应的发光。

第二部分:流水灯显示实验

使8255A口和B口均为输出,数据灯D7D0 由左向右,每次仅亮一个灯,循环显示,D15D8 D7D0正相反,由右向左,每次仅点亮一个灯,循环显示。实验接线图如图2-6-5所示。实验步骤如下所述:

1、按下图链接电路图:

2、编写实验程序,经编译、链接无误后装入系统

SSTACK SEGMENT STACK

DW 32 DUP(?)

SSTACK ENDS

CODE SEGMENT

ASSUME CS:CODE

START: MOV DX, 0646H

MOV AL, 80H

OUT DX, AL

MOV BX, 8001H

AA1: MOV DX, 0640H

MOV AL, BH

OUT DX, AL

ROR BH, 1

MOV DX, 0642H

MOV AL, BL

OUT DX, AL

ROL BL, 1

CALL DELAY

CALL DELAY

JMP AA1

DELAY: PUSH CX

MOV CX, 0F000H

AA2: PUSH AX

POP AX

LOOP AA2

POP CX

RET

CODE ENDS

END START

3、运行程序,观察LED 灯的显示,验证程序功能

4、结果:数据灯D7D0 由左向右,每次亮一灯,循环显示,D15D8 D7D0 正相反,由右向左,每次点亮一灯,循环显

5、4、改变循环寻址顺序,重新导入程序,编译连接,运行程序发现流水灯流向改变。例如:将程序中的ROR BH 1以及ROL BL 1改成ROR BH 2以及ROL BL 2.

6、结果:数据灯D7D0 由左向右,每次亮一且中间间隔一个灯不亮,循环显示,D15D8 D7D0 正相反,由右向左,每次点亮一且中间间隔一个灯不亮,循环显

实验六 :电子发声设计实验

1 实验目的

学习用8254 定时/计数器使蜂鸣器发声的编程方法。

2 实验设备

PC微机一台、TD-PITE 实验箱一台。

3 实验内容

根据实验提供的音乐频率表和时间表,编写程序控制8254,使其输出连接到扬声器上能发出相应的乐曲。

4 实验说明及步骤

一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。利用8254的方式3——“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:

计数初值 输入时钟 ÷ 输出频率

例如输入时钟采用1MHz,要得到800Hz 的频率,计数初值即为1000000÷800。音符与频率对照关系如表2-11-1所示。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时时间程序(根据CPU 的频率不同而有所变化)。然后确定每个音符演奏需要几个单位时间,将这个值送入DL中,调用DALLY 子程序即可。

1、链接下图链接电路

2、编写程序如下:

IOY0 EQU 06C0H

MY8254_COUNT0 EQU IOY0+00H ;8254计数器0端口地址

MY8254_COUNT1 EQU IOY0+02H ;8254计数器1端口地址

MY8254_COUNT2 EQU IOY0+04H ;8254计数器2端口地址

MY8254_MODE EQU IOY0+06H ;8254控制寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DATA SEGMENT

FREQ_LIST DW 371,495,495,495,624,556,495,556,624 ;频率表

DW 495,495,624,742,833,833,833,742,624

DW 624,495,556,495,556,624,495,416,416,371

DW 495,833,742,624,624,495,556,495,556,833

DW 742,624,624,742,833,990,742,624,624,495

DW 556,495,556,624,495,416,416,371,495,0

TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 ;时间表

DB 6, 2, 4, 4, 12, 1, 3, 6, 2

DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4

DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4

DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4

DB 6, 2, 4, 4, 6, 2, 4, 4, 12

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX, DATA

MOV DS, AX

MOV DX, MY8254_MODE ;初始化8254工作方式

MOV AL, 36H ;定时器0、方式3

OUT DX, AL

BEGIN: MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址

MOV DI,OFFSET TIME_LIST ;装入时间表起始地址

PLAY: MOV DX,0FH ;输入时钟为1MHz1M = 0F4240H

MOV AX,4240H

DIV WORD PTR [SI] ;取出频率值计算计数初值,0F4240H / 输出频率

MOV DX,MY8254_COUNT0

OUT DX,AL ;装入计数初值

MOV AL,AH

OUT DX,AL

MOV DL,[DI] ;取出演奏相对时间,调用延时子程序

CALL DALLY

ADD SI,2

INC DI

CMP WORD PTR [SI],0 ;判断是否到曲末?

JE BEGIN

JMP PLAY

DALLY PROC ;延时子程序

D0: MOV CX,0010H

D1: MOV AX,0F00H

D2: DEC AX

JNZ D2

LOOP D1

DEC DL

JNZ D0

RET

DALLY ENDP

CODE ENDS

END START

CMP BL, 00H

JNE AA4

CALL DELAYL

JMP AA0

DELAY: PUSH CX

MOV CX, 0100H

DLAY1: LOOP DLAY1

POP CX

RET

DELAYL: PUSH CX

MOV CX, 0010H

DL1: CALL DELAY

LOOP DL1

POP CX

RET

CODE ENDS

END START

3、下载程序,编译连接执行程序,可以听到《友谊地久天长》的音乐.感觉很好听。

实验总结:通过这次实验我们小组对汇编语言程序的运行,数组转换,中断的原理,定时器8254,并行接口8255的认识更加深刻,理解的也更透彻了。对我们学习微机原理与接口技术这门课程有很大的帮助,不仅让我们从理论上学习到知识,而且还使我们在这次实践中收获到了很多。深刻的体会到理论是离不开实践的。

本文来源:https://www.2haoxitong.net/k/doc/9037a67b0740be1e650e9ab5.html

《微机原理实验报告.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式