东华大学信息学院微机课程设计硬件Word文档下载推荐.docx
《东华大学信息学院微机课程设计硬件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《东华大学信息学院微机课程设计硬件Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。
1.单步执行到“intram”标号的语句时,ds寄存器的数据是什么?
采用断点方式运行时执行到第一个断点处,2000H~202FH内存单元的数据是什么?
执行到第二个断点处,2000H~200FH内存单元的数据是什么?
并根据观察结果和对源程序的判读简述源程序的运行效果。
如图,单步执行到“intram”标号的语句时ds寄存器的数据为0100
采用断点方式运行时执行到第一个断点处,2000H~202FH内存单元的数据如图所示。
由源程序可知2000H~202FH内存单元中的内容全为0
执行到第二个断点处,2000H~200FH内存单元的数据如图所示。
由源程序可知程序的运行结果为向02000~020FFH单元的偶地址送入AAH,奇地址送入55H。
2.修改程序,实现从2010H到201FH内存单元依次赋值00H~0FH,从2020H到202FH内存单元依次赋值0FH~00H的功能。
程序流程图:
程序代码:
codesegment
assumecs:
code
org0100h;
在代码段0100h偏移地址处开始存放代码
start:
movax,0100h
movds,ax;
数据段地址
moves,ax
movsi,1000h;
偏移地址
movcx,0100h;
循环次数
moval,0;
使al中置0
intram:
mov[si],al;
将al中的值赋给[si]
incsi;
使地址指针si加1
loopintram;
使0100:
1000开始处的256个单元中的数据清0
movsi,1010h;
设置断点处
movcx,0010h;
预置循环次数16次
moval,00h;
al的初值为00h
fil:
mov[si],al;
RAM区循环置数
incsi;
地址指针si加1
incal;
使al中的值每执行一次循环加1,初始值为0,加到0F
loopfil;
使02010H到0201F的数据区中依次存放00H-0FH
moval,0fh;
al的初值为0fh
movcx,0010h;
fil1:
incsi;
decal;
使al中的值每执行一次循环减1,初始值为0FH,减到00h
loopfil1;
使02020H到0202F的数据区中依次存放0FH-00H
nop;
jmpstart
codeends
endstart
七、实验中的问题及其解决方法
问题:
(1)在范例程序中按题目要求设置两个断点时,全速运行时只能运行第一个断点处的程序,而不知道怎么运行下一个断点处的程序。
(2)在做思考题程序时,运行所写程序时发现内存空间中上一个题目的运行结果还在里面,没有将其置为0。
解决方法:
(1)针对问题
(1),当执行完第一个断点执行完毕应该取消该断点,这样在全速运行时可以运行到下一个断点,可以观察程序运行结果。
(2)针对问题
(2),发现在初始化程序时,自己把所有的循环初值都设成了0010H,导致程序初始化时只初始化16个内存单元,而后面的内存单元没有初始化,保留了上次运行的程序运行结果,所以将初始化的循环初值设成0100H,这样就可以初始化256个内存单元了,把上次的结果初始化为0。
实验2简单I/O口扩展实验
1、熟悉74LS273,74LS244的应用接口方法。
2、掌握用锁存器、三态门扩展简单并行输入、输出口的方法。
微机实验箱、8086CPU模块。
逻辑电平开关的状态输入74LS244,然后通过74LS273锁存输出,利用LED显示电路作为输出的状态显示。
本实验用到两部分电路:
开关量输入输出电路,简单I/O口扩展电路。
五、实验步骤
1、实验接线:
(表示相互连接)
CS0CS244;
CS1CS273;
平推开关的输出K1~K8IN0~IN7(对应连接);
O0~O7LED1~LED8。
2、编辑程序,单步运行,调试程序
3、调试通过后,全速运行程序,观看实验结果。
4、编写实验报告。
六、实验结果
程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。
例如:
K2置于L位置,则对应的LED2应该点亮。
图1外围接线原理图
七、思考题:
修改连线:
74LS244的片选信号CS244改接CS2,将74LS273的片选信号CS273改接CS3,开关K1,k2接74LS244的IN0、IN1,74LS273的O0~O7接发光二极管L1~L8。
编写程序实现以下功能:
K1~K2置于L(上)位置时,L1~L8全灭;
K1开关置于H(下)位置时,L1~L4亮,L5~L8灭;
K2开关置于H(下)位置时,L1~L4灭,L5~L8亮;
K1~K2均置于H(下)位置时,L1~L8全亮。
assumecs:
codesegmentpublic
org100h;
在代码段0100h偏移地址处开始存放代码
movdx,04c0h;
74LS244地址
inal,dx;
读入开关量
andal,03h;
取后开关量后两位,即K2,K1的值
testal,02h;
检测开关量K2位是否为’1’
jzlp1;
若K2不为1,则跳转
andal,0fh;
L5-L8清0
jmplp2
lp1:
oral,f0h;
L5-L8置1
lp2:
testal,01h;
检测K1位是否为‘1’
jzlp3;
若K1不为1,跳转
andal,f0h;
L1-L4清0
jmpdispaly
lp3:
oral,0fh;
L1-L4置1
display:
movdx,04d0h;
74LS273地址
outdx,al;
输出至LED
jmpstart;
循环运行
codeends
endstart
九、实验中的问题及其解决方法
(1)在编好程序时,运行调试中发现所得的结果全部与预期的相反,即K1~K2置于L(上)位置时,L1~L8全亮;
K1开关置于H(下)位置时,L1~L4灭,L5~L8亮;
K2开关置于H(下)位置时,L1~L4亮,L5~L8灭;
K1~K2均置于H(下)位置时,L1~L8全灭。
(2)在问题
(1)的解决过程中发现开关的逻辑也发生错误。
(3)将程序编写完毕,编译链接,没有得到预期结果,然而把74LS244的片选信号CS244改接CS0,将74LS273的片选信号CS273改接CS1,结果出现。
(1)针对问题
(1),通过观察外围接线原理图发现,LED为共阳极,只有当信号为“0”时才导通,信号为“1”时不导通,正好与自己程序中的逻辑关系相反。
所以将程序中“1”改为“0”即可实现预期结果。
(2)一般来说,开关向上拨时,为“1”,处于高电平,而此实验箱开关在下面时候为“1”,而开关向上拨时为“0”,逻辑与平时的习惯相反,所以将开关的逻辑关系全变成它的相反就能达到预期结果。
(3)针对问题(3)说明前一次的程序还保存在实验箱中,每进行一次编译和链接都需要将实验箱复位,复位完成,结果能得到。
实验38255并行口实验
掌握8255A的编程原理。
8255A的A口作为输入口,与逻辑电平开关相连。
8255A的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
开关量输入输出电路和8255可编程并口电路。
1、实验接线
CS0CS8255;
PA0~PA3平推开关的输出K1~K4;
PB0~PB3发光二极管的输入L1~L4。
2、编程并全速或单步运行。
3、全速运行时拨动开关,观察发光二极管的变化。
当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。
六、实验提示
8255A是比较常用的一种并行接口芯片,其特点在许多教科书中均有介绍。
8255A有三个8位的输入输出端口,通常将A端口作为输入用,B端口作为输出用,C端口作为辅助控制用,本实验也是如此。
实验中,8255A工作于基本输入输出方式(方式0)。
七、实验结果
八、思考题:
1、修改接线CS2CS8255,PA0~PA3平推开关的输出L1~L4;
PB0~PB3发光二极管的输入K1~K4。
修改程序达到以下要求:
开关K1置“H”(下)位置时L1~L4全亮;
K2置“H”(下)位置时L1、L3亮;
K3置“H”(下)位置时L2、L4亮;
K4置“H”(下)位置时L1和L4轮流闪烁,修改程序实现相应功能
codesegmentpublic
org100h;
movdx,04c6h;
控制寄存器地址
movax,90h;
设置为A口输入,B口输出
outdx,ax;
将控制字写入控制寄存器地址
movcx,0001h;
初始化cx
start1:
movbx,0;
初始化bx
movdx,04c0h;
A口地址
inax,dx;
输入
f1:
testax,0001h;
判断开关K1是否值H
jzf2;
不是则跳转
orbx,000fh;
当开关K1为H时,使BX后四位为“1”
f2:
testax,0002h;
判断开关K2是否值H
jzf3;
orbx,0005h;
当开关K2为H时,使BX后四位为0101
f3:
testax,0004h;
判断开关K3是否值H
jzf4;
不是则跳转
orbx,000ah;
当开关K3为H时,使BX后四位为1010
f4:
testax,0008h;
判断开关K4是否值H
jzdisplay;
不是则跳转,显示
cal