微机原理与接口技术
实验报告
学院:信息工程学院
班级:
学号:
姓名:
实验一:系统认识实验
1 实验目的:
掌握TD-PITE 80X86 微机原理及接口技术教学实验系统的操作,熟悉Wmd86联机集成开发调试软件的操作环境。
2 实验设备:
PC机一台,TD-PITE 实验装置一套。
3 实验内容:
编写实验程序,将00H~0FH 共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码表示的十进制数
十六位二进制数的值域为0~65535,最大可转换为五位十进制数。
五位十进制数可表示为:
N =D4 ⨯104 +D3 ⨯103 +D2 ⨯102 +D1 ⨯10 +D0
Di:表示十进制数0~9
将十六位二进制数转换为五位ASCII 码表示的十进制数,就是求D1~D4,并将它们转换为ASCII 码。自行绘制程序流程图,编写程序可参考例程。例程中源数存放于3500H、3501H中,转换结果存放于3510H~3514H 单元中。
实验步骤
(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 ;得Di的ASCII码
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)在3500H、3501H 中存入0C 00
(3)运行程序,然后停止运行;
(4)检查运行结果,键入D3510,结果应为:30 30 30 31 32;
(5)可反复测试几组数据,验证程序的正确性。
例如;将3500h,3501H中存入01 02,j结果如下:
第三部分:十六进制数转换为ASCII码
由表1-2-1 中十六进制数与ASCII 码的对应关系可知:将十六进制数0H~09H 加上30H后得到相应的ASCII码,AH~FH 加上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 ;在A~FH之间,需多加上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)在3500H、3501H 中存入四位十六进制数203B,即键入E3500,然后输入3B 20;
(3)先运行程序,然后再停止运行;
(4)键入D350A,显示结果为:0000:350A 32 30 33 42 CC …;
(5)反复输入几组数据,验证程序功能。
例如键入E3500,然后输入2D,46,显示结果如下:
实验三:循环程序设计实验
1、实验目的
1. 加深对循环结构的理解;
2. 掌握循环结构程序设计的方法以及调试方法。
2、实验设备
PC机一台,TD-PITE 实验装置一套。
3、实验内容
计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于200为止,求某数据区内负数的个数。
4、步骤
第一部分:计算S=1+2×3+3×4+4×5+…+N(N+1),直到N(N+1)项大于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,输入数据如下:3000=06 ,3001=12,3002=88,3003=82,3004=90,3005=22,3006=33
4、查看内存检验结果如下:
5.修改数据,编译、链接无误后装入系统,键入E3000,输入数据如下:3000=06,3001=82,3002=86,3003=88,3004=90,3005=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 实验系统中,将主控制器的IR6、IR7 以及从控制器的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口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示。
4 实验原理
并行接口是以数据的字节为单位与I/O 设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8 位、16 位或32 位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O 接口芯片,它具有A、B、C三个并行接口,用+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开关时,数据灯的显示就会对应的发光。
第二部分:流水灯显示实验
使8255的A口和B口均为输出,数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示,D15~D8 与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。实验接线图如图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、结果:数据灯D7~D0 由左向右,每次仅亮一个灯,循环显示,D15~D8 与D7~D0 正相反,由右向左,每次仅点亮一个灯,循环显示
5、4、改变循环寻址顺序,重新导入程序,编译连接,运行程序发现流水灯流向改变。例如:将程序中的ROR BH 1以及ROL BL 1改成ROR BH 2以及ROL BL 2.
6、结果:数据灯D7~D0 由左向右,每次仅亮一个灯且中间间隔一个灯不亮,循环显示,D15~D8 与D7~D0 正相反,由右向左,每次仅点亮一个灯且中间间隔一个灯不亮,循环显示
实验六 :电子发声设计实验
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 ;输入时钟为1MHz,1M = 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格式