微机接口 8255并行接口实验报告.docx
《微机接口 8255并行接口实验报告.docx》由会员分享,可在线阅读,更多相关《微机接口 8255并行接口实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
微机接口8255并行接口实验报告
浙江工业大学计算机学院
实验报告
实验名称8255并行接口实验
姓名徐洁
学号201326810521
班级计科1301班
教师雷艳静
日期2015/12/31
一、实验内容与要求
1.1实验内容
8255方式0实验一:
从8255端口C输入数据,再从端口A输出,即TPC-USB平台按逻辑电平开关K0~K7通过编程使端口C接收,然后再通过端口A输出到LED显示电路L0~L7,这样逻辑电平开关的值就可以通过8255芯片显示在LED显示电路上。
8255方式1输出实验:
编程实现每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断,让CPU进行一次中断服务:
依次输出01H、02H、04H、08H、10H、20H、40H、80H使LED显示电路L0~L7依次发光,中断8次结束。
8255方式1输入实验:
编程实现每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务,读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。
1.2实验要求
(1) 具有一定的汇编编程的基础,能编写一些基本语句来实现实验。
实验前根据实验流程
图,写出对应代码;
(2) 要了解8255A并行接口芯片内部结构和外部引脚,理解8255芯片的工作方式和程序设
计方法;
(3) 熟悉实验平台TPC-USB了解各个接口的名称与功能,进行实验时能快速并正确地连接
好实验电路;
(4) 8255方式0实验一:
连接PC与TPC-USB平台,用微机实验软件运行程序,用TPC-USB
平台上的逻辑电平开关与LED显示电路观察,LED显示的值与逻辑电平开关设的值对应;
(5) 8255方式1输出实验:
连接PC与TPC-USB平台,用微机实验软件运行程序,手按单
脉冲按钮,观察LED显示电路能依次发光,按8次后,中断结束,程序结束;
(6) 8255方式1输入实验:
连接PC与TPC-USB平台,用微机实验软件运行程序,用TPC-USB平台的逻辑电平开关设置一个ASCII码,按一次单脉冲,屏幕就能显示该ASCII码对应的字符,变更逻辑电平的开关,按一次单脉冲,屏幕就会显示变更的ASCII码对应的字符。
这样操作N次之后,中断结束,程序结束。
二、实验原理与硬件连线
2.1实验原理
1、8255A的内部结构:
图18255A内部结构图
(1)数据端口:
端口A:
内含一个8位的输入、输出锁存器/缓冲器,用作输入或输出时,其数据均可得到锁存。
端口B:
内含一个8位的输出锁存器/缓冲器和一个8位的输入缓冲器(输入无锁存)。
端口C:
内含一个8位的输出锁存器/缓冲器和一个8位的输入缓冲器(输入无锁存)。
●可作为一个独立的8位端口,也可分成两个4位端口。
●可用作数据输入/输出端口,也可作为控制/状态端口(联络信号),配合A、B端口一起工作。
●具有按位置位/复位功能。
(2)端口的输入/输出及其工作方式:
8255A可通过软件编程来分别设定每个端口的输入/输出及其工作方式。
A口:
有3种工作方式:
方式0(基本输入/输出)、方式1(选通输入/输出)、方式2(双向输入/输出)。
B口:
有2种工作方式:
方式0、方式1
C口:
可设置为并口或按位置位/复位工作方式。
(3)A组和B组控制逻辑:
A口和C口的高4位构成A组,由A组控制逻辑控制。
B口与C口的低4位构成B组,由B组控制逻辑控制。
A、B两组控制电路内部均有控制寄存器,用来接收CPU发来的读/写控制信号和控制字,并按控制字确定各端口的工作方式。
(4)数据总线缓冲器:
8位三态双向缓冲器,与系统数据总线相连,用于CPU与8255A之间传送数据、命令和状态信息。
(5)读/写控制逻辑:
接收CPU发来的地址信号和控制信号,转变为各种命令送到A、B组控制逻辑,对端口进行相应的操作。
2、8255A的工作方式:
(1)方式0——基本输入/输出:
A口、B口、C口的高4位和低4位均可独立地被设置为输入或输出。
8255A与CPU之间没有固定的应答联络信号,可用于无条件传送或查询方式传送。
单向I/O:
一次初始化只能指定端口作为输入或作为输出,不能指定其同时既作为输入又作为输出。
采用查询方式传送时,可以将端口A、端口B作为数据端口,用端口C存放外部设备状态信息,用于CPU查询。
(2)方式1输入:
当端口A作为方式1输入时,端口C的PC3、PC4、PC5作为端口A的联络控制信号。
当端口B作为方式1输入时,端口C的PC0、PC1、PC2作为端口B的联络控制信号。
PC6、PC7则可作为输入/输出数据口使用,如图2所示。
各控制信号的定义如下。
注意:
方式1下C口复位/置位功能与PC口引脚的功能无任何关系。
图2方式1输入时,端口对应的控制信号
STB:
输入选通信号。
有效时,可将数据从外设输入到A口或B口的锁存器中。
IBF:
输入缓冲器满信号,是对STB的响应。
有效时,对CPU:
表示8255端口有数据,通知CPU进行读取。
对外设:
表示CPU还未取走数据,阻止外设发新数据。
INTE:
中断允许信号。
INTE=1时允许8255向CPU发中断请求。
PC4=1允许A口中断;PC2=1允许B口中断。
该信号通过C口置位/复位来实现。
INTR:
中断请求信号。
INTR=1时,CPU可从端口读取数据。
读取后INTR自动清除。
(3)方式1输出:
当端口A作为方式1输出时,端口C的PC3、PC7、PC6作为端口A的联络控制信号。
当端口B作为方式1输出时,端口C的PC0、PC1、PC2作为端口B的联络控制信号。
PC4、PC5则可作为输入/输出数据口使用,如图3所示。
各控制信号的定义如下。
图3方式1输出时,端口对应的控制信号
OBF:
输出缓冲器满。
有效时,表CPU已把数据输出到8255。
对外设:
通知外设取走数据。
对CPU:
阻止CPU发新数据。
ACK:
外设的应答信号。
外设取走数据后,向8255发应答信号,并使OBF无效,此时CPU可发新数据。
INTE:
中断允许信号。
为1时允许8255向CPU发中断请求。
PC6=1允许A口中断;PC2=1允许B口中断。
该信号通过C口置位/复位来实现。
INTR:
中断请求信号。
为1时请求CPU向8255发数据。
3、8255A的编程:
(1)方式选择控制字:
实验时:
方式0:
端口C输入,端口A输出对应的控制字为:
10001011B=8bH;
方式1输出:
端口A方式1输出对应的控制字为:
10100000B=0a0H;
方式1输入:
端口A方式1输入对应的控制字为:
10111000B=0b8H;
(2)端口C置位/复位控制字:
注意:
尽管该控制字针对C口进行操作,但必须写入控制端口,而不是写入C口对应的地址。
实验时:
PC6置位:
对应的控制字:
00001101B=0dH;
PC4置位:
对应的控制字:
00001001B=09H;
(3)8255A初始化编程:
向8255A的控制端口写入方式选择控制字后即可完成初始化,然后CPU就可以访问A、B、C数据端口,进行数据输入/输出。
2.2硬件连线
(1)8255方式0实验一:
8255端口C接逻辑电平开关K0~K7,端口A连接LED显示电路L0~L7。
连接实验电路如图4所示。
图4TPC-USB平台8255方式0实验一连接图
(2)8255方式1输出实验:
端口A连接LED显示电路L0~L7,连接实验电路如图5所示。
图5TPC-USB平台8255方式1输出实验电路连接图
(3)8255方式1输入实验:
端口A接逻辑电平开关K0~K7。
连接实验电路如图6所示。
图6TPC-USB平台8255方式1输入实验电路连接图
三、设计思路、步骤和程序流程图
3.1设计思路
本次实验做的是丙型接口实验,需要用到8255并行接口芯片,了解芯片的内部结构后,理解芯片的工作原理,8255芯片的工作方式有多种,所做的实验是方式0和方式1,理解了工作方式后,便可根据8255芯片的初始化编程步骤画出程序流程图,再根据流程图,写出实验程序。
根据实验连接图连接好电路,运行程序,便可达到并行传送的目的。
实验一:
通过mov dx,28ah in al,dx读入C端口的字,即读入C端口的开关预置的值,又通过mov dx,288H out dx,al 把从C端口读入的字送到A端口,所以A端口相应的灯会亮。
实验二:
每按一次单脉冲按钮,产生一次中断请求,通过mov al,bl mov dx,288h out dx,al将bl的值从8255的A口输出,由于bl初始化为01H,每一次中断以后执行shl bl,1 将bl左移一位,即01H变成02H,依次变成04H、08H、10H…….所以L0~L7会依次发光。
实验三:
每按一次单脉冲按钮,产生一次中断请求,通过mov dx,288h in al,dx自8255端口A读入实验平台逻辑电平处的数据,又通过mov dl,al mov ah,02h int 21h 将数据在屏幕上输出。
bl初始化为8,每执行一次中断bl减1,所以N次以后退出。
3.2实验步骤
(1) 连接实验电路如图4所示,8255端口C接逻辑电平开关K0~K7,端口A连接LED显
示电路L0~L7;
(2) 根据图7所示的流程图,编程,运行,观察开关的值与LED的值是否对应;
(3) 连接实验电路如图5所示;
(4) 根据图8所示的流程图,编程,运行,观察LED的亮灭情况;
(5) 连接实验电路如图6所示;
(6) 根据图9所示的流程图,编程,运行,观察逻辑开关的值和屏幕上显示的字符。
3.3程序流程图
图7TPC-USB平台8255方式0实验一的程序流程图
(a)输出主程序(b)输出中断服务程序
图8TPC-USB平台8255方式1输出实验的程序流程图
(a)主程序(b)输入中断服务程序
图9TPC-USB平台8255方式1输入实验的程序流程图
四、程序清单与执行结果
4.1程序清单
(1)8255方式0实验一代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,28BH;设8255为C口输入,A口输出
MOVAL,8BH
OUTDX,AL
IN_OUT:
MOVDX,28AH;从C口输入一数据
INAL,DX
MOVDX,288H;从A口输出刚才自C口所输入的数据
OUTDX,AL
MOVDL,0FFH;判断是否有按键
MOVAH,06H
INT21H
JZIN_OUT;若无,则继续自C口输入,A口输出
MOVAH,4CH;否则返回DOS
INT21H
CODEENDS
ENDSTART
(2)8255方式1输出实验代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,SEGIRQ3_INT;中断程序入口地址送中断向量表
MOVDS,AX
MOVDX,OFFSETIRQ3_INT
MOVAX,250BH;设置中断向量程序
INT21H
INAL,21H;读取中断屏蔽字
ANDAL,0F7H;开放IRQ3中断
OUT21H,AL
MOVDX,28BH;设置8255端口A方式1输出
MOVAL,0A0H
OUTDX,AL
MOVAL,0DH;将8255的PC6置位
OUTDX,AL
MOVBL,01H;BL赋初值1
WIN:
JMPWIN;循环等待
IRQ3_INT:
;中断服务程序
MOVAL,BL;将BL中的数从端口A输出
MOVDX,288H
OUTDX,AL
MOVAL,20H;发中断结束命令
OUT20H,AL
SHLBL,1;BL左移一位
JNCNEXT;JNC对进位位进行判断,若CF!
=1,跳转
INAL,21H;恢复屏蔽字
ORAL,08H;禁止IRQ3中断
OUT21H,AL
STI;STI允许中断发生CLI禁止中断发生
MOVAH,4CH;返回DOS
INT21H
NEXT:
IRET;中断返回
CODEENDS
ENDSTART
(3)8255方式1输入实验代码:
CODESEGMENT
ASSUMECS:
CODE
START:
MOVAX,SEGIRQ3_INT;中断程序入口地址送中断向量表
MOVDS,AX
MOVDX,OFFSETIRQ3_INT
MOVAX,250BH;设置中断向量程序
INT21H
INAL,21H;读取中断屏蔽字
ANDAL,0F7H;开放IRQ3中断
OUT21H,AL
MOVDX,28BH;设置8255端口A方式1输入
MOVAL,0B8H
OUTDX,AL
MOVAL,09H;将8255的PC4置位
OUTDX,AL
MOVBL,20;设置中断次数
WIN:
JMPWIN;循环等待
IRQ3_INT:
;中断服务程序
MOVDX,288H;从A端口输入数据
INAL,DX
MOVDL,AL
MOVAH,02H;输出DL中的字符到屏幕
INT21H
MOVDL,0DH;回车
INT21H
MOVDL,0AH;换行
INT21H
MOVAL,20H;中断结束命令
OUT20H,AL
DECBL
JNZNEXT
INAL,21H;N次中断已到,恢复屏蔽字
ORAL,08H;禁止IRQ3中断
OUT21H,AL
STI;开中断
MOVAH,4CH;返回dos系统
INT21H
NEXT:
IRET;中断返回
CODEENDS
ENDSTART
4.2执行结果
(1)8255方式0实验一:
注:
LED灯的亮灭取决于逻辑电平开关,当开关置1时,灯亮;当开关置0时,灯灭
(2)8255方式1输出实验:
注:
当程序刚运行时,只有最右边的灯L0亮,之后按一次单脉冲按钮,L1亮,接着L2亮,这样往左移动,直到L7亮,程序结束。
(3)8255方式1输入实验:
注:
逻辑电平开关设置一个值,屏幕上显示该值对应的ASCII码,比如现在设置的是31H,则屏幕上显示1。
之后每按一次单脉冲按钮,屏幕上显示一次逻辑电平设置的值对应的ASCII码,直到中断次数结束。
五、程序调试说明和实验感想
5.1调试说明
(1)在做8255方式1输出实验时,在代码完成编译之后,每次一运行程序,都未能像原定的那样只有L0亮,而是无规则的亮,我刚开始以为是我代码在运行过程中有对BL进行重新赋值之类的操作,导致数据出错,但在我将程序重新从头到尾看了一遍之后,我发现问题应该不是出现在代码上,但实验设备在进行8255方式0实验一的实验时,又是可以正常工作的,说明实验设备也没问题。
两边都没问题,我实在想不出哪里还有可能出问题。
就这样我纠结了快20分钟,后来无意间看到书上说依次输出01H、02H、04H~~~~~于是我就想要不把movbl,1改成movbl,01h,我这么一改,结果就成功了。
后来我问老师这是为什么,老师说大概是设备内部转码编译的时候出了问题,1不是变成00000001B而是其他的字符串了。
(2)在做8255方式1输入实验时,程序上倒是没出什么问题,不过就是我自己对于实验的内容理解错误了。
刚开始时,我以为是输入03H,那么屏幕上就显示3,结果当我真这么做时,屏幕给了我个爱心,我当时还以为是我程序写错了。
后来在询问同学之后,才发现是我自己理解错了,我们通过逻辑电平开关输入的03H对应的ASCII码就是爱心,要想像我设想的那样还要对程序进行加工才行。
5.2实验感想与收获
这次是我参加的第三次实验,相对于以前的两次实验,这次实验要成熟许多,通过预习实验,我参照书上的流程图,还是比较轻松的就完成了代码的编写,而且实验设备也比较给力,能够正常运行。
通过这次实验,我感觉当一个程序给出流程图之后,那它真的没有什么难度可言,可笑我以前还那样的舍本逐末,去看别人写的代码,结果是花了更多的时间,却只了解了个大概,而这次通过自己逐字逐条的编写代码,我对8255有了更进一步的了解,而且汇编的编码能力也有了一定的提高。
同时这次实验也告诉我,编写一个程序前,要先编写流程图。
5.3实验特色
所做的实验特色在于加入了一个中断程序,每按一次脉冲屏幕只会显示一次所显示的内容,让我们对于8255内部的运行情况有了更进一步的了解。
5.4展望
如果有充裕的时间,我想修改一下8255方式1输入实验,使得逻辑电平输入的值,便是屏幕上显示的值。