微机实验报告.docx

上传人:b****6 文档编号:6385074 上传时间:2023-01-05 格式:DOCX 页数:18 大小:610.02KB
下载 相关 举报
微机实验报告.docx_第1页
第1页 / 共18页
微机实验报告.docx_第2页
第2页 / 共18页
微机实验报告.docx_第3页
第3页 / 共18页
微机实验报告.docx_第4页
第4页 / 共18页
微机实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

微机实验报告.docx

《微机实验报告.docx》由会员分享,可在线阅读,更多相关《微机实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

微机实验报告.docx

微机实验报告

实验一多位十进制数相加

1、实验目的

学习数据传送和算术运算指令的用法。

2、实验内容

将两个多位十进制数28056、47193相加,并显示加数、被加数、和。

要求两个加数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,结果送回DATA1处(低位在前,高位在后)。

3、实验程序

SHOWMACROB

MOVDL,B

MOVAH,02H

INT21H

ENDM

DATASEGMENT

DATA1DB33H,39H,31H,37H,34H

DATA2DB36H,35H,30H,38H,32H

DATA3DB'__',0DH,0AH,'$'

DATAENDS

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK,ES:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2

MOVBX,05

SHOW20H

CALLDISPL

SHOW0DH

SHOW0AH

MOVSI,OFFSETDATA1

MOVBX,05

SHOW2BH

CALLDISPL

SHOW0DH

SHOW0AH

MOVCL,7

S1:

SHOW2DH

LOOPS1

SHOW0DH

SHOW0AH

MOVSI,OFFSETDATA1

MOVDI,OFFSETDATA2

CALLADDA

MOVSI,OFFSETDATA1

MOVBX,5

SHOW20H

CALLDISPL

MOVAX,4C00H

INT21

DISPLPROCNEAR

DS1:

SHOW[SI+BX-1]

DECBX

JNZDS1

RET

DISPLENDP

ADDAPROCNEAR

MOVDX,SI

MOVBP,DI

MOVBX,05

AD1:

SUBBYTEPTR[SI+BX-1],30H

SUBBYTEPTR[DI+BX-1],30H

DECBX

JNZAD1

MOVSI,DX

MOVDI,BP

MOVCX,05

CLC

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL

AAA

MOV[SI],AL

INCSI

INCDI

LOOPAD2

MOVSI,DX

MOVDI,BP

MOVBX,05

AD3:

ADDBYTEPTR[SI+BX-1],30H

ADDBYTEPTR[DI+BX-1],30H

DECBX

JNZAD3

RET

ADDAENDP

CODEENDS

ENDSTART

四、实验结果

五、思考题

不改变数据段DATA1和DATA2的内容,如何将加数和被加数分别由28056和47193变成65082和39174,并且相加。

修改程序为:

DISPLPROCNEAR

DS1:

SHOW[SI+BX]

INCBX

CMPBX,5

JNEDS1

RET

DISPLENDP

MOVCX,05

CLC

addsi,4

adddi,4

AD2:

MOVAL,[SI]

MOVBL,[DI]

ADCAL,BL

AAA

MOV[SI],AL

decsi

decdi

LOOPAD2

 

实验二统计数据个数

1、实验目的

掌握将多位十六进制数转换成多位十进制数ASCII码的方法。

2、实验内容

统计内存数组中大于0和小于0的元素个数,并将统计结果分别存放在LRESULT和HRESULT变量中,并显示个数。

3、实验程序

DATASEGMENT

ARYDB1,3,-1,2,6,-9,-5,7,8,1,3,8,-6,8,-9,-7,2,4,-3,-3

DB-4,7,7,8,3,1,3,6,8,5,5,6,4,5,7,-4,2,4,5,-7,5,4

DB2,5,7,8,8,8,7,6,-5,4,3,2,1,-1,2,2,3,-4,5,6,7

N=$-ARY

LRESULTDW0

HRESULTDW0

TJJGDB'STATISTICSRESULT:

',0DH,0AH,'$'

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

SHOWMACROB

PUSHDX

PUSHAX

MOVDX,B

MOVAH,02H

INT21H

POPAX

POPDX

ENDM

XORCX,CX

MOVCX,N

LEASI,ARY

LOP:

MOVAL,[SI]

CMPAL,0

JNSPLUS

INCLRESULT

JMPCONT

PLUS:

INCHRESULT

CONT:

INCSI

LOOPLOP

LEADX,TJJG

MOVAH,09H

INT21H

SHOW'+'

MOVAX,HRESULT

CALLDISPL

SHOW0DH

SHOW0AH

SHOW'-'

MOVAX,LRESULT

CALLDISPL

MOVAX,4C00H

INT21H

DISPLPROC

PUSHDX

PUSHAX

MOVCX,10

MOVDX,00H

MOVBX,00H

DIVCX

MOVBX,DX

ADDAL,30H

DISPL1:

MOVDL,AL

MOVAH,02H

INT21H

MOVDL,BL

ADDDL,30H

MOVAH,02H

INT21H

POPAX

POPDX

RET

DISPLENDP

CODEENDS

ENDSTART

四、实验结果

五、思考题

试分析程序中语句“MOVCX,N”执行后,赋给CX寄存器的值是多少?

答:

CX中的值是3FH。

 

实验三十字路口红绿灯闪烁试验

1、实验目的

通过对红、绿、黄灯的控制,熟练掌握8255A接口芯片的编程方法。

2、实验内容

对8255A接口芯片进行编程,使红、黄、绿发光二极管按照十字路口交通灯的形式点亮或熄灭。

3、线路连接

发光二极管共8个,其中两组绿、黄、红灯用6个,L2、L3、L4为一组,L5、L6、L7为一组:

实验台连接如图43所示。

高电平“1”时,点亮。

四、编程提示

(1)红、黄、绿灯变化规律

设有一个十字路口,两组灯分别代表东西和南北两个方向,其红黄绿灯变化规律为:

①两个路口红灯全亮;

②南北路口绿灯亮,东西路口红灯亮:

③南北路口绿灯灭,东西路口红灯亮;

④两个路口黄灯闪烁;

⑤两个路口红灯全亮;

⑥东西路口绿灯亮,南北路口红灯亮;

⑦东西路口绿灯灭,南北路口红灯亮;

⑧两个路口黄灯闪烁;

⑨转向②循环执行。

(2)设置8255A方式控制字

设置8255A的端口C工作在方式0,为输出。

D0、D1控制绿灯,D2、D3控制黄灯,D4、D5控制红灯。

需要点亮哪一位指示灯时,8255A相应端口对应位就输出“1”。

五、实验程序

DATASEGMENT

IOPORTEQU0D88OH-280H

IO8255CEQUIPORT+282H

IO8255TEQUIPORT+283H

PBDB?

MESSDB'ENTERANYKEYCANEXITTODOS!

',0DH,0AH,'$'

DATAENDS

STACKSEGMENTSTACK

STADW50DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,ES:

DATA,SS:

STACK

START:

MOVAX,DATA

MOVDS,AX

MOVES,AX

MOVAH,09H

MOVDX,OFFSETMESS

INT21H

MOVDX,IO8255T

MOVAL,81H

OUTDX,AL

MOVDX,IO8255C

INAL,DX

MOVPB,AL

MOVDX,IO8255T

MOVAL,80H

OUTDX,AL

MOVDX,IO8255C

MOVAL,PB

ORAL,0CH

OUTDX,AL

MOVAL,30H

OUTDX,AL

CALLDELAY10

LLL:

MOVDX,IO8255C

MOVAL,12H

OUTDX,AL

CALLDELAY1

CALLDELAY1

MOVAL,18H

OUTDX,AL

MOVCX,0004H

TTT:

MOVAL,C3H

OUTDX,AL

PUSHCX

MOVCX,80H

LOP1:

CALLDELAY1

LOOPLOP1

MOVAL,3CH

OUTDX,AL

MOVCX,80H

LOP2:

CALLDELAU1

LOOPLOP2

POPCX

LOOPTTT

MOVAL,FFH

OUTDX,AL

CALLDELAY2

MOVAL,C3H

OUTDX,AL

CALLDELAY1

CALLDELAY1

MOVAL,00H

OUTDX,AL

MOVCX,0007H

GGG:

MOVAL,99H

OUTDX,AL

PUSHCX

MOVCX,80H

LOP3:

CALLDELAY2

LOOPLOP3

MOVAL,66H

OUTDX,AL

MOVCX,80H

LOP4:

CALLDELAY2

LOOPLOP4

POPCX

LOOPGGG

MOVAL,FFH

OUTDX,AL

CALLDELAY2

MOVAH,06H

MOVDL,0FFH

INT21H

JNZPPP

JMPLLL

PPP:

MOVAX,4C00H

INT21H

DELAY1PROCNEAR

PUSHCX

MOVCX,0FFFFH

CCC:

LOOPCCC

POPCX

RET

DELAY1ENDP

DELAY3PROCNEAR

PUSHAX

PUSHCX

MOVCX,0F00H

UUU:

CALLDELAY1

LOOPUUU

POPCX

POPAX

RET

DELAY3ENDP

CODEENDS

ENDSTART

六、实验结果

7、思考题

程序中红、绿、黄灯点亮和熄灭的延时时间是如何设定的?

答:

CALL指令调用子程序DELAY10,DELAY10的功能是通过执行循环执行压入堆栈和弹出堆栈来实现延时,改变循环次数即CX的设定值即可改变延时时间。

实验四、直流电机测速实验

一、实验目的

(1)学握8254的作原理和偏程方法;

(2)了解光电开关,掌握用光电传感器测量电机转速的方法。

二、实验内容

光电测速的基本电路由光电传感器、计数器/定时器组成。

被测电机主轴上固定一个圆盘,圆盘的边缘上有小孔。

传感器的红外发射端和接收端在圆盘的两侧,电机帶动圆盘转到有孔的位置时,红外光通过,接收管导通,输出低电平。

红外光被挡住时,接收截止,输出高电平。

用计数器/定时器记录在一定时间内传感器发出的脉冲个数,就可以计算出电机的转速。

三、线路连接

线路连接如图4.5所示,3254计数器/定时器0和2作为定时器,确定测速时间,定时器0的CLK0连1MHz脉冲频率,OUT0作为定时器2的输入,与CLK2相连,输出OUT2与8255的PA0端相连。

GATE0利GATE2均接+5V,8254计数器/定时器1作为计数器,输入CLK1与直流电机计数端连接,GATE1与8255的PC0相连。

电机DJ端与+5V~0V模拟开关SW1相连。

4、编程提示

8254计数器/定时器1作为计数器,记录脉冲个数,计数器/定时器0和2作为定时器,组成10~60秒定时器,测量脉冲个数,算出电机每分钟的转速并显示在屏幕上。

8255的PA0根据OUT2的开始和结束时间,通过PC0向8254计数器/定时器1发出开始和停止计数信号。

五、实验程序

DATA SEGMENT

IOPORTEQU0D880H-0280H

IO8255KEQUIOPORT+283H

IO8255AEQUIOPORT+280H

IO8255CEQUIOPORT+282H

IO8254KEQUIOPORT+28BH

IO82542EQUIOPORT+28AH

IO82541EQUIOPORT+289H

IO82540EQUIOPORT+288H

MESSDB'STRIKE ANY KEY,RETURN TO DOS!

', 0AH, 0DH,'$'

COUDB0

COU1DB0

COUNT1DB0

COUNT2DB0

COUNT3DB0

COUNT4DB0

DATA ENDS

CODE SEGMENT

ASSUME CS:

 CODE, DS:

 DATA

START:

MOVAX, DATA

MOVDS, AX

MOVDX, OFFSET MESS

MOVAH, 09H

INT21H

MOVDX, IO8254K

MOVAL, 36H

OUTDX, AL

MOVDX, IO82540

MOVAX, 50000

OUTDX, AL

NOP

NOP

MOVAL, AH

OUTDX, AL

MOVDX, IO8255K

MOVAL, 90H

OUTDX, AL

MOVDX, IO8255C

MOVAL, 00

OUTDX, AL

LL:

MOVAH, 01H

INT16H

JNZQUIT1

MOVDX, IO8254K

MOVAL, 70H

OUTDX, AL

MOVDX,IO82541

MOVAL,0FFH

OUTDX,AL

NOP

NOP

OUTDX, AL

MOVDX, IO8254K

MOVAL, 90H

OUTDX, AL

MOVDX, IO82542

MOVAL, 100

OUTDX, AL

MOVDX, IO8255C

MOVAL, 01H

OUTDX, AL

JMPA0

QUIT1:

JMPQUIT

A0:

MOVDX, IO8255A

A1:

INAL, DX

ANDAL, 01H

JZA1

MOVDX, IO8255C

MOVAL, 00H

OUTDX, AL

MOVDX, IO8254K

MOVAL, 70H

OUTDX, AL

MOVDX, IO82541

INAL, DX

MOVBL, AL

INAL, DX

MOVBH, AL

MOVAX, 0FFFFH

SUBAX, BX

CALLDISP

MOVDL, 0DH

MOVAH,02

INT21H

MOVDL, 0AH

MOVAH, 02

INT21H

JMPLL

DISP PROC NEAR

MOVDX, 0000H

MOVCX, 03E8H

DIVCX

MOVCOUNT1, AL

MOVAX, DX

MOVCL, 64H

DIVCL

MOVCOUNT2, AL

MOVAL, AH

MOVAH, 00H

MOVCL, 10

DIVCL

MOVCOUNT3, AL

MOVCOUNT4, AH

MOVAL, COUNT1

CALLDISP1

MOVAL, COUNT2

CALLDISP1

MOVAL, COUNT3

CALLDISP1

MOVAL, COUNT4

CALLDISP1

RET

DISP ENDP

DISP1 PROC NEAR

ANDAL, 0FH

CMPAL, 09H

JLENUM

ADDAL, 07H

NUM:

ADDAL, 30H

MOVDL, AL

MOVAH,02

INT21H

RET

DISP1 ENDP

QUIT:

MOVAH, 4CH

INT21H

CODEENDS

ENDSTART

六、实验结果

七、思考题

关闭电机后,为什么8254计数不为零?

答:

由于之前计数值即电机转速已经存储在锁存器中,关闭电机后,程序还是将之前的数值显示在屏幕上,所以不为零。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 其它语言学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1