微机原理及接口技术
——实验报告
学号:xxxxxx
姓名: xxxxx
专业:网络工程
实验一:系统认知
1.1实验目的
掌握 TD 系列微机原理及接口技术教学实验系统的操作,熟悉 Wmd86 联机集成开发调试软件的操作环境。通过顺序程序设计与分支程序设计来进行举例。
1.2实验设备
PC 机一台,TD-PITE 实验装置一套。
1.3实验内容
内存从BUFF开始的单元中存放着两个字数据X、Y,完成X+Y,并将相加的和(假设仍为一个字数据)存放于内存从RESULT开始的存储单元中。
DATA SEGMENT
BUFF DW X,Y
RESULT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,BUFF
ADD AX,BUFF+2
MOV RESULT,AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
加载程序后调试,R寄存器;U反汇编;D显示数据;E修改数据。
1.4实验截图
实验二分支程序设计
2.1实验目的
1. 掌握分支程序的结构。
2. 掌握分支程序的设计、调试方法。
2.2实验设备
PC 机一台,TD-PITE 实验装臵一套。
2.3实验内容
1, X>0
求函数Y= 0, X=0
-1, X<0
程序如下:
DATA SEGMENT
VAR1 DB X
VAR2 DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL, VAR1
CMP AL, 0
JGE BIG
MOV VAR2,0FFH
JMP DONE
BIG:JE EQUL
MOV VAR2,1
JMP DONE
EQUL:MOV VAR2, 0
DONE:MOV AH, 4CH
INT 21H
CODE ENDS
END START
实验三循环程序设计
3.1实验目的
1)加深对循环结构的理解。
2)掌握循环结构程序设计的方法以及调试方法。
3.2实验设备
PC 机一台,TD-PITE 实验装置一套。
3.3实验内容
PUBLIC MAX
DATA SEGMENT
NUMBER DB 01H,11H,22H,33H,44H,55H,66H,77H,88H,99H
MAX DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
INIT: LEA SI, NUMBER
LEA DI, MAX
MOV CX,10
MOV AL,[SI]
INC SI
DEC CX
AGAIN: CMP AL,[SI]
JA NEXT
MOV AL,[SI]
NEXT: INC SI
LOOP AGAIN
RESULT: NOP
MOV [DI],AL
MOV AX,4C00H
INT 21H
CODE ENDS
END START
3.4实验截图
实验四8259中断控制实验
4.1实验目的
1)掌握8259中断控制器的原理
2)学习8259的应用编程方法
3)掌握8259级联方式的使用方法
4.2实验设备
PC机一台,TD—PIDE实验装置一套
4.3实验内容
1)单次脉冲输出与主片8259的IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”。
程序如下:
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
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
CLI
POP DS
MOV AL,11H
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
MOV AL,6FH
OUT 21H,AL
STI
AA1:NOP
JMP AA1
MIR7:STI
CALL DELAY
MOV AX,0137H
INT 10H
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
2)KK1 +连接到主片8259的IR7上,KK2+连接到从片8259 的IR1上,当按一次KK1+时,显示屏上显示字符“M7”按一次KK2+时,显示字符“S1”。
程序如下:
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
MOV AX,CS
MOV SI,003EH
MOV [SI],AX
MOV AX,OFFSET SIR1
MOV SI,00C4H
MOV [SI],AX
MOV AX,CS
MOV SI,00C6H
MOV [SI],AX
CLI
POP DS
MOV AL,11H
OUT 20H,AL
MOV AL,08H
OUT 21H,AL
MOV AL,04H
OUT 21H,AL
MOV AL,01H
OUT 21H,AL
MOV AL,11H
OUT 0A0H,AL
MOV AL,30H
OUT 0A1H,AL
MOV AL,02H
OUT 0A1H,AL
MOV AL,01H
OUT 0A1H,AL
MOV AL,0FDH
OUT 0A1H,AL
MOV AL,6BH
OUT 21H,AL
STI
AA1:NOP
JMP AA1
MIR7:CALL DELAY
MOV AX,014DH
INT 10H
MOV AX,0137H
INT 10H
MOV AX,0120H
INT 10H
MOV AL,20H
OUT 20H,AL
IRET
SIR1:CALL DELAY
MOV AX,0153H
INT 10H
MOV AX,0131H
INT 10H
MOV AX,0120H
INT 10H
MOV AL,20H
OUT 0A0H,AL
OUT 20H,AL
IRET
DELAY:PUSH CX
MOV CX, 0F00H
AA0:PUSH CX
POP AX
LOOP AA0
POP CX
RET
CODE ENDS
END START
4.4实验截图
实验五8254定时/计时器实验
5.1实验目的
1)掌握8254的工作方式及应用编程。
2)掌握8254典型应用电路的接法。
5.2实验设备
PC机一台,TD-PITE 实验装臵一套。
5.3实验内容
1)计数应用实验。编写程序,应用8254的计数功能,使用单次脉冲模拟计数,使每当按动‘KK1+’5次后,产生一次计数中断,并在屏幕上显示一个字符‘M’。
2)定时应用实验。编写程序,应用8254的定时功能,产生一个 1s 的方波。
5.4实验程序
A8254 EQU 06C0H
B8254 EQU 06C2H
C8254 EQU 06C4H
CON8254 EQU 06C6H
SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: PUSH DS
MOV AX, 0000H
MOV DS, AX
MOV AX, OFFSET IRQ7
MOV SI, 003CH
MOV [SI], AX
MOV AX, CS
MOV SI, 003EH
MOV [SI], AX
CLI
POP DS
MOV AL, 11H
OUT 20H, AL
MOV AL, 08H
OUT 21H, AL
MOV AL, 04H
OUT 21H, AL
MOV AL, 01H
OUT 21H, AL
MOV AL, 6FH
OUT 21H, AL
MOV DX, CON8254
MOV AL, 10H
OUT DX, AL
MOV DX, A8254
MOV AL, 04H
OUT DX, AL
STI
AA1: JMP AA1
IRQ7: MOV DX, A8254
MOV AL, 04H
OUT DX, AL
MOV AX, 014DH
INT 10H
MOV AX, 0120H
INT 10H
MOV AL, 20H
OUT 20H, AL
IRET
CODE ENDS
END START
实验六8255并行接口实验
5.1实验目的
1)学习并掌握 8255 的工作方式及其应用。
2)掌握 8255 典型应用电路的接法。
3)掌握程序固化及脱机运行程序的方法。
5.2实验设备
PC机一台,TD-PITE 实验装置一套。
5.3实验步骤及内容
1)基本输入输出实验:本实验使8255端口A工作在方式0并作为输入口,端口B工作在方式0并作为输出口。用一组开关信号接入端口A,端口B 输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。
程序如下:
SSTACK SEGMENT
DW 32 DUO(?)
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
2)流水灯显示实验:使8255的A口和B口均为输出,数据灯 D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与 D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。
程序如下:
SSTACK SEGMENT
DW 32 DUO(?)
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,0F00H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START
实验七 设计流水灯显示
实验要求:
设计一组实验程序,实现按下开关KK1,流水灯由中间向两边依次发亮。按下开关KK2,流水灯由两边向中间依次发亮。
实验目的
:对前边实验进行总结,自行设计,达到实验要求。
实验设备
PC 机一台,TD-PITE 实验装置一套。
实验线路连接图:
实验实现程序:
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的段地址矢量
MOV AX, OFFSET SIR1
MOV SI, 00C4H
MOV [SI], AX
MOV AX, CS
MOV SI, 00C6H
MOV [SI], AX
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 ;初始化从片8259
MOV AL, 11H
OUT 0A0H, AL ;ICW1
MOV AL, 30H
OUT 0A1H, AL ;ICW2
MOV AL, 02H
OUT 0A1H, AL ;ICW3
MOV AL, 01H
OUT 0A1H, AL ;ICW4
MOV AL, 0FDH
OUT 0A1H,AL ;OCW1 = 1111 1101
MOV AL, 6BH
OUT 21H, AL ;主8259 OCW1
STI
MOV DX, 0646H
MOV AL, 80H
OUT DX, AL
MOV BX, 8001H
AA1: NOP
JMP AA1
MIR7:PUSH AX
PUSH CX
PUSH DX
PUSH BX
MOV CX ,8
LOP: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
LOOP LOP
MOV AL, 20H
OUT 20H, AL ;中断结束命令
POP BX
POP DX
POP CX
POP AX
IRET
SIR1: MOV CX ,8
LAP: MOV DX, 0642H
MOV AL, BH
OUT DX, AL
ROR BH, 1
MOV DX, 0640H
MOV AL, BL
OUT DX, AL
ROL BL, 1
CALL DELAY
CALL DELAY
LOOP LAP
MOV AL, 20H
OUT 0A0H, AL
OUT 20H, AL
IRET
DELAY: PUSH CX
MOV CX, 0F000H
AA0: PUSH AX
POP AX
LOOP AA0
POP CX
RET
CODE ENDS
END START
实验结果:
按下开关KK1,流水灯由中间向两边一次亮起,按下开关KK2,流水灯由两边向中间依次亮起。
实验总结:
通过这几次实验,是我对8255A,中断,及流水灯实验有了更深的了解,掌握了他们的工作原理。实验中养了自己的硬件操作能力和阅读编写程序的基本能力,并且在反复的调试中,主动积极的查错排错,总结细微差错,不断完善自己编程素质。 回想起来受益匪浅,主要是加深了对计算机的一些硬件情况和运行原理的理解和汇编语言的编写。