微机实验指导书08091.docx
《微机实验指导书08091.docx》由会员分享,可在线阅读,更多相关《微机实验指导书08091.docx(114页珍藏版)》请在冰豆网上搜索。
![微机实验指导书08091.docx](https://file1.bdocx.com/fileroot1/2023-6/9/54f94aed-bd58-4842-bf35-7e6833c1c9f2/54f94aed-bd58-4842-bf35-7e6833c1c9f21.gif)
微机实验指导书08091
微机原理与接口
实验指导书
广州大学
实验中心
物理与电子工程学院
目录
一.伟福实验系统组成和结构
1.1实验系统主机的硬件组成
1.2实验系统的EX88B仿真板简介
1.3实验系统的使用方法
二.8088/86CPU系列实验说明
2.1系统的启动
2.28088/8086CPU系列实验软件设置
三.实验项目
实验一熟悉Lab6000实验系统,初级程序的编写与调试
实验二简单程序的编写与调试
实验三分支程序设计
实验四循环程序设计
实验五子程序设计
实验六8255输入、输出实验
实验七8251A串行通讯实验
实验八8253计数器实验
实验九8259外部中断实验
实验十8237DMA实验
实验十一D/A转换与A/D转换实验
实验十二多功能I/O接口扩充设计
实验十三电子时钟设计
实验十四数据采集系统设计
四.附录
4.1八段数码管显示
4.2键盘扫描显示实验
4.3DMA控制器Intel8237
一.伟福实验系统组成和结构
Lab6000实验系统可根据教学实践的需要实现MCS51/MCS196单片机原理与接口、8088/8086微机原理与接口的一系列实验,并在硬件上预留了自主开发实验的空间。
对基本实验仅需连少量连接线就可完成,减轻学生工作量。
同时也提供了需较多连线的扩展性实验,以进一步锻炼学生的实践开发能力。
此外,系统还为学生提供了强大的软、硬件调试手段。
1.1实验系统主机的硬件组成
本实验系统主机上有丰富的实验电路模块和灵活的组成方法,既可以和MCS51、MCS96CPU也可以和8088/8086CPU组合完成各种实验。
本实验箱拥有高档通用仿真器所具有的逻辑分析仪、波形发生器和程序跟踪器等强大的分析功能,让学生在做实验时不仅能了解程序的执行过程,更能直观地看到程序运行时的时序或者电路上的信号。
1、逻辑电平开关电路
图1:
逻辑电平开关电路
实验箱上有8只开关K0―K7,并有与之相对应的K0―K7引线孔为逻辑电平输出端。
开关向上拨相应插孔输出高电平“1”,向下拨相应插孔输出低电平“0”。
2、LED电平显示电路
图2:
LED电平显示电路
实验箱上装有8只发光二极管及相应驱动电路。
见图2,L0-L7为相应发光二极管驱动信号输入端,该输入端为高电压电平“1”时发光二极管点亮。
我们可以通过P1口对其直接进行控制,点亮或者熄灭发光二极管。
3、单脉冲电路
单脉冲电路由按键(PULSE)和去抖动电路组成,每按一次(PULSE)键产生一个单脉冲。
板上有单脉冲的输出信号插孔,图为“”和“”,分别为正脉冲和负脉冲。
图3:
单脉冲发生电路
4、逻辑门电路
或门与门非门
图4:
逻辑门电路
本实验箱提供系列门电路:
非门,或门,与门,D触发器。
逻辑门电路由7400和7404组合实现。
5、逻辑测量(逻辑笔)电路
本实验箱上有逻辑测量电路,如图5。
可用于测量各种电平,其中红灯亮表示高电平,绿灯亮表示低电平。
如果两灯同时闪动,表示有脉冲信号;两灯都不亮时,表示浮空(高阻态)。
图5:
逻辑笔电路
6、4 MHz脉冲信号源和多级分频电路
下图是4MHz脉冲信号输出电路。
可将4MHz脉冲信号接到分频电路上,经过分频后,能得到2M、1M、500K、250K、125K、62.5KHz多种频率的脉冲信号。
图6-1:
4 MHz脉冲产生电路
7、可调模拟量输入电路
图7:
电位器
电位器电路用于产生可变的模拟量(0-5V)。
8、串口通信程序实验插孔
做串行通信实验时,如果不需要将TTL电平转到RS232电平,可直接将POD51/96仿真板或POD8086仿真板上的TXD、RXD与通信对方交叉对接,并且共地即可。
单片机与标准的串行设备通信,需要将TTL电平转到RS232电平或将RS232电平转成TTL电平。
本实验箱提供用户串行通信接口,可以用这两个插孔进行RS232通信程序实验,经电平转换后,再通过实验箱的“用户串口”接到PC机或其它RS232设备,实现数据互传。
9、六位LED数码显示器和4×6键盘电路
本实验箱的LED显示电路和键盘电路如图8。
显示控制的位码由74HC374输出,经ULN2003反向驱动后,做LED的位选通信号。
位选通信号也可做为键盘列扫描码,键盘扫描的行数据从74HC245读回,374输出的列扫描码经245读入后,用来判断是否有键被按
下,以及按下的是什么键。
如果没有键按下,由于上拉电阻的作用,经245读回的值为高,如果有键按下,374输出的低电平经过按键被接到245的端口上,这样从245读回的数据就会有低位,根据374输出的列信号和245读回的行信号,就可以判断哪个键被按下。
LED显示的段码由另一个74HC374输出。
键盘和LED显示电路的地址译码见图8,做键盘和LED实验时,需将KEY/LEDCS接到相应的地址译码上。
位码输出地址为0X002H,段码输出地址为0X004H,键盘行码读回地址为0X001H,此处X是由KEY/LEDCS决定。
例如将KEY/LEDCS接到地址译码的CS0上,那么位码输出地址就为08002H,段码输出地址就是08004H,键盘行码读回地址为08001H。
图8:
键盘及LED显示电路
10、存储器电路
本实验箱上有一片32K存储器61256。
提供给学生做存储器实验,由于地址译码为4K一段,所以只能提供4K容量使用,地址从0000H~0FFFH。
用RAMCS来选择不同的地址段,以适应不同的应用电路。
图9:
8255端口扩展电路
11、8255端口扩展电路
12、A/D转换电路
实验箱上有一个0~5V的可调电位器,将可变电压输出端接入A/D转换电路的输入端,通过CPU软件处理,读进A/D转换值,再将转换值送数码管显示。
我们可以调节电位器,使之输出不同电压值,通过数码管的显示,检验A/D转换正确与否。
图10:
A/D转换电路
13、D/A转换电路
图11:
D/A转换电路
我们可以通过软件编程控制D/A转换芯片DAC0832,输出相应电流值,经过采样电路取出模拟量电压值,用电压表测量电压输出端子,读出电压值。
14、16×16LED点阵电路
15、8251A串行口扩展电路
16、8253定时器/计数器扩展电路
17、8259中断扩展电路
18、8237DMA扩展电路
19、4-16译码器
20、实验电路插座
本实验箱具有1个40芯通用电路插座,每个插座的全部引脚都被引出到相应的插孔,40芯通用插座可兼容28芯、24芯、16芯和14芯插座。
利用这个插座,可对双列直插式的各种微机芯片进行实验。
21、总线插孔
本实验箱上有三排总线插座,用于引出各种总线信号,其中AD0~AD7为8根数据总线,A0~A15为16根地址总线。
另外ALE,RD,WR为控制总线。
与CPU相关的一些控制信号和I/O信号例如P1口、RXD、TXD等信号在相应的仿真板上。
22、地址译码插孔
片选号
地址范围
CS0
08000H~08FFFH
CS1
09000H~09FFFH
CS2
0A000H~0AFFFH
CS3
0B000H~0BFFFH
CS4
0C000H~0CFFFH
CS5
0D000H~0DFFFH
CS6
0E000H~0EFFFH
CS7
0F000H~0FFFFH
1.2实验系统的EX88B仿真板简介
进行8088/86的实验时,需将EX88B仿真板插在实验箱上,EX88B仿真板如图:
IO/M:
用于选择访问外设还是存储器
1.3实验系统的使用方法
本实验系统具有三种使用方法:
1、无系统机,仅用实验箱的板上仿真器进行仿真和实验。
2、有系统机,用系统机上的集成调试软件驱动板上仿真器进行仿真和实验。
3、无实验箱、无仿真器,仅在系统机上采用软件模拟方式进行仿真。
二.8088/86CPU系列实验说明
2.1系统的启动
进行8088/86CPU实验时,并插上EX88B仿真板。
将配套的串行通讯电缆的一端与实验台的RS2329芯D形插座相连,另一端与PC相的串行口相连。
将实验台的电源线与220V电源相连。
(实验结束后应拔下)
打开实验台电源开关,红色电源指示灯亮。
仿真开发器初始化成功后,会在LED上显示‘8088’。
打开计算机电源,执行WAVE集成调试软件。
注意:
无论是集成电路的插拔、通讯电缆的连接、跳线器的设置还是实验线路的连接,都应确保在断电情况下进行,否则可能造成对设备的损坏。
实验线路连接完成后,应仔细检查无误后再接通电源。
2.28088/8086CPU系列实验软件设置
WAVE集成调试环境应设置如下:
仿真器型号:
伟福Lab6000实验箱
仿真头型号:
8088/86实验(8088/86)
语言设置对话框各命令行应设置如下:
编译器路径:
一般情况下为C:
\COMP86,也可设为你自己的安装路径。
ASM命令行:
‘/zi/l’
C命令行:
‘-mt-v-y-c’
LINK命令行:
‘/m/l/v’
三.实验项目
实验一熟悉Lab6000实验系统,初级程序的编写与调试
一、 实验目的
1.掌握Lab6000实验系统的使用。
2.练习初级程序的编写与调试。
二、实验内容:
指定存储器中某块的起始地址和长度,要求能将其内容清零。
三、实验说明
通过本实验,学生可以了解单片机读写存储器的读写方法,同时也可以了解单片机编程,调试方法。
如何将存储器块的内容置成某固定值(例全填充为0FFH)?
请学生修改程序,完成此操作。
四、参考程序
S1.asm
否
datasegment
Blockdb256dup(55h)
dataends
codesegment
assumecs:
code,ds:
data
startprocnear
movax,data
movds,ax
movbx,offsetBlock;起始地址
movcx,256;清256字节
Again:
mov[bx],byteptr0
incbx;地址+1
LoopAgain;记数减一
jmp$;死循环
codeends
endstart
五、实验步骤
(1)进入Wave6000,输入程序并检查,保存程序。
(2)“编译”程序。
(3)“全速执行”程序。
(4)“暂停”程序运行,在“数据窗口(MEMOREY)”查看0400H起始的单元内容,并记录。
(5)在指令“jmp$”处设断点。
“全速执行”程序。
(6)在“数据窗口(MEMOREY)”查看0400H起始的单元内容,记录并分析实验结果。
实验二简单程序的编写与调试
一、实验目的
1.掌握存储器读写方法
2.了解存储器的块操作方法
3.了解内存的移动方法。
二.实验内容:
1.将指定源地址和长度的存储块移到指定目标位置
2.将给定的一个二进制数转换成二十进制(BCD)码。
否
三、参考程序S2a.asm
datasegment
Sourcedb256dup(055h)
Targetdb256dup(0aah)
dataends
codesegment
assumecs:
code,ds:
data,es:
data
startprocnear
movax,data
movds,ax
moves,ax
movsi,offsetSource
movdi,offsetTarget
movcx,256
repmovsb
jmp$
codeends
endstart
S2b.asm
;将AX拆为三个BCD码,并存入Result开始的三个单元。
datasegment
Resultdb3dup(?
)
dataends
codesegment
assumecs:
code,ds:
data
startprocnear
movax,data
movds,ax
movax,123
movcl,100
divcl
movResult,al;ax除以100,得百位置Result
moval,ah;余数ah除以10,得十位置Result+1l
movah,0
movcl,10
divcl;余数ah为个位置Result+2
movResult+1,al
movResult+2,ah
结束
jmp$
codeends
endstart
四、实验步骤
1.进入Wave6000,输入程序,并检查,保存程序。
2.“编译”程序。
3.在指令“jmp$”处设断点。
4.“全速执行”程序。
5.在“数据窗口(MEMOREY)”查看:
a)0400H、0401H、0402H三个单元的内容,记录并分析实验结果。
b)分别查看0400H、0500H开始256个单元的内容,记录并分析实验结果。
实验三分支程序设计
一、实验目的
1.熟悉条件转移指令的功能。
2.了解条件转移指令的使用方法。
二、实验预习要求
1.复习8086指令系统中的条件转移类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验内容
编制程序:
在三个连续的字单元中存放着彼此相等的代码,现知道其中一个字中的内容发生了变化,找出变化了的代码及其地址,并要求将此代码送入字变量A中,其地址送入字变量B中。
四、参考程序:
假定三个连续的字单元的首地址为BUF,先将BUF中的内容依此与BUF+2,BUF+4两个字单元中的内容进行比较,若均不相等,表明BUF中的代码发生了变化;若与其中的一个字单元中的内容相等,表明另一个字中的代码发生了变化。
S3.ASM
STACKSEGMENTSTACK
DB64DUP(0)
STACKENDS
DATASEGMENT
BUFDW550H,0AAAH,550H;三个被测代码
ADW0
BDW0
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,BUF
CMPAX,BUF+2;第一、二字单元内容相比
JNEL1
MOVAX,BUF+4;第一、二字单元内容相等时,第三字变化,送A
MOVA,AX
MOVB,OFFSETBUF+4;其地址送B后结束
JMPEXIT
L1:
CMPAX,BUF+4;第一、三字单元内容相比
JNEL2
MOVAX,BUF+2;第一、三字单元内容相等,第二字变化,送A
MOVA,AX
MOVBX,OFFSETBUF+2;其地址送B后结束
MOVB,BX
JMPEXIT
L2:
MOVA,AX;第一与二、三字单元内容不等,第一字变化,送A
MOVBX,OFFSETBUF
MOVB,BX;其地址送B后结束
EXIT:
MOVAH,4CH;返回操作系统
INT21H
CODEENDS
ENDBEGIN
五、实验步骤:
1.进入Wave6000,输入程序并检查,保存程序。
2.“编译”程序。
4.“全速执行”程序。
5.查看结果存储单元A、B的内容。
(窗口\CPU窗口\SFR窗口:
观察当前各寄存器的内容,确定A,B所在的段址,计算A,B的偏移量)
6.改变不同地址字单元的内容,分别执行,查看结果存储单元A、B的内容。
六、 实验报告要求
1.整理实验程序段和运行结果,对结果进行分析。
画出程序的流程图。
2.总结条件转移类指令的用途及使用方法。
实验四循环程序设计
一、 实验目的
1.熟悉循环控制指令的功能。
2.了解循环控制指令的使用方法。
二、 实验预习要求
1.复习8086指令系统中的循环控制类指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验内容
编制程序:
1.设有n个数,连续存放在以BUF为首的字存储区中。
现需要统计其中最高6位为全1的数的个数,并将统计结果送入A。
用循环程序实现。
2.已知n个字符连续存放在以BUF为首址的字节区中,现需要在第P(1≤P≤n)个字符后插入10个空,并分别显示插入前后的字符串。
用循环程序实现。
实验步骤
(1)输入程序1并检查无误,经汇编、连接后装入系统;命令运行程序1;查看结果存储单元A的内容;改变BUF为首的字存储区中不同单元的内容,分别执行,每次执行后,查看结果存储单元A的内容。
(2)输入程序2并检查无误,经汇编、连接后装入系统;运行程序2;查看BUF为首址的字节区的内容;改变P取值,重新汇编、连接后装入系统,运行并查看结果。
四、 实验报告要求
1.整理实验程序段和运行结果,对结果进行分析。
画出上述程序的流程图。
2.总结循环控制类指令的用途及使用方法。
五、参考程序:
1.设有n个数,连续存放在以BUF为首的字存储区中。
现需要统计其中最高6位为全1的数的个数,并将统计结果送入A。
用循环程序实现。
寄存器分配如下:
SI:
取数指针,初值指向BUF,每循环一次之后增2。
CX:
循环记数器,初值为n,每循环一次之后减1。
AX:
存放统计结果。
初值为0。
BX:
暂存当前处理结果。
S4a.ASM
STACKSEGMENTSTACK
DB64DUP(0)
STACKENDS
DATASEGMENT
BUFDW0FC13H,0FD15H,6897H,0FAFFH,0FB11H,0FF00H,0FE22H,0FFH
N=($-BUF)/2;待统计数个数
ADW0;存放统计结果
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEASI,BUF
MOVCX,N
MOVAX,0
LOOPA:
MOVBX,[SI]
ANDBX,0FC00H;BX最高六位不变,其余清零
CMPBX,0FC00H;BX最高六位不全为1时转
JNENEXT
INCAX;BX最高六位全为1时AX+1
NEXT:
ADDSI,2
LOOPLOOPA
MOVA,AX
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
2.已知n个字符连续存放在以BUF为首址的字节区中,现需要在第P个字
符后插入10个空格,并分别显示插入前后的字符串。
(1≤P≤n)
寄存器分配:
CX:
循环计数
SI:
取字符指针
DI:
送字符指针
AL:
存放当前要传送的字符
S4b.ASM
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS
DATASEGMENT
BUFDB'ABCDEFGHIJKLMNOPQRSTUVWXYZ$'
N=$-BUF;插入前字符个数
DB10DUP(0)
P=20;令P=20
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK
BEGIN:
MOVAX,DATA
MOVDS,AX
MOVAX,STACK
MOVSS,AX
LEADX,BUF;显示插入前字符串
MOVAH,9
INT21H
MOVSI,OFFSET[BUF+N-1]
MOVDI,SI
ADDDI,10
MOVCX,N-P;CX为需后移的字符个数
LOPA:
MOVAL,[SI];将CX个字符后移10
MOV[DI],AL
DECSI
DECDI
LOOPLOPA
MOVDI,OFFSETBUF+P;
MOVCX,10
MOVAL,''
LOPB:
MOV[DI],AL;插入10空格
INCDI
LOOPLOPB
MOVAH,2;显示回车
MOVDL,0DH
INT21H
MOVDL,0AH;显示换行
INT21H
LEADX,BUF;显示插入后字符串
MOVAH,9
INT21H
MOVAH,4CH
INT21H
CODEENDS
ENDBEGIN
实验五子程序设计
一、实验目的
熟悉掌握子程序的设计方法与调试方式,并能正确书写子程序说明。
要求在子程序设计中正确使用堆栈保护现场或保存中间结果。
准确确定主、子程序的参数并选择合适的传递方式,正确地完成子程序的调用。
二、 实验预习要求
1.复习8086指令系统中的子程序的调用与返回指令。
2.按照题目要求在实验前编写好实验中的程序段。
三、实验内容
编制程序:
编制子程序NF10T16,要求从键盘接受一个无符号十进制数(不大于65535),在显示器上以十六进制形式显示其值。
主程序反复调用子程序NF10T16,直到按ctrl+c结束。
四、实验步骤
(1)输入程序并检查无误,经汇编、连接后装入系统;
(2)运行程序;
(3)在DOS环境运行可执行文件。
五、实验报告要求
1.整理出完整的实验程序段和运行结果,对结果进行分析。
画出程序的流程图。
2.总结子程序的调用与返回指令的用途及使用方法。
六、参考程序
功能:
从键盘接受一个不大于65535的无符号十进制数,以十六进制形式显示其值。
入口参数:
无
出口参数:
无
寄存器:
SI待转换十进制数存储区指针
CL待转换十进制数位数
DL十六进制位数
DI输出缓冲区指针
S5.ASM
STACKSEGMENTSTACK
DB64DUP(0)
STACKENDS
DATASEGMENT
INPUTDB0DH,0AH,'PLEASEINPUTDATA:
$'
BUFINDB6;10号功能调用所需输入缓冲区(长度6)
DB?
;实际键入数字位数
DB6DUP(?
);键入数字的ASCII
DATDW10
BUFERDB0DH