周永华班例题.doc

上传人:仙人指路1688 文档编号:4099156 上传时间:2023-04-04 格式:DOC 页数:10 大小:377KB
返回 下载 相关 举报
周永华班例题.doc_第1页
第1页 / 共10页
周永华班例题.doc_第2页
第2页 / 共10页
周永华班例题.doc_第3页
第3页 / 共10页
周永华班例题.doc_第4页
第4页 / 共10页
周永华班例题.doc_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《周永华班例题.doc》由会员分享,可在线阅读,更多相关《周永华班例题.doc(10页珍藏版)》请在三一办公上搜索。

1、例7-12 用8250实现近距离双机通信,编写通信程序。要求:(1)2000:C000H存放接收数据的个数(设1000个字节) 2000:C002H存放接收缓冲区的地址指针(设指针为2000:4000H)(2)2000:C010H存放发送数据的个数(设1000个字节) 2000:C012H存放发送缓冲区的地址指针(设指针为2000:8000H)(3)数据格式为:8位数据位、1位停止位、奇校验、波特率为2400,用中断方式接、发送数据。设8250的端口地址为3F83FEH,8259A的端口地址为20H和21H,8259A分配给8250中断请求的中断类型号为80。采用中断方式的通信程序编制如下:

2、DATASEGMENTDATAENDSSTACKSEGMENT PARA STACKDW 20H DUP(0)STACKENDSCODESEGMENTASSUME CS: CODE, DS: DATA, SS: STACKSTART:CLI;关中断XOR AX, AX;设置中断向量MOV DS, AX;实模式下中断向量表的基地址LEA AX, INTSERV;取中断向量的偏移地址MOV DS: 0140H, AX;中断类型号80的中断向量地址:804=320D=140HMOV AX, CS;中断向量的段地址MOV DS:0142H, AXMOV AX, 2000H;置接/发数据存放区的段基址M

3、OV DS, AXMOV AX, 1000;传送字节数MOV DS: 0C000H, AXMOV DS: 0C010H, AXMOV DS: 0C002H, 4000H;置接收缓冲区的偏移地址MOV DS: 0C012H, 8000H;置发送缓冲区的偏移地址MOV AL, 80H;8250初始化,设DLAB=1MOV DX, 3FBHOUT DX,ALMOV AX, 30H;除数寄存器的值:1.8432MHz/(240016)= 48= 30HMOV DX, 3F8HOUT DX, AL;写入除数低字节MOV AL, AHMOV DX, 3F9HOUT DX, AL;写入除数高字节MOV AL

4、, 0BH;8位数据,1位停止,奇校验MOV DX, 3FBHOUT DX, AL;写入线路控制寄存器MOV AL, 03H;允许接/发中断MOV DX, 3F9HOUT DX, AL;写入中断允许寄存器;8259初始化:写ICW1,ICW2,ICW4(省略)WAIT1:STI;开中断MOV AX, DS: 0C000H;是否接收完CMP AX, 0JNE WAIT1;未接收完,等待中断MOV AX, DS: 0C010H;是否发送完CMP AX, 0JNE WAIT1;未发送完,等待中断MOV AH, 4CH;接收、发送完成,返回操作系统INT 21HINTSERV:PUSH AX;中断服务

5、程序,保护现场PUSH DXPUSH SIPUSH DISTI;开中断MOV DX, 3FAH;读中断识别寄存器,查询中断IN AL, DXCMP AL, 02H;是发送中断(THRE=1)JZ SEND;转发送子程序入口REC:MOV DX, 3F8H;否则接收数据IN AL, DXMOV DI, DS: 0C002HMOV DI, ALINC DI;保存下一个接收数据的存放地址MOV DS: 0C002H, DIMOV AX, DS: 0C000H;上一次接收数据的个数送AXDEC AX;还剩下的接收数据个数MOV DS: 0C000H, AX;保存还剩下的接收数据个数CMP AX, 0

6、;接收完否?JNZ RETURN;未完,返回MOV DX, 3F9H;接收完,关闭接收中断IN AL, DXAND AL, 0FEHOUT DX, ALJMP RETURNSEND:MOV DX, 3F8H;发送数据MOV SI, DS: 0C012H;发送数据送ALMOV AL, SIOUT DX, ALINC SI;保存下一个发送数据的存放地址MOV DS: 0C012H, SIMOV AX, DS: 0C010H;上一次发送数据的个数送AXDEC AX;还剩下的发送数据个数MOV DS: 0C010H, AX;保存还剩下的发送数据个数CMP AX, 0;发送完否?JNZ RETURN;未

7、完,返回MOV DX, 3F9H;发送完,关闭发送中断IN AL, DXAND AL, 0FDHOUT DX, ALRETURN:MOV AL, 20H;向8259写入EOIOUT 20H, ALPOP DI;恢复现场POP SIPOP DXPOP CXPOP AXIRET;中断返回CODEENDSEND START例7-5 8255A作为双机并行单向数据通信的接口(方式0和方式1)。要求:主从两台微机分别通过两个8255A采用查询方式进行并行通信,主从机均为PC机,从机8255A采用方式1发送数据,主机8255A采用方式0接收数据。试设计通信接口电路,并编制主从机通信程序。分析:本例题是82

8、55A方式0和方式1综合应用的一个例子,通信接口电路设计如图7-22所示。主机8255A的A口工作于方式0,输入。从机8255A的A口工作于方式1,输出。主机8255A的C口高4位输入,低4位输出。从机8255A的PC7(OBF)与主机8255A的PC4相连,从机8255A的PC6(ACK)与主机8255A的PC0相连。设主从机8255端口地址均FFA0HFFA3H,从机发送数据存放在数据缓冲区TR_BUF中,主机接收数据存放在数据缓冲区RE_BUF中,传送数据块的字节数为256个。通信程序如下:图7-22 8255A双机并行单向数据通信接口电路从机发送程序:COUNT EQU 256;发送数

9、据字节长度P8255CON EQU 0FFA3H;8255A的控制端口地址P8255A EQU 0FFA0H;8255A的A端口的地址P8255C EQU 0FFA2H;8255A的C端口的地址DATASEGMENT TR_BUF DB 256 DUP(?);发送数据缓冲区DATAENDS;省略的指令LEA BX, TR_BUFMOV CX, COUNT;发送数据字节长度MOV AX, 0A0H;端口A工作为方式1,输出MOV DX, P8255CONOUT DX, ALMOV DX, P8255AOUT DX, AL;开始发送一个虚拟数据MOV DX, P8255CWAIT1:IN AL,

10、DXAND AL, 40H;查询ACK信号是否有效JNZ WAIT1WAIT2:MOV AL, BX;接收方已将数据取走,发送新数据MOV DX, P8255AOUT DX, ALINC BXMOV DX, P8255CWAIT3:IN AL, DXAND AL, 40H;查询ACK信号是否有效JNZ WAIT3LOOP WAIT2;省略的指令主机接收程序:COUNT EQU 256;发送数据字节长度P8255CON EQU 0FFA3H;8255A的控制端口地址P8255A EQU 0FFA0H;8255A的A端口的地址P8255C EQU 0FFA2H;8255A的C端口的地址DATASE

11、GMENT RE_BUF DB 256 DUP(?);接收数据缓冲区DATAENDS;省略的指令LEA BX, RE_BUFMOV CX, COUNT;接收数据字节长度MOV AL, 98H;端口A工作为方式0,输入,端口C高4位输入,低4输出MOV DX, P8255CONOUT DX, ALWAIT1:MOV AL, 01HOUT DX, AL;向发送方输出ACK=1WAIT2:MOV DX, P8255CIN AL, DXAND AL, 10H;检测发送方OBF是否有效JNZ WAIT2MOV DX, P8255A IN AL, DXMOV BX-1, AL;(BX)-1单元内容为虚拟数

12、据MOV DX, P8255CONMOV AL, 00HOUT DX, AL;PC0为0CALL DELAY;延时MOV AL, 01HOUT DX, AL;PC0为1INC BXLOOP WAIT1;省略的指令例7-6 8255A作为双机并行双向数据通信的接口(方式0和方式2)。要求:主从两台微机进行并行通信,主机为PC机,从机为8031单片机,主机一侧的8255A工作于方式2,用中断方式传送数据,从机一侧的8255A工作于方式0,用查询方式传送数据。设主机发送数据块的起始地址为1000H,接收数据块的起始地址为3000H,传送数据块的字节数为256个。试设计通信接口电路,并编制主机的接发送

13、通信程序。分析:本例题是8255A方式2和方式0综合应用的一个例子,通信接口电路设计如图7-23所示。主机8255A的A口工作于方式2。从机8255A的A口工作于方式0输入,B口工作于方式0输出,C口用于数据传送联络,其中PC7PC0工作于方式0输出,PC3PC0工作于方式0输入。图7-23 8255A双机并行双向数据通信接口电路主机8255A 的A口与从机8255A的A口和B口连接,实现双方向数据传送;输入输出联络信号线PC4PC7连到从机8255A的C口,中断请求线PC3连到8259A的请求输入端IR2。设8255A的端口地址为400403H,8259A的端口地址为20H和21H。主机和从

14、机通信过程大体如下: 当主机输出数据后,主机的8255A发送输出缓冲器满信号OBF,当从机查询到OBF有效便开始接收数据,当接收完数据后,从机发送应答信号ACK,表示数据已被从机接收。主机的8255A接收到ACK信号后,向主机产生中断请求信号INTR,主机的中断请求服务程序便开始新一轮的数据传送。当从机向主机输入数据后,从机的8255A发送选通信号STB,以便锁存从机8255A向主机8255A输入的数据,主机的8255A向从机发送应答信号IBF,表示已接收到从机输入的数据,同时产生中断请求信号INTR,主机的中断请求服务程序接收数据。由于8255A工作在方式2,输入中断请求和输出中断请求共用P

15、C3一条线,究竟是输入中断请求还是输出中断请求,在中断服务程序中,通过查询8255A的C口的IBF的状态来决定执行输入操作还是输出操作。主机通信程序编制如下:;省略的指令MOV DX, 403H; 8255A初始化MOV AL, 0C0H; A口方式2 OUT DX, ALMOV AL, 09H;置位PC4,使输入中断允许INTE2为1 OUT DX, ALMOV AL, 0DH;置位PC6,使输出中断允许INTE1为1 OUT DX, ALMOV SI, 1000H;发送数据块的首址送SIMOV DI, 3000H;接收数据块的首址送DI MOV CX, 256;数据块字节数送CX ;825

16、9A初始化及中断向量设置(省略)NEXT:STI;开中断HLT;等待中断CLI;关中断DEC CX;字节数-1JNZ NEXT;未完,继续MOV AX, 4C00H;已完,退出INT 21H;返回DOS INTPPROC;中断服务程序MOV DX, 403H;8255A控制口MOV AL, 08H;复位PC4,使INTE2=0,禁止输入中断 OUT DX, ALMOV AL, 0CH;复位PC6,使INTE1=0,禁止输出中断OUT DX, ALMOV DX, 402H;8255A的C口IN AL, DX;读状态信息,查中断源 MOV AH, AL;保存状态信息AND AL, 20H;检查状态

17、位IBF=1,是输入?JZ OUTP;不是,则为输出中断,跳转输出程序 OUTP INP:MOV DX, 400H;是,则从A口读数IN AL, DXMOV DI, AL;存入接收区INC DI;修改地址JMP RETURN;跳RETURNOUTP:MOV DX, 400H;发送,向A口写数MOV AL, SI;从发送区取数OUT DX, AL;输出INC SI;修改地址RETURN:MOV DX, 403H;8255A控制口MOV AL, 0DH;允许输出中断OUT DX, ALMOV AL, 09H;允许输入中断OUT DX, ALMOV AL, 62H;中断结束OCW2OUT 20H,

18、ALIRET;中断返回INTPENDP;省略的指令例7-9 图7-34为8254定时中断系统,8254计数器1和计数器2的时钟分别由对应的外设提供,当计数器1和计数器2在分别计满外设输出的脉冲信号后,便通过各自的输出向8259A申请中断。若8259A在同一时刻收到计数器1和计数器2的中断申请时,首先响应优先级高的IR0中断请求。IR0的中断服务程序通过8255A端口A向外设输出数据,IR1的中断服务程序通过8255A的端口B接收由外设输入的数据。图7-34 应用8254定时中断的外设数据输入输出原理图本例题应用8254定时中断,实现外设数据的输入输出。8254计数器1和计数2工作在方式2,假设

19、分别计满100和1000个由外设输入的脉冲后,产生中断。8254计数器1和2在方式2产生的负脉冲,经过反相器反相后,分别向8259A的IR0和IR1产生中断请求。CPU执行IR0和IR1的中断服务程序,分别通过8255A的端口A和端口B实现数据的输出和输入操作。假设8255A的端口A工作在方式0,无条件输出数据,端口B工作在方式1,查询方式输入数据。设8259A的端口地址为FF90和FF91,IR0的中断类型号为64,8254的端口地址为FFA0HFFA3H,8255A的端口地址为FFB0HFFB3H。输出数据存放在输出缓冲器OUTBUF,输入数据存放在输入缓冲区INBUF,每中断一次,输入或

20、输出的字节数为256。INTA0EQU 0FF90H;8259A控制端口偶地址INTA1EQU 0FF91H;8259A控制端口奇地址INTTYPEEQU 40H;8259A的IR0中断类型号P8254_1EQU 0FFA1H;8254定时器1端口地址P8254_2EQU 0FFA2H;8254定时器2端口地址P8254CONEQU 0FFA3H;8254控制端口地址COUNT1EQU 100;8254定时器1的计数初值COUNT2EQU 1000;8254定时器2的计数初值P8255AEQU 0FFB0H;8255A端口A的地址P8255BEQU 0FFB1H;8255A端口B的地址P825

21、5CEQU 0FFB2H;8255A端口C的地址P8255CONEQU 0FFB3H;8255A控制端口的地址DATASEGMENTOUTBUF DB 256 DUP(?);输出缓冲器INBUF DB 256 DUP(?);输入缓冲器DATAENDSSTACKSEGMENT PARA STACKDW 200H DUP(0)STACKENDSCODESEGMENTASSUME CS: CODE, DS: DATA, SS: STACKSTART:MOV AX, DATAMOV DS, AXCLI;关中断MOV DX, P8255CON;8255A初始化MOV AL, 86H;端口A方式0,输出;

22、端口B方式1,输入;端口C输出OUT DX, ALMOV AL, 0CHOUT DX, AL;PC6为0,GATE1=0;计数器1禁止计数MOV AL, 0EHOUT DX, AL;PC7为0,GATE2=0;计数器2禁止计数MOV DX, P8254CON;8254初始化MOV AL, 55H;计数器1 BCD计数,方式2,只读写低字节OUT DX, ALMOV AL, 0B5H;计数器2 BCD计数,方式2,读写高低字节OUT DX, ALMOV DX, P8254_1MOV AL, COUNT1;计数器1赋初值OUT DX, ALMOV DX, P8254_2MOV AX, COUNT2

23、;计数器2计数初值OUT DX, AL;计数器2赋计数初值低8位MOV AL, AHOUT DX, AL;计数器2赋计数初值高8位MOV DX, INTA0;8259A初始化MOV AL, 17H;ICW1:边沿触发,单片,写ICW4OUT DX, AL;A0=0MOV DX, INTA1MOV AL, 40H;ICW2:中断类型号为64OUT DX, AL;A1=1MOV AL, 03H;ICW4:自动EOIOUT DX, AL;A1=1MOV AL, 0FCH;OCW1:屏蔽IR7IR2OUT DX, AL;A1=1PUSH DSMOV DX, SEG INT0;设置IR0的中断向量MOV

24、 DS, DXMOV DX, OFFSET INT0MOV AX, 2540HINT 21HMOV DX, SEG INT1;设置IR1的中断向量MOV DS, DXMOV DX, OFFSET INT1MOV AX, 2541HINT 21HPOP DSMOV DX, P8255CONMOV AL, 0DHOUT DX, AL;置PC6为1,GATE1=1,8254计数器1开始计数MOV AL, 0FHOUT DX, AL;置PC7为1,GATE2=1,8254计数器2开始计数WAIT1:STIJMP WAIT1INT0PROCPUSH AX;保护现场PUSH SIPUSH CXPUSH D

25、XLEA SI, OFFSET OUTBUF;取输出缓冲区有效地址MOV DX, P8255AMOV CL, 0;字节计数初值LOOP1:MOV AL, SIOUT DX, ALINC SILOOP LOOP1POP DX;恢复现场POP CXPOP SIPOP AXSTIIRETINT0ENDPINT1PROCPUSH AX;保护现场PUSH SIPUSH CXPUSH DXLEA SI, OFFSET INBUF;取输入缓冲区有效地址MOV CL, 0;字节计数初值LOOP2:MOV DX, P8255CWAIT2:IN AL, DXAND AL, 00000010B;测试IBFb(PC1)是否为1JZ WAIT2;IBFb为0,跳转等待MOV DX, P8255BIN AL, DX;IBFb为1,读B口输入缓冲器中数据MOV SI, ALINC SILOOP LOOP2POP DX;恢复现场POP CXPOP SIPOP AXSTIIRETINT1ENDPCODEENDSEND START

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号