,0033H,0066H,0077H,0099H,0011H,0022H,0088H,0044H,0000HDATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,9LOOP1:MOVDX,CXMOVBX,0LOOP2:MOVAX,[BX]INCBXINCBXCMPAX,[BX]JLEDONE;小于或等于转移XCHG[BX],AXDECBXDECBXMOV[BX],AXINCBXINCBXDONE:DECDXJNELOOP2LOOPLOOP1MOVAX,;单片8259,上升沿触发中断,写ICW4ICW2equ00100000b;中断号为20HICW4equ00000001b;工作在8086/88方式OCW1equ11111110b;Tdb0dataendscodesegmentasummecs:code,ds:earpushaxpushdxmovdx,Toutdx,al;输出计数值movdx,CS8259Amoval,20houtdx,alpopdxpopaxiretienterendpiinitprocmovdx,CS8259Amoval,ICW1outdx,almovdx,CS8259Bmoval,ICW2outdx,almoval,ICW4outdx,almoval,OCW1outdx,earclimovax,0movds,axmovbx,4*ICW2movax,code;movax,offsetienter;中断入口地址(段地址为0)mov[bx],axmovax,0incbxincbxmov[bx],ax;代码段地址为0calliinitmovax,datamovds,T,0;Tmovdx,CS273outdx,alstiLP:nop;等待中断jmpLPstartendpcodeendsendstart实训三8255输入/;方式0,PA,PC输出,PB输入PortAequ8000h;PortAPortBequ8001h;PortBPortCequ8002h;Addrequ8003h;控制字地址codesegmentassumecs:earStart:moval,modemovdx,CAddroutdx,al;输出控制字moval,80Hmovcx,08HOutA:movdx,PortAoutdx,al;输出PortAmovdx,PortCoutdx,alshral,1;移位movah,100calldelay;earpushaxmoval,0pushcxmovcx,axloop$;8251控制口地址CS8251Cequ8001hdatasegmentsourcedb256dup(055h)targetdb256dup(0aah)RBufdb0TBufdb0dataendscodesegmentassumecs:code,ds:ear;8251初始化movdx,CS8251Cmoval,01001111b;1位停止位,无校验,8位数据,波特率因子64outdx,almoval,00010101b;清除错标志,ear;串口发送movdx,CS8251Cmoval,00010101boutdx,alWaitTXD:inal,dxtestal,1;发送缓冲器是否为空jzWaitTXDmoval,TBuf;取要发送的字movdx,CS8251Doutdx,al;ear;串行接收movdx,CS8251CWaitRXD:inal,dxtestal,2;是否已收到一个字jeWaitRXDmovdx,CS8251Dinal,dx;读取接收的字movRBuf,earmovax,datamoves,axmovsi,offsetsourcemovdi,offsettargetmovcx,256movds,axcallIInitMLoop:movdx,CS8251Cinal,dx;是否接收下一个字testal,2jnercvdatacmpcx,0jeMLoopmoval,[si]incsimovTbuf,alcallsandloopMLoopjimpMLooprcvdata:callreceive;读入接收的字moval,RBufmov[di],alincdijmpML
《微机原理与接口技术》实训程序代 来自淘豆网www.taodocs.com转载请标明出处.