第9章可编程串行输入/输出接口芯片82519。1串行通信的基本概念9.2可编程串行接口芯片8251结构9.38251的初始化和编程应用9.4PC机串行异步通信接口8.2可编程串行输入/输出接口芯片82519.1串行通信的基本概念1.半双工和全双工串行通信是一位接一位地顺序通过一条信号线进行传输的方式。它的通路可以只有一条,此时发送信息和接收信息不能同时进行,只能采用分时使用线路的方法,如果在A发送信息时,B只能接收;而当B发送信息时,则A只能接收。这种串行通信的工作方式称为半双工通信方式;如果在两个通信站之间有两条通路,则发送信息和接收信息就可以同时进行。如当A发送信息,B接收,B同时也能利用另一条通路发送信息而由A接收。这种工作方式称为全双工通信方式。2.数据传输率数据传输率是指每秒钟传送的二进制位数.通常称为波特率(BandRate)。国际上规定了标准波特率系列,最常用的标准波特率是:110波特、300波特、600波特、1200波特、l800波特、2400波持、4800波特、9600波特和19200波特。时钟频率=n×波特率式中的n叫做波特率系数或波特率因子,它的取值可以为1、16、32或64。3.串行通信的方式串行通信按通信约定的格式分为两种:异步通信方式和同步通信方式。(1)同步通信:所谓同步通信是指在约定的数据通信速率下,发送方和接收方的时钟信号频率和相位始终保持一致(同步),这就保证了通信双方在发送数据和接收数据时具有完全一致的定时关系。在有效数据传送之前首先发送一串特殊的字符进行标识或联络,这串字符称为同步字符或标识符。在传送过程中,发送端和接收端的每一位数据均保持同步。(2)异步通信异步通信是指通信中两个字符之间的时间间隔是不固定的,而在一个字符内各位的时间间隔是固定的。异步通信规定字符由起始位(startbit)、数据位(databit)、奇偶校验位(parity)和停止位(stopbit)。起始位表示一个字符的开始,接收方可以用起始位使自已的接收时钟与数据同步。停止位则表示一个字符的结束。这种用起始位开始,停止位结束所构成的一串信息称为一帧(frame)。异步通信在传送一个字符时,由一位低电平的起始位开始,接着传送数据位,数据位的位数为5~8位。在传送时,按低位在前,高位在后的顺序传送。奇偶校验位用于检验数据传送的正确性,也可以没有,可由程序来指定。最后传送的是高电平的停止位,停止位可以是1位、1.5位或2位,两个字符之间的空闲位要由高电平1来填充。8.2.2可编程串行接口芯片1.8251的内部结构和引脚功能8251的内部结构如Flash所示主要包括:(1)数据总线缓冲器(2)发送器(3)接收器(4)读写控制电路(5)调制解调控制电路数据总线读/写控制电路调制解调器发送缓冲器发送控制接收缓冲器接收控制。。。。。。。TxRDYTxDTxCTxEMPTYRxDRxRDYRxCSYNDET/BRKDET发送器接收器RTSCTSDTRDSRCSWRRDC/DCLKRESETD—D702.8251的编程控制8251是可编程串行接口,在使用前必须由程序对其工作状态进行设置(称为初始化),其中包括:同步方式还是异步方式、传输波特率、字符代码位数、校验方式、停止位位数等。8251的控制字分为方式控制字和命令控制字。(1)方式控制字此控制字决定8251A是工作在同步方式还是异步方式。控制字格式如下:S2S1EPPENL2L1B2B1其中:B2、B1:波特率系数控制位L2、L1:字符位数控制位PEN:校验位允许位,EP奇偶校验选择S2、S1:停止位位数或同步字符个数控制位(2)操作命令控制字是使8251处于发送数据或接收数据状态,通知外设准备接收或是发送数据。格式如下:EHIRRTSERSBRKRxEDTRTxENEH允许进入搜索方式RxE接收kongzhIR复位控制DTR数据终端是否准备好RTS不发送或请求发送TxEN禁止发送或允许发送ER是否清除错误SBRK正常工作或发送终止字符8.2.38251的初始化和编程应用1.8251的初始化在传送数据前对8251进行初始化,才能确定发送方与接收方的通信格式,以及通信的时序,从而保证准确无误地传送数据。由于三个控制字没有特征位,且工作方式控制字和操作命令控制字放入同一个端口,因而要求按一定顺序写入控制字,不能颠倒。【例8-5】编写一段程序,通过8251采用查询方式接收数据的程序。要求8251A定义为异步传输方式,波特率系数为64,采用偶校验,1位停止位,7位数据位。设8251的数据端口地址为04A0H,控制/状态寄存器端口地址为04A2H。程序如下:MOVDX,04A2HMOVAL,7BH;写工作方式字OUTDX,ALMOVAL,14HOUTDX,AL;写操作命令字LP:INAL,DX;读状态控制字ANDAL,02H;检查RxRDY是否为1JZLPMOVDX,04A0HINAL,DX2.8251和CPU的通信方式【例8.6】若采用查询方式发送数据,甲机发送,乙机接收,要求把甲机开发的应用程序2DH传送到乙机上,采用起止式异步方式,字符长度为8位,2个停止位,波特率因子是64个/位,无校验,波特率是4800b/s.分析:近距离传输,不需要modem,而直接相联,并且,采用查询I/O方式。设计:硬件连接见图9.26关键程序段:Moval,40h;内部复位Outdx,alNopMoval,0cfh;设置方式命令字Outdx,alMoval,37h;设置工作命令字Outdx,alMovcx,2dhMovsi,300hL1:movdx,309h;状态口Inal,dxAndal,01hJzl1Movdx,308hMoval,[si]IncsiDeccxJnzl1的【例8.9】中断服务程序如下:RECIVE:PUSHAXPUSHBXPUSHDXPUSHDSMOVDX,3FDHINAL,DXMOVAH,AL;保存接收状态MOVDX,3F8HINAL,DX;读入接收到的数据ANDAL,7FHTESTAH,1EH;检查有无错误产生JZSAVADMOVAL,'?';出错的数据用‘?’代替SAVAD:MOVDX,SEGBUFFERMOVDS,DXMOVBX,OFFSETBUFFERMOV[BX],AL;存储数据MOVAL,20HOUT20H,AL;将EOI命令发给中断控制器8259POPDSPOPDXPOPBXPOPAXSTIIRET8.2.4PC机串行异步通信接口1.串行异步通信适配器串行异步适配器结构如下:+5VTXDRXDRTSCTSDSRCDDTRRISOUTSINRCLKCS0CS1DISTRDOSTR2CSRTSCTSDSRRLSDDTRRIBAUDOUTADS7D~0DDISTRDOSTR2A~0A31OUT2OUTINTRPTMRXTAL18250RS232C+5V10分频OSC18.423MHZRESETIRQ3IRQ4A89A,7A~3A6AEN2A~0AIOWIOR7D~0DDIRG74LS245J9J10J11J122.EIARS-232串行通信总线标准RS-232是一种串行通信总线标准,1969年由美国电子工业协会(EIA)从CCITT远程通信标准中导出的一个标准。9针、25针RS-232标准接口引脚排列如图所示。25脚引脚号(9脚)符号方向功能2(3)TXD输出发送数据3(2)RXD输入接收数据4(7)RTS输出请求发送5(8)CTS输入清除发送6(6)DSR输入数据通信设备准备好7(5)GND信号地8(1)DCD输入数据载波检测20(4)DTR输出数据终端准备好22(9)RI输入振铃指示两台计算机的连接方法如下图所示:计算机123458622207123458622207计算机计算机123458622207123458622207计算机3.BIOS串行异步通信方式接口的功能调用IBMPC及兼容机提供了一种有较强的硬件依赖性,但却比较灵活的串行口I/O的方法,即通过INT14H调用ROMBIOS串行通信口例行程序。下面给出串行异步通信接口功能调用的具体情况:(1)初始化串行通信口(AH=0)入口参数:AL=初始化参数,DX=通信口号出口参数:AH=通信口状态,AL=调制解调器状态初始化参数据可以用来设置串行口的波特率、奇偶性、字长和终止位。8位数据具体含义如下:设置波特率、设置校验位设置终止位设置字长D7D6D5D4D3D2D1D0l位7、6、5:设置波特率000=110波特001=150波特010=300波特011=600波特100=1200波特101=2400波特110=4800波特111=9600波特ll位4、3:设置校验位01=奇校验11=偶校验×0=无校验ll位2:设置终止位0=1位1=2位ll位1、0:设置字长10=7位11=8位例如指令序列:MOVAH,0MOVAL,0A3HMOVDX,0INT14H完成的功能是将0号通信口的波特率设置为2400波特,字长为8位,1位终止位,无奇偶校验位。(2)向串行通信口写字符(AH=1)入口参数:AL=所写字符,DX=通信口号出口参数:写字符成功AH=0,AL=字符写字符失败(AH)7=1,(AH)0~6=通信口状态(3)从串行通信口读字符(AH=2)入口参数:DX=通信口号出口参数:读字符成功(AH)7=0,AL=字符读字符失败(AH)7=1,(AH)0~6=通信口状态(4)取串行通信口状态(AH=3)入口参数:DX=通信口号出口参数:AH=通信口状态,AL=调制解调器状态3号功能用来读串行口的当前状态,调用时,只需给出被查询的串行通信口是COM1或是COM2,调用返回时,其状态信息放入AX中,(AL)=MODEM状态,(AH)=线路状态。4.BIOS串行异步通信接口的功能调用应用接口通过前面的介绍,已经知道串行通信的编程方式有I/O指令方式、DOS功能调用方式和BIOS中断调用方式,在这里选择BIOS中断调用方式。编程的关键首先确定串行通信的基本方式。【例8.11】在下面的程序中设置串行通信的传输参数为:1200波特、7个数据位,1个奇偶校验位,2个停止位。两台计算机机可互发数据,即在程序开始首先检测是否有数据要接收,若没有则检测是否有键按下,若有数据发送,否则重新检测。程序清单如下:CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;数据段基值装入(通过AX)LEADX,SHOWMESS;字符串有效地址装入DX寄存器MOVAH,09HINT;DOS显示字符串功能调用;初始化串口COM2;串行口初始化为1200波特、数据位MOVAH,0MOVDX,1MOVAL,8EHINT14H;初始化COM2口FORE:MOVH,03HMOVDX,1INT14H;读串口2状态字TESTAH,01H;数据准备好?JNZRECE;准备好转接收程序TESTAH,20H;发送移位寄存空?JZFORE;不空转FORE继续检测MOVAH,1INT16H;否则利用BIOS键盘中断调用,输入字符JZFORE;没有按键,继续MOVAH,0INT16H;BIOS键盘输入CMPAL,1BHJZQUIT;是否是ESC键,是退出MOVAH,1MOVDX,1INT14H;否则发送字符CMPAL,0DHJNZRECEMOVAH,02HMOVDL,0AHINT21H;若发送的为回车符,显示换行MOVDL,0DHINT21Hrece:MOVAH,3MOVDX,1INT14H;读串口2状态字TESTAH,01H;数据准备好?JZFORE;数据未准备好转fore继续检测MOVAH,2MOVDX,1INT14H;否则读入字符