8255并口控制器应用实验1.实验目的(1)掌握8255的工作方式及应用编程。(2)掌握8255的典型应用电路接法。2.实验设备PC微机一台、TD-PIT+实验系统一套。3.实验内容(1)基本输入输出实验。编写程序,使8255的A口为输出,B口为输入,完成拨动开关到数据灯的数据传输。要求只要开关拨动,数据灯的显示就改变。(2)流水灯显示实验。编写程序,使8255的A口和B口均为输出,实现16位数据灯的相对循环显示。4.实验原理并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源供电,能在以下三种方式下工作:方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。8255的内部结构及引脚如图1所示,8255工作方式控制字和C口按位置位/复位控制字格式如图2所示。图18255的内部结构及引脚(a)工作方式控制字(b)C口按位置位/复位控制字图28255控制字格式5.实验说明及步骤(1)基本输入输出实验本实验使8255端口A工作在方式0并作为输出口,端口B工作在方式0并作为输入口。用一组开关信号接入端口B,端口A输出线接至一组数据灯上,然后通过对8255芯片编程来实现输入输出功能。参考程序流程如图3所示。图38255并口应用实验(1)参考程序流程图图48255并口应用实验(1)参考接线图实验步骤:a)确认从PC机引出的两根扁平电缆已经连接在实验平台上。b)参考图4所示连接实验线路。c)首先运行CHECK程序,查看I/O空间始地址。d)利用查出的地址编写程序,然后编译链接。e)运行程序,拨动开关,看数据灯显示是否正确。;8255基本输入输出实验代码;***********根据查看端口资源修改下列符号值****************IOY0EQU9C00H;片选IOY0对应的端口始地址;*********************************************************MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSCODESEGMENTASSUMECS:CODESTART:MOVDX,MY8255_MODE;初始化8255工作方式MOVAL,82H;工作方式0,A口输出,B口输入OUTDX,ALLOOP1:MOVDX,MY8255_B;读B口INAL,DXMOVDX,MY8255_A;写A口OUTDX,ALMOVAH,1;判断是否有按键按下INT16HJZLOOP1;无按键则跳回继续循环,有则退出QUIT:MOVAX,4C00H;结束程序退出INT21HCODEENDSENDSTART(2)流水灯显示实验首先分别向A口和B口写入80H和01H,然后分别将该数右移和左移一位,再送到端口上,这样循环下去,从而实现流水灯的显示。参考实验程序流程如图5所示。图58255并口应用实验(2)参考程序流程图图68255并口应用实验(2)参考接线图实验步骤:a)确认从PC机引出的两根扁平电缆已经连接在实验平台上。b)首先运行CHECK程序,查看I/O空间始地址。c)利用查出的地址编写程序,然后编译链接。d)参考图6所示连接实验线路。e)运行程序,看数据灯显示是否正确。;8255流水灯显示实验代码;************根据查看端口资源修改下列符号值***************IOY0EQU9C00H;片选IOY0对应的端口始地址;*********************************************************MY8255_AEQUIOY0+00H*4;8255的A口地址MY8255_BEQUIOY0+01H*4;8255的B口地址MY8255_CEQUIOY0+02H*4;8255的C口地址MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址STACK1SEGMENTSTACKDW256DUP(?)STACK1ENDSDATASEGMENTLADB?;定义数据变量LBDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,MY8255_MODE;定义8255工作方式MOVAL,80H;工作方式0,A口和B口为输出OUTDX,ALMOVDX,MY8255_A;写A口发出的起始数据MOVAL,80HOUTDX,ALMOVLA,ALMOVDX,MY8255_B;写B口发出的起始数据MOVAL,01HOUTDX,ALMOVLB,ALLOOP1:CALLDELAYMOVAL,LA;将A口起始数据右移再写入A口RORAL,1MOVLA,ALMOVDX,MY8255_AOUTDX,ALMOVAL,LB;将B口起始数据左移再写入B口ROLAL,1MOVLB,ALMOVDX,MY8255_BOUTDX,ALMOVAH,1;判断是否有按键按下INT16HJZLOOP1;无按键则跳回继续循环,有则退出QUIT:MOVAX,4C00H;结束程序退出INT21HDELAYPROCNEAR;软件延时子程序PUSHCXPUSHAXMOVCX,3FFHD1:MOVAX,0FFFFHD2:DECAXJNZD2LOOPD1POPAXPOPCXRETDELAYENDPCODEENDSENDSTART