东华大学信息学院微机课程设计硬件.docx
- 文档编号:7579165
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:17
- 大小:58.15KB
东华大学信息学院微机课程设计硬件.docx
《东华大学信息学院微机课程设计硬件.docx》由会员分享,可在线阅读,更多相关《东华大学信息学院微机课程设计硬件.docx(17页珍藏版)》请在冰豆网上搜索。
东华大学信息学院微机课程设计硬件
目录
实验1存储器读写实验1
实验2简单I/O口扩展实验5
实验38255并行口实验8
实验48253定时器/计数器接口实验12
实验5 8259中断控制器实验15
实验1存储器读写实验
一、实验目的
1.掌握PC机外存扩展的方法。
2.熟悉6264芯片的接口方法。
3.掌握8086十六位数据存储的方法。
二、实验设备
微机实验箱、8086CPU模块。
三、实验内容
向02000~020FFH单元的偶地址送入AAH,奇地址送入55H。
四、实验原理介绍
本实验用到存储器电路
五、实验步骤和要求
1、实验接线:
本实验无需接线。
2、编写调试程序
3、运行实验程序,可采取单步、设置断点方式,打开内存窗口可看到内存区的变化。
六、思考题
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;预置循环次数16次
fil1:
mov[si],al;RAM区循环置数
incsi;使地址指针si加1
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:
code
codesegmentpublic
org100h;在代码段0100h偏移地址处开始存放代码
start:
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的编程原理。
二、实验设备
微机实验箱、8086CPU模块。
三、实验内容
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)。
七、实验结果
程序全速运行后,逻辑电平开关的状态改变应能在LED上显示出来。
例如:
K2置于L位置,则对应的LED2应该点亮。
八、思考题:
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轮流闪烁,修改程序实现相应功能
程序流程图:
程序代码:
assumecs:
code
codesegmentpublic
org100h;在代码段0100h偏移地址处开始存放代码
start:
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;不是则跳转,显示
calldelay;是则,调用延时
xorcx,0009h;
andbx,0006h
orbx,cx
movcx,bx;
andcx,0009h;该程序段的功能第一次的得到bx的值为0008h,下一次得到的值为0001如此周而复始,便使LED1与LED4循环闪烁
display:
movax,bx
notax;共阳极电路,取反,为零时灯亮
movdx,04c2h;B口地址
outdx,ax;输出
jmpstart1
delayprocnear
pushcx
movcx,0ffffh
dis:
nop
loopdis;空循环来实现延时
popcx
ret
delayendp
codeends
endstart
九、实验中的问题及其解决方法
问题:
(1)编程完毕调试程序发现结果恰好相反,K1为高时发现全部不亮,而K2为高发现L2和L4亮,K3为高时发现L1和L3亮,而闪烁的结果也相反。
(2)调试过程中发现LED灯的闪烁频率过快。
解决方法:
(1)由程序可知,输出的端口的逻辑关系放在BX中,在将BX的值赋到AX中,所以当输出结果相反时,只要添加一条取反指令,对AX的值取反,即“notax”便可得到正确的运行结果。
(2)在编写延时程序时,用的是给CX赋值,然后不断执行空循环实现延时,在最初的程序中CX的值赋值过小,导致循环执行的时间过短,后来将CX赋一个很大的值,实现轮流闪烁。
实验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)影响下,有微弱的光亮,但无明显的周期变化现象。
八、思考题:
1.为什么说范例程序运行时LED1闪烁周期的理论值是0.2秒?
在范例程序设置LED2的最大闪烁周期是多少?
请分析说明。
(1)因为OUT08253CLK2OUT2LED1,所以8253计数器2采用OUT0的输出为时钟脉冲,且8253计数器2中设置计数值为04h,则OUT2输出方波周期为4*0.05s=0.2s。
(2)因为OUT1LED2,所以LED2的闪烁周期即为计数器1的周期,且计数器1设置的计数值为32h,化为十进制为3*16+2=50,则范例程序设置LED2的最大闪烁周期为50*4/3*10^6=6.67x10^(-5)s。
2.修改片选信号接线使CS1和CS8253连接,并要求LED1的闪烁周期变为4秒(亮2秒,灭2秒),修改程序实现功能。
4/0.05=80,化为16进制数为50h,则8253计数器2中设置计数值为50h。
程序框图:
源程序:
assumecs:
code
codesegmentpublic
org100h;在代码段0100h偏移地址处开始存放代码
start:
movdx,04b6h;控制寄存器地址
movax,36h;计数器0,方式3
outdx,ax
movdx,04b0h;计数器0的地址
movax,7Ch;计数初值的低位为7Ch
outdx,ax
movax,92h;计数初值的高位为92h
outdx,ax;计数值927Ch
movdx,04b6h;控制寄存器地址
movax,76h;计数器1,方式3
outdx,ax
movdx,04b2h;计数器1的地址
movax,32h;计数初值的低位为32h
outdx,ax
movax,0;计数初值的高位为00h
outdx,ax;计数值32h
movdx,04b6h;控制寄存器地址
movax,0b6h;计数器2,方式3
outdx,ax
movdx,04b4h;计数器2的地址
movax,50h;计数初值的低位为50h
outdx,ax
movax,0;计数初值的高位为00h
outdx,ax;计数值50h
next:
nop
jmpnext;让程序一直循环执行
codeends
endstart
九、实验中的问题及其解决方法
问题:
在完成对范例程序修改后调试发现LED1灯的闪烁周期过快,与题目要求相差很大,没有4s的时间
解决方案:
在检查程序的发现将计数器2设计初值设计成28H,即2S时间,对周期的计算还没有完全弄清楚,仔细阅读实验指导书后知道,应该根据周期为4s,则4/0.5=80,化为16进制数50H,则8253计数器2中设置计数值为50h,于是完成实验要求。
实验5 8259中断控制器实验
一、实验目的
1、掌握8259A的工作原理。
2、掌握编写中断服务程序方法。
3、掌握初始化中断向量的方法。
二、实验设备
微机实验箱、8086CPU模块。
三、实验内容
了解中断处理的原理,掌握利用中断控制器进行中断申请和中断操作的方法。
四、实验原理介绍
本实验用到三部分电路:
电平开关电路、简单I/O口扩展电路和8259中断控制器电路。
五、实验步骤
1、实验接线
CS0CS8259CS3CS273O0~O3LED1~LED4K1~K4IR0~IR3INTINT(8086CPU板)INTAINTA(8086CPU板)
2、编译调试程序
3、将所有开关K1~K4置于H(下)位置后,全速运行程序,拨动某一电平开关(推到L位置,再拨回H位置),观察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全灭。
八、思考题:
1.按位说明范例代码8259初始化所设置的所有中断控制字的值和含义。
ICW1(初始化字),写入的值为13h,化为二进制后:
00010011。
含义:
边沿触发,地址间距为8,单片8259A,需要ICW4。
ICW2(中断类型码字),写入的值为80h,化为二进制后:
10000000。
含义:
说明对应于IR0~IR7的中断类型码为80h~87h。
ICW4(中断结束方式字),写入的值为01h,化为二进制后:
00000001。
含义:
普通全嵌套方式,非缓冲方式,正常EOI,8086/8088模式。
OCW1(屏蔽控制字),写入的值为00h,即00000000b。
含义:
全部为复位屏蔽,开放所有中断。
2.按要求接线CS0CS8259CS3CS27374LS273的O0~O3L1~L48295的INTINT(8086CPU板)8259的INTAINTA(8086CPU板)IR1Pulse键(实验箱右下角)。
并修改源程序,实现以下功能:
平时运行时L1、L3亮,L2、L4灭,当按下实验箱右下角“Pules”键时L1、L3灭,L2、L4亮,延续一段时间后恢复平时状态。
程序流程图:
源程序:
assumecs:
code
codesegmentpublic
org100h;在代码段0100h偏移地址处开始存放代码
start:
movcx,0
start1:
cli;关中断,防止有些硬件中断对程序的干扰
movdx,04a0h;写入ICW1的端口地址为04a0h
movax,13h;ICW1为13H,化为二进制为00010011
outdx,ax;ICW1,边沿触发,地址间距为8,单片8259A,需要ICW
movdx,04a2h;写入ICW2的端口地址为04a2h
movax,80h;ICW1为80H,化为二进制为10000000
outdx,ax;ICW2,中断类型80h,IR0~IR7的中断类型码为80h~87h
movax,01h;01;ICW4为01H,化为二进制为00000001
outdx,ax;ICW4,普通全嵌套方式,非缓冲方式,正常EOI,8086/8088模式
movax,00h
outdx,ax;OCW1,开放所有中断
nop;以上为8259初始化
movax,0
movds,ax
movdi,200h;初始化中断向量表
movax,offsetint0;;IR0的中断服务程序入口地址放入中断向量表中
movds:
[di],ax;先放IP(后同)
adddi,2
movds:
[di],100h;再放CS值(后同)
adddi,2
movax,offsetint1;IR1的中断服务程序入口地址放入中断向量表中
movds:
[di],ax
adddi,2
movds:
[di],100h
adddi,2
movax,offsetint2;IR2的中断服务程序入口地址放入中断向量表中
movds:
[di],ax
add
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 东华 大学 信息 学院 微机 课程设计 硬件
![提示](https://static.bdocx.com/images/bang_tan.gif)