一、实验目的:
1.掌握8255A的工作方式使用以及编程。
2.利用8255A完成将数码开关的输入送给发光二极管并显示
二、实验内容与要求:
1.基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就发生相应改变。
2.流水灯显示实验。编写程序,使8255的A口和B口均为输出,数据灯D7~D0由左向右,每次仅亮-一个灯,循环显示,D15~D8与D7~D0正相反,由右向左,每次仅点亮一个灯,循环显示。
3.方式1输入输出实验。编写程序,使8255工作在方式1控制下的A口输入,B口输出。
三、实验步骤:
1.基本输入输出实验
本实验使8255端口A工作在方式О并作为输出口,端口B工作在方式О并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。具体实验步骤如下,其中第(4)步到第(6)步固化功能可选作:
(1)实验接线图如图4.3.4所示,按图连接实验线路图。
(2)编写实验程序(例程文件名为:A82551.ASM),经编译、连接无误后装入系统。
(3)运行程序,改变拨动开关,同时观察LED显示,验证程序功能。
(4)点击“调试”下拉菜单中的“固化程序”项,将程序固化到系统存储器中。
(5)将386EX单板机系统的短路跳线JDBG短接到RUN端,然后按复位按键,观察程序是否正常运行﹔关闭实验箱电源,稍等后再次打开电源,看固化的程序是否运行,验证程序功能。
(6)实验完毕后,请将短路跳线JDBG的短路块短接到DBG端,以方便下次联机实验。
2流水灯显示实验
使8255的A口和B口均为输出,数据灯D7~DO由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~DO正好相反,由右向左,每次仅点亮一个灯,循环显示。实验接线图如图4.3.5所示。实验步骤如下所述:
(1)按图4.3.5连接实验线路图。
(2)编写实验程序(例程文件名为:A82552.ASM),经编译、链接无误后装入系统。
(3)运行程序,观察LED灯的显示,验证程序功能。
(4)自己改变流水灯的方式,编写程序。
(5)固化程序并脱机运行(可选做)。
3.方式1输入输出实验
本实验使8255端口A工作在方式О并作为输出口,端口B工作在方式1并作为输入口,则端口C的PC2成为选通信号输入端STBB,PCO成为中断请求信号输出端INTRB。当B口数据就绪后,通过发STBB信号来请求CPU读取端口B数据并送端口A输出显示。用一组开关信号接入端口B,端口A输出线接至一组数据灯上。具体实验步骤如下:
(1)按图4.3.6连接实验线路图。
(2)编写实验程序(例程文件名为:A82553.ASM),经编译、链接无误后装入系统。
(3)运行程序,然后改变拨动开关,准备好后,按动KK1,同时观察数据灯显示,应与开关组信号一致。
四、电路连接
1.基本输入输出实验
2.流水灯显示实验
3.方式1输入输出实验
五、代码设计
1.关于8255控制字
MOV DX, MY8255_MODEMOV AL, 82HOUT DX, AL
关于8255工作方式控制字和C口按位置位/复位控制字格式如下图所示。
82H=1000 0010B;表示工作方式0,A口输出,B口输入
之后的代码中出现的80H与86H同理。
80H=1000 0000B;表示工作方式0,A口输出,B口输出
86H=1000 0110B;表示工作方式1,A口输出,B口输入
2.关于灯的控制
AA1: MOV DX, MY8255_BIN AL, DXCALL DELAYMOV DX, MY8255_AOUT DX, ALJMP AA1
将8255 B端口的状态给AL,虽然这里是把B端口的地址送给AL,但是可以理解成把B端口状态给AL,例如B端口为0010(1代表拨动的那个开关),则把0010给AL,后面通过把AL给8255A端口,控制灯。
3.关于流水灯的控制
AA1: MOV DX, MY8255_AMOV AL, BHOUT DX, ALROR BH, 1;右移移位MOV DX, MY8255_BMOV AL, BLOUT DX, ALROL BL, 1;左移一位 ;延时CALL DELAYCALL DELAYJMP AA1
8001H=1000 0000 0000 0001, 1即为控制灯亮,这时的80001H就代表灯D15和D0亮,后面分开控制BH、BL中1的移动,就可以控制灯的移动,比如BH=1000 0000 亮一次后 做循环移位操作(向左或向右),就可以实现灯的流水效果,把1理解成灯亮,1移动,1到的位置灯亮,所以1不得移动,形成流水灯。
六、实验现象
1.基本输入输出实验
2.流水灯显示实验
数据灯D7~D0由左向右,每次仅亮一个灯,循环显示,D15~D8与D7~D0正好相反,由右向左,每次仅点亮一个灯,循环显示。
3.方式1输入输出实验
七、完整代码
1.基本输入输出实验
;=========================================================
; 文件名: A82551.ASM
; 功能描述: A口为输入,B口为输出,将读入的数据输出显示
; IOY0
;=========================================================IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址SSTACK SEGMENT STACKDW 32 DUP(?)
SSTACK ENDS
CODE SEGMENTASSUME CS:CODE
START: MOV DX, MY8255_MODEMOV AL, 82HOUT DX, AL
AA1: MOV DX, MY8255_BIN AL, DXCALL DELAYMOV DX, MY8255_AOUT DX, ALJMP AA1
DELAY: PUSH CXMOV CX, 0F00H
AA2: PUSH AXPOP AXLOOP AA2POP CXRET
CODE ENDSEND START2.流水灯显示实验
;=========================================================
; 文件名: A82552.ASM
; 功能描述: A口为输出,B口为输出,流水灯显示
;=========================================================IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址SSTACK SEGMENT STACKDW 32 DUP(?)
SSTACK ENDS
CODE SEGMENTASSUME CS:CODE
START: MOV DX, MY8255_MODEMOV AL, 80HOUT DX, ALMOV BX, 8001H
AA1: MOV DX, MY8255_AMOV AL, BHOUT DX, ALROL BH, 2MOV DX, MY8255_BMOV AL, BLOUT DX, ALROL BL, 1 CALL DELAYCALL DELAYJMP AA1
DELAY: PUSH CXMOV CX, 0F000H
AA2: PUSH AXPOP AXLOOP AA2POP CXRET
CODE ENDSEND START3.方式1输入输出实验;=========================================================
; 文件名: A82553.ASM
; 功能描述: 本实验使8255端口A工作在方式0并作为输出口,
; 端口B工作在方式1并作为输入口
;=========================================================IOY0 EQU 0600H ;片选IOY0对应的端口始地址
MY8255_A EQU IOY0+00H*2 ;8255的A口地址
MY8255_B EQU IOY0+01H*2 ;8255的B口地址
MY8255_C EQU IOY0+02H*2 ;8255的C口地址
MY8255_MODE EQU IOY0+03H*2 ;8255的控制寄存器地址STACK1 SEGMENT STACKDW 256 DUP(?)
STACK1 ENDS
CODE SEGMENTASSUME CS:CODE
START: MOV DX,MY8255_MODE ;初始化8255工作方式MOV AL,86H ;工作方式1,A口输出,B口输入OUT DX,ALMOV DX,MY8255_MODE ;C口PC2置位MOV AL,05H OUT DX,ALPUSH DSMOV AX, 0000HMOV DS, AXMOV AX, OFFSET MIR7 ;取中断入口地址MOV SI, 003CH ;中断矢量地址MOV [SI], AX ;填IRQ7的偏移矢量MOV AX, CS ;段地址MOV SI, 003EHMOV [SI], AX ;填IRQ7的段地址矢量CLIPOP DS;初始化主片8259MOV AL, 11HOUT 20H, AL ;ICW1MOV AL, 08HOUT 21H, AL ;ICW2MOV AL, 04HOUT 21H, AL ;ICW3MOV AL, 01HOUT 21H, AL ;ICW4MOV AL, 6FH ;OCW1OUT 21H, ALSTI
AA1: NOPJMP AA1
MIR7: PUSH AXMOV DX,MY8255_B ;读B口IN AL,DXMOV DX,MY8255_A ;写A口OUT DX,ALMOV AL,20HOUT 20H,AL POP AX IRET
DELAY: PUSH CXMOV CX, 0F00H
AA0: PUSH AXPOP AXLOOP AA0POP CXRE
CODE ENDSEND START