第一篇:微机原理分支程序实验
微机原理实验三子程序设计实验
实验三 子程序设计实验
一、实验目的
1.学习子程序的定义和调用方法。 2.掌握子程序的程序设计、编制及调用。
二、实验设备
TDN86/88教学实验系统一台
三、实验内容及步骤
1.求无符号字节序列中的最大值和最小值
设有一字节序列,其存储首址为3000H,字节数为08H。利用子程序的方法编程求出该序列中的最大值和最小值。实验程序及流程如下:
主程序STACK1SEGMENT STACK
开始DW 64 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H CALL branch A1:JMP A1 branch: JCXZ A4 PUSH SI PUSH CX PUSH BX
结束序列的字节个数→CX数据区首址→SI调用求最大最小值子程序 MOV BH,[SI] MOV BL,BH A1: LODSB CMP AL,BH JBE A2 MOV BH,AL JMP A3 A2: CMP AL,BL JAE A3
Y子程序CX=0?NSI、CX、BX入栈[SI]→BHBH→BLSI+1→SI[SI]→ALNAL﹤BHAL→BHMOV BL,AL A3: LOOP A1 MOV AX,BX POP BX POP CX
YAL﹥BLYCX-1→CXNNAL→BLCX=0?POP SI A4: RET CODE ENDS END START
实验步骤
(1) 输入源程序,进行编译、链接和加载。
YSI、CX、BX出栈RET
(2) 在调试区键入E0000:3000↙,输入8个字节的数据:D
9、0
7、8B、C
5、EB、0
4、9D、F9。
(3) 运行程序,查看结果,在调试区键入R AX↙,显示结果应为AX=F9 04,AH中为最大值,AL中为最小值。
2.数组求和
设有一字节序列(存储地址和字节数可自定义),编写程序,求出该序列的和,求和工作由子程序来实现。
程序:
STACK1 SEGMENT STACK DW 64 DUP(?) STACK1 ENDS CODE
SEGMENT ASSUME CS:CODE START: MOV SI,3000H MOV CX,0008H XOR AX,AX CALL branch A5: JMP A5 branch: JCXZ A4 PUSH SI
PUSH CX A1: ADD AL,[SI] INC SI A3: LOOP A1
POP CX POP SI A4: RET CODE
ENDS END START
8个01,总和为08
第二篇:微机原理实验报告
学号: 学生姓名: 打印日期: 评分: 评语:
实验报告
COURSE PAPER 8255控制开关状态显示
学院 :机电工程与自动化学院
一、实验目的;
(本课程设计是在完成《微机原理与接口技术使用教程》知识后进行的一次综合性训练。通过本课程设计,既可以巩固对所学知识的理解和掌握,又可以培养解决实际问题的本领,也能够提高运用文字图表表达设计思想和对Proteus与Emu8086应用的能力。
二、实验要求;
(1)功能要求:设定8255的PA口为开关量输入,PB口为开关量输出,要求能随时将PA口的开关状态通过PB口的数码管显示出来,如开关为0000,则数码管显示为0;若开关为1111,则数码管显示为F。
(2)具体参数:将8255A的端口A设置为方式0并作为输入口,读取开关量,PB口设置为方式0作为输出口。并设定A、B、C口和控制口的地址为60H、62H、64H、66H。LED为共阴极连接方式。
(3)用Proteus画出实现上述功能的8086和8255及LED相关连接的硬件电路,编写相关程序,结合emu8086,完成仿真调试,给出硬件电路图、程序代码和仿真结果图。
三、实验说明;
利用前期实验建立组态控制 组态软件的操作界面和主要功能; 混料罐工程或交通灯工程工程组态
四、实验步骤; (1)硬件设计
8255A的四个端口地址为60H、62H、64H、66H。其二进制码分别为0110 0000H、0110 0010H、0110 0100H、0110 0110H。则可以判断,8255A的A0与A1端口应该与8086的A1和A2端口对应。8086的A
7、A
4、A
3、A0为0,A
6、A5为1时,8255A接受指令。为完成上述操作,可以使用138译码器。8255A的A端口作为输入口,连接四位开关;B端口作为输出口,连接一个共阴极的LED显示管。
(2)硬件电路图
(3)汇编语言设计 assume cs:code code segment start: MOV DX,066H MOV AL,90H OUT DX,AL
AA: MOV BX, OFFSET TABL MOV DX,060H IN AL,DX AND AL,0FH XLAT MOV DX,062H OUT DX,AL JMP AA
TABL: DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H
code ends end start (4)实验结果
五、实验心得;
通过对proteus及emu8086软件的应用,可以使我将从课堂与书本上学习到的知识,以模拟的方式,制作成成品。在本次课外项目中,我对于8255A的工作方式以及8086如何控制其他元器件输入输出数据有了清晰的认识。通过使用模拟软件,我有了更多的方式去深入了解课本上的知识。
第三篇:微机原理实验报告封面
重 重 庆 交 通 大 学 学
学 学 生 实 验 报 告
实验课程名称
开课实验室
学院
年级
专业班
学 学 生 姓 名
学
号
开 开 课 时 间
至
学年第
学期
总 总 成 绩
教师签名
批改日期
第四篇:微机原理与接口技术 实验报告一
评
阅
微机原理与接口技术
实验报告一
姓名
匡越
学号
1715211016
时间
地点
实验题目
一、实验目的
1.
熟悉Keil软件使用
2.
熟悉MCS-51指令
3.
学习简单程序的调试方法
二、实验说明
通过实验了解单片机内部存储器的结构和分配及读写存储器的方法,熟悉MCS-51指令同时,学习单片机程序编程、调试方法。
三、实验内容及步骤
1.启动PC机,打开Keil软件,软件设置为模拟调试状态。在所建的项目文件中输入源程序1,进行编译,如有错误按提示找到该行并纠错,重新编译直到通过。
2.编译无误后,打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化并将观察到的结果记录到预习报告。
3.新建另一个项目输入源文件2,打开CPU窗口,选择单步或跟踪执行方式运行程序,观察存储块数据变化情况记录到预习报告。点击复位按钮,改变存储块数据,点击全速执行快捷按钮,点击暂停按钮,观察存储块数据变化情况,记录到预习报告。点击复位按钮,改变存储块数据,分别LOOP、LOOP1设置断点,点击全速执行快捷按钮,在断点处观察寄存器及存储块数据变化情况。
WAVE软件使用方法参考其帮助文件。
四、实验程序流程框图、实验程序
1、源程序1
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H
;
(R0)=
(00H)=
MOV
A,
#40H
;
(A)=
MOV
R6,
A
;
(A)=
,(R6)=
MOV
A,
@R0
;
(R0)=
(A)=
MOV
40H,
A
;
(A)=
(40H)=
MOV
30H,40H
;
(30H)=
(40H)=
MOV
R1,#40H
;
(R1)=
MOV
@R1,#0AAH;(R1)=
(40H)=
MOV
SP,#60H;
(SP)=
PUSH
ACC;
(SP)=
(61H)=
PUSH
30H;
(SP)=
(62H)=
MOV
A,#0FFH;
(SP)=
(A)=
MOV
30H,#30H;
(SP)=
(30H)=
POP
ACC;
(SP)=
(A)=
POP
30H;
(SP)=
(30H)=
ADD
A,30H;
(30H)=
(A)=
Cy=
SUBB
A,#10;
(A)=
Cy=
MOV
R4,#00100100B;
(R4)=
H
MOV
A,#39H;
(A)
=
ADD
A,R4;
(A)
=
(R4=)
DA
A;
(A)
=
Cy=
MOV
28H,#55H;(28H)
=
Cy=
MOV
C,40H;
(PSW)
=
Cy=
MOV
26H,#00H;(26H)
=
Cy=
MOV
30H,C;
(30H)
=
(26H.1)
=
SJMP
$
j点击project,选择下拉式菜单中的New
project;
k选择所要的单片机,这里我们选择常用的
Ateml
公司的
AT89C51;
l新建一个File,输入源程序;
m将新建文件保存为text.asm的格式;
n鼠标在屏幕左边的
Source
Group1
文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文件等操作。选“Add
File
to
Group
‘Source
Group
1’”弹出文件窗口,选择刚刚保存的文件;
o对程序进行编译运行;
使程序一得:
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H
;
(R0)=
0x30
(00H)=
0x0000
MOV
A,
#40H
;
(A)=
0x40
MOV
R6,
A
;
(A)=
0x40
,(R6)=
0x40
MOV
A,
@R0
;
(R0)=
0x30
(A)=
0x16
MOV
40H,
A
;
(A)=0x16
(40H)=
0x0040
MOV
30H,40H
;
(30H)=
0x0030
(40H)=
0x0040
MOV
R1,#40H
;
(R1)=
0x40
MOV
@R1,#0AAH;(R1)=
0x40
(40H)=
0x0040
MOV
SP,#60H;
(SP)=
0x60
PUSH
ACC;
(SP)=
0x61
(61H)=
0x0061
PUSH
30H;
(SP)=
0x62
(62H)=
0x0062
MOV
A,#0FFH;
(SP)=
0x62
(A)=
0xff
MOV
30H,#30H;
(SP)=
0x62
(30H)=
0x0030
POP
ACC;
(SP)=
0x61
(A)=
0x16
POP
30H;
(SP)=
0x60
(30H)=
0x0030
ADD
A,30H;
(30H)=
0x0030
(A)=
0x2a
Cy=
0
SUBB
A,#10;
(A)=
0x20
Cy=
0
MOV
R4,#00100100B;
(R4)=
0x24
H
MOV
A,#39H;
(A)
=
0x39
ADD
A,R4;
(A)
=
0x5d
(R4=)
0x24
DA
A;
(A)
=
0x63
Cy=
0
MOV
28H,#55H;(28H)
=
0x0028
Cy=
0
MOV
C,40H;
(PSW)
=
0x80
Cy=
1
MOV
26H,#00H;(26H)
=
0x0026
Cy=
1
MOV
30H,C;
(30H)
=
0x0030
(26H.1)
=
0
SJMP
$
2、源程序2
设(30H)=4,
(31H)=1,
(32H)=3,
(33H)=5,
(34H)=2,
(35H)=6
ORG
0000H
AJMP
MAIN
ORG
0030H
MAIN:
MOV
R0,#30H;30H→R0
MOV
R2,#6;6→R2
SORT:
MOV
A,R0;30H→A
MOV
R1,A;30H→R1
MOV
A,R2;6→A
MOV
R5,A;6→R5
CLR
F0;
状态标志位清零
DEC
R5;寄存器R5减一
MOV
A,@R1;R1→A
LOOP:
MOV
R3,A;A→R3
INC
R1
;寄存器R1增1
CLR
C
;进位标志位清零
MOV
A,@R1;31H→A
SUBB
A,R3;累加器内容减去寄存器内容
JNC
LOOP1;仅为标志位为1,则进行LOOP1
;以下代码完成数据交换
SETB
F0;状态标志位置1
MOV
A,@R1;31H→A
XCH
A,R3;将A于与R3的数据交换
MOV
@R1,A;将4赋值给寄存器R1(31H)
DEC
R1;寄存器减一
MOV
A,R3;1→A
MOV
@R1,A;将1赋值给寄存器R1(30H)
INC
R1;寄存器R1增一
LOOP1:
MOV
A,@R1;4→A
DJNZ
R5,LOOP;寄存器R5减一,不为零则回到LOOP
JB
F0,SORT;状态标志位为零,则回到SORT
SJMP
$
第五篇:北京理工大学微机原理实验报告_8259A
实验一8259中断控制器实验
一、 实验内容
用单脉冲发生器的输出脉冲为中断源,每按一次产生一次中断申请,点亮或熄灭发光二极管。 二,实验目的
(1)掌握8259的工作原理。
(2)掌握编写中断服务程序的方法。 (3)掌握初始化中断向量的方法。 三, 实验步骤 (1)连线
1. 单脉冲发生器输出P+与8259的IR0相连; 2. 8259的片选CS8259与CS0相连; 3. 8259的INT与8086的INT相连; 4. 8259的INTA与8086的INTA相连; 5. CS273与CS1相连;
6. 00与LED0相连,01与LED1相连,依次将CS273接口与LED相连;其它线均已连好如下图:
DDBUSDD0VccDD1DD2DD3DD4DD5DD6DD7CS825913274LS32VccINTINTAVccIORDIOWRA1111098765427132161726D0D1D2D3D4D5D6D7A0CSRDWRSP/ENINTINTA8259IR0IR1IR2IR3IR4IR5IR6IR71819202122232425IR0IR1IR2IR3IR4IR5IR6IR7CAS0CAS1CAS2121314 (2)编辑程序,编译链接后,单步运行,调试程序。
(3)调试通过后,在中断服务程序的NOP处设置断点,运行程序,当接收到中断请求后,程序停在中断服务程序内的断点处,观察寄存器AX的值。 四,实验源程序如下
CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;写ICW1,单片8259A,要写0CW4 MOV AX,13H
OUT DX,AX MOV DX,4A2H ;写ICW2 MOV AX,80H
;IR0的中断向量码为80H OUT DX,AX MOV AX,01
OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI MOV AX,0 ;写OCW1 OUT DX,AX;允许中断
;中断向量存放在(0000H:0200H)开始的四个单元里 MOV AX,0
MOV DS,AX MOV SI,200H
;中断类型号为80H MOV AX,OFFSET HINT ;中断服务程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;开中断,设置IF=1 JMP $
;原地跳转
HINT:
;中断服务程序 XOR CX,0FFH;CX取反
MOV DX,4B0H;CS273接口的地址,与8个LED灯相连 MOV AX,CX;输出高低电平控制LED灯的亮灭 OUT DX,AX MOV DX,4A0H ;OCW2的地址
MOV AX,20H ;一般EOI命令,全嵌套方式 OUT DX,AX IRET ;中断返回
CODE ENDS END START 五, 实验思考题 1. 将P0连线连接到IR1—IR7任意一个;重新编写程序。
将P0接到了IR1,在原程序的基础上,把写ICW2的控制字改为81H,再把中断向量的入口地址改为0204H即可。程序如下:
CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;写ICW1,单片8259A,要写ocw4 MOV AX,13H
OUT DX,AX MOV DX,4A2H ;写ICW2 MOV AX,81H
;IR1的中断向量码为81H OUT DX,AX MOV AX,01
OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI MOV AX,0 ;写OCW1 OUT DX,AX;允许中断
;中断向量存放在(0000H:0204H)开始的四个单元里 MOV AX,0
MOV DS,AX MOV SI,204H
;中断类型号为81H MOV AX,OFFSET HINT ;中断服务程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;开中断,设置IF=1 JMP $
;原地跳转
HINT:
;中断服务程序
XOR CX,0FFH;CX取反
MOV DX,4B0H;CS273的地址
MOV AX,CX;输出高低电平控制LED灯的亮灭 OUT DX,AX
MOV DX,4A0H ;OCW2的地址
MOV AX,20H ;一般EOI命令,全嵌套方式 OUT DX,AX IRET ;中断返回 CODE ENDS END START 实验现象:运行程序,触发脉冲发生器产生中断请求,相应二极管点亮。 2. 设置OCW1,屏蔽某个中断请求,运行程序观察现象。
将IR0重新接入LED0,设置OCW1为01H,屏蔽中断IR0,则IR0的中断无法得到响应。程序如下:
CODE SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;ICW1的地址,写初始化命令字ICW1 MOV AX,13H ;上升沿触发,单片8259,要写ICW4 OUT DX,AX MOV DX,4A2H ;ICW2的地址,写中断向量码ICW2 MOV AX,80H
;IR0的中断向量码为80H OUT DX,AX MOV AX,01
;写中断结束控制字ICW4 OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI MOV AX,01H
;写中断屏蔽字OCW1 OUT DX,AX;屏蔽IR0中断
;中断向量存放在(0000H:0200H)开始的四个单元里 MOV AX,0
MOV DS,AX MOV SI,200H
;中断类型号为80H MOV AX,OFFSET HINT ;中断服务程序的入口地址 MOV DS:[SI],AX ADD SI,2 MOV AX,CS MOV DS:[SI],AX STI
;开中断,设置IF=1 JMP $
;原地跳转
HINT:
;中断服务程序
XOR CX,0FFH;CX取反
MOV DX,4B0H;CS273的地址
MOV AX,CX;输出高低电平控制LED灯的亮灭 OUT DX,AX
MOV DX,4A0H ;OCW2的地址
MOV AX,20H ;一般EOI命令,全嵌套方式 OUT DX,AX IRET
;中断返回
CODE ENDS END START 实验现象:
每按单脉冲发生器一次产生一次中断申请,但连接的发光二极管一直不亮。 3.
设置OCW2,了解中断结束方式与设置优先权。 将IR0和IR1都连接到P+上,分别连接LED0和LED1到00和01。OCW2将 E0OCW2一般EOI命令,将IR0设置为最低中断优先级。程序如下:
CODE
SEGMENT PUBLIC ASSUME CS:CODE ORG 100H START: MOV DX,4A0H
;ICW1的地址 MOV AX,13H
;上升沿触发,单片8259,要写ICW4 OUT DX,AX MOV DX,4A2H ;ICW2的地址 MOV AX,80H ;中断向量码为80H,低3位自动写入 OUT DX,AX MOV AX,01
;写ICW4 OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI MOV AX,0
;写OCW1 OUT DX,AX;允许所有中断
;IR0的中断向量存放在(0000H:0200H)开始的四个单元里 MOV
AX,0
MOV
DS,AX MOV
SI,200H MOV
AX,OFFSET HINT1 MOV
DS:[SI],AX ADD
SI,2 MOV
AX,CS MOV
DS:[SI],AX STI
;开中断,设置IF=1 ;IR1的中断向量存放在(0000H:0204H)开始的四个单元里 MOV
AX,0
MOV
DS,AX MOV
SI,204H MOV
AX,OFFSET HINT2 MOV
DS:[SI],AX ADD SI,2 MOV
AX,CS MOV
DS:[SI],AX JMP $
;原地跳转
HINT1:;中断服务程序1 XOR CX,0F0H ;CX高4位取反 MOV DX,4B0H;CS273的地址
MOV AX,CX ;输出高低电平控制LED灯的亮灭 OUT DX,AX MOV DX,4A0H ;OCW2的地址
MOV AX,E0H ;一般EOI命令,IR0优先级最低 OUT DX,AX IRET
;中断返回
HINT2:
;中断服务程序2 XOR CX,00FH ;CX低4位取反 MOV DX,4B0H;CS273的地址
MOV AX,CX;输出高低电平控制LED灯的亮灭 OUT DX,AX MOV DX,4A0H ;OCW2的地址
MOV AX,E0H ;一般EOI命令,IR0优先级最低 OUT DX,AX IRET
;中断返回 CODE ENDS END START 实验现象:CS273的00与LED0相连,01与LED1相连,02与LED2相连,依次下去,直至07与LED7相连。每按单脉冲发生器一次产生一次中断申请,由于IR0的优先级比IR1低,故先响应IR1,后响应IR0,观察到低4位的LED灯先点亮或熄灭,高4位的LED灯后点亮或熄灭。 六, 实验心得
实验让我对8259A的内部寄存器的功能有了更深的认识,掌握了8259A的初始化步骤及其工作方式的选择,以及中断服务程序的编写。使用实验箱和编译软件,使我们在编程和动手操作方面都有了很大的提高,软硬件的结合,使我们更加透彻的理解了所学知识。