1实验四 并行接口实验一、实验目的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所示2图3-1 8255的内部结构及引脚 图3-2 8255控制字格式 五、实验步骤I、基本输入输出实验本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。
参考程序流程如图3-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)运行程序,拨动开关,看数据灯显示是否正确4图3-4 8255并行接口芯片基本输入/输出实验参考接线图 ====================================================================================文件名: A82551.ASM功能描述: B为输入,A口为输出,将读入的数据输出显示======================================================SSTACK SEGMENT STACKDW 32 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS:CODE, SS:SSTACKSTART: MOV DX, 0646HMOV AL, 82HOUT DX, AL AA1: MOV DX, 0642H IN AL, DXCALL DELAYMOV DX, 0640H 5OUT DX, ALJMP AA1DELAY: PUSH CXMOV CX, 0F00HAA2: PUSH AXPOP AXLOOP AA2POP CXRETCODE ENDSEND START实验现象:当拔动 B 接口对应的开关时候,A 接口对应的二极管亮。
这样成功演示了 A作为输出口,B 作为输入口,实现二极管亮和灭的控制II、流水灯实验流水灯显示实验编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示 1、实验原理8255工作方式控制字和C口按位置位/复位控制字格式如图2-2所示8255并行接口芯片分别向A口和B口写入7EH和FEH,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示参考实验程序流程如图3-5所示6图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,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。
73. 打开实验箱电源,运行程序,观察数据灯的显示实验现象:16 个二极管相对循环亮,基本通过 A、B 口,实现了对灯的控制操作实验程序:MY8255_A EQU 0C060H ;设置端口地址MY8255_B EQU 0C061HMY8255_C EQU 0C062HMY8255_MODE EQU 0C063HDATA SEGMENT ;数据暂存区LA DB ?LB DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,MY8255_MODE ;设置工作方式 MOV AL,80HOUT DX,ALMOV DX,MY8255_A ;向端口 A 输入MOV AL,7FHOUT DX,ALMOV LA,AL ;保存 A 端口的数据MOV DX,MY8255_B ;向端口 B 输入MOV AL,0FEHOUT DX,ALMOV LB,AL ;保存 B 端口的数据CALL DALLYA1: MOV AL,LA ;A 循环右移动一位,实现流水灯效果ROR AL,1MOV LA,ALMOV DX,MY8255_AOUT DX,ALMOV AL,LB ;B 循环右移动一位,实现流水灯效果ROL AL,1MOV LB,ALMOV DX,MY8255_BOUT DX,ALCALL DALLYCALL BREAK8JMP A1DALLY: MOV CX,3FFHD1: MOV AX,0FFFFHD2: DEC AXJNZ D2LOOP D1RETBREAK PROC NEAR MOV AH,06HMOV DL,0FFHINT 21HJE RETURNMOV AX,4C00HINT 21HRETURN:RETBREAK ENDPCODE ENDSEND START五、思考题(1)若要实现流水灯不同的流动方向,怎么修改程序?答:通过将不同的数据写入对应的端口中,如:MOV AL,LAROR AL,1MOV LA,ALMOV DX,MY8255_A为了实现流水灯效果,右循环移动一位,既是修改写入端口的值实现不同流动方向。
2)若要延长每个二极管亮的时间,怎样修改程序?答:由于本实验使用了调用 CALL DELAY 子程序实现延时,而子程序的延时是通过对相关指令占有执行周期来实现延时的,所以可以增长延时程序中的占有周期(占有 CPU 时间)达到延时的增长六、实验小结:。