资源描述:
《8255实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、并行接口实验1、简单接口:以245作为输入接口,273作为输出接口,分别接拨动开关,和发光二极管。编程序实现发光二极管显示开关状态,1亮,0灭。该程序要用到245,273两个外设处理电路,245做输入,其8个数据端口接拨动开关;273作输出,其8个数据端口接发光二极管。245地址取8000H,273地址取9000H。程序源代码如下:CS245equ08000hCS273equ09000hcodesegmentassumecs:codestartprocnearAgain:movdx,CS245inal,dxAgain1:mov
2、dx,CS273outdx,aljmpAgaincodeends这段代码是一个死循环,目的是可以根据输入端口的状态随时给出输出。2、改用8255A口代替245,B口代替273。8255A、B口均工作于方式0,编程序实现上述功能。这里由于用到了8255,所以比起要求1,需增加对8255的初始化的过程。由于A、B两口工作在方式0,所以根据命令字规则,命令字为10010000B而8255一共占用4个地址单元,这里选择从8000H开始,即8000H为端口A,8001H为端口B,8002H为端口三(此处未用到),8003为写命令字地址。
3、源代码如下:codesegmentassumecs:codestartprocnearmovdx,8003hmoval,10010000Boutdx,alagain:movdx,8000Hinal,dxmovdx,8001Houtdx,aljmpagainjmp$codeendsendstart此程序中也有一死循环,目的仍然是为了在输出端口随时显示输入端口的状态。3、8255A改工作方式1,8255PC4接单脉冲按键开关,PC3接8259INT0。编制程序实现:INT0中断服务程序实现2功能。(修改拨动开关后,发光二极管显示不
4、变,按单脉冲开关后,显示新开关状态)端口A工作于方式1,作为输入,端口B工作于方式2,作为输出,即可确定8255的工作命令字为10111000B。又该程序用到了中断服务程序,即用到了8259A,这就要求要有8259A的初始化部分和中断服务程序部分,这在上个实验中大部分都已写过。另外需要注意的是,8255允许中断的条件是INTEA为1,而在初始化后,INTEA是默认为0的,这就需要利用命令字的另一种写入方式对8255的INTEA置位,即D7=0,D3D2D1=100,D0=1。程序源代码如下:modeequ10111000B;8
5、255工作方式mode1equ00001001BPA8255equ8000h;8255PA口输出地址CTL8255equ8003hICW1equ00010011b;单片8259,上升沿中断,要写ICW4ICW2equ00100000b;中断号为20HICW4equ00000001b;工作在8086/88方式OCW1equ11111110b;只响应INT0中断CS8259Aequ09000h;8259地址CS8259Bequ09001hdatasegmentCNTdb0dataendscodesegmentassumecs:co
6、de,ds:dataIEnterprocnearpushaxpushdxstimovdx,PA8255inal,dxmovdx,PA8255+1outdx,al;输出计数值movdx,CS8259Amoval,20h;中断服务程序结束指令outdx,alnoppopdxpopaxiretIEnterendpIInitprocmovdx,CS8259Amoval,ICW1outdx,almovdx,CS8259Bmoval,ICW2outdx,almoval,ICW4outdx,almoval,OCW1outdx,alretII
7、nitendpstartprocnearmovdx,CTL8255moval,modeoutdx,almoval,mode1outdx,alclimovax,0movds,axmovbx,4*ICW2;中断号movax,codeshlax,4;x16addax,offsetIEnter;中断入口地址(段地址为0)mov[bx],axmovax,0incbxincbxmov[bx],ax;代码段地址为0callIInitmovax,datamovds,axmovCNT,0;计数值初始为0moval,CNTmovdx,PA8255
8、outdx,alstiLP:;等待中断,并计数。nopjmpLPstartendpcodeendsendstart