微机原理分支程序实验

2023-04-16

第一篇:微机原理分支程序实验

微机原理实验三子程序设计实验

实验三 子程序设计实验

一、实验目的

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的初始化步骤及其工作方式的选择,以及中断服务程序的编写。使用实验箱和编译软件,使我们在编程和动手操作方面都有了很大的提高,软硬件的结合,使我们更加透彻的理解了所学知识。

本文来自 99学术网(www.99xueshu.com),转载请保留网址和出处

上一篇:外科实习医生个人鉴定下一篇:我看义务教育均衡发展