当前位置:文档之家› 实验七,双机串行通信

实验七,双机串行通信

实验七、双机串行通信一、实验目的1、熟悉微机接口实验装置的结构及使用方法2、掌握通信接口芯片8251和8250的功能和使用方法3、学会串行通信程序的编制方法二、实验仪器1、PC实验箱及连接线2、两台计算机3、9针接头串行电缆三、芯片介绍(见实验七)四、实验内容实验原理图和接线同图4.12和4.13,不同的是要将串行电缆从实验箱上的RS-232接口连接到另外一台计算机上的串口,两台机子通过8250和8251进行字串信息的相互传输。

两台机子分别设置为发送和接收状态,发送端从键盘输入一段字符信息送8250或8251,接收端则从8251或8250接收一段字符。

发送和接收结束后回到主选菜单,可进行再次通信。

在发送和接收过程中,有一个出错处理过程,采用接收方回传和发送方确认来保证发送和接收正确。

五、预习要求1、熟悉8250和8251的工作原理2、熟悉实验原理3、编制实验要求的汇编语言源程序五、程序流程图和程序清单1、主程序1、发送子程序:3、接收子程序:程序清单:;SY51-2.ASMTIMCTL EQU 293HTIMER0 EQU 290HCLK EQU 3000BPS EQU 9600FACTOR EQU 16DATA51 EQU 280HCTRL51 EQU 281HDATA50 EQU 2F8HDRL50 EQU 2F8HDRH50 EQU 2F9HIER50 EQU 2F0HIIR50 EQU 2FAHLCR50 EQU 2FBHMCR50 EQU 2FCHLSR50 EQU 2FDHMSR50 EQU 2FEHDIVL EQU 0CHDIVH EQU 00HDATA SEGMENTMESS1 DB 'PRESS 1 TO SEND MESSAGE!',0AH,0DHDB 'PRESS 2 TO RECEIVE MESSAGE!',0AH,0DHDB 'PRESS 3 TO QUIT!',0AH,0DH,0AH,0DH,'$' ERROR DB '*****PLEASE SELECT AGAIN!*****',0AH,0DH,'$'MES1 DB 'Sending message......',0AH,0DH,0AH,0DH,'$'MES2 DB 'Receiving message......',0AH,0DH,0AH,0DH,'$'MESS2 DB 50DB ?MES DB 50 DUP(?)MESS3 DB 50 DUP(?)BUF1 DB ?BUF2 DB ?DATA ENDSSTACK SEGMENT PARA STACKDB 128 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXCALL SETTIMCALL INIT51CALL INIT50AG: LEA DX,MESS1MOV AH,09HINT 21HAG1: MOV DL,0FFH ;显示提示信息,MOV AH,06H ;进行菜单选择INT 21HJZ AG1CMP AL,'1'JZ SDCMP AL,'2'JZ RCCMP AL,'3'JZ EXITLEA DX,ERRORMOV AH,09HINT 21HJMP AGSD: CALL SENDJMP AGRC: CALL RECEJMP AGEXIT: MOV AX,4C00HINT 21HSEND PROC ;发送子程序MOV AH,09HLEA DX,MES1INT 21H ;显示提示信息MOV AH,0AHLEA DX,MESS2INT 21H ;从键盘输入字串信息MOV CL,MESS2[1]LOP1: MOV AL,CLMOV BUF1,ALCALL SED ;发送一个字符(字串长度) CALL REC ;接收回传字符CMP AL,CLJZ SKIP1MOV AL,15H ;回传字符不同于发送字符MOV BUF1,AL ;有错,发出错标志,重发字符CALL SEDJMP LOP1SKIP1: LEA SI,MES ;发送字串内容(含出错处理)LOP2: MOV AL,[SI]MOV BUF1,ALCALL SEDCALL RECMOV AL,BUF2CMP AL,[SI]JZ SKIP2MOV AL,15HMOV BUF1,ALCALL SEDJMP LOP2SKIP2: DEC CLJZ EXIT1INC SIJMP LOP2EXIT1: MOV CX,3LOOP1: MOV AH,06HMOV DL,0AHINT 21HMOV DL,0DHINT 21HLOOP LOOP1RETSEND ENDPRECE PROC ;接收子程序MOV AH,09HLEA DX,MES2INT 21H ;显示提示信息LOP3: CALL REC1 ;接收一个字符;并保存在CL中 MOV CL,BUF2MOV BUF1,CLCALL SED1 ;回送字符CALL REC1 ;接收字符MOV AL,BUF2CMP AL,15HJZ LOP3 ;是出错标志,表明上一个接收;字符已经出错,需要重现接收LEA DI,MESS3LOP4: MOV [DI],AL ;将刚才接收字符送缓冲区MOV BUF1,ALCALL SED1 ;回送字符DEC CL ;判断是否接收完毕,没有则继JZ EXIT2 ;续进行接收、回传、判断操作CALL REC1MOV AL,BUF2CMP AL,15HINC DIJMP LOP4SKIP3: CALL REC1MOV AL,BUF2JMP LOP4EXIT2: INC DI ;已经接收所有要发送字符,MOV AL,'$' ;在屏幕上显示出来MOV [DI],ALLEA DX,MESS3MOV AH,09HINT 21HMOV CX,3LOOP2: MOV AH,06HMOV DL,0AHINT 21HMOV DL,0DHINT 21HLOOP LOOP2RETRECE ENDPSED PROC ;8251发送单个字符子程序 MOV DX,CTRL51WAIT1: IN AL,DXTEST AL,01HJZ WAIT1MOV DX,DATA51MOV AL,BUF1OUT DX,ALRETSED ENDPSED1 PROC ;8250发送单个字符子程序 MOV DX,LSR50WAIT3: IN AL,DXTEST AL,20HJZ WAIT3MOV DX,DATA50MOV AL,BUF1OUT DX,ALRETSED1 ENDPREC PROC ;8251接收单个字符子程序 MOV DX,CTRL51WAIT2: IN AL,DXTEST AL,02HJZ WAIT2MOV DX,DATA51IN AL,DXMOV BUF2,ALRETREC ENDPREC1 PROC ;8250接收单个字符子程序 MOV DX,LSR50WAIT4: IN AL,DXJZ WAIT4MOV DX,DATA50IN AL,DXMOV BUF2,ALRETREC1 ENDPSETTIM PROC ;8251时钟设定(9600波特率) MOV DX,00HMOV AX,CLKMOV BX,1000MUL BXMOV BX,BPSDIV BXMOV DX,00HMOV BX,FACTORDIV BXMOV BX,AXMOV DX,TIMCTLMOV AL,00110110BOUT DX,ALMOV DX,TIMER0MOV AX,BXOUT DX,ALMOV AL,AHOUT DX,ALRETSETTIM ENDPINIT51 PROC ;8251初始化MOV DX,CTRL51MOV AL,00HMOV CX,3S1: CALL RELOOP S1MOV AL,40HCALL REMOV AL,4EHCALL REMOV AL,37HCALL RECALL DELAYRETINIT51 ENDPINIT50 PROC ;8250初始化MOV DX,LCR50MOV AL,80HCALL REMOV DX,DRL50MOV AL,DIVLCALL REMOV DX,DRH50MOV AL,DIVHCALL REMOV DX,LCR50MOV AL,03HCALL REMOV AL,00HCALL RECALL DELAYRETINIT50 ENDPRE PROCOUT DX,ALPUSH CXMOV CX,3REP1: LOOP REP1POP CXRETRE ENDPDELAY PROCMOV CX,0FFFFH DL1: LOOP DL1MOV CX,0FFFFH DL2: LOOP DL2RETDELAY ENDPCODE ENDSEND START。

相关主题