微机原理与接口技术实验.docx
- 文档编号:4881290
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:29
- 大小:25.11KB
微机原理与接口技术实验.docx
《微机原理与接口技术实验.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术实验.docx(29页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术实验
练习一系统认识实验
实验内容:
编写实验程序,将00H~0FH共16个数写入
内存3000H开始的连续16个存储单元中。
实验步骤:
1.运行Wmd86软件,进入Wmd86集成开发环境。
2.根据程序设计使用语言的不同,通过在“设置”
下拉列表来选择需要使用的语言及寄存器类型,这里
选择"汇编语言"和"16位寄存器",如图1所示。
语
言及寄存器类型选择后,下次再启动软件将保持这次的修改不变。
3.语言选择后,点击新建或按Ctrl+N组合键来新
建一个文档,如图2所示。
默认文件名为Wmd861
4.编写实验程序,如图3所示,并保存,此
时系统会提示输入新的文件名,输完后点击保存。
5.点击,编译文件,若程序编译无误,再点击
进行链接,链接无误输出如图4所示的输出信息。
6.连接PC与实验系统的通讯电缆,打开实验系统电源。
7.编译、链接都正确并且上下位机通讯成功后,
就可以下载程序,联机调试了。
可以通过端口列表中的“
端口测试”来检查通讯是否正常。
点击下载程序。
为编
译、链接、下载组合按钮,通过该按钮可以将编译、链接、下
载一次完成。
下载成功后,在输出区的结果窗中会显示“加载成
功!
”,表示程序已正确下载。
起始运行语句下会有一条绿色的背景。
如图5所示。
8.将输出区切换到调试窗口,使用D0000:
3000命令查看内
存3000H起始地址的数据,如图6所示。
存储器在初始状态时,默认数据为CC。
9.点击按钮
运行程序,待程序运行停止,观察程
序运行结果,仍使用命令D0000:
3000来观察数据变化。
如图7所示。
10.也可以通过
设置断点,断点显示如图8所示
,然后运行程序,当遇到断点时程序会停下来,然后观察数据。
可以使用E0000:
3000来改变该地址单元的数据,如图9所示,输入
11后,按“空格”键,可以接着输入第二个数,如22,结束输入按“回车”键。
参考程序:
请参照随机软件中的Sample\ASM86\Wmd861.asm。
操作练习:
编写程序,将内存3500H单元开始的8个数据复制到3600H单元开始的
数据区中。
通过调试验证程序功能,使用E命令修改3500H单元开始的
数据,运行程序后使用D命令查看3600H单元开始的数据。
SSTACKSEGMENTSTACK;定义堆栈段
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
PUSHDS
XORAX,AX
MOVDS,AX
MOVSI,3000H;建立数据起始地址
MOVCX,16;循环次数
AA1:
MOV[SI],AL
INCSI;地址自加1
INCAL;数据自加1
LOOPAA1
MOVAX,4C00H
INT21H;程序终止
CODEENDS
ENDSTART
练习2
移位
datasegment
da1db23h,98h,0d2h,00h,95h,7fh,0a6h,49h
da2db8dup(0)
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,offsetda1
leadi,da2
movcx,8
lp:
moval,[si]
mov[di],al
incsi
incdi
looplp
movah,4ch
int21h
codeends
endstart
试验38数字累加和
datasegment
da1db23h,98h,0d2h,00h,95h,7fh,0a6h,49h
sumdw?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,offsetda1
movax,0
movcx,8
lp:
addal,[si]
adcah,0
incsi
looplp
movsum,ax
movbx,ax
movah,4ch
int21h
codeends
endstart
4。
比较数的最大最小
datasegment
da1db23h,98h,0d2h,00h,95h,7fh,0a6h,49h
db09h,0eeh,00h,45h,98h,80h,35h,0dah
maxdb?
mindb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,offsetda1
movax,0
movcx,8
lp:
addal,[si]
adcah,0
incsi
looplp
movsum,ax
movbx,ax
movah,4ch
int21h
codeends
endstart
5,无符号的数最大最小
datasegment
da1db23h,98h,0d2h,00h,95h,7fh,0a6h,49h
db09h,0eeh,00h,45h,98h,80h,35h,0dah
maxdb?
mindb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,offsetda1
moval,[si]
movbl,al
incsi
movcx,15
lp:
cmpal,[si]
jaenextl
moval,[si]
jmpnext
nextl:
cmpbl,[si]
jbenext
movbl,[si]
next:
incsi
looplp
movdh,al
movdl,bl
movmax,al
movmin,bl
movah,4ch
int21h
codeends
endstart
6。
带符号的数比较大小
datasegment
da1db23h,98h,0d2h,00h,95h,7fh,0a6h,49h
db09h,0eeh,00h,45h,98h,80h,35h,0dah
maxdb?
mindb?
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movsi,offsetda1
moval,[si]
movbl,al
incsi
movcx,15
lp:
cmpal,[si]
jgenextl
moval,[si]
jmpnext
nextl:
cmpbl,[si]
jlenext
movbl,[si]
next:
incsi
looplp
movdh,al
movdl,bl
movmax,al
movmin,bl
movah,4ch
int21h
codeends
endstart
7。
数中大于0,等于0,小于0的数的个数
start:
movax,data
movds,ax
movsi,offsetda1
movdl,0
movbl,0
movbh,0
movcx,16
lp:
moval,[si]
cmpal,0
jlenextl
incdl
jmpnext
nextl:
cmpal,0
jnenext2
incbl
jmpnext
next2:
incbh
next:
incsi
looplp
movm1,ah
movm0,bl
movmf,bh
movah,4ch
int21h
codeends
endstart
8。
ASIIA十进制数转化PUBLICSADD
SSTACKSEGMENTSTACK
DW64DUP(?
)
SSTACKENDS
DATASEGMENT
SADDDB30H,30H,32H,35H,36H;十进制数:
00256
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,OFFSETSADD
MOVSI,AX
MOVBX,000AH
MOVCX,0004H
MOVAH,00H
MOVAL,[SI]
SUBAL,30H
A1:
IMULBX
MOVDX,[SI+01]
ANDDX,00FFH
ADCAX,DX
SBBAX,30H
INCSI
LOOPA1
A2:
JMPA2
CODEENDS
ENDSTART
10。
两位十进制转换为ASCII码在屏幕上显示出来
DATASEGMENT
daldb9ch
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
moval,dal
movcl,4
shral,cl
cmpal,0ah
jaenext1
addal,30h
jmpnext
next1:
addal,37h
next:
movah,02h
movdl,al
int21h
moval,dal
andal,0fh
cmpal,0ah
jaenext2
addal,30h
jmpnext0
next2:
addal,37h
next0:
movah,02h
movdl,al
int21h
movah,4ch
int21h
codeends
endstart
12.用查表来转换完成
DATASEGMENT
tabdb30h,31h,32h,33h,34h,35h,36h,37h
db38h,39h,41h,42h,43h,44h,45h,46h
daldb5fh
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
leabx,tab
moval,dal
movcl,4
shral,cl
xlat
next:
movah,02h
movdl,al
int21h
moval,dal
andal,0fh
cmpal,0ah
xlat
next0:
movah,02h
movdl,al
int21h
movah,4ch
int21h
codeends
endstart
12.数据排序
DATASEGMENT
ARRAYDB43,90,12,120,88,76
flagdb-1
DATAENDS
STACKSEGMENTPARASTACK'STACK'
DB1024DUP(?
)
STACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
stack,DS:
DATA
SORT:
MOVAX,DATA
MOVDS,AX
MOVBX,6
LP1:
CMPFLAG,0
JEEXIT
decbx
MOVCX,BX
MOVSI,0
MOVFLAG,0
LP2:
MOVAL,ArrAY[SI]
CMPAL,ARRAY[Si+1]
JLENEXT
XCHGAL,ARRAY[SI+1]
MOVARRAY[SI],AL
MOVFLAG,-1
next:
addsi,1
looplp2
jmplp1
exit:
movah,4ch
int21h
codeends
endsort
后四个
8254定时/计数器应用实验
实验原理:
8254是Intel公司生产的可编程间隔定时器。
是8253的改进型,
比8253具有更优良的性能。
8254具有以下基本功能:
(1)有3个独立的16位计数器;
(2)每个计数器可按二进制或十进制(BCD)计数;
(3)每个计数器可编程工作于6种不同工作方式;
(4)8254每个计数器允许的最高计数频率为10MHz(8253为2MHz);
(5)8254有读回命令(8253没有),除了可以读出当前
计数单元的内容外,还可以读出状态寄存器的内容;
(6)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值公式为:
其中,
是输入时钟脉冲的频率,
是输出波形的频率。
1实验步骤:
(1)实验接线如图2所示;
(2)编写实验程序,经编译、链接无误后装入系统;
(3)运行程序,按动KK1+产生单次脉冲,观察实验现象;
(4)改变计数值,验证8254的计数功能。
===========================
;文件名:
A82541.ASM
;功能描述:
通过对计数器0进行计数,计数初值为4,
;当计数满后,产生正跳变触发中断,中断
;程序显示M(每按5次输出一个M)
;==================================
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
PUSHDS
MOVAX,0000H
MOVDS,AX
MOVAX,OFFSETIRQ7;取中断入口地址
MOVSI,003CH;中断矢量地址
MOV[SI],AX;填IRQ7的偏移矢量
MOVAX,CS;段地址
MOVSI,003EH
MOV[SI],AX;填IRQ7的段地址矢量
CLI
POPDS
;初始化主片8259
MOVAL,11H
OUT20H,AL;ICW1
MOVAL,08H
OUT21H,AL;ICW2
MOVAL,04H
OUT21H,AL;ICW3
MOVAL,01H
OUT21H,AL;ICW4
MOVAL,6FH;OCW1
OUT21H,AL
;8254
MOVDX,CON8254
MOVAL,10H;计数器0,方式0
OUTDX,AL
MOVDX,A8254
MOVAL,04H
OUTDX,AL
STI
AA1:
NOP
JMPAA1
IRQ7:
MOVDX,A8254
MOVAL,04H
OUTDX,AL
MOVAX,014DH(如果是F则为0146)实验室
INT10H;显示字符M
MOVAX,0120H
INT10H
MOVAL,20H
OUT20H,AL;中断结束命令
IRET
CODEENDS
ENDSTART
实验3
文件名:
A82542.ASM
;功能描述:
产生1ms方波,输入时钟为1MHz,使用计数器0
;计数初值为03E8H
;============================
A8254EQU06C0H
B8254EQU06C2H
C8254EQU06C4H
CON8254EQU06C6H
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
MOVDX,CON8254;8254
MOVAL,36H;计数器0,方式3
OUTDX,AL
MOVDX,A8254
MOVAL,0E8H
OUTDX,AL
MOVAL,03H
OUTDX,AL
AA1:
NOP
JMPAA1
CODEENDS
ENDSTART
实验4
8255并行接口实验
实验原理:
并行接口是以数据的字节为单位与I/O设备或被控制对象
之间传递信息。
CPU和接口之间的数据传送总是并行的,即
可以同时传递8位、16位或32位等。
8255可编程外围接口
芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B
、C三个并行接口,用+5V单电源供电,能在以下三种方式下
工作:
方式0--基本输入/输出方式、方式1--选通输入/输出方式、方
式2--双向选通工作方式。
8255的内部结构及引脚如图1所示,825
5工作方式控制字和C口按位置位/复位控制字格式如图2所示。
1.基本输入输出实验
本实验使8255端口A工作在方式0并作为输入口,端口B工作在
方式0并作为输出口。
用一组开关信号接入端口A,端口B输出线
接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。
实验步骤:
(1)实验接线图如图3所示,按图连接实验线路图;
(2)编写实验程序,经编译、连接无误后装入系统;
(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。
实验4程序
;======================================
;文件名:
A82551.ASM
;功能描述:
A口为输入,B口为输出,将读入的数据输出显示
;IOY1
;=======================================
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE,SS:
SSTACK
START:
MOVDX,0646H
MOVAL,90H
OUTDX,AL
AA1:
MOVDX,0640H
INAL,DX
CALLDELAY
MOVDX,0642H
OUTDX,AL
JMPAA1
DELAY:
PUSHCX
MOVCX,0F00H
AA2:
PUSHAX
POPAX
LOOPAA2
POPCX
RET
CODEENDS
ENDSTART
实验5
2.流水灯显示实验
使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮一个灯,
循环显示,D15~D8与D7~D0正相反,由右向左,
每次仅点亮一个灯,循环显示。
实验接线图如图4所示。
实验步骤:
(1)按图4连接实验线路图;
(2)编写实验程序,经编译、链接无误后装入系统;
(3)运行程序,观察LED灯的显示,验证程序功能;
(4)自己改变流水灯的方式,编写程序。
;===================================
;文件名:
A82552.ASM
;功能描述:
A口为输出,B口为输出,流水灯显示
;=======================================
SSTACKSEGMENTSTACK
DW32DUP(?
)
SSTACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,0646H
MOVAL,80H
OUTDX,AL
MOVBX,8001H(0180反方向)实验6
AA1:
MOVDX,0640H
MOVAL,BH
OUTDX,AL
RORBH,1(ROL右改左)实验7
MOVDX,0642H
MOVAL,BL
OUTDX,AL
ROLBL,1(ROR右改左)实验7
CALLDELAY
CALLDELAY
JMPAA1
DELAY:
PUSHCX
MOVCX,0F000H
AA2:
PUSHAX
POPAX
LOOPAA2
POPCX
RET
CODEENDS
ENDSTART
空了几个没写
键盘扫描及显示设计实验
实验内容:
将8255单元与键盘及数码管显示
单元连接,编写实验程序,
扫描键盘输入,并将扫描结果送数码管显示。
键盘采用4×4键盘,每个数码管
显示值可为0~F共16个数。
实验具体内容如下:
将键盘进行编
号,记作0~F,当按下其中一个按键时,
将该按键对应的编号在一个数码
管上显示出来,当再按下一个按键时,
便将这个按键的编号在下一个数码
管上显示出来,数码管上可以显示
最近4次按下的按键编号。
8255键盘及
显示实验参考接线图如图1所示。
参考程序:
请参照随机软件中的Sample\ASM86\KEYLED.ASM或Sample\C86\CKEYLED.C文件。
实验步骤:
1.按图1连接线路图;
2.编写实验程序,检查无误后编译、连接并装入系统;
3.运行程序,按下按键,观察数码管的显示,验证程序功能。
程序
;=======================================================
;文件名:
KeyLed.asm
;功能描述:
键盘及数码管显示实验,通过8255控制。
;8255的B口控制数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 接口 技术 实验