微机原理实验指导书硬件部分1分解文档格式.docx

上传人:b****6 文档编号:17621401 上传时间:2022-12-07 格式:DOCX 页数:22 大小:147.44KB
下载 相关 举报
微机原理实验指导书硬件部分1分解文档格式.docx_第1页
第1页 / 共22页
微机原理实验指导书硬件部分1分解文档格式.docx_第2页
第2页 / 共22页
微机原理实验指导书硬件部分1分解文档格式.docx_第3页
第3页 / 共22页
微机原理实验指导书硬件部分1分解文档格式.docx_第4页
第4页 / 共22页
微机原理实验指导书硬件部分1分解文档格式.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理实验指导书硬件部分1分解文档格式.docx

《微机原理实验指导书硬件部分1分解文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理实验指导书硬件部分1分解文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

微机原理实验指导书硬件部分1分解文档格式.docx

程序流程图:

代码:

codesegment

assumecs:

code

org0100h;

在代码段0100h偏移地址处开始存放代码

start:

movax,0100h;

movds,ax;

数据段地址

moves,ax

movsi,1000h;

偏移地址

movcx,0100h;

循环次数

moval,0;

al的值置0

intram:

mov[si],al;

0赋给[si]

incsi;

si加1

loopintram;

使得0100:

1000开始处的256个单元中的数据清0

movsi,1000h;

设置断点处

movcx,0010h;

设置循环次数为16

fil:

mov[si],al;

RAM区循环置数

地址指针加1

incal;

al中的值每执行一次循环加1,初始值为00,加到0F

loopfil

nop;

设置断点处

jmpstart

codeends

endstart

结果:

九、实验中的问题及其解决方法

问题:

(1)范例程序中按题目要求设置两个断点时,全速运行时只能运行第一个断点处的程序,而不知道怎么运行下一个断点处的程序,导致出不来结果

(2)做思考题时,运行所写程序时发现内存空间中上一个题目的运行结果还在里面

解决方法:

(1)针对问题

(1),当执行完第一个断点执行完毕应该取消该断点,这样在全速运行时可以运行到下一个断点,就可以观察到程序运行结果了。

(2)针对问题

(2),发现在初始化程序时,自己把所有的循环初值都设成了0010H(16),导致只有前16个内存单元清零,而后面的内存单元没有初始化,保留了上次运行的程序运行结果。

所以将初始化(清零)的循环初值设成0100H,这样就可以初始化256个内存单元了,把上次的结果初始化为0。

而后一个赋值循环的循环次数仍然为0010

十、体会

这个题目比较简单,程序很简单,主要是把循环值设置对。

但是由于对软件使用的不熟悉,因此导致了一些问题。

在调试运行上还是花了一些时间。

通过发现问题,解决问题的过程,使我对这个软件的使用更加熟练,为后面的程序设计中打下良好的基础。

实验2简单I/O口扩展实验

1、熟悉74LS273,74LS244的应用接口方法。

2、掌握用锁存器、三态门扩展简单并行输入、输出口的方法。

逻辑电平开关的状态输入74LS244,然后通过74LS273锁存输出,利用LED显示电路作为输出的状态显示。

本实验用到两部分电路:

开关量输入输出电路,简单I/O口扩展电路。

五、实验步骤

1、实验接线:

(表示相互连接)

CS0CS244;

CS1CS273;

平推开关的输出K1~K8IN0~IN7(对应连接);

O0~O7LED1~LED8。

2、编辑程序,单步运行,调试程序

3、调试通过后,全速运行程序,观看实验结果。

4、编写实验报告。

74LS244或74LS273的片选信号可以改变,例如连接CS2,此时应同时修改程序中相应的地址。

七、实验结果

程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。

例如:

K2置于L位置,则对应的LED2应该点亮。

八、实验范例程序框图(实验程序名:

T244273.ASM)

九、程序源代码清单

十、思考题:

将74LS244的片选信号CS244改接CS2,将74LS273的片选信号CS273改接CS3,修改程序实现与范例程序相同的功能。

assumecs:

codesegmentpublic

org100h

movdx,04c0h;

74LS244地址

inal,dx;

读输入开关量

movdx,04d0h;

74LS273地址

outdx,al;

输出至LED

jmpstart

codeends

endstart

分析:

原CS244接CS0,CS0端口地址04a0h,CS273接CS1,CS1端口地址为04b0h。

只需把接线换掉后,把对应的端口地址改正即可.即CS2的地址为04c0h,CS3的地址为04d0h

十一、遇到的问题

该实验在调试的过程中,没有遇到问题,只是第一次的那台仪器坏了,发现灯都不亮,之后换了一台仪器,连线,编译,运行,就得到正确结果了。

实验38255并行口实验

掌握8255A的编程原理。

8255A的A口作为输入口,与逻辑电平开关相连。

8255A的B口作为输出口,与发光二极管相连。

编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。

开关量输入输出电路和8255可编程并口电路。

1、实验接线

CS0CS8255;

PA0~PA7平推开关的输出K1~K8;

PB0~PB7发光二极管的输入LED1~LED8。

2、编程并全速或单步运行。

3、全速运行时拨动开关,观察发光二极管的变化。

当开关某位置于L时,对应的发光二极管点亮,置于H时熄灭。

8255A是比较常用的一种并行接口芯片,其特点在许多教科书中均有介绍。

8255A有三个8位的输入输出端口,通常将A端口作为输入用,B端口作为输出用,C端口作为辅助控制用,本实验也是如此。

实验中,8255A工作于基本输入输出方式(方式0)。

八、实验范例程序框图及源代码(实验程序名:

t8255.asm)

九、思考题:

1、修改接线CS2CS8255,并要求开关置“H”(下)位置时对应LED亮,修改程序实现相应功能。

codesegmentpublic

org100h

movdx,04c6h;

控制寄存器地址(改为04c6h)

movax,90h;

设置为A口输入,B口输出

outdx,ax

start1:

movdx,04c0h;

A口地址(改为04c0h)

inax,dx

xorax,0ffffh;

取反输入

movdx,04c2h;

B口地址(改为04c2h)

outdx,ax;

输出

jmpstart1

codeends

endstart

说明:

由于换成CS2和CS8255相连,因此三个地址应分别修改为:

04c6h,04c0h,04c2h

由于要求开关置下时灯亮,因此需要从A口读取开关状态到AX后,对AX中的内容取反,即可实现要求。

取反的方法可以用notax语句,也可以用异或xor的取反,要取反的位与1异或

我这里采用异或。

实验48253定时器/计数器接口实验

掌握8253定时器的编程原理,用示波器观察不同模式下的输出波形。

微机实验箱、8086CPU模块、示波器。

了解8253计数器的不同工作方式,掌握其初始化控制字对定时/记数效果的影响。

脉冲产生电路、8253定时器/计数器电路

1、实验连线:

CS0CS8253OUT08253CLK2OUT2LED1OUT1LED2

CLK3

8253CLK0,CLK3

8253CLK1

2、编程调试程序

3、全速运行,观察实验结果

8253是计算机系统中经常使用的可编程定时器/计数器,其内部有三个相互独立的计数器,分别称为T0,T1,T2。

8253有多种工作方式,其中方式3为方波方式。

当计数器设好初值后,计数器递减计数,在计数值的前一半输出高电平,后一半输出低电平。

实验中,T0、T1的时钟由CLK3提供,其频率为750KHz。

程序中,T0的初值设为927CH(37500十进制),则OUT0输出的方波周期为(37500*4/3*10-6=0.05s)。

T2采用OUT0的输出为时钟,则在T2中设置初值为n时,则OUT2输出方波周期为n*0.05s。

n的最大值为FFFFH,所以OUT2输出方波最大周期为3276.75s(=54.6分钟)。

可见,采用计数器叠加使用后,输出周期范围可以大幅度提高,这在实际控制中是非常有用的。

程序全速运行后,LED1按一定周期闪烁(周期理论值为0.2s),LED2在高频脉冲信号(约15KHz)影响下,有微弱的光亮,但无明显的周期变化现象。

t8253.asm)

1、为什么说范例程序运行时LED1闪烁周期的理论值是0.2秒?

在范例程序设置LED2的最大闪烁周期是多少?

请分析说明。

(1)LED1 

与OUT2连接 

计数器0的初值设为927CH(37500),它的时钟由CLK3提供,其频率为750KHz,所以OUT0输出的方波周期为(37500*4/3*10^-6=0.05s)。

计数器2采用OUT0的输出为时钟,它的频率为(1/0.05)Hz,计数器2设置初值为04H(4)时,所以OUT2输出方波周期为4*0.05s=0.2s 

所以LED1的闪烁周期为0.2s 

(2) 

LED2与OUT1连接 

所LED2的闪烁周期即为计数器1的周期

计数器1的初值为32H(50),它的时钟也由CLK3提供,频率为750KHz,所以OUT1输出的周期为(50*4/3*10^-6=6.7*10^(-5)s),即LED2的闪烁周期。

由于周期过小,人眼无法识别

所以实验结果中,LED2有微弱变化,但无明显闪烁。

2、修改片选信号接线使CS1和CS8253连接,并要求LED1的闪烁周期变为4秒(亮2秒,灭2秒),修改程序实现功能。

求设置的计数初值:

4/0.05=80=50h

代码及注释:

codesegmentpublic

org100h;

movdx,04b6h;

控制寄存器

movax,36h;

计数器0,方式3

outdx,ax

movdx,04b0h;

计数器0的地址

movax,7Ch;

计数初值的低位为7Ch

movax,92h;

计数初值的高位为92h

outdx,ax;

计数值927Ch

movdx,04b6h;

控制寄存器地址

movax,76h;

计数器1,方式3

movdx,04b2h;

计数器1的地址

movax,32h;

计数初值的低位为32h

movax,0;

计数初值的高位为00h

outdx,ax;

计数值32h

movdx,04b6h

movax,0b6h;

计数器2,方式3

movdx,04b4h;

计数器2的地址

movax,50h;

计数值低位为50h

计数值高位为0

计数值50h

next:

nop

jmpnext;

让程序一直循环执行

将所有CS0的端口地址(04a_)都改为CS1的端口地址(04b_)。

再将计数器2的计数初值改为50H(4/0.05=80=50H)

遇到的问题:

第一次连线调试的时候,发现灯闪烁得频率很快,仔细检查程序,发现初始计数值设计小了,通过公式计算,得到计数值需要设置为50H,才使得周期为4s。

重新调试,得到了正确结果

实验5  8259中断控制器实验

1、掌握8259A的工作原理。

2、掌握编写中断服务程序方法。

3、掌握初始化中断向量的方法。

了解中断处理的原理,掌握利用中断控制器进行中断申请和中断操作的方法。

本实验用到三部分电路:

电平开关电路、简单I/O口扩展电路和8259中断控制器电路。

CS0CS8259CS3CS273O0~O3LED1~LED4K1~K4IR0~IR3INTINT(8086CPU板)INTAINTA(8086CPU板)

2、编译调试程序

3、全速运行程序,拨动某一电平开关,观察LED的亮灭情况。

1、8259的使用说明请详细阅读教科书。

2、8086的中断系统是向量中断方式。

内存中特定位置有一中断向量表,表内存有不同中断类型的中断向量(中断入口地址)。

不同中断类型的中断向量在表内有对应的偏移地址,其计算方法是:

中断类型*4。

3、中断类型由8259通过数据总线送给8086,8086内部电路会将该类型值自动乘4,而后赋给指令指针,从而转向中断向量表的相应单元取得中断入口地址,之后就进入中断服务程序。

请仔细研读8259的工作时序。

4、中断类型的高5位由8259寄存器ICW2决定,低3位由中断源IRx的编码自动填入。

IR0~IR7的编码分别为000,001,010,011,100,101,110,111。

全速运行程序,由上往下拨动开关时,相应位置的LED点亮,其余LED全灭。

t8259.asm)

1、说明源代码8259初始化所设置的所有中断控制字的值和含义(按位说明)。

(1)mov 

dx,04a0h

mov 

ax,13h

out 

dx,ax 

ICW1(初始化字),写入的值为13h,化为二进制后:

00010011。

含义:

边沿触发,地址间距为8,单片8259A,需要ICW4。

(2)mov 

dx,04a2h

ax,80h

ICW2(中断类型码字),写入的值为80h,化为二进制后:

10000000。

说明对应于IR0~IR7的中断类型码为80h~87h。

(3)mov 

ax,01h

ICW4(中断结束方式字),写入的值为01h,化为二进制后:

00000001。

普通全嵌套方式,非缓冲方式,正常EOI,8086/8088模式。

(4)mov 

ax,00h

OCW1(屏蔽控制字),写入的值为00h,即00000000b。

全部为复位屏蔽,开放所有中断。

2、修改接线IR3P+(实验箱右下角),并修改源程序,使按实验箱右下角“Pules”键时LED1~LED4全亮。

codesegmentpublic

org100h;

movcx,0

cli;

关中断,防止有些硬件中断对程序的干扰

movdx,04a0h;

写入ICW1的端口地址为04a0h

movax,13h;

ICW1为13H,化为二进制为00010011

outdx,ax;

ICW1,ICW4需要

movdx,04a2h;

写入ICW2的端口地址为04a2h

movax,80h;

ICW2为80H,化为二进制为10000000

outdx,ax;

ICW2中断类型80h,IR0~IR7的中断类型码为80h~87h

movax,01h;

ICW4为01H,化为二进制为00000001

outdx,ax;

ICW4;

普通全嵌套方式,非缓冲方式,正常EOI,8086/8088模式

movax,00h

OCW1,开放所有中断

nop;

以上为8259初始化

movax,0

movds,ax

movdi,200h;

初始化中断向量表

movax,offsetint0;

IR0的中断服务程序入口地址放入中断向量表中

movds:

[di],ax;

先放IP

adddi,2

[di],100h;

再放CS值

adddi,2

movax,offsetint1;

IR1的中断服务程序入口地址放入中断向量表中

[di],ax

[di],100h

movax,offsetint2;

IR2的中断服务程序入口地址放入中断向量表中

movax,offsetint3;

IR3的中断服务程序入口地址放入中断向量表中

adddi,2;

上述程序为芯片8259的初始化程序

[di],100h;

建议不熟练者不要修改。

main:

movax,0

sti;

开中断。

waiting:

cmpax,0h

jewaiting;

没发生中断,则等待

nop

movdx,04d0h

outdx,ax;

对应LED灯亮

delay:

loopdelay;

数字滤波,按键去抖

jmpstart1

int0:

cli;

关中断。

以下类推。

nop;

此两行为IR0的中断服务程序

movax,0feh;

用户可修改。

iret;

中断返回,以下类推。

int1:

cli

此两行为IR1的中断服务程序,

movax,0fdh;

iret

int2:

此两行为IR2的中断服务程序,

movax,0fbh;

int3:

此两行为IR3的中断服务程序,

movax,0f0h;

codeends

原AX的内容为0f7H,最低四位为7(0111),从左到右依次表示LED4,LED3,LED2,LED1,所以原代码IR3只接受LED4对应的开关K4产生的中断。

将其改为0(0000)后,表示四盏灯同时产生中断,所以同时亮。

一开始没有弄清楚中断服务程序的工作原理,导致不知从何下手去修改程序

,通过查阅微机课本有关中断的内容,再对比程序,发现,只需要改变IR3中断服务程序,把IR3全部置0,就代表四盏灯同时中断,即同时亮

实验总结

经过三周的微机硬件实验,我学到了很多东西,对于书本上的知识也有了更深层次的认识,通过第一个给存储单元赋值的操作,我明白了程序是如何运行的,以及各个寄存器及存储器内容是如何变化的。

这使得我用汇编语言编程的能力得到提升,同时也明白了汇编语言虽然是低级语言,但却是最接近计算机核心结构的,因此汇编语言更易被计算机识别。

后面几个硬件实验,不仅锻炼了我的动手操作能力以及程序调试能力,更关键的是明白了几个芯片8255以及计数器8253的工作原理,对中断有了更深的理解,比如中断控制字是如何设定的等等。

总之这次硬件实验需要理论与实践的结合,在知识点理解的基础上,通过实验来加深理解,这样使得知识更加形象生动。

当然还要感谢老师和同学们在我遇到困难时所给予的帮助,让我顺利的完成这次硬件实验。

二、综合设计实验部分

一、实验设备

微机实验箱、8086CPU模块。

二、实验要求

红绿灯的定时切换(每10秒切换一次)设置灯光测试开关K1,当K1打开(高电平)时,LED1~LED4全亮,关闭时恢复正常切换。

三、实验步骤

CS08255CS;

CS1CS8253;

CLK38253CLK0;

OUT08253CLK2

OUT2PA0,PA1,PA2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 理化生

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1