硬件接口应用实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理与接口技术
实验报告
实验内容:硬件接口应用实验
组别:x
姓名:xxx
班级:xxxxxx
学号:xxxxxx
实验一 8259中断控制器实验
一、实验目的
1、掌握8259的工作原理。
2、掌握编写中断服务程序的方法。
3、掌握初始化中断向量的方法。
二、实验内容
用单脉冲发生器的输出脉冲为中断源,每按一次产生一次中断申请,点亮或熄灭发光二极管。
1、实验设备
微机实验教学系统实验箱、8086CPU模块
2、连接线路
3、编辑程序,编译链接后,调试程序。
4、调试通过后,在中断服务程序内设置断点,运行程序,当接收到中断请求后,程序
停在中断服务程序内的断点处。
三、实验方法
1、设计思路
连线图:
2、程序流程图
图1 8259初始化流程图
四、实验源程序
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,4A0H ;程序初始化
MOV AX,13H
OUT DX,AX ;写ICW1 :上升沿触发,单片8259,要写ICW4 MOV DX,4A2H
MOV AX,80H
OUT DX,AX ;写ICW2
MOV AX,01
OUT DX,AX ;写ICW4
MOV AX,0
OUT DX,AX ;写OCW1
MOV AX,0
MOV DS,AX
MOV SI,200H
MOV AX,OFFSET HINT
MOV DS:[SI],AX
ADD SI,2
MOV AX,CS
MOV DS:[SI],AX
STI ;开中断,设置IF=1
JMP $
HINT: ;中断服务程序
XOR CX,0FFH
MOV DX,4B0H
MOV AX,CX
OUT DX,AX ;输出高低电平控制LED等的亮灭
MOV DX,4A0H
MOV AX,20H
OUT DX,AX
IRET ;中断返回
CODE ENDS
END START
五、实验结果
每按一次单脉冲发生器,发光二极管点亮、熄灭交替进行。
六、思考题
1、将P+连线连接到IR1—IR7任意一个;重新编写程序。
思路:将P+接在IR1上,只要在源程序的基础上,把写ICW2的控制字改为81H,再把向量的入口地址改为0204H即可。
实验现象:每按一次单脉冲发生器,发光二极管点亮、熄灭交替进行。
2、设置OCW1,屏蔽某个中断请求,运行程序观察现象。
思路:将IR0重新接入LED0,设置OCW1为01H,屏蔽中断IR0,则IR0的中断
无法得到响应。
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START: MOV DX,4A0H ;写ICW1
MOV AX,13H ;上升沿触发,单片8259,要写ICW4
OUT DX,AX
MOV DX,4A2H ;写ICW2
MOV AX,80H ;IR0的中断向量码为80H
OUT DX,AX
MOV AX,01
OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI
MOV AX,01H ;写中断屏蔽字OCW1
OUT DX,AX ;屏蔽IR0中断中断向量存放在(0000H:0204H)
开始的四个单元里
MOV AX,0
MOV DS,AX
MOV SI,200H ;终端类型号为80H
MOV AX,OFFSET HINT ;终端服务程序的入口地址
MOV DS:[SI],AX
ADD SI,2
MOV AX,CS
MOV DS:[SI],AX
STI ;开中断,设置IF=1
JMP $ ;原地跳转
HINT: XOR CX,0FFH ;CX取反
MOV DX,4B0H ;CS273接口的地址,与8个LED灯相连 MOV AX,CX ;输出高低电平控制LED等的亮灭
OUT DX,AX
MOV DX,4A0H ;OCW2的地址
MOV AX,20H ;一般EOI命令,全嵌套方式
OUT DX,AX
IRET ;中断返回
CODE ENDS
END START
实验现象:每按单脉冲发生器一次产生一次中断申请,但连续的发光二极管一直不亮。
3、设置OCW2,了解中断结束方式。
思路:将IR0和IR1都连接在P+上,分别连接LED0和LED1到00和01。
OCW2设置成一般E0I命令,将IR0设置成最低中断优先级。
CS273的00与LED0相连,01与LED1相连,02与LED2相连,直到07与LED7相连。
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START: MOV DX,4A0H ;写ICW1
MOV AX,13H ;上升沿触发,单片8259,要写ICW4 OUT DX,AX
MOV DX,4A2H ;写ICW2
MOV AX,80H ;IR0的中断向量码为80H
OUT DX,AX
MOV AX,01
OUT DX,AX ;一般嵌套,非缓冲方式,非自动EOI
MOV AX,0 ;写OCW1
OUT DX,AX ;允许中断,
中断向量存放在(0000H:0200H)开始的四个单元里
MOV AX,0
MOV DS,AX
MOV SI,200H ;终端类型号为80H
MOV AX,OFFSET HINT1 ;终端服务程序的入口地址
MOV DS:[SI],AX
ADD SI,2
MOV AX,CS
MOV DS:[SI],AX
STI ;开中断,设置IF=1
;IR1的中断向量存放在(0000H:0204H)开始的四个单元里
MOV AX,0
MOV DS,AX
MOV SI,204H
MOV AX,0FFSET HINT2
MOV DS,[SI],AX
ADD SI,2
MOV AX,CS
MOV DS:[SI],AX
JMP $ ;原地跳转
HINT1: XOR CX,0F0H ;CX高4位取反
MOV DX,4B0H ;CS273接口的地址
MOV AX,CX ;输出高低电平控制LED等的亮灭
OUT DX,AX
MOV DX,4A0H ;OCW2的地址
MOV AX,0E0H ;一般EOI命令,IR0优先级最低
OUT DX,AX
IRET ;中断返回
HINT2: XOR CX,00FH ;CX低4位取反
MOV DX,480H ;CS273的地址
MOV AX,CX ;输出高低电平控制LED灯的亮灭
OUT DX,AX
MOV DX,4A0H ;OCW2的地址
MOV AX,0E0H; ;一般E0I命令,IR0优先级最低
OUT DX,AX
IRET ;中断返回
CODE ENDS
END START
实验现象:每按单脉冲发生器一次产生一次中断申请,低4位的LED灯先点亮或
熄灭,高四位的LED灯后点亮或熄灭。
七、实验中遇到的问题及解决方法
1、一开始将P+连接到了IR1,导致LED不亮,经过检查,找出了问题,LED灯显示正
常。
2、在做思考题时,将P+接到了IR1上,只改了ICW的控制字为81H,并没有改动向量
入口地址,经过老师指导后,得到了正确的实验现象。
八、心得体会与建议
因为以前没有接触过8086实验系统,所以开始时不知如何下手,但是经过老师的耐心指导和自己的尝试,逐渐掌握了连线,编程,链接,调试等步骤。
虽然实验中老师给了我们实验的程序,但是读懂每一句程序的作用对我来说还是有一些难度的,同时也让我明白了自己对于理论知识的掌握并不牢固,应该加强理论的学习,用理论指导实践。
实验二 8255并行接口实验
一、实验目的
掌握8255的编程原理。
二、实验内容
8255的A口作为输入口,与逻辑电平开关相连。
8255的B口作为输出口,与发光二极管相连。
编写程序,使得逻辑电平开关的变化在发光二极管上显示出来。
1、连线。
2、编辑程序,编译链接后,单步运行,调试程序。
3、调试通过后,全速运行,观察实验结果。
4、撰写实验报告。
三、实验方法
1、设计思路
8255的PA0-PA7分别与逻辑电平开关的K1-K8相连,PB0-PB7分别与发光二极管电路的LED1-LED8相连,CS0与8255的片选CS8255相连。
连线图:
四、实验源程序CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,04A6H ;8255初始化,工作方式选择A组工作在方式0,A口
MOV AX,90H ;输入,C口高4位输出,B组工作在方式0,B口输出,
OUT DX,AX ;C口低4位输出
START1:
MOV DX,04A0H ;A口输入
MOV AX,DX
MOV DX,04A2H ;B口输出
OUT DX,AX
JMP START1
CODE ENDS
END START
五、实验结果
LED灯低电平有效。
当开关拨到低电平时,对应的LED灯点亮;当开关拨到高电平
时,对应的LED灯熄灭。
六、思考题
1、将片选线连接到CS1-CS5;重新编写程序。
思路:选择将片选线接到CS1,CS0对应的地址为04A0-04AFH,而CS1对应的地址为
04B0-04BFH。
程序如下:
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,04B6H ;CS1对应的地址
MOV AX,90H
OUT DX,AX
START1:
MOV DX,04B0H
IN AX,DX
MOV DX,04B2H
OUT DX,AX
JMP START1
CODE ENDS
END START
实验现象:LED灯低电平有效。
当开关拨到低电平时,对应的LED灯点亮;当开关拨到高电平时,对应的LED灯熄灭。
2、C口4位接LED4位接开关;重新编写程序。
思路:PC4-PC7分别与逻辑电平开关的K1-K4相连,PC0-PC3分别与发光二极管电路的LED1-LED4相连。
程序如下:
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,04B6H ;片选接CS1
MOV AX,88H
OUT DX,AX ;A,B组均工作在方式0,C口高4位输入,低4
位输出
START1:
MOV DX,04B4H
IN AL,DX ;读取C口数据
MOV CL,4
ROR AL,CL ;不带CF位的循环右移4位,使C口数据的高4
位与低4位互换
MOV DX,04B4H
OUT DX,AL ;将C口高4位的数据从低4位输出,控制LED
灯
JMP START1
CODE ENDS
END START
实验现象与之前相同。
七、实验中遇到的问题及解决方法
在联系思考题1时,将片选接到了CS1上,而其地址却没有找对。
经过多次检查推理才找到了问题所在。
八、心得体会与建议
通过这一实验,在实验中检验了在理论课本上学得到的关于8255A、B、C口的工作方式,也更加理解了8255的编程原理。
实验三 8253可编程定时/计数器接口实验
一、实验目的
掌握8253定时/计数器的编程原理。
二、实验内容
8253计数器0,1,2工作于方波方式,观察其输出.
1、连线。
2、编辑程序,编译链接后,跟踪运行,调试程序。
3、调试通过后,全速运行,观察实验结果。
4、撰写实验报告。
三、实验方法
1、设计思路
CS0与8253的片选CS8253相连;CLK3(750KHz)与8253CLK0相连;8253的OUT0与8253CLK2相连;OUT2与发光二极管LED1相连;其他线均已连好。
四、实验源程序
CODE SEGMENT PUBLIC
ASSUME CS:CODE
START:
MOV DX,04A6H
MOV AX,36H ;写控制字,计数器0工作在方式3,先读写计数器低8位,再
OUT DX,AX ;读写计数器高8位,二进制计数
MOV DX,04A0H
MOV AX,7CH
OUT DX,AX
MOV AX,92H
OUT DX,AX ;将计数处置92H写入计数器0
MOV DX,04A6H
MOV AX,0B6H ;写控制字,计数器2工作在方式3,先读写计数器低8位,再
OUT DX,AX ;读写计数器高8位,二进制计数
MOV DX,04A4H
MOV AX,4
OUT DX,AX
MOV AX,0
OUT DX,AX ;将计数处置4H写入计数器2
JMP $ ;原地跳转
CODE ENDS
END START
五、实验结果
LED连续闪烁。
六、思考题
1、定时器2计数值改为20H,观察其现象。
实验现象:LED灯仍然交替闪烁,但闪烁的频率明显变慢。
2、将定时器2改为方式2分频器方式,观察其现象。
程序中写控制字时,计数器2工作在方式2,只写计数器低8位,二进制计数
实验现象:LED1灯亮的时间变长,灭的时间变短。
3、将GATE2接到开关上,观察其现象。
思路:把GATE2接到开关K1上。
当开关打开时,LED交替闪烁,且亮的时间比灭时间长;当开关关闭时,LED1灯始终是熄灭的。
4、将GATE2接到PUL P+开关上,计数器2改为方式1,观察其现象。
程序中写控制字时,计数器2工作在方式1,只写计数器低8位,二进制计数
实验现象:按一下P0开关,LED1灯亮,但过了几秒LED1灯就会熄灭。
LED1灯未熄灭的时候,再按一次P0开关,则灯亮的时间变长。
5、将GATE2接到PUL P+开关上,计数器2改为方式5,观察其现象。
程序中写控制字时,计数器2工作在方式5,只写计数器低8位,二进制计数
实验现象:打开开关后,LED1灯亮以下,然后就立即熄灭。
七、实验中遇到的问题及解决方法
观察LED灯的亮灭时,由于思考题中灯的闪烁频率比之前降低较大,因此开始时以为没有出现现象,后来耐心观察才观察到了现象。
八、心得体会与建议
在这个实验中做得比较顺利,明白了8253定时、计数器的编程原理,对于计数器工作方式的改变也有了很好的掌握
实验四 8250串行接口实验
一、实验目的
1、熟悉串行通信的一般原理和8250的工作原理。
2、了解RS-232串行接口标准及连接方法。
3、掌握8250芯片的编程方法。
二、实验内容
在实验箱与PC机(上位机)之间实现串行通信,主机每下传一个字符,若通讯正确,则下位机返回一个同样的字符;若不正确,则无返回值或者返回值不同。
1、无需接线,内部已经连好。
8250的端口地址为0480H起始的偶地址单元。
2、编写下位机程序,编译链接后,全速运行。
3、退出“8086实验系统”,运行“串口调试助手”上位机程序。
4、将“串口调试助手”程序输入和输出都调整为十六进制格式,发送一个十六进制
数,观察返回的是否是同样一个十六进制数。
三、实验方法
1、设计思路
连线图:
四、实验源程序
CODE SEGMENT PUBLIC
ASSYNE CS:CODE
ORG 100H
START:
MOV DX,486H ;写通信线路控制寄存器D7=1
MOV AX,80H
OUT DX,AXX
MOV DX,480H ;设置波特率低字节
MOV AX,12
OUT DX,AX
MOV DX,482H ;设置波特率高字节
MOV AX,0
OUT DX,AX
MOV DX,486H
MOV AX,3
OUT DX,AX
MOV DX,482H ;中断允许寄存器
MOV AX,0
OUT DX,AX
MOV DX,48AH ;清楚原始错误状态
IN AX,DX
MOV DX,480H ;清楚原始状态
IN AX,DX
LOOP1:
CALL RECV
CALL SEND
JMP LOOP1 ;循环发送
SEND: ;发送子函数
PUSH AX
MOV DX,48AH
IN AX,DX
TEST AX,20H
JNZ SEND2 ;发送数据寄存器空,则跳转至SEND2,发送字符
POP AX ;发送数据寄存器不是空,不可发送
JMP SEND
SEND2:
POP AX
MOV DX,480H ;指向发送接收数据寄存器,发送字符
OUT DX,AX
RET
RECV: ;接收子函数
MOV DX,48AH
IN AX,DX
TEST AX,1
JZ RECV ;未接收到一个字符,则跳转至RECV,若接收到
字符,则继续向下执行程序
MOV DX,480H ;接收到字符,指向接收缓存器
IN AX,DX ;读取接收受缓冲区的字符
RET
CODE ENDS
END START
五、实验结果
在发送区输入一个十六进制数,在接收区接收同一个十六进制数。
六、思考题
1、连接8255将接收到的十六进制数,驱动8个彩灯,观察其现象。
思路:将8255的片选接到CS0,将PB0-PB7依次与LED1-LED8相连接
程序如下:
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,04A6H ;8255的控制字,B口输出
MOV AX,90H
OUT DX,AX
MOV DX,486H ;8250初始化
MOV AX,80H
OUT DX,AX
MOV DX,480H
MOV AX,12
MOV DX,AX
MOV DX,482H
MOV AX,0
OUT DX,AX
MOV DX,486H
MOV AX,3
OUT DX,AX
MOV DX,482H
MOV AX,0
OUT DX,AX
MOV DX,48AH
IN AX,DX
MOV DX,480H
IN AX,DX
LOOP1:
CALL RECV ;接收输入的数据
CALL SEND ;将数据发送给上位机
MOV DX,04A2H ;将8250发送的存于AX中的数据,从8255的B 口输出,驱动8个LED灯
OUT DX,AX
JMP LOOP1 ;循环发送
SEND:
PUSH AX
MOV DX,48AH
IN AX,DX
TEST AX,20H
JNZ SEND2
POP AX
JMP SEND
SEND2:
POP AX
MOV DX,480H
OUT DX,AX
RET
RECV:
MOV DX,48AH
IN AX,DX
TEST AX,1
JZ RECV
MOV DX,480H
IN AX,DX
RET
CODE ENDS
END START
实验现象:在“串口调试助手”的发送区输入一个8位的十六进制数后,接收区会显示发送的数字,同时8个LED灯也会对应的亮或灭。
2、连接8255将开关的状态以十六进制数的方式发送到PC机,观察其现象。
思路:将8个开关连接到8255的PA0-PA7口,在PC机上观察接收区的数据。
实验现象:8个开关的状态循环显示在PC机的接收区,当开关状态改变时,显示的数据也随之改变。
3、连接8255和8253的GATE0,使用“串口调试助手”程序控制8253的震荡。
思路:将8255的片选接到CS0,将8253的片选接到CS1,8255的B口输出,其中PB0与GATE0相连, CLK3(750KHz)与8253CLK0相连,8253的OUT0与8253CLK2相连,OUT2与发光二极管LED1相连。
实验现象:任意输入一个最低位为1的8bit的十六进制数,是GATE0置位,则PC
机的接收区会显示输入的数据,同时LED1灯会一直闪烁。
5、按查询方式采样一路A/D转换数据,用简单输入口74LS244查询EOC信号。
每循
环一次0通道采样一次。
0通道的采样结果放入AX中,AL有效。
实验现象:在”JMP START”处设置断点,全速运行到此处,观察到寄存器AX=0045H,当旋转电位器后,AX的值会变化。
七、实验中遇到的问题及解决方法
对于程序的编写还是存在许多问题的,深深感受到理论知识的不足。
八、心得体会与建议
这次实验,对于已给出的程序代码,刚看到并不能够清楚地理解,整个实验做下来,花了很长的时间,如果老师能更详细地为我们讲解一下程序的编写过程,功能的实现思路,我觉得会有更好的教学效果。
实验五 A/D 0808实验
一、实验目的
1、掌握A/D转换的基本原理。
2、掌握ADC0809的使用方法。
二、实验内容
按查询方式采样一路A/D转换数据,用简单输入口74LS244查询EOC信号。
每循环一次0通道采样一次。
0通道的采样结果放入AX中,AL有效。
1、连线。
2、编写程序并调试。
3、调试通过后设置断点全速运行,并观察实验结果。
4、撰写实验报告。
三、实验方法
1、设计思路
连线图:
四、实验源程序
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,4A0H ;指向通道0
CALL GETAD ;调用A/D转换子程序,取得A/D值
JMP START
DELAY: ;延时子程序
MOV BP,1000H
DELAY1:
DEC BP
CMP BP,0
JNE DELAY1
RET
GETAD: ;A/D转换子程序
PUSH DX
MOV AX,34H ;启动A/D
OUT DX,AX
CALLL DELAY
MOV DX,4B0H ;指向74LS244地址
WAIT1:
IN AX,DX
TEST AX,1
JZ WAIT1 ;EOC=0,正在变换,调至WAIT1
POP DX ;E0C=1,依次变换外币,读取A/D值
IN AX,DX
MOV AH,0
RET
CODE ENDS
END START
五、实验结果
在“JMP START”处设置断点,全速运行到此处,观察到寄存器AX=0045H。
当旋转电位器后,AX的值会变化。
六、思考题
1、将采到的数据发送到8250上,在PC机观察数据。
CODE SEGMENT PUBLIC
ASSUME CS:CODE
ORG 100H
START:
MOV DX,486H ;8250串行接口的初始化
MOV AX,80H
OUT DX,AX
MOV DX,480H
MOV AX,12
OUT DX,AX
MOV DX,482H
MOV AX,0
OUT DX,AX
MOV DX,486H
MOV AX,3
OUT DX,AX
MOV DX,482H
MOV AX,0
OUT DX,AX
MOV DX,48AH
IN AX,DX
MOV DX,480H
IN AX,DX
M1:
MOV DX,4A2H ;指向通道1
CALL GETAD ;调用A/D转换子程序,取得A/D值 CALL SEND ;调用串行发送子程序
JMP M1 ;循环等待
DELAY: ;延时
MOV BP,100H
DELAY1:
DEC BP
CMP BP,0
JNE DELAY1
RET
GETAD: ;A/D转换子程序
PUSH DX
MOV AX,34H
OUT DX,AX
CALL DELAY
MOV DX,4B0H
WAIT1:;指向74LS244地址
IN AX,DX
TEST AX,1
JZ WAIT1
POP DX
IN AX,DX
MOV AH,0
RET
SEND: ;串行发送子程序
PUSH AX
MOV DX,48AH
IN AX,DX
TEST AX,20H
JNZ SEND2
POP AX
JMP SEND
SEND2:
POP AX
MOV DX,480H
OUT DX,AX
RET
CODE ENDS
END START
实验现象:可变电位器AN0输出的模拟量经A/D转换后所得的8bit数据显示在PC机的接收区。
旋转电位器,显示的数值也会随之改变。
七、实验中遇到的问题及解决方法
刚开始实验师不太了解ADC0809的工作原理,在查书看了相关知识后才懂了实验中的一些问题。
八、心得体会与建议
我对于这部分内容的理论知识不太熟悉,但动手能力较强,因此同小华同学一组来做了这次实验,的确遇到了很多困难,但经过查书、请教老师与同学最终将问题都解决了。
对于这次实验,感受很深的一点是,实践太仓促了,内容太多,主要实验加上思考题有十几道题,而且有的思考题有些难度,当时课上的确做不太完,希望以后的课能够适当增加课时吧。
最后谢谢老师的教导和帮助!。