东华大学微机硬件实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

东华大学微机原理实验
班级:电气
学号:
东华大学信息学院
硬件实验部分
一、综合设计实验部分
一、设计要求
参考基础实验的实验1~实验5所使用的硬件和例程序,设计一个简单的红绿灯控制系统,用LED1~LED表示两组红绿灯,每组红灯、绿灯各1只。

要求实现以下功能:
(1)红绿灯的定时切换(每10秒切换一次)
⑵ 设置灯光测试开关K1,当K1打开(高电平)时,LED1~LED全亮,关闭时恢复正常
切换。

提示:
⑴ 定时功能可利用8253实现,利用定时器输出作为中断申请,利用中断处理切换
LED的显示;LED状态可用存保存或用I/O 口读取。

(2)测试功能运行可在主循环中通过I/O 口读取开关状态后判定,或利用中断处理
方式运行。

二、报告要求:
1外围芯片信号连接原理图(与CPU连接部分可省略)
2程序的流程图、源代码和源代码行中必要的注释
3调试中遇到的问题和解决方法
三、程序源代码及流程框图:
assume cs:code
code segme nt public
org 100h
st: mov dx,04c0h ;74LS244 地址
in al,dx ; 读输入开关量
mov dx,04d0h ;74LS273 地址
输出至LEd
out dx,al ;
test al,18h jne start jmp
st
start: mov dx,04b6h ;控制寄存器
mov ax,36h ;计数器0,方式3
out dx,ax
mov dx,04b0h
mov ax,7Ch
out dx,ax
mov ax,92h
out dx,ax ;计数值927C
mov dx,04b6h
mov ax,0b6h ;计数器2,方式3
out dx,ax
mov dx,04b4h
mov ax,90h
out dx,ax
mov ax,01
out dx,ax
n ext:
nop
start1
控制寄存器地址
: mov dx,04a6h ;
mov ax,90h ;设置为A 口输入,B 口输出,c 口输出
out dx,ax
mov dx,04c0h ;74LS244 地址in al,dx ; 读输入开关量test al,18h
start2 :
code end je st
in ax,dx ;输入
mov dx,04a2h ;B 口地址out dx,ax ;输出
mov dx,04a4h ;c 口地

not ax
out dx,ax ;输出
mov dx,04c0h ;74LS244
mov dx,04a0h ;A 口地址
in al,dx
test al,18h
je st
jmp
jmp n ext
start
2
ends
st
四:解决问题及原理图
地址读输入开关量
二、基础实验部分
实验1 存储器读写实验
一、实验设备
微机实验箱、8086CPU莫块。

二、实验步骤和要求
1、实验接线:本实验无需接线。

2、编写调试程序
3、运行实验程序,可采取单步、设置断点方式,打开存窗口可看到存区的
变化。

三、思考题源程序代码及流程框图
code segme nt
assume cs:code
org 0100h
sta比mov ax,0100h
;数据段地址
mov ds,ax
mov es,ax
mov si,1000h ;偏移地址
;循环次数
mov cx,010h
mov al,0
in tram: mov [si],al inc si
loop in tram ; 清零
mov si,1000h ;设置断点处
mov cx,10h
mov di,0
fil: mov ax,di
mov [si],al ;RAM 区循环置数
inc di
inc si
loop fil
nop ;设置断点处
jmp start
code ends end start
四、思考题:
1、单步执行到“ intram ”标号的语句时,ds寄存器的数据是什么?采用断点方
式运行时执行到第一个断点处,2000H~202FF存单元的数据是什么?执行到
第二个断点处,2000H~200FH存单元的数据是什么?并根据观察结果和对源
程序的判读简述源程序的运行效果。

2、修改程序,实现从2000H到200FH单元依次赋值00H~0FH的功能
解决问题:刚开始,没有注意将循环次数改掉,CX 依旧弄成了 100H,后来弄成010H, 正好和要求一样。

之后的目标单元置数是正确的,符合要求。

实验2 简单I/O 口扩展实验
实验设备
微机实验箱、8086CPU 莫块
二、 实验步骤
1、 实验接线:(表示相互连接)
CS2 CS244 CS3 CS273 平推开关的输出K1〜K8 应连
接);O0〜O7 LED 〜LED8
2、 编辑程序,单步运行,调试程序
3、 调试通过后,全速运行程序,观看实验结果。

4、 编写实验报告。

三、 思考题源程序代码及流程框图
assume cs:code code segme nt public org 100h
start: mov dx,04c0h ;74LS244
地址
in al,dx ;
读输入开关量
mov dx,04d0h ;74LS273 地址
out dx,al ; 输出至 LED
jmp start code ends end start
四、思考题:
将74LS244的片选信号CS244改接CS2将74LS273的片选信号CS273改接 CS3修改程
序实现与例程序相同的功能。

IN0〜IN7 (对
解决问题:这个思考题修改没出什么问题,就是把信号改接的位置换了一下,编程序时,将地址改一下,就成功了。

实验3 8255 并行口实验
一、实验设备
微机实验箱、8086CPU莫块。

二、实验步骤
1、实验接线
CS2 CS8255 PA0〜PA7 平推开关的输出K1〜K8; PB0〜PB7发光二极管的输入LED〜LED8
2、编程并全速或单步运行。

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

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

三、思考题源程序代码及流程框图
assume cs:code
code segme nt public org 100h
start: mov dx,04c6h ;控制寄存器地址
mov ax,90h ;设置为A 口输入,B 口输出
out dx,ax
start1: mov dx,04c0h ;A 口地址
in ax,dx ;输入
xor ax,0ffffh
mov dx,04c2h ;B 口地址
out dx,ax ;输出
jmp start1
code ends
end start
四、思考题:
1、修改接线CS2 CS8255并要求开关置“ H (下)位置时对应LED亮,修改程序
实现相应功能。

解决问题:和第二个实验一样,将CS8255的接线地址换一下,没出问题。

但我和搭档在之后的取反时弄错了,弄成了00000H后来实验结果不对,想了一下,发现这个有错误,就改成了0ffffH。

结果对了。

实验4 8253定时器/计数器接口实验
一、实验设备
微机实验箱、8086CPU模块、示波器。

二、实验步骤
1、实验连线:
CS1 CS8253 OUT0 8253CLK2 0UT2 LED1 OUT1 LED2
CLK3 8253CLK0 CLK3 8253CLK1
2、编程调试程序
3、全速运行,观察实验结果
三、思考题源程序代码及流程框图
assume cs:code
code segme nt public
org 100h
start:
mov dx,04b6h ;控制寄存器
mov ax,36h ; 计数器0,方式3
out dx,ax
mov dx,04b0h
mov ax,7Ch
out dx,ax
mov ax,92h
out dx,ax ;计数值927Ch
mov dx,04b6h
mov ax,76h ; 计数器1,方式3
out dx,ax
mov dx,04b2h
mov ax,32h
out dx,ax
mov ax,0 ;计数值32
out dx,ax
mov dx,04b6h
n ext:
nop
jmp next code ends end start
四、思考题:
LED2的最大闪烁周期是多少?请分析说明
2、修改片选信号接线使CS1和CS8253连接,并要求LED1的闪烁周期变为4 秒(亮2秒,灭2秒),修改程序实现功能。

解决问题:依旧将CS8253勺接线地址改一下,没出问题,然后将T2的数值弄成之前的20倍。

结果正确。

;计数器2,方式3
mov dx,04b4h
mov ax,50h
out dx,ax
mov ax,0
out dx,ax
;计数值50h
1、为什么说例程序运行时LED1闪烁周期的理论值是0.2秒?在例程序设置
mov ax,0b6h
out dx,ax
实验5 8259中断控制器实验
一、实验设备
微机实验箱、8086CPU模块。

二、实验步骤
1、实验接线
CS0 CS8259 CS3 CS273 00〜O3 LEDL LED4 K1 〜K3 IRO 〜IR2
INT INT( 8086CPU 板)INTA INTA (8086CPUK) IR3 P+
2、编译调试程序
3、全速运行程序,拨动某一电平开关,观察LED的亮灭情况。

“且按Pules” 键时LED1~LED全亮。

三、思考题源程序代码及流程框图
assume cs:code
code segme nt public
org 100h
start: movcx ,0
start1: cli
mov dx,04a0h
mov ax,13h
out dx,ax ;ICW1, ICW4 NEEDED
mov dx,04a2h
mov ax,80h
out dx,ax ;ICW2中断类型80h
mov ax,01h;01
out dx,ax ;ICW4
mov ax,00h
out dx,ax ;OCW1,开放所有中断
nop ;以上为8259初始化
mov ax,0
mov ds,ax
mov di,200h ;初始化中断向量表
mov ax,offset int0
mov ds:[di],ax
add di,2
mov ds:[di],100h
add di,2
mov ax,offset int1
mov ds:[di],ax
add di,2
mov ds:[di],1OOh
add di,2
mov ax,offset int2
mov ds:[di],ax
add di,2
mov ds:[di],100h
add di,2
mov ax,offset int3
mov ds:[di],ax
add di,2上述程序为芯片8259的初始化程序
mov ds:[di],100h ; 建议不熟练者不要修改。

mai n: mov ax,0
sti ;开中断。

wait ing: cmp ax,0h
je wait ing ; 没发生中断,则等待nop
nop
mov dx,04d0h
out dx,ax ; 对应LED灯亮
mov cx,0
delay: loop delay ; 数字滤波,按键去抖
jmp start1
in t0: cli
关中断。

以下类推。

J
此两行为IR0的中断服务程序
nop
J
mov ax,0feh ; 用户可修改。

中断返回,以下类推。

iret
J
in t1: cli
此两行为IR1的中断服务程序,
nop
J
mov ax,0fdh ; 用户可修改。

iret
in t2: cli
此两行为IR2的中断服务程序,
nop
J
mov ax,0fbh ; 用户可修改。

iret
in t3: cli
此两行为IR3的中断服务程序,nop
J
mov ax,0f0h ; 用户可修改。

iret
code ends end start
四、思考题:
1、 说明源代码8259初始化所设置的所有中断控制字的值和含义(按位说 明)。

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

解决问题:将IR3的接线地址换成P+,之后的IR3中断服务程序的ax 输入改成 OfOH.实验结果刚好如预期。

没出问题。

开始 > 8259初始化
延时
开中断
AX 输
中断服务流程。

相关文档
最新文档