东华大学微机硬件实验报告.docx
《东华大学微机硬件实验报告.docx》由会员分享,可在线阅读,更多相关《东华大学微机硬件实验报告.docx(15页珍藏版)》请在冰豆网上搜索。
东华大学微机硬件实验报告
东华大学微机原理实验
班级:
电气
姓名:
学号:
东华大学信息学院
硬件实验部分
一、综合设计实验部分
一、设计要求
参考基础实验的实验1~实验5所使用的硬件和例程序,设计一个简单的红绿灯控制系统,用LED1~LED4表示两组红绿灯,每组红灯、绿灯各1只。
要现以下功能:
(1)红绿灯的定时切换(每10秒切换一次)
(2)设置灯光测试开关K1,当K1打开(高电平)时,LED1~LED4全亮,关闭时恢复正常切换。
提示:
(1)定时功能可利用8253实现,利用定时器输出作为中断申请,利用中断处理切换LED的显示;LED状态可用存保存或用I/O口读取。
(2)测试功能运行可在主循环过I/O口读取开关状态后判定,或利用中断处理方式运行。
二、报告要求:
1外围芯片信号连接原理图(与CPU连接部分可省略)
2程序的流程图、源代码和源代码行中必要的注释
3调试中遇到的问题和解决方法
三、程序源代码及流程框图:
assumecs:
code
codesegmentpublic
org100h
st:
movdx,04c0h;74LS244地址
inal,dx;读输入开关量
movdx,04d0h;74LS273地址
outdx,al;输出至LEd
testal,18h
jnestart
jmpst
start:
movdx,04b6h;控制寄存器
movax,36h;计数器0,方式3
outdx,ax
movdx,04b0h
movax,7Ch
outdx,ax
movax,92h
outdx,ax;计数值927C
movdx,04b6h
movax,0b6h;计数器2,方式3
outdx,ax
movdx,04b4h
movax,90h
outdx,ax
movax,01
outdx,ax
next:
nop
start1:
movdx,04a6h;控制寄存器地址
movax,90h;设置为A口输入,B口输出,c口输出
outdx,ax
movdx,04c0h;74LS244地址
inal,dx;读输入开关量
testal,18h
jest
start2:
movdx,04a0h;A口地址
inax,dx;输入
movdx,04a2h;B口地址
outdx,ax;输出
movdx,04a4h;c口地址
notax
outdx,ax;输出
movdx,04c0h;74LS244地址
inal,dx;读输入开关量
testal,18h
jest
jmpstart2
jmpnext
codeends
endst
四:
解决问题及原理图
二、基础实验部分
实验1存储器读写实验
一、实验设备
微机实验箱、8086CPU模块。
二、实验步骤和要求
1、实验接线:
本实验无需接线。
2、编写调试程序
3、运行实验程序,可采取单步、设置断点方式,打开存窗口可看到存区的变化。
三、思考题源程序代码及流程框图
codesegment
assumecs:
code
org0100h
start:
movax,0100h
movds,ax;数据段地址
moves,ax
movsi,1000h;偏移地址
movcx,010h;循环次数
moval,0
intram:
mov[si],al
incsi
loopintram;清零
movsi,1000h;设置断点处
movcx,10h
movdi,0
fil:
movax,di
mov[si],al;RAM区循环置数
incdi
incsi
loopfil
nop;设置断点处
jmpstart
codeends
endstart
四、思考题:
1、单步执行到“intram”标号的语句时,ds寄存器的数据是什么?
采用断点方式运行时执行到第一个断点处,2000H~202FH存单元的数据是什么?
执行到第二个断点处,2000H~200FH存单元的数据是什么?
并根据观察结果和对源程序的判读简述源程序的运行效果。
2、修改程序,实现从2000H到200FH单元依次赋值00H~0FH的功能。
解决问题:
刚开始,没有注意将循环次数改掉,CX依旧弄成了100H,后来弄成010H,正好和要求一样。
之后的目标单元置数是正确的,符合要求。
实验2简单I/O口扩展实验
一、实验设备
微机实验箱、8086CPU模块。
二、实验步骤
1、实验接线:
(表示相互连接)
CS2CS244;CS3CS273;平推开关的输出K1~K8IN0~IN7(对应连接);O0~O7LED1~LED8。
2、编辑程序,单步运行,调试程序
3、调试通过后,全速运行程序,观看实验结果。
4、编写实验报告。
三、思考题源程序代码及流程框图
assumecs:
code
codesegmentpublic
org100h
start:
movdx,04c0h;74LS244地址
inal,dx;读输入开关量
movdx,04d0h;74LS273地址
outdx,al;输出至LED
jmpstart
codeends
endstart
四、思考题:
将74LS244的片选信号CS244改接CS2,将74LS273的片选信号CS273改接CS3,修改程序实现与例程序相同的功能。
解决问题:
这个思考题修改没出什么问题,就是把信号改接的位置换了一下,编程序时,将地址改一下,就成功了。
实验38255并行口实验
一、实验设备
微机实验箱、8086CPU模块。
二、实验步骤
1、实验接线
CS2CS8255;PA0~PA7平推开关的输出K1~K8;PB0~PB7发光二极管的输入LED1~LED8。
2、编程并全速或单步运行。
3、全速运行时拨动开关,观察发光二极管的变化。
当开关某位置于H时,对应的发光二极管点亮,置于L时熄灭。
三、思考题源程序代码及流程框图
assumecs:
code
codesegmentpublic
org100h
start:
movdx,04c6h;控制寄存器地址
movax,90h;设置为A口输入,B口输出
outdx,ax
start1:
movdx,04c0h;A口地址
inax,dx;输入
xorax,0ffffh
movdx,04c2h;B口地址
outdx,ax;输出
jmpstart1
codeends
endstart
四、思考题:
1、修改接线CS2CS8255,并要求开关置“H”(下)位置时对应LED亮,修改程序实现相应功能。
解决问题:
和第二个实验一样,将CS8255的接线地址换一下,没出问题。
但我和搭档在之后的取反时弄错了,弄成了00000H,后来实验结果不对,想了一下,发现这个有错误,就改成了0ffffH。
结果对了。
实验48253定时器/计数器接口实验
一、实验设备
微机实验箱、8086CPU模块、示波器。
二、实验步骤
1、实验连线:
CS1CS8253OUT08253CLK2OUT2LED1OUT1LED2
CLK3
8253CLK0,CLK3
8253CLK1
2、编程调试程序
3、全速运行,观察实验结果
三、思考题源程序代码及流程框图
assumecs:
code
codesegmentpublic
org100h
start:
movdx,04b6h;控制寄存器
movax,36h;计数器0,方式3
outdx,ax
movdx,04b0h
movax,7Ch
outdx,ax
movax,92h
outdx,ax;计数值927Ch
movdx,04b6h
movax,76h;计数器1,方式3
outdx,ax
movdx,04b2h
movax,32h
outdx,ax
movax,0;计数值32h
outdx,ax
movdx,04b6h
movax,0b6h;计数器2,方式3
outdx,ax
movdx,04b4h
movax,50h
outdx,ax
movax,0;计数值50h
outdx,ax
next:
nop
jmpnext
codeends
endstart
四、思考题:
1、为什么说例程序运行时LED1闪烁周期的理论值是0.2秒?
在例程序设置LED2的最大闪烁周期是多少?
请分析说明。
2、修改片选信号接线使CS1和CS8253连接,并要求LED1的闪烁周期变为4秒(亮2秒,灭2秒),修改程序实现功能。
解决问题:
依旧将CS8253的接线地址改一下,没出问题,然后将T2的数值弄成之前的20倍。
结果正确。
实验5 8259中断控制器实验
一、实验设备
微机实验箱、8086CPU模块。
二、实验步骤
1、实验接线
CS0CS8259CS3CS273O0~O3LED1~LED4K1~K3IR0~IR2INTINT(8086CPU板)INTAINTA(8086CPU板)IR3P+
2、编译调试程序
3、全速运行程序,拨动某一电平开关,观察LED的亮灭情况。
“且按Pules”键时LED1~LED4全亮。
三、思考题源程序代码及流程框图
assumecs:
code
codesegmentpublic
org100h
start:
movcx,0
start1:
cli
movdx,04a0h
movax,13h
outdx,ax;ICW1,ICW4NEEDED
movdx,04a2h
movax,80h
outdx,ax;ICW2中断类型80h
movax,01h;01
outdx,ax;ICW4
movax,00h
outdx,ax;OCW1,开放所有中断
nop;以上为8259初始化
movax,0
movds,ax
movdi,200h;初始化中断向量表
movax,offsetint0
movds:
[di],ax
adddi,2
movds:
[di],100h
adddi,2
movax,offsetint1
movds:
[di],ax
adddi,2
movds:
[di],100h
adddi,2
movax,offsetint2
movds:
[di],ax
adddi,2
movds:
[di],100h
adddi,2
movax,offsetint3
movds:
[di],ax
adddi,2;上述程序为芯片8259的初始化程序
movds:
[di],100h;建议不熟练者不要修改。
main:
movax,0
sti;开中断。
waiting:
cmpax,0h
jewaiting;没发生中断,则等待
nop
nop
movdx,04d0h
outdx,ax;对应LED灯亮
movcx,0
delay:
loopdelay;数字滤波,按键去抖
jmpstart1
int0:
cli;关中断。
以下类推。
nop;此两行为IR0的中断服务程序
movax,0feh;用户可修改。
iret;中断返回,以下类推。
int1:
cli
nop;此两行为IR1的中断服务程序,
movax,0fdh;用户可修改。
iret
int2:
cli
nop;此两行为IR2的中断服务程序,
movax,0fbh;用户可修改。
iret
int3:
cli
nop;此两行为IR3的中断服务程序,
movax,0f0h;用户可修改。
iret
codeends
endstart
四、思考题:
1、说明源代码8259初始化所设置的所有中断控制字的值和含义(按位说明)。
2、修改接线IR3P+(实验箱右下角),并修改源程序,使按实验箱右下角“Pules键时LED1~LED4全亮。
解决问题:
将IR3的接线地址换成P+,之后的IR3中断服务程序的ax输入改成0f0H.实验结果刚好如预期。
没出问题。