第91页,共172页,星期日,2025年,2月5日当甲机CPU将数据输出到端口A时,变低,表示甲机的数据端口A的输出缓冲器满,同时给乙机端口A一个选通信号(变低),数据从甲机输出到乙机并在乙机的数据端口A锁存。当乙机CPU从端口A取回数据后,变低,表示乙机的数据端口A的输入缓冲器为空,给甲机一个回答信号,变低,同时甲机的变高,甲机CPU查询到变高后,会将下一个数据送到端口A。如此重复上述过程,便可完成全部数据的传送。第92页,共172页,星期日,2025年,2月5日;甲机发送程序MOVCX,0400H;发送数据块长度1KBMOVDX,0A03H;8255控制口地址MOVAL;方式字(A口方式1输出)OUTDX,ALMOVAL;置PC7=1,输出缓冲器空OUTDX,ALL:MOVDX,0A02H;8255状态口地址(端口C)INAL,DX;读状态口ANDAL,80H;输出缓冲器是否满(PC7=0)JZL;缓冲器满则等侍MOVDX,0A00H;否则向A口发送数据MOVAL,[BX]0UTDX,AL;内存一个数据向乙机发送INCBX;修改内存单元地址LOOPL;未发送完,继续HLT;传送完毕,暂停第93页,共172页,星期日,2025年,2月5日;乙机接收程序MOVCX,400H;接收数据块长度1KBMOVDX,0A03H;8255控制口地址MOVAL;8255工作方式(A口方式1输入)0UTDX,ALMOVAL;置PC5=0,输入缓冲器空0UTDX,ALL:MOVDX,0A02H;8255状态口地址(端口C)INAL,DX;读状态口ANDAL,20H;查输入缓冲器是否满JZL;8255未接收到数据,等侍MOVDX,0A00H;8255端口A地址INAL,DX;读A口MOV[BX],AL;从甲机接收一个数据送内存单元INCBX;修改内存单元地址LOOPL;未接收完,继续HLT第94页,共172页,星期日,2025年,2月5日3.方式2:双向选通式输入/输出方式第95页,共172页,星期日,2025年,2月5日方式2各状态信号的时序关系第96页,共172页,星期日,2025年,2月5日方式2的应用
用8255为两台8088CPU设计一个双向并行数据传送接口例:第97页,共172页,星期日,2025年,2月5日;主机,A口方式2.主程序:MOVAL,0C0H;方式选择控制字OUT63H,ALMOVAL,09H;PC4=1允许输入中断OUT63H,AL;C口置1/置0控制字MOVAL,ODH;PC6=1允许输出中断0UT63H,AL;C口置1/置0控制字LEASI,ARY1;发送数据块首址MOVCX,400h;发送数据块长度LEADI,ARY2;接收数据块首址MOVBX,800H;接收数据块长度STI;CPU开中断(IF=1)┊第98页,共172页,星期日,2025年,2月5日;中断服务程序INAL,62H;读状态口(端口C)的状态MOVAH,ALANDAL,20H;判断输入缓冲器的状态IBFA(PC5)JZ0THER;IBFA=0,不是输入中断,转移INA:INAL,60H;IBFA=1,是输入中断,从A口读取数据MOV[DI],AL;接收的数据送内存单元INC