微机实验报告.docx
《微机实验报告.docx》由会员分享,可在线阅读,更多相关《微机实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
微机实验报告
实验一多位十进制数相加
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计数不为零?
答:
由于之前计数值即电机转速已经存储在锁存器中,关闭电机后,程序还是将之前的数值显示在屏幕上,所以不为零。