您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > (8255A)可编程并行接口
浙江工业大学计算机学院实验报告实验名称定时/计数器(8253)姓名学号班级教师日期2014.11.2◆实验目的和要求了解8255A并行接口芯片的工作原理,学会设置方式选择控制字,设置C端口置位控制字,如何从端口读入,输出数据。并且了解A、B、C各个端口的工作机理和它们之间的联系。◆实验设备(环境)及要求PC机一台,TPC-USB平台,8255A并行接口芯片◆实验要求实验(1):从8255端口C输入数据,再从端口A输出。实验(2):用8255测试3-8译码器74LS138输出结果。要求人机交互界面设计按照集成电路74LS138芯片的引脚图显示在屏幕上,如图3.3所示。Y0Y1Y2Y3Y4Y5Y6Y7+-----------------------------------------------------++-----------------------------------------------------+||||||||||A74LS138BCG1G2A+G2BTestAgain?(Y/N)图3.3TPC-USB平台8255方式0实验二:人机交互界面图实验(3):编程实现每按一次单脉冲按钮产生一个正脉冲,使8255产生一次中断请求,让CPU进行一次中断服务:依次输出01H、02H,04H,08H,10H,20H,40H,80H使L0~L7依次发光,中断8次结束。实验(4):编程实现:每按一次单脉冲按钮产生一个正脉冲使8255产生一次中断请求,让CPU进行一次中断服务:读取逻辑电平开关预置的ASCII码,在屏幕上显示其对应的字符,中断8次结束。◆实验步骤实验(1):1)连接实验电路如图3.1,8255端口C接逻辑电平开关K0~K7,端口A接LED显示电路L0~L7。PC211K28PA0L0PC09K0PC110K1PC313K3PC414K4PC515K5PC616K6PC717K7CS18288H7PA1L16PA2L25PA3L34PA4L43PA5L52PA6L61PA7L7U188255图3.1TPC-USB平台8255方式0实验一连线2)根据流程图3.2,编程并运行,观察实验结果。设置8255C口输入、A口输出从C口输入数据将此数据从A口输出No有键按下吗?Yes开始结束图3.2TPC-USB平台8255方式0实验1:程序流程实验(2):1)按图3.4连接硬件电路。8255PA3CS288HPA4PA5PA6PA774LS138Y0Y1Y2Y3Y4Y5Y6Y7GNDVCCABCG1G2AG2B15141312111097823645161+5VPC0PC1PC2PC3PC4PC5PC6PC7图3.4TPC-USB平台8255方式0实验二连线图2)根据流程图3.5,编程并运行,观察实验结果。设置8255各端口的工作模式将输入数值自A口输出到74LS138从C口读取74LS138的输出Yes是否继续测试?No开始显示界面,等待输入各端口的初始值显示74LS138的输出数据结束图3.5TPC-USB平台8255方式0实验二流程图实验(3):1)按图3.6连好线路。CS288H~28FH8255PA0PA1PA2PA3PA4PA5PA6PA7L0L1L2L3L4L5L6L7PC6PC3(ACK)IRQ(INTRA)图3.6TPC-USB平台8255方式1输出实验连线图2)根据流程图3.7,编程并运行,观察实验结果。开始设置中断向量(IRQ3)开放中断(IRQ3)设置8255A口方式1输出将8255的PC6置位将BL中的数从A口输出发中断结束命令BL左移一位NoCF==1?Yes关闭中断(IRQ3)开中断返回DOS中断返回(B)输出中断服务程序循环等待(A)输出主程序BL赋初值1开始(A)输出主程序(B)输出中断服务程序图3.7TPC-USB平台8255方式1输出实验流程图实验(4):1)按图3.8连好线路。CS288H~28FH8255PA0PA1PA2PA3PA4PA5PA6PA7k0k1k2k3k4k5k6k7PC4PC3(STB)IRQ(INTRA)图3.8TPC-USB平台8255方式1输入实验连线图2)根据流程图3.9,编程并运行,观察实验结果。开始设置中断向量(IRQ3)开放中断(IRQ3)设置8255A口方式1输入将8255的PC4置位在屏幕上显示相应的ASCII码发中断结束命令中断次数计数器减1No计数器为0吗?Yes关闭中断(IRQ3)开中断结束中断返回(B)输出中断服务程序循环等待(A)主程序设置中断次数计数器开始从A口输入数据(A)输出主程序(B)输出中断服务程序图3.9TPC-USB平台8255方式1输入实验流程图◆实验结果实验(1):PC0~PC7对应的各个开关打开,相应PA端口的灯就亮,开关关闭,则相应PA端口的灯就灭。实验(2):在屏幕上74LS138译码器的各个引脚上输入相应的值,由A、B、C三个引脚的二进制值计算出十进制数(这部分都是译码器的工作),行对应的引脚输出0,其他引脚输出1。实验(3):每按一次单脉冲按钮,产生一次中断请求,依次使L0~L7灯亮,中断8次结束。实验(4):每按一次单脉冲按钮,产生一次中断请求,在屏幕上显示A端口开关预置的ASIIC码,中断8次结束◆讨论和分析(1)实验结果分析:实验(1):通过movdx,28AHinal,dx读入C端口的字,即读入C端口的开关预置的值,又通过movdx,288Houtdx,al把从C端口读入的字送到A端口,所以A端口相应的灯会亮。实验(2):在屏幕上A、B、C相应的引脚输入值,通过调用InputB子程序将输入的值读入A端口,经过译码器的计算,在Y0~Y7引脚输出对应的值,然后由C端口读入,调用OutputC子程序一位一位得取出来,然后依次输出在屏幕上对应的引脚。实验(3):每按一次单脉冲按钮,产生一次中断请求,通过moval,blmovdx,288houtdx,al将bl的值从8255的A口输出,由于bl初始化为01H,每一次中断以后执行shlbl,1将bl左移一位,即01H变成02H,依次变成04H、08H、10H…….所以L0~L7会依次发光。实验(4):每按一次单脉冲按钮,产生一次中断请求,通过movdx,288hinal,dx自8255A口输入一数据,又通过movdl,almovah,02hint21h将数据在屏幕上输出。,bl初始化为8,每执行一次中断bl减1,所以8次以后退出。(2)实验总结及需要注意的问题:由于各种硬件设备的连线都与前面的实验比较相似,所以在硬件连接上没有出现什么问题,在第一个实验过程中,中间都没有差错,但是就是出不了结果,经过几番折腾后,我们换了它的端口,因为288H端口就是没有结果,换了280端口后才成功了,所以本来最简单的一个实验却耗费了很长的时间。实验2相对来说是这几个实验中最难做的,代码运行后不管怎么输入引脚值,Y0~Y7引脚输出的都是全1,代码也找不出错误,后来重启了实验运行软件,结果就好了。实验3其实也比较简单,但是实验结果就是A端口连接的灯都不会亮,在这里也耗费了很多时间,后来才发现在做第2个实验的时候,把74LS138译码器移到了另一个位置,导致小灯不能发光,移到原来位置以后就可以了。实验4跟实验3的原理差不多,一个是输入,一个是输出,所以在实验3的基础上很快就完成了。◆实验主要代码实验(1):codesegmentassumecs:codestart:moval,10001001Bmovdx,28BHoutdx,al;设置方式选择控制字movdx,28AHinal,dx;读入C端口的字movdx,288Houtdx,al;把从C端口读入的字送到A端口movdl,almovah,2int21h;显示输出,dl中存储的为输出的字符movdl,0dhint21h;回车符jmpstartmovax,4c00h;返回DOS系统int21hcodeendsendstart实验(2):datasegmentchipdb13,10db13,10db'Programtotestthechipof74LS138',13,10db13,10db13,10db'+------------------------------+',13,10db'|ABCG1G2A+G2B|',13,10db'||',13,10db'|74LS138|',13,10db'||',13,10db'|Y0Y1Y2Y3Y4Y5Y6Y7|',13,10db'+------------------------------+',13,10,'$'messdb'Afteryouhaveready,Pleasepressanykey!','$'mes2db'TestAgain?(Y/N)','$'InAdb0OutCdb0clldb'','$'dataends;********************************************codesegmentassumecs:code,ds:datastart:movax,datamovds,axagain:callcls;屏幕初始化callInputB;输入各个引脚的子程序,InA赋值movdx,28bh;设置方式选择控制字moval,10001011boutdx,almovdx,288h;把InA的值送到A端口moval,InAoutdx,alcallOutputC;C端口读入,并显示在屏幕相应引脚上jmp1:movah,2movdh,15movdl,20int10h;置光标位置,dh为行,dl为列movah,09;输出提示符TestAgain?(Y/N)leadx,mes2int21hmovah,1int21h;从键盘输入一个字符存于al中cmpal,'y';判断是否为Yjeagain;相等则重复执行cmpal,'n';判断是否为Njeexit;相等则退出movah,2movdh,15movdl,0int10h;置光标位置,dh为行,dl为列leadx,cll;输出cll字符串movah,9int21hjmpjmp1;如果输入的既不是Y也不是N,则跳到jump1继续执行exit:movah,4chint21h;********************************************InputBprocnearmovah,2movbh,0movdx,0int10h;置光标位置,dh为行,dl为列movah,09leadx,chipint21h;显示74LS138芯片视图movah,2movbh,0movdh,15movdl,10int10h;置光标位置,dh为行,dl为列movah,09hleadx,messint21h;提示输入引脚值movah,0chmoval,08hint21h;清除缓冲区,并请求指定的输入功能为08hwait1:movah,0Bhint21h;检验键盘状态cmpal,0jnewait1;不相等,继续等待movah,2movbh,0movdh,15movdl,10int10h;置光标位置leadx,cllmovah,9int21h;输出cll字符串movdh,4;用于置光标位置movdl,18jmp3:pushdxmovah,2movbh,0int10h;置光标位置jmp4:movah,7int21h;键盘输入(无回显),输入值存放在alcmpal,'1';输入为1则往下执行,不为1则跳转到jump2执行jnejmp2movah,2xchgal,dlint21h;输出刚刚输入的字符movcl,1;用于移位movbl,InA;把InA的值存入blsalbl,cl;bl算数左移一位addbl,1;bl加1movInA,bl;将bl的值存入InAjmpjmp5jmp2:cmpal,'0'jnejmp4;输入为0则往下执行,不为0则跳转到jump2执行,重新输入movah,2xchgal,dlint21h;输出刚刚输入的字
本文标题:(8255A)可编程并行接口
链接地址:https://www.777doc.com/doc-3042741 .html