概述
目录
实验一 汇编语言编程实验
一、 实验目的
二、 实验所用仪器
三、 实验内容及基本原理
四、 实验数据记录
五、 实验结果分析及回答问题(或测试环境及测试结果)
实验二 数码转换实验
一、 实验目的
二、 实验所用仪器
三、 实验内容及基本原理
四、 实验数据记录
五、 实验结果分析及回答问题
实验三 基本 IO 口扩展实验
一、 实验目的
二、 实验所用仪器
三、 实验内容及基本原理
四、 实验数据记录
五、 实验结果分析及回答问题
实验四 可编程并行接口实验
一、 实验目的
二、 实验所用仪器
三、实验内容及基本原理
四、 实验原理图
五、实验结果分析及回答问题
实验一 汇编语言编程实验
一、 实验目的
1. 掌握汇编语言的编程方法
2. 掌握 DOS 功能调用的使用方法
3. 掌握汇编语言程序的调试运行过程
二、 实验所用仪器
Masm for windows 集成环境
三、 实验内容及基本原理
1. 将指定数据区的字符串数据以 ASCII 码形式显示在屏幕上,并通过 DOS 功能调用完 成必要提示信息的显示。
2. 在屏幕上显示自己的学号姓名信息。
3. 循环从键盘读入字符并回显在屏幕上,然后显示出对应字符的 ASCII 码,直到输 入”Q”或“q”时结束。
字节码转 ASCII 码流程图
四、 实验数据记录
学号姓名题目源码:
字符转 ASCII 源码:
五、 实验结果分析及回答问题(或测试环境及测试结果)
学号与姓名的输入输出测试结果:
字符转 ASCII 测试结果:
实验二 数码转换实验
一、 实验目的
1. 掌握不同进制数及编码相互转换的程序设计方法。
2. 掌握运算类指令编程及调试方法。
3. 掌握循环程序的设计方法。
二、 实验所用仪器
Masm for windows 集成环境 QTHPCI 软件
三、 实验内容及基本原理
实验内容:
1. 重复从键盘输入不超过 5 位的十进制数,按回车键结束输入;
2. 将该十进制数转换成二进制数;结果以 2 进制数的形式显示在屏幕上;
3. 如果输入非数字字符,则报告出错信息,重新输入;
4. 直到输入“Q”或‘q’时程序运行结束。
5. 键盘输入一字符串,以空格结束,统计其中数字字符的个数,在屏幕显示
实验原理:
四、 实验数据记录
|
十进制(不超过五位数)转二进制源码
|
字符串中数字的个数
五、 实验结果分析及回答问题
十进制数转二进制测试结果:
字符串中数字个数测试结果:
实验三 基本 IO 口扩展实验
一、 实验目的
1. 了解 TTL 芯片扩展简单 I/O 口的方法。
2. 掌握数据输入输出程序编制的方法。
二、 实验所用仪器
QTHPCI 软件,74LS244 缓冲驱动器,74LS273 触发器
三、 实验内容及基本原理
实验内容:
本实验要求用 74LS244 作为输入口,读取开关状态,并将此状态通过 74LS273 连到发光 二极管显示。具体实验内容如下:
1.开关 Yi 为低电平时对应的发光二极管亮,Yi 为高电平时对应的发光二极管灭。
2.当开关 Yi 全为高电平时,发光二极管 Qi 从左至右轮流点亮。
3.当开关 Yi 全为低电平时,发光二极管 Qi 从右至左轮流点亮。
4.自主设计控制及显示模式,完成编程调试,演示实验结果。
实验原理:
74LS244 是一种三态输出的 8 总线缓冲驱动器,无锁存功能,当 G 为低电平,Ai 信号传 送到 Yi,当为高电平时,Yi 处于禁止高阻状态;
74LS273 是一种带清除功能的 8D 触发器, 1D~8D 为数据输入端,1Q~8Q 为数据输出 端,正脉冲触发,低电平清除,常用作 8 位地址锁存器。
四、 实验数据记录
1. 按照实验连线图连接:
244 的 CS 接到 ISA 总线接口模块的 0000H,Y7—Y0——开关 K1—K8
273 的 CS 接到 ISA 总线接口模块的 0020H,Q7—Q0——发光二极管 L1—L8 该模块的 WR、RD 分别连到 ISA 总线接口模块的 IOWR、IORD。 该模块的数据(AD0~AD7)连到 ISA 总线接口模块的数据(LD0~LD7)。 2.编写实验程序,编译链接,运行程序
3. 拨动开关,观察发光二极管的变化。
五、 实验结果分析及回答问题
1.开关 Yi 为低电平时对应的发光二极管亮,Yi 为高电平时对应的发光二极管灭。
2.当开关 Yi 全为高电平时,发光二极管 Qi 从左至右轮流点亮。
3.当开关 Yi 全为低电平时,发光二极管 Qi 从右至左轮流点亮。
实验四 可编程并行接口实验
一、 实验目的
1. 了解可编程并行接口 8255 的内部结构,
2. 掌握工作方式、初始化编程及应用。
二、 实验所用仪器
QTHPCI 软件,8255 可编程并行接口电路
三、实验内容及基本原理
实验内容:
1.流水灯实验:利用 8255 的 A 口、B 口循环点亮发光二极管。
2.交通灯实验:利用 8255 的 A 口模拟交通信号灯。
3.I/O 输入输出实验:利用 8255 的 A 口读取开关状态,8255 的 B 口把状态送发光二极 管显示。
4.在完成(1)基础上,增加通过读取开关控制流水灯的循环方向和循环方式。
5.在完成(2)基础上,增加通过读取开关控制交通红绿灯的亮灭时间。
实验原理:
8255 是一个通用可编程并行接口电路。它具有 A、B、C 三个 8 位并行口。其中 C 口也可 用作 A、B 口的联络信号及中断申请信号。通过编程,它可以被设置为基本输入输出、 选通输入输出以及双向传送方式。对于 C 口还具有按位置 0、1 的功能。
8255 控制字
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
1
(特征位) | A 组方式
00=方式 0 01=方式 1
1X=方式 2 | A 口 0=输出 1=输入 | C 口高 4 位 0=输出 1=输入 | B 组方式 0=方式 0 1=方式 1 | B 口 0=输出 1=输入 | C 口低 4 位 0=输出 1=输入 | |
0
(特征位) |
不用 | 位选择
000=C 口 0 位……111=C 口 7 位 | 0=复位
1=置位 |
四、 实验原理图
流水灯 交通灯
五、实验结果分析及回答问题
I/O 输入输出实验
;交通灯源码
MY_STACK SEGMENT PARA 'STACK'
DB 100 DUP(?)
MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
IO_9054base_address DB 4 DUP(0) ;PCI 卡 9054 芯片 I/O 基地址暂存空间
IO_base_address DB 4 DUP(0) ;PCI 卡 I/O 基地址暂存空间
pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$'
GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'
P8255_A DW 0000H
P8255_B DW 0001H
P8255_C DW 0002H
P8255_MODE DW 0003H DELAY_SET EQU 5fffH DELAY_SET1 EQU 18ffH
MES2 DB ' PCI CONFIG READ ERROR! $' MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE'
MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
START:
.386 ;386 模式编译
MOV AX,MY_DATA
MOV DS,AX
MOV ES,AX
MOV AX,MY_STACK
MOV SS,AX
CALL FINDPCI ;自动查找 PCI 卡资源及 IO 口基址
; MOV
MOV CX,word ptr IO_base_address
CX,0E800H ;直接加入(E800:本机 PCI 卡 IO 口基址)
ADD P8255_A,CX ;PCI 卡 IO 基址+偏移
ADD P8255_B,CX
ADD P8255_C,CX
ADD P8255_MODE,CX
MOV MOV DX,P8255_MODE
AL,80H ;3 个口全部为输出
OUT DX,AL
MOV DX,P8255_A
CALL ST0 ;全为红灯
TRAFFIC1: CALL
CALL ST1
ST5 ;南北为绿灯,东西为红灯
CALL ST2 ;南北红灯闪烁,东西为红灯
CALL ST3
CALL ST6 ;南北为红灯,东西为绿灯
CALL ST4 ;南北为红灯,东西黄灯闪烁
CALL BREAK
JMP TRAFFIC1
MY_PROC ENDp
ST0 PROC NEAR
MOV AL,1BH
OUT DX,AL
CALL DELAY
RET
ST0 ENDp
ST1 PROC NEAR
MOV DX,P8255_A
MOV AL,0EDH
OUT DX,AL
CALL DELAY
CALL DELAY
CALL DELAY
RET
ST1 ENDp
ST5 PROC NEAR
MOV DX,P8255_A
MOV AL,0EBH
OUT DX,AL
CALL DELAY
RET
ST5 ENDp
ST2 PROC NEAR
MOV CX,5H
ST20: MOV AL,0EBH
OUT DX,AL
CALL DELAY1
MOV AL,0EFH
OUT DX,Al
CALL DELAY1
LOOP ST20
RET
ST2 ENDp
ST3 PROC NEAR
MOV AL,0DEH
OUT DX,AL
CALL DELAY
CALL DELAY
CALL DELAY
RET
ST3 ENDp
ST6 PROC NEAR
MOV DX,P8255_A
MOV AL,0BEH
OUT DX,AL
CALL DELAY
RET
ST6 ENDp
ST4 PROC NEAR
MOV CX,5H
ST40: MOV AL,0BEH
OUT DX,AL
CALL DELAY1
MOV AL,0FEH
OUT DX,AL
CALL DELAY1
LOOP ST40
RET
ST4 ENDp
;
;*****************************************************************************
; /* 延时子程序 */
;*****************************************************************************
;
DELAY PROC NEAR ;延时程序
PUSHF PUSH DX
PUSH CX
MOV DX,DELAY_SET
D1: MOV CX,-1
D2: DEC CX
JNZ D2
DEC DX
JNZ D1
POP CX
POP DX POPF
RET
DELAY ENDp
DELAY1 PROC NEAR ;延时程序
PUSHF PUSH DX
PUSH CX
MOV DX,DELAY_SET1
D3: MOV CX,-1
D4: DEC CX
JNZ D4
DEC DX
JNZ D3
POP CX
POP DX POPF
RET
DELAY1 ENDp
;
;*****************************************************************************
; /* 按任意键退出子程序 */
;*****************************************************************************
;
BREAK PROC NEAR ;按任意键退出
PUSHF PUSH AX
PUSH DX
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN: POP DX
POP AX POPF
RET
BREAK ENDP
;
;*****************************************************************************
; /* 找卡子程序 */
;*****************************************************************************
;
;FUNCTION CODE
IO_port_addre EQU 0CF8H ;32 位配置地址端口
IO_port_data EQU 0CFCH ;32 位配置数据端口
IO_PLX_ID EQU 200810B5H ;PCI 卡设备及厂商 ID
BADR0 = 10H ;基地址寄存器 0
BADR1 = 14H ;基地址寄存器 1
BADR2 = 18H ;基地址寄存器 2
BADR3 = 1CH ;基地址寄存器 3
FINDPCI PROC NEAR ;查找 PCI 卡资源并显示
PUSHAD PUSHFD
MOV EBX,080000000H
FINDPCI_next:
ADD EBX,100H
CMP EBX,081000000H
JNZ findpci_continue
MOV DX,offset pcicardnotfind ;显示未找到 PCI 卡提示信息
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H ;退出
findpci_continue:
MOV
MOV DX,IO_port_addre
EAX,EBX
OUT DX,EAX ;写地址口
MOV DX,IO_port_data
IN EAX,DX ;读数据口
CMP EAX,IO_PLX_ID
JNZ findpci_next ;检查是否发现 PCI 卡
MOV DX,IO_port_addre
MOV EAX,EBX
ADD
OUT EAX,BADR1
DX,EAX ;写地址口
MOV DX,IO_port_data
IN EAX,DX ;读数据口
MOV dword ptr IO_9054base_address,EAX
AND EAX,1
JZ findPCI_next ;检查是否为 i/o 基址信息
MOV EAX,dword ptr IO_9054base_address
AND EAX,0fffffffeh
MOV dword ptr IO_9054base_address,EAX ;去除 i/o 指示位并保存
MOV DX,IO_port_addre
MOV EAX,EBX
ADD EAX,BADR2
OUT DX,EAX ;写地址口
MOV
IN DX,IO_port_data
EAX,DX ;读数据口
MOV dword ptr IO_base_address,EAX
AND
JZ EAX,1
findPCI_next ;检查是否为 i/o 基址信息
MOV EAX,dword ptr IO_base_address
AND
MOV EAX,0fffffffeh
dword ptr IO_base_address,EAX ;去除 i/o 指示位并保存
MOV DX,offset good ;显示开始执行程序信息
MOV AH,09H
INT 21H
POPfd
POPad
RET
findPCI ENDP
MY_CODE ENDS
END START
;I/O 实验源码
DATA SEGMENT DELAY_SET EQU 0FFFH L_TO_R DB ?
R_TO_L DB ?
DATA ENDs
CODE SEGMENT
ASSUME DS : DATA, CS : CODE START:
MOV AX, DATA
MOV DS, AX
MOV L_TO_R, 07FH MOV R_TO_L, 0FEH MOV DX, 0ec03h MOV AL, 89h
OUT DX, AL
X:
MOV DX, 0ec02h IN AL, DX CMP AL, 0h
JE FLOW_1 CMP AL, 00fh JE FLOW_2
MOV DX, 0ec00h OUT DX, AL CALL DELAY JMP START
FLOW_1:
MOV AL, L_TO_R MOV AH, R_TO_L ROR AL, 1
MOV L_TO_R, AL ROL AH, 1
MOV R_TO_L, AH JMP SHOW_1
FLOW_2:
MOV AL, R_TO_L MOV AH, L_TO_R ROR AL, 1
MOV L_TO_R, AL ROL AH, 1
MOV R_TO_L, AH JMP SHOW_2
SHOW_1:
MOV DX, 0ec00h OUT DX, AL MOV AL, AH MOV DX, 0ec01h OUT DX, AL CALL DELAY JMP X
SHOW_2:
MOV DX, 0ec01h OUT DX, AL MOV AL, AH MOV DX, 0ec00h OUT DX, AL CALL DELAY JMP X
DELAY PROC NEAR
PUSHF
PUSH DX
PUSH CX
MOV DX,DELAY_SET
D1: MOV CX,-1
D2: DEC CX
JNZ D2
DEC DX
JNZ D1
POP CX
POP DX
POPF
RET
DELAY ENDp
CODE ENDs END START
;流水灯源码
MY_STACK SEGMENT PARA 'STACK'
DB 100 DUP(?)
MY_STACK ENDS
MY_DATA SEGMENT PARA 'DATA'
IO_9054base_address DB 4 DUP(0) ;PCI 卡 9054 芯片 I/O 基地址暂存空间
IO_base_address DB 4 DUP(0) ;PCI 卡 I/O 基地址暂存空间
pcicardnotfind DB 0DH,0AH,'pci card not find or address/interrupt error !!!',0DH,0AH,'$'
GOOD DB 0DH,0AH,'The Program is Executing !',0DH,0AH,'$'
LA DB ?
LB DB ?
P8255_A DW 0000H
P8255_B DW 0001H
P8255_C DW 0002H
P8255_MODE DW 0003H DELAY_SET EQU 11FFH
MES2 DB ' PCI CONFIG READ ERROR! $' MY_DATA ENDs
MY_CODE SEGMENT PARA 'CODE' MY_PROC PROC FAR
ASSUME CS:MY_CODE, DS:MY_DATA, SS:MY_STACK
START:
.386 ;386 模式编译
MOV AX,MY_DATA
MOV DS,AX
MOV ES,AX
MOV AX,MY_STACK
MOV SS,AX
CALL FINDPCI ;自动查找 PCI 卡资源及 IO 口基址
MOV
ADD CX,word ptr IO_base_address
P8255_A,CX ;PCI 卡 IO 基址+偏移
ADD P8255_B,CX
ADD P8255_C,CX
ADD P8255_MODE,CX
MOV DX,P8255_MODE ;8255 初始化,三个口全为输出
MOV AL,80H
OUT DX,AL
MOV DX,P8255_A ;PA 口赋初值
MOV AL,7FH
OUT DX,AL
MOV LA,AL
MOV DX,P8255_B ;PB 口赋初值
MOV AL,0FEH
OUT DX,AL
MOV LB,AL
CALL DELAY
A1: MOV AL,LA ;PA 口数据右移一位
ROL AL,1
MOV LA,AL
MOV DX,P8255_A
OUT DX,AL
MOV AL,LB
ROR AL,1
MOV LB,AL
MOV DX,P8255_B ;PB 口数据右移一位
OUT DX,AL
CALL DELAY ;延时
CALL BREAK ;按任意键退出
JMP A1
MY_PROC ENDp
DELAY PROC NEAR ;延时程序
PUSHF
PUSH DX
D1: PUSH MOV MOV CX DX,DELAY_SET CX,-1
D2:
DELAY DEC
JNZ DEC JNZ POP POP POPF RET ENDp CX
D2 DX D1 CX DX
BREAK
RETURN: PROC MOV MOV INT JE MOV INT RET NEAR AH,06H DL,0FFH 21H RETURN AX,4C00H 21H
BREAK ENDP
;*****************************************************************************
; /* 找卡子程序 */
;*****************************************************************************
IO_port_addre EQU 0CF8H ;32 位配置地址端口
IO_port_data EQU 0CFCH ;32 位配置数据端口
IO_PLX_ID EQU 200810B5H ;PCI 卡设备及厂商 ID
BADR0 = 10H ;基地址寄存器 0
BADR1 = 14H ;基地址寄存器 1
BADR2 = 18H ;基地址寄存器 2
BADR3 = 1CH ;基地址寄存器 3
FINDPCI PROC NEAR ;查找 PCI 卡资源并显示
PUSHAD PUSHFD
MOV EBX,080000000H
FINDPCI_next:
ADD EBX,100H
CMP EBX,081000000H
JNZ findpci_continue
MOV DX,offset pcicardnotfind ;显示未找到 PCI 卡提示信息
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H ;退出
findpci_continue:
MOV
MOV DX,IO_port_addre
EAX,EBX
OUT DX,EAX ;写地址口
MOV DX,IO_port_data
IN EAX,DX ;读数据口
CMP
JNZ EAX,IO_PLX_ID
findpci_next ;检查是否发现 PCI 卡
MOV DX,IO_port_addre
MOV EAX,EBX
ADD EAX,BADR1
OUT DX,EAX ;写地址口
MOV DX,IO_port_data
IN EAX,DX ;读数据口
MOV dword ptr IO_9054base_address,EAX
AND EAX,1
JZ findPCI_next ;检查是否为 i/o 基址信息
MOV EAX,dword ptr IO_9054base_address
AND EAX,0fffffffeh
MOV dword ptr IO_9054base_address,EAX ;去除 i/o 指示位并保存
MOV DX,IO_port_addre
MOV EAX,EBX
ADD
OUT EAX,BADR2
DX,EAX ;写地址口
MOV DX,IO_port_data
IN EAX,DX ;读数据口
MOV AND dword ptr IO_base_address,EAX EAX,1
JZ findPCI_next ;检查是否为 i/o 基址信息
MOV EAX,dword ptr IO_base_address
AND EAX,0fffffffeh
MOV dword ptr IO_base_address,EAX ;去除 i/o 指示位并保存
MOV DX,offset good ;显示开始执行程序信息
MOV AH,09H
INT 21H
POPfd POPad RET
findPCI ENDP
MY_CODE ENDS END START
最后
以上就是心灵美大山为你收集整理的微机原理实验报告实验一 汇编语言编程实验实验二 数码转换实验实验三 基本 IO 口扩展实验 实验四 可编程并行接口实验的全部内容,希望文章能够帮你解决微机原理实验报告实验一 汇编语言编程实验实验二 数码转换实验实验三 基本 IO 口扩展实验 实验四 可编程并行接口实验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复