实验四并行接口实验
一、实验目的
1.掌握通过8255A并行口进行数据传输的方法。
2.控制16位数据灯的相对循环显示。
二、实验设备
PC机一台,TD—PIT/TD—PIT—B实验装置一套。
三、实验内容
1、基本输入输出实验。编写程序,使8255的A口为输出,B口
为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。
2、流水灯显示实验。编写程序,使8255的A口和B口均为输出,
实现16位数据灯的相对循环显示。
四、8255工作原理
并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/出方式、
方式1--选通输入/出方式、
方式2--双向选通工作方式。
8255的内部结构及引脚如图3-1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图3-2所示。
图3-1 8255的内部结构及引脚
图3-2 8255控制字格式
五、实验步骤
I、基本输入输出实验
本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。参考程序流程如图3-3所示。
图3-3 8255并行接口芯片基本输入/输出实验(1)参考程序流程图实验步骤
编写程序,使8255并行接口芯片端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,实现输入输出功能。具体实验步骤如下。
1)确认从PC机引出的两根扁平电缆已经连接在实验平台上。
2)打开实验箱电源,首先运行PCI_BIOS.EXE程序,查看I/O空间始地址。
3)参考图3-4所示连接实验线路。
4)利用查出的地址编写程序,然后编译链接。
5)运行程序,拨动开关,看数据灯显示是否正确
图3-4 8255并行接口芯片基本输入/输出实验参考接线图
==================================================================================== 文件名: A82551.ASM
功能描述: B为输入,A口为输出,将读入的数据输出显示
====================================================== SSTACK SEGMENT STACK
DW 32 DUP(?)
SSTACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:SSTACK
START: MOV DX, 0646H
MOV AL, 82H
OUT DX, AL
AA1: MOV DX, 0642H
IN AL, DX
CALL DELAY
MOV DX, 0640H
OUT DX, AL
JMP AA1
DELAY: PUSH CX
MOV CX, 0F00H
AA2: PUSH AX
POP AX
LOOP AA2
POP CX
RET
CODE ENDS
END START
实验现象:
当拔动B接口对应的开关时候,A接口对应的二极管亮。这样成功演示了A作为输出口,B作为输入口,实现二极管亮和灭的控制。
II、流水灯实验
流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。
1、实验原理
8255工作方式控制字和C口按位置位/复位控制字格式如图2-2所示。8255并行接口芯片分别向A口和B口写入7EH和FEH,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。参考实验程序流程如图3-5所示
图3-5 8255并行接口芯片流水灯实验参考程序流程图
2、实验步骤
编写程序,使8255并行接口芯片端口A端口B均为输出。
实验步骤如下:
1)确认从PC机引出的两根扁平电缆已经连接在实验平台上。
2)打开实验箱电源,首先运行PCI_BIOS.EXE程序,查看I/O空间始地址。
3)参考图3-6所示连接实验线路。
4)利用查出的地址编写程序,然后编译链接。
5)运行程序,看信号灯显示现象。
1.按下图连接硬件线路:
2.编制程序,通过8255A控制发光二极管,使16位数据灯的相对循环显示。
编程提示
首先分别向A口和B口写入7FH和FEH,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。
3. 打开实验箱电源,运行程序,观察数据灯的显示。
实验现象:
16个二极管相对循环亮,基本通过A、B口,实现了对灯的控制操作。
实验程序:
MY8255_A EQU 0C060H ;设置端口地址
MY8255_B EQU 0C061H
MY8255_C EQU 0C062H
MY8255_MODE EQU 0C063H
DATA SEGMENT ;数据暂存区
LA DB ?
LB DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV DX,MY8255_MODE ;设置工作方式
MOV AL,80H
OUT DX,AL
MOV DX,MY8255_A ;向端口A输入
MOV AL,7FH
OUT DX,AL
MOV LA,AL ;保存A端口的数据
MOV DX,MY8255_B ;向端口B输入
MOV AL,0FEH
OUT DX,AL
MOV LB,AL ;保存B端口的数据
CALL DALLY
A1: MOV AL,LA ;A循环右移动一位,实现流水灯效果 ROR AL,1
MOV LA,AL
MOV DX,MY8255_A
OUT DX,AL
MOV AL,LB ;B循环右移动一位,实现流水灯效果 ROL AL,1
MOV LB,AL
MOV DX,MY8255_B
OUT DX,AL
CALL DALLY
CALL BREAK
JMP A1
DALLY: MOV CX,3FFH
D1: MOV AX,0FFFFH
D2: DEC AX
JNZ D2
LOOP D1
RET
BREAK PROC NEAR
MOV AH,06H
MOV DL,0FFH
INT 21H
JE RETURN
MOV AX,4C00H
INT 21H
RETURN:RET
BREAK ENDP
CODE ENDS
END START
五、思考题
(1)若要实现流水灯不同的流动方向,怎么修改程序?
答:通过将不同的数据写入对应的端口中,如:
MOV AL,LA
ROR AL,1
MOV LA,AL
MOV DX,MY8255_A
为了实现流水灯效果,右循环移动一位,既是修改写入端口的值实现不同流动方向。
(2)若要延长每个二极管亮的时间,怎样修改程序?
答:由于本实验使用了调用CALL DELAY子程序实现延时,而子程序的延时是通过对相关指令占有执行周期来实现延时的,所以可以增长延时程序中的占有周期(占有CPU时间)达到延时的增长。
六、实验小结:
最新文件---------------- 仅供参考--------------------已改成-----------word文本
--------------------- 方便更改
赠人玫瑰,手留余香。