您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Protues8255实验报告
华北电力大学实验报告||实验名称8255应用实验课程名称微机原理及应用老师|专业班级姓名学号一.实验要求1、当K0为高电平时,LED由高到低循环亮灭;当K0为低电平时,LED由低到高循环亮灭;当K1为高电平时,LED全灭且程序结束(扩展:当K1为高电平时,LED全灭但程序不结束,等K1再次为低电平时灯又开始循环)。2、在8259的IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz)。每来一个上升沿,申请中断一次,CPU响应后通过8255PA口使发光二极管亮,第1次中断,LED0亮,第2次中断,LED1亮,……第8次中断,LED7亮,中断8次后结束。3、在8259的IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz)。每来一个上升沿,申请中断一次,CPU响应后通过8255PA口使7段数码管亮,第1次中断,显示0,第2次中断,显示1,……第10次中断,显示9,程序结束。【8255的片选地址为8000H,8259的片选地址为9000H,8253的片选地址为A000H】二思路1.硬件(1)74HC138译码电路如图所示,A15为1,E2、E3接地保证74HC138正常工作,此时Y0、Y1、Y2对应地址分别为8000H、9000H、0A000H.此芯片实验1.2.3都需用到(2)8259的片选地址为9000H,所以CS接Y18086有16位数据总线,其低8位作为偶存储体来传输数据,8086的A0要一直为0,所以8259的A0要接8086的A1IR2端输入中断请求信号,该信号由8253的方波信号产生(频率1Hz),所以8259的IR2端与8253的OUT1端相连。此芯片实验2,3要用到(3)8253的片选地址为A000H,所以CS接Y2。CLK0接入1MHz信号,GATE0与GATE1同时接电源,OUT0输入到CLK1,OUT1经分频输出1HZ的信号。此芯片实验2,3要用到(4)对于实验1,8255的连接如下图8255的片选地址为8000H,所以CS接Y0。端口A中的两个端口接开关,作为输入(开关弹起时为高电平,按下时为低电平);端口B中的全部端口作为输出显示。(5)对于实验2,8255的连接如下图端口A中的全部端口作为输出显示(6)对于实验3,8255的连接如下图端口A中的全部端口连接一二级数码管,且该数码管为共阴极连接。二.软件(1)实验1流程图(2)实验2,3流程图(3)8255初始化(实验1.2.3都需要)方式选择控制字,对于实验1:A口方式0输入,B口方式0输出(10010000B=90H)对于实验2,3:A口方式0输出(10000000B=80H)程序如下:实验1:MOVDX,8006H;控制器地址为8006HMOVAL,90H;A口方式0输入,B口方式0输出(10010000B=90H)OUTDX,AL实验2,3:MOVDX,8006H;控制器地址为8006HMOVAL,80H;A口方式0输出(10000000B=80H)OUTDX,AL(4)8253及8259的初始化(实验2,3需要)关于8253及8259的设置与前面的两个实验均相同,其程序如下所示;8253A初始化MOVDX,0A006H;控制器地址0A006HMOVAL,37H;计数器0选用工作方式3(方波)OUTDX,AL;写计数器0工作方式MOVDX,0A000H;计数器0地址0A000HMOVAL,00H;计数器0预置值为1000HOUTDX,ALMOVAL,10HOUTDX,ALMOVDX,0A006H;控制器地址0A006HMOVAL,75H;计数器1选用工作方式2(分频)OUTDX,AL;写计数器1工作方式MOVDX,0A002H;计数器1地址0A002HMOVAL,00H;计数器1预置值1000HOUTDX,ALMOVAL,10HOUTDX,AL;8259A初始化MOVDX,9000H;ICW1=13H(00010011B)MOVAL,13HOUTDX,ALMOVDX,9002H;ICW2=80H(10000000B)MOVAL,80HOUTDX,ALMOVDX,9002H;ICW3=01H(00000001B)MOVAL,01HOUTDX,AL(5)关于实验1的设置读A口信息,判断K0K1若K1=1,则灯全灭若K0K1=00,则灯由低到高循环亮灭若K0K1=10,则灯由高到低循环亮灭其中还需要两个延时子程序程序如下MOVBL,01HMOVDX,8000H;A口地址为8000HINAL,DX;读A口中的数据ANDAL,03H;AL=AL&00000011BCMPAL,02HJAEMIE;K1=1转到MIECMPAL,01HJENEXT1;K1K0=01B转HL,K1K0=00B做LHNEXT1:MOVDX,8002H;B口地址为8002HMOVAL,BLOUTDX,ALCALLDELAY1ROLBL,1JMPNEXT1NEXT2:MOVDX,8002H;B口地址为8002HMOVAL,BLOUTDX,ALCALLDELAY2RORBL,1JMPNEXT2MIE:MOVDX,8002H;B口地址为8002HMOVAL,00H;LED全灭OUTDX,ALMOVDX,8000H;A口地址为8000HINAL,DX;读A口中的数据ANDAL,03H;AL=AL&00000011BCMPAL,01HJENEXT2;K1K0=01B转到NEXT2CMPAL,00HJENEXT1;K1K0=00B转到NEXT1JMPMIE延时子程序如下:DELAY1PROCNEARMOVCX,0A000HL2:MOVDX,8000H;A口地址为8000HINAL,DX;读A口中的数据ANDAL,03H;AL=AL&00000011BCMPAL,02HJAEMIE;K1=1转到MIECMPAL,01HJENEXT2;K1K0=01B转到NEXT2LOOPL2RETDELAY1ENDPDELAY2PROCNEARMOVCX,0A000HL4:MOVDX,8000H;A口地址为8000HINAL,DX;读A口中的数据ANDAL,03H;AL=AL&00000011BCMPAL,02HJAEMIE;K1=1转到MIECMPAL,00HJENEXT1;K1K0=00B转到NEXT1LOOPL4RETDELAY2ENDP(6)关于中断的设置(实验2,3需要)(其中红色字体为实验2和实验3不同的部份)【需注意,对于实验3要编写数据段,为了能直接调用共阴极数码管段码表】程序如下:DATASEGMENT;DATA逻辑段开始TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;共阴极数码管段码表[0-9];非规范装入中断向量MOVAX,0MOVDS,AXMOVBX,82H*4MOVAX,OFFSETINTPMOV[BX],AXINCBXINCBXMOVAX,SEGINTPMOV[BX],AXMOVDX,9002H;允许IRQ2中断INAL,DXANDAL,0FBHOUTDX,AL;主程序(高电平点灯)MOVDX,8000HMOVAL,00H;LED灯初始化全灭OUTDX,ALMOVBL,1;第一次中断后LED0亮【MOVAX,DATAMOVDS,AXLEASI,TABLE;第一次中断的状态:显示'0'】MOVCX,8;设置中断次数为8【实验3设置的中断次数为10】STIL1:MOVAL,82H;Proteus中8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号MOVDX,0B000HOUTDX,AL;所以造成了要在这里执行EOI的假相,地址使用没有用过的,如b000h,8259的地址是9000hCMPCX,0JZQUITJMPL1;等待中断QUIT:CLI;关中断MOVDX,9002H;禁止IRQ2中断INAL,DXORAL,4OUTDX,ALSTI;开中断MOVCX,0FFFFHL:LOOPL;为看到第8次中断结束后LED灯亮,需用延时MOVDX,8000HMOVAL,00H;8次中断结束,LED灯全灭OUTDX,ALJMP$INTPPROC;中断服务子程序MOVAL,BL[MOVAL,[SI]]MOVDX,8000HOUTDX,ALROLBL,1[INCSI]DECCXMOVDX,9000HMOVAL,20H;发中断结束命令EOIOUTDX,ALIRET;中断返回三.运行结果实验1:当K1高电平时,LED灯都不亮。当K1低电平,K0高电平时,LED灯按如下次序亮当K1为高电平,K0为低电平时,LED灯按如下顺序亮实验2.第1次中断,LED0亮。以后每来一个上升沿,LED灯依次亮灭,直到计数到8为止。最后LED灯全灭。实验3:第一次中断数码管上显示数字“0”,以后每次中断,数码管上依次显示数字“1”—“9”。最后数码管全灭说明:实验3在LAB6000的硬件试验箱上连接时,由于没有进行位选,数码管显示是六个数码管全部同时显示从“0”—“9”的变化,然后全部同时灭掉的
本文标题:Protues8255实验报告
链接地址:https://www.777doc.com/doc-8137981 .html