中山大学计算机原理接口技术实验报告模板实验三四五六.docx
《中山大学计算机原理接口技术实验报告模板实验三四五六.docx》由会员分享,可在线阅读,更多相关《中山大学计算机原理接口技术实验报告模板实验三四五六.docx(47页珍藏版)》请在冰点文库上搜索。
中山大学计算机原理接口技术实验报告模板实验三四五六
实验报告
实验人:
学号:
日期:
院(系):
专业(班级):
实验题目:
[实验三]可编程并行接口
(一)8255方式0;[实验四]可编程并行接口8255与七段数码管实验;[实验五]交通灯控制实验;[实验六]可编程并行接口
(二)8255方式1
沉重悼念5.12汶川大地震遇难同胞!
[实验三]可编程并行接口
(一)8255方式0
一、实验目的
掌握8255方式0的工作原理及使用方法。
二、实验原理
8255的基本工作原理与使用方法:
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位或32位等。
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/输出方式、方式1--选通输入/输出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如
图-2所示。
图-1:
8255内部结构及引脚图
(a)工作方式控制字(b)c口按位置位/复位控制字
1、8255的内部结构:
如图-1所示,8255的内部结构由以下4个部分组成:
(1)输入/输出端口A、B、C。
这三个端口均可看作是I/O端口,但它们的结构和功能也稍有不同。
A口和B口是一个独立的8位I/O口。
C口可以看作是一个独立的8位I/O口;也可以看作是两个独立的4位I/O口。
(2)A组和B组控制电路。
这是两组根据CPU命令控制8255工作方式的电路,这些控制电路内部设有控制寄存器,可以根据CPU送来的编程命令来控制8255的工作方式,也可以根据编程命令来对C口的指定位进行置位/复位的操作。
A组控制电路用来控制A口及C口的高4位;B组控制电路用来控制B口及C口的低4位。
(3)读/写控制逻辑。
它负责管理8255的数据传输过程,接收CS及RD、WR、RESET,还有来自系统地址总线的口地址选择信号A0和A1。
将这些信号组合后,得到对A组控制部件和B组控制部件的控制命令,并将命令发给这两个部件,以完成对数据、状态信息和控制信息的传输。
(4)数据总线缓冲器。
它是8位双向三态缓冲器,作为8255和CPU之间的数据接口,进行数据的输入/输出。
CPU的编程命令以及外设通过8255传送的工作状态等信息,都是通过它来传输的。
一般情况下数据总线缓冲器的8根数据线D7~D0是与8086CPU低8位数据线相连。
2、8255的工作方式:
(1)方式0:
基本输入/输出方式(basicInput/Output)
方式0是8255的基本输入/输出方式,其特点是与外设传送数据时,不需要设置专用的联络(应答)信号,可以无条件的直接进行I/O传送。
A,B,C3个端口都可以工作在方式0。
A口和B口工作在方式0时,只能设置为以8位数据格式输入/输出;C口工作在方式0时,可以高4位和低4位分别设置为数据输入或数据输出方式。
方式0常用于与外设无条件数据传送或查询方式数据传送。
(2)方式1:
单向选通输入/输出方式(strobeInput/Output)
方式1是一种带选通信号的单方向输入/输出工作方式,其特点是:
与外设传送数据时,需要联络信号进行协调,允许用查询或中断方式传送数据。
由于C口的PC0,PC1和PC2定义为B口工作在方式1的联络信号线,PC3,PC4和PC5定义为A口工作方式1的联络信号线,因此只允许A口和B口工作在方式1。
A口和B口工作在方式1,当数据输入时,C口的引脚信号定义如图7.6所示。
PC3,PC4和PC5定义为A口的联络信号线INTRA,
和IBFA,PC0,PC1和PC2定义为B口的联络信号线INTRB,IBFB和
,剩余的PC6和PC7仍可以作为基本I/O线,工作在方式0。
方式1输入联络信号的功能如下:
(strobeinput):
选通信号,输入,低电平有效。
此信号由外设产生输入,当
有效时,选通A口或B口的输入数据锁存器,锁存由外设输入的数据,供CPU读取。
IBF(inputbufferfull):
输入缓冲器满信号,输出,高电平有效。
当A口或B口的输入数据锁存器接收到外设输入的数据时,IBF变为高电平,作为对外设
的响应信号,CPU读取数据后IBF被清除。
INTR:
中断请求信号,输出,高电平有效,用于请求以中断方式传送数据。
为了能实现用中断方式传送数据,在8255内部设有一个中断允许触发器INTE,当触发器为“1”时允许中断,为“0”时禁止中断。
A口的触发器由PC4置位或复位,B口的触发器由PC2置位或复位。
方式1数据输入的时序如图7.7所示。
当外设的数据准备就绪后,向8255发送
信号以便锁存输入的数据,
的宽度至少为500ns,在
有效之后的约300ns,IBF变为高电平,并一直保持到
信号由低电平变为高电平,待CPU读取数据后约300ns变为低电平,表示一次数据传送结束。
INTR是在中断允许触发器INTE为1,且IBF为1(8255接收到数据)的条件下,在
后沿(由低变高)之后约300ns变为高电平,用以向CPU发出中断请求,待
变为低电平后约400ns,INTR被撤销。
A口和B口工作在方式1,当数据输出时,C口的引脚信号定义如图7.8所示。
PC3,PC6和PC7定义为A口联络信号线INTRA,
和
,PC0,PC1和PC2定义为B口联络信号线INTRB,
和
,剩余的PC4和PC5仍可以作为基本I/O线,工作在方式0。
方式1输出联络信号的功能如下:
(outputbufferfull):
输出缓冲器满指示信号,输出,低电平有效。
信号由8255发送给外设,当CPU将数据写入数据端口时,
变为低电平,用于通知外设读取数据端口中的数据。
(acknowledgeinput):
应答信号,输入,低电平有效。
信号由外设发送给8255,作为对
信号的响应信号,表示输出的数据已经被外设接收,同时清除
信号。
INTR:
中断请求信号,输出,高电平有效。
用于请求以中断方式传送数据。
方式1数据输出的时序如图7.9所示。
当CPU向8255写入数据时,
信号上升沿后约650ns,
有效,发送给外设,作为外设接收数据的选通信号。
当外设接收到送来的数据后,向8255回送
信号,作为对
信号的应答。
信号有效之后约350ns,
变为无效,表明一次数据传送结束。
INTR信号在中断允许触发器INTE为1且
信号无效之后约350ns变为高电平。
若用中断方式传送数据时,通常把INTR连到8259A的请求输入端IRi。
(3)方式2:
双向选通输入/输出方式(bi-directionalbus)方式2为双向选通输入/输出方式,是方式1输入和输出的组合,即同一端口的信号线既可以输入又可以输出。
由于C口的PC7~PC3定义为A口工作在方式2时的联络信号线,因此只允许A口工作在方式2,引脚信号定义如图7.10所示。
由图7.10可以看出,PA7~PA0为双方向数据端口,既可以输入数据又可以输出数据。
C口的PC7~PC3定义为A口的联络信号线,其中PC4和PC5作为数据输入时的联络信号线,PC4定义为输入选通信号
,PC5定义为输入缓冲器满IBFA;
PC6和PC7作为数据输出时的联络信号线,PC7定义为输出缓冲器满
,PC6定义为输出应答信号
;PC3定义为中断请求信号INTRA。
需要注意的是:
输入和输出公用一个中断请求线PC3,但中断允许触发器有两个,即输入中断允许触发器为INTE2,由PC4写入设置,输出中断允许触发器为INTE1,由PC6写入设置,剩余的PC2~PC0仍可以作为基本I/O线,工作在方式0。
8255的控制信号与传输动作的对应关系:
CS
A1
A0
RD
WR
传输说明
0
0
0
0
1
数据从端口A送数据总线
0
0
1
0
1
数据从端口B送数据总线
0
1
0
0
1
数据从端口C送数据总线
0
0
0
1
0
数据从数据总线送端口A
0
0
1
1
0
数据从数据总线送端口B
0
1
0
1
0
数据从数据总线送端口C
0
1
1
1
0
如果D7为1,则由数据总线往控制寄存器写入控制字;如果D7为0,则由数据总线输入的数据作为对C端口的置1、置0命令。
1
X
X
X
X
D7~D0进入高阻状态
0
1
1
0
1
非法的信号组合
0
X
X
1
1
D7~D0进入高阻状态
3、8255初始化编程
8255的A,B,C三个端口的工作方式是在初始化编程时,通过向8255的控制端口写入控制字来设定的。
8255由编程写入的控制字有两个:
方式控制字和置位/复位控制字。
方式控制字用于设置端口A,B,C的工作方式和数据传送方向;置位/复位控制字用于设置C口的PC7~PC0中某一条口线PCi(i=0~7)的电平。
两个控制字公用一个端口地址,由控制字的最高位作为区分这两个控制字的标志位。
(1)方式控制字的格式
8255工作方式控制字的格式如图7.11所示。
D0:
设置PC3~PC0的数据传送方向。
D0=1为输入;D0=0为输出。
D1:
设置B口的数据传送方向。
D1=1为输入;D1=0为输出.
D2:
设置B口的工作方式。
D2=1为方式1;D2=0为方式0。
D3:
设置PC7~PC4的数据传送方向。
D3=1为输入;D3=0为输出。
D4:
设置A口的数据传送方向。
D4=1为输入;D4=0为输出。
D6D5:
设置A口的工作方式。
D6D5=00为方式0,D6D5=01为方式1,D6D5=10或11为方式2。
D7:
方式控制字的标志位,恒为1。
例如,将8255的A口设定为工作方式0输入,B口设定为工作方式1输出,C口没有定义,工作方式控制字为10010100B。
(2)C口置位/复位控制字的格式
8255C口置位/复位控制字的格式如图7.12所示。
8255C口置位/复位控制字用于设置C口某一位口线PCi(i=0~7)输出为高电平(置位)或低电平(复位),对各端口的工作方式没有影响。
D3~D1:
8种状态组合000~111对应表示PC0~PC7。
D0:
用来设定指定口线PCi为高电平还是低电平。
当D0=1时,指定口线PCi输出高电平;当D0=0时,指定口线PCi输出低电平。
D6~D4没有定义,状态可以任意,通常设置为0。
D7位作为标志位,恒为0。
例如,若把PC2口线输出状态设置为高电平,则置位/复位控制字为00000101B。
(3)8255初始化编程
8255的初始化编程比较简单,只需要将工作方式控制字写入控制端口即可。
另外,C口置位/复位控制字的写入只是对C口指定位输出状态起作用,对A口和B口的工作方式没有影响,因此只有需要在初始化时指定C口某一位的输出电平时,才写入C口置位/复位控制字。
【例1】设8255的A口工作在方式0,数据输出,B口工作在方式1,数据输入,编写初始化程序(设8255的端口地址为FF80H~FF83H)。
初始化程序如下:
MOV DX,0FF83H ;控制寄存器端口地址为FF83H
MOV AL,10000110B ;A口方式0,数据输出,B口方式1,数据输入
OUT DX,AL ;将控制字写入控制端
【例2】将8255的C口中PC0设置为高电平输出,PC5设置为低电平输出,编写初始化程序(设8255的端口地址为FF80H~FF83H)。
初始化程序如下:
MOV DX,0FF83H ;控制端口的地址为FF83H
MOV AL,00000001B ;PC0设置为高电平输出
OUT DX,AL ;将控制字写入控制端口
MOV AL,00001010B ;PC5设置为低电平输出
OUT DX,AL ;将控制字写入控制端口
三、实验内容
实验预备:
按要求连接实验台数据线,并打开TPC-USB实验机。
注意检查硬件是否连接以及驱动是否正常安装。
1.实验电路如下图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2.编程从8255C口输入数据,再从A口输出该数据,验证结果。
四、实验器材
实验所用器材
1、TPC-USB通用微机接口实验系统(包含TPC-USB实验台及对应的TPC-USB实验系统集成开发环境)
2、若干导线
五、实验分析与设计
1、按实验要求连线:
PC0~PC7----K0~K7(逻辑电平开关输入)CS----288H~28FH(片选信号)
PA0~PA7----L0~L7(LED显示电路输出)
RD、WR、A0、A1在实验台内部已经连好
编写并运行程序E8255.ASM
io8255aequ288h;A口的地址
io8255bequ28bh;8255控制寄存器端口地址
io8255cequ28ah;C口的地址
codesegment
assumecs:
code
start:
movdx,io8255b;设8255为C口输入,A口输出
moval,8bh
outdx,al
inout:
movdx,io8255c;从C口输入一数据
inal,dx
movdx,io8255a;从A口输出刚才自C口
outdx,al;所输入的数据
movdl,0ffh;判断是否有按键
movah,06h
int21h
jzinout;若无,则继续自C口输入,A口输出
movah,4ch;否则返回
int21h
codeends
endstart
预计运行结果:
拨动开关K,相应置“1”的开关所对应的灯L亮,否则灭。
六、思考题
1、小结8255方式0的特点;
①若A口、B口都工作在方式0,则此时8255的A口、B口两个8位数据口都可以作为输入口和输出口,但不能同时实现输入及输出。
C端口可以是一个8位的简单接口,也可以分为两个独立的4位端口。
②系统没有指定C口的某些线作为专门的信号联络线,但是用户可以自定义C口的某些线作为信号联络线。
③CPU和8255的A口、B口之间传送数据只能用程控方式(即无条件或查询方式),不能用中断方式。
④输出可以被锁存。
输入不能锁存。
读信号有效到数据稳定的时间内,应由输入设备解决数据锁存问题。
2、与前面简单并行接口实验相比较,总结8255的优缺点
①优点:
简单并行接口电路只能进行8个位的基本输出和输入。
而8255芯片通过编程控制寄存器,可以实现A,B,C三口输出和输入,并且不仅能以基本输入/输出的方式工作,而且可以使A,B口工作在选通的方式下。
所以与简单并行接口相比,8255芯片能够支持更多的外设,工作方式更为灵活。
②缺点:
由于8255需要初始化编程来确定工作方式,因此与简单并行接口相比,8255增加了程序的复杂性。
[实验四]可编程并行接口8255与七段数码管实验
一、实验目的
进一步熟悉可编程并行接口8255方式0的使用;掌握数码管显示数字的原理。
二、实验原理
七段数码管的工作原理:
1、LED数码管的工作原理
LED数码管由7个发光二极管组成,如图(a)所示,此外,还有一个圆点型发光二极管(在图中以h表示),用于显示小数点。
通过七段发光二极管亮暗的不同组合,可以显示多种数字、字母以及其它符号。
LED数码管中的发光二极管共有两种连接方法:
(1)共阴极接法:
把发光二极管的阴极连在一起构成公共阴极。
使用时公共阴极接地,这样阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。
实验中使用的LED显示器为共阴极接法。
(2)共阳极接法:
把发光二极管的阳极连在一起构成公共阳极。
使用时公共阳极接+5V。
这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。
为了显示数字或符号,要为LED显示器提供代码,因为这些代码是为显示字形的,因此称之为字形代码。
七段发光二极管,再加上一个小数点位,共计八段。
因此提供给LED显示器的字形代码正好一个字节。
若a、b、c、d、e、f、g、h,8个显示段依次对应一个字节的低位到高位,即D0、D1、D2、D3、D4、D5、D6、D7。
2、单个LED数码管的显示
由于发先工极管发光时.通泣的平均电流为1OmA-20mA,而通常的输出锁存器不能提供这么大的电流,所以LED各段必须接驱动电路.例如,对于共阴极数码管,阴极接地,则阳极要加驱动电路.驱动电路可由三极管构成,也可以采用小规模集成电路。
三、实验内容
实验预备:
按要求连接实验台数据线,并打开TPC-USB实验机。
注意检查硬件是否连接以及驱动是否正常安装。
1、静态显示:
按左图连接好电路,将8255的A口PA0~PA6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端S1接+5V(选中),S0、dp接地(关闭)。
编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。
2、动态显示:
使用右图的电路连接,段码不变,位码驱动输入端S1、S0接8255C口的PC1、PC0。
编程在两个数码管上循环显示“00-99”。
(选作)
五、实验器材
实验所用器材
1、TPC-USB通用微机接口实验系统(包含TPC-USB实验台及对应的TPC-USB实验系统集成开发环境)
3、若干导线
五、实验分析与设计
1、按实验要求连线:
PA0~PA6----a~g(七段数码管的段码驱动输入端)S1----+5V(选中)
S0----GNDDP----GND(接地)
CS----288H~28FH(片选信号)
RD、WR、A0、A1在实验台内部已经连好
实验台上的两个LED为共阴极结构,而位码用反相驱动器驱动,因此,S1接+5V使LED1被选中,S0接地使LED0未被选中(不工作)。
利用七段数码管的字型代码表:
编写并运行程序:
LED1.ASM
datasegment
io8255aequ288h;A口的地址
io8255bequ28bh;8255控制寄存器端口地址
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;显示代码表
mesg1db0dh,0ah,'Inputanum(0--9),otherkeyisexit:
',0dh,0ah,'$'
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;使8255的A口为输出方式
movax,80h
outdx,al
sss:
movdx,offsetmesg1;显示提示信息
movah,09h
int21h
movah,01;从键盘接收字符
int21h
cmpal,'0';是否小于0
jlexit;若是则退出
cmpal,'9';是否大于9
jgexit;若是则退出
subal,30h;将所得字符的ASCII码减30H
movbx,offsetled;bx为数码表的起始地址
xlat;求出相应的段码
movdx,io8255a;从8255的A口输出
outdx,al
jmpsss;转SSS
exit:
movah,4ch;返回
int21h
codeends
endstart
预计运行结果:
从电脑键盘上输入0-9,并在七段数码管上直接显示出来。
2、按实验要求连线:
PA0~PA6----a~g(七段数码管的段码驱动输入端)
S1----PC1S0----PC0DP----GND(不工作)
CS----288H~28FH(片选信号)RD、WR、A0、A1在实验台内部已经连好
通过交替选中LED1和LED0循环显示两位十进制数,位码驱动输入端S1、S0接8255AC口的PC1、PC0,通过C口的这两位交替输出1和0,以便交替选中LED1和LED0,从而实现两位十进制数的交替显示。
编写并运行程序:
LED2.ASM
datasegment
io8255aequ28ah;C口的地址
io8255bequ28bh;8255控制寄存器端口地址
io8255cequ288h;A口的地址
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码
buffer1db0,0;存放要显示的十位和个位
bzdw?
;位码
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8255b;将8255设为A口输出
moval,80h
outdx,al
movdi,offsetbuffer1;设di为显示缓冲区
loop1:
movcx,030h;循环次数
loop2:
movbh,02
lll:
movbyteptrbz,bh
pushdi
decdi
adddi,bz
movbl,[di];bl为要显示的数
popdi
movbh,0
movsi,offsetled;置led数码表偏移地址为SI
addsi,bx;求出对应的led数码
moval,byteptr[si]
movdx,io8255c;自8255A的口输出
outdx,al
moval,byteptrbz;使相应的数码管亮
movdx,io8255a
outdx,al
pushcx
movcx,100
delay:
loopdelay;延时
popcx
moval,00h
outdx,al
movbh,byteptrbz
shrbh,1
jnzlll
looploop2;循环延时
movax,wordptr[di]
cmpah,09
jnzset
cmpal,09
jnzset
movax,0000
mov[di],al
mov[di+1],ah
jmploop1
set:
movah,01
int16h
jneexit;有键按下则转exit
movax,wordptr[di]
incal
aaa
mov[di],al;al为十位
mov[di+1],ah;ah中为个位
jmploop1
exit:
movdx,io8255a
moval,0;关掉数码管显示
outdx,al
movah,4ch;返回
i