微机硬件报告Word文档下载推荐.docx
《微机硬件报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微机硬件报告Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
moves,ax
movsi,1000h;
偏移地址
movcx,0100h;
循环次数
moval,0
intram:
mov[si],al
incsi
loopintram
设置断点处
movcx,10h;
循环16次
movax,0h
fil:
mov[si],al;
RAM区循环置数
incal;
al加一
loopfil
nop;
jmpstart
codeends
endstart
4、思考题的程序在调试中出现的问题及解决过程
在设置SI时错将1000H设置成2000H,cx设置成08,应该是10H
movsi,2000h;
设置断点处movsi,1000h;
movcx,08h;
只循环了8次movcx,10h;
循环了16次
movax,0hmovax,0h
实验2简单I/O口扩展实验
二、实验内容
逻辑电平开关的状态输入74LS244,然后通过74LS273锁存输出,利用LED显示电路作为输出的状态显示。
三、实验原理介绍
本实验用到两部分电路:
开关量输入输出电路,简单I/O口扩展电路。
四、实验步骤
1、实验接线:
(表示相互连接)
CS0CS244;
CS1CS273;
平推开关的输出K1~K8IN0~IN7(对应连接);
O0~O7LED1~LED8。
2、编辑程序,单步运行,调试程序
3、调试通过后,全速运行程序,观看实验结果。
外围接线原理图:
五、思考题:
将74LS244的片选信号CS244改接CS2,将74LS273的片选信号CS273改接CS3,修改程序实现与范例程序相同的功能。
assumecs:
codesegmentpublic
org100h
movdx,04C0h;
74LS244地址
inal,dx;
读输入开关量
movdx,04D0h;
74LS273地址
outdx,al;
输出至LED
jmpstart
codeends
endstart
实验38255并行口实验
8255A的A口作为输入口,与逻辑电平开关相连。
8255A的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
开关量输入输出电路和8255可编程并口电路。
1、实验接线
CS0CS8255;
PA0~PA7平推开关的输出K1~K8;
PB0~PB7发光二极管的输入LED1~LED8。
2、编程并全速或单步运行。
3、全速运行时拨动开关,观察发光二极管的变化。
当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。
外接原理图:
1、修改接线CS2CS8255,并要求开关置“H”(下)位置时对应LED亮,修改程序实现相应功能。
assumecs:
codesegmentpublic
org100h
movdx,04C6h;
控制寄存器地址
movax,90h;
设置为A口输入,B口输出
outdx,ax
start1:
movdx,04C0h;
A口地址
inax,dx;
输入
movdx,04c2h;
B口地址
notax
outdx,ax;
输出
jmpstart1
codeends
endstart
六、思考题的程序在调试中出现的问题及解决过程
在下面的程序中间忘记加了notax,导致还是开关置“L”(上)位置时对应LED亮
movdx,04c2h;
B口地址movdx,04c2h;
outdx,ax;
输出notax
outdx,ax;
实验48253定时器/计数器接口实验
一、实验设备
微机实验箱、8086CPU模块、示波器。
了解8253计数器的不同工作方式,掌握其初始化控制字对定时/记数效果的影响。
脉冲产生电路、8253定时器/计数器电路
1、实验连线:
CS0CS8253OUT08253CLK2OUT2LED1OUT1LED2
CLK3
8253CLK0,CLK3
8253CLK1
2、编程调试程序
3、全速运行,观察实验结果
1、为什么说范例程序运行时LED1闪烁周期的理论值是0.2秒?
在范例程序设置LED2的最大闪烁周期是多少?
请分析说明。
1.T0的时钟由CLK3提供,其频率为750KHz。
T0的初值设为927CH(37500十进制),则OUT0输出的方波周期为(37500*4/3*10-6=0.05s)。
OUT0的输出为T2时钟,则在T2中设置初值为04h时,则OUT2输出方波周期为4*0.05s=0.2s,且OUT2LED1,所以LED1闪烁周期的理论值是0.2秒。
2.T1的时钟由CLK3提供,其频率为750KHz。
T1的初值设为32h(50十进制),则OUT1输出的方波周期为(50*4/3*10-6=0.000067s),且OUT1LED2,所以,LED2的最大闪烁周期是0.000067s,约15KHz。
2、修改片选信号接线使CS1和CS8253连接,并要求LED1的闪烁周期变为4秒(亮2秒,灭2秒),修改程序实现功能。
codesegmentpublic
org100h
movdx,04abh;
控制寄存器
movax,36h;
计数器0,方式3
outdx,ax
movdx,04abh
movax,7Ch
movax,92h
outdx,ax;
计数值927Ch
movdx,04b6h
movax,76h;
计数器1,方式3
movdx,04b2h
movax,32h
movax,0;
计数值32h
movax,0b6h;
计数器2,方式3
movdx,04b4h
movax,50h
计数值50h,计数4s
next:
nop
jmpnext
endstart
在配置4秒(亮2秒,灭2秒是,将时间配错了,搞成28H,实际上应该是50H
movdx,04b6hmovdx,04b6h
movax,0b6h;
计数器2,方式3movax,0b6h;
outdx,axoutdx,ax
movdx,04b4hmovdx,04b4h
movax,28hmovax,50h
movax,0;
计数值50h,计数4smovax,0;
实验5 8259中断控制器实验
了解中断处理的原理,掌握利用中断控制器进行中断申请和中断操作的方法。
本实验用到三部分电路:
电平开关电路、简单I/O口扩展电路和8259中断控制器电路。
CS0CS8259CS3CS273O0~O3LED1~LED4K1~K4IR0~IR3INTINT(8086CPU板)INTAINTA(8086CPU板)
2、编译调试程序
3、全速运行程序,拨动某一电平开关,观察LED的亮灭情况。
1、说明源代码8259初始化所设置的所有中断控制字的值和含义(按位说明)。
start1:
cli
movdx,04a0h;
movax,13h;
ICW1为初始化字,由13h即00010011,
可知中断向量为:
000h(D7=0、D6=0、D5=0),
采用边沿触发(D3=0),地址间距为8
(D2=0),单片8259A(D1=1),需要ICW4
(D0=1).
outdx,ax;
ICW1,ICW4NEEDED
movdx,04a2h;
movax,80h;
ICW2为中断类型码字,由80h即10000000,
可知中断类型码的高五位为:
10000(T7=1、
T6=0、T5=0、T4=0、T3=0),,低3位由中断
源IR0(T2=0,T1=0,T0=0)的编码自动填入,表
明IR0~IR7的中断类型码分别为80h~87h.
outdx,ax;
ICW2中断类型80h
movax,01h;
ICW4为中断结束方式字,由01h即0000
0001,可知采用普通全嵌套方式(D4=0),非
缓冲方式(D3=0、D2=0),正常EQI(D1=0),
8086/8088模式(D0=1)
ICW4
movax,00h;
OCW1为屏蔽控制字,由00h即00000000,
可知IMR的所有位均为0,则所有位的中断
都被允许。
outdx,ax;
OCW1,开放所有中断
nop;
以上为8259初始化
2、修改接线IR3P+(实验箱右下角),并修改源程序,使按实验箱右下角“Pules”键时LED1~LED4全亮。
movcx,0
movdx,04a0h
movax,13h
movdx,04a2h
movax,80h
movax,01h;
01
movax,00h
movax,0
movds,ax
movdi,200h;
初始化中断向量表
movax,offsetint0
movds:
[di],ax
adddi,2
[di],100h
adddi,2
movax,offsetint1
movax,offsetint2
movax,offsetint3
adddi,2;
上述程序为芯片8259的初始化程序
[di],100h;
建议不熟练者不要修改。
main:
movax,0
sti;
开中断。
waiting:
cmpax,0h
jewaiting;
没发生中断,则等待
nop
movdx,04d0h
outdx,ax;
对应LED灯亮
movcx,0
delay:
loopdelay;
数字滤波,按键去抖
jmpstart1
int0:
cli;
关中断。
以下类推。
nop;
此两行为IR0的中断服务程序
movax,0feh;
用户可修改。
iret;
中断返回,以下类推。
int1:
此两行为IR1的中断服务程序,
movax,0fdh;
iret
int2:
此两行为IR2的中断服务程序,
movax,0fbh;
int3:
此两行为IR3的中断服务程序,
movax,0f0h;
此处修改
codeends
在修改是为了把四盏灯都点亮,把ax配错了,配成了movax,0fh导致当按下pulse是四盏灯都灭了,后来发现应该是movax,0f0h。
修改如下:
cliint3:
cli
nopnop;
此两行为IR3的中断服务程
movax,0fhmovax,0f0h;
Iretiret
综合设计实验部分
一、设计要求
参考基础实验的实验1~实验5所使用的硬件和范例程序,设计一个简单的红绿灯控制系统,用LED1~LED4表示两组红绿灯,每组红灯、绿灯各1只。
要求实现以下功能:
(1)红绿灯的定时切换(每10秒切换一次)
(2)设置灯光测试开关K1,当K1打开(高电平)时,LED1~LED4全亮,关闭时恢复正常切换。
二、外围芯片信号连接原理图(与CPU连接部分可省略)
CS08253,CS174LS244,CS274LS273,CLK38253CLK0,OUT08253CLK2,OUT2IN7,IN0K1,00~03LED1~LED4,
3、程序的流程图、源代码和源代码行中必要的注释
程序:
movdx,04a6h;
movdx,04a0h
movdx,04a6h
movdx,04a2h
movdx,04a4h
movax,90h
movax,01h;
计数值190h,计数20s
movdx,04b0h;
movbl,al
andbl,01h;
判断K1是否为1
jnzt2
andal,80h;
判断定时器OUT2输出是高还是低电平
cmpal,0
jet1
jmpt3
t1:
movdx,04c0h;
moval,0ah;
如果out2输出是低电平,则绿灯亮
jmpnext
t3:
moval,05h;
如果out2输出是高电平,则红灯亮
outdx,al
jmpnext
t2:
moval,0f0h;
如果K1为H(高),则让4个灯全亮
四、程序在调试中出现的问题及解决过程
在设计时为了让8253定时器在输出0时让两个绿灯亮,在输出1时让两个红灯亮,所以就将8253的OUT2输出接入74LS244的IN7端口,从IN7端口读出OUT2的值是1还是0,从而判断赋给ax什么值。
一开始我以为8253在计数后OUT2输出是一个脉冲信号,没有意识到是一个方波,所以就用CL记录OUT2来了是高电平来的次数:
当OUT2来一次就将CL赋值为1,当下一次OUT2来一次脉冲就将CL赋值为0,依次循环下去。
从而通过CL的值来判断AX中赋什么值给LED灯端口00~03,当时程序如下:
......
movcl,0
判断定时器OUT2输出是高还是低电平
jzt1
movbl,cl;
如果OUT2为高电平则把cl的0位取反
notbl
andbl,01H
movcl,bl
cmpcl,0
jzet3
运行结果是当OUT2输出为0是绿灯亮正常,但是OUT2输出1是红灯亮不正常,出现闪烁而且绿灯也在闪烁,这是因为OUT2输出为方波,有10s为1的时间,在这段时间内cl的0位一直取反,导致红灯,绿灯也亮,而且都闪烁。
后来想起来OUT2本来就是输出方波,根本不用CL来作为标记。
修改程序后如下:
........
修改后所有功能就都能实现了。