18.3串行通信接口串行通信——将二进制信息拆分成二进制位,每次传送一个二进制位的通信方式特点:每次传送一位二进制信息优点:通信线路少,接口简单,成本低(尤其是远距离传输)缺点:速度慢2串行通信涉及的几个问题按照数据发送过程和接收过程的关系划分工作方式可分为三种:单工、半双工、全双工工作方式3单工:只能单方向通信,一个固定为发送端,另一个固定为接收端发送端接收端数据线设备A设备B发送方只能发送数据,不能接受接收方只能接受数据,不能发送接口简单,只需要一根信号线(当然还需要一根地线)4半双工可以实现双向通信,但在一个确定的时刻一个设备是发送端,另一个设备是接收端发送端接收端接收端发送端数据线设备A设备B特点:设备A、B都能够发送或接收,但它们不能同时发送和接收。只需要一根信号线连接两个设备A、B。通过接口内部的电子开关使通信双方进行连接。5全双工A、B双方有两条数据线,可以同时发送和接收数据。发送接收发送接收需要两根信号线A的发送---B的接收A的接收---B的发送6串行通信的两种方式:同步通信异步通信78.3.1异步串行通信格式起始位——每个字符开始传送的标志,起始位采用逻辑0电平数据位——数据位紧跟着起始位传送。由5~8个二进制位组成,低位先传送校验位——用于校验是否传送正确;可选择奇检验、偶校验或不传送校验位停止位——表示该字符传送结束。停止位采用逻辑1电平,可选择1、1.5或2位起始位校验位停止位空闲位数据位低位高位字符0/10/10/10/110111…空闲位——传送字符之间的逻辑1电平,表示没有进行传送8数据传输速率数据传输速率=比特率(BitRate)每秒传输的二进制位数bps字符中每个二进制位持续的时间长度都一样,为数据传输速率的倒数进行二进制数码传输,每位时间长度相等:比特率=波特率(BaudRate)过去,限制在50bps到9600bps之间现在,可以达到115200bps或更高98.3.2异步串行接口标准美国电子工业协会EIA制定1962年公布,1969年修订1987年1月正式改名为EIA-232D数据终端设备DTE与数据通信设备DCE标准接口调制解调器Modem通信线路信号与数字信号相互转换的设备传输制式全双工:双根传输线,能够同时发送和接收半双工:单根传输线,不能同时发送和接收单工:单根传输线只用作发送或只用作接收101.232C的引脚定义TxD:发送数据RxD:接收数据RTS:请求发送CTS:清除发送(允许发送)DTR:数据终端准备好DSR:数据装置准备好GND:信号地CD:载波检测(DCD)RI:振铃指示保护地(机壳地)TxC:发送器时钟RxC:接收器时钟112.232C的连接连接调制解调器:通过电话线路远距离通信直接(零调制解调器)连接:进行短距离通信不使用联络信号的3线相连微机TxDRxDGND微机微机DSRDTRTxDRxDRTSCTSGND微机“伪”使用联络信号的3线相连122.232C的连接连接调制解调器:通过电话线路远距离通信直接(零调制解调器)连接:进行短距离通信使用联络信号的多线相连微机DSRDTRTxDRxDRTSCTSGND微机138.3.3异步串行通信接口计算机内部是并行信息,发送——接口电路将计算机的并行数据转换为串行数据一位一位逐位发送并行输入串行输出的移位寄存器,移位脉冲由波特率确定添加起始位、校验位、停止位。接收——接口电路一位一位接收外部的串行信息,转换为并行信息送给CPU串行输入并行输出移位寄存器,串行通信可以使用硬件、也可以由软件实现。当前一般是用可编程的串行接口芯片。14IBMPC/XT机的UART芯片是INS8250后续PC机采用兼容的NS16450和NS16550现在32位PC机芯片组兼容NS16550实现起止式串行异步通信协议数据位为5~8位,停止位1、1.5或2位奇偶校验,具有奇偶、帧和溢出错误检测电路支持全双工通信8250支持的数据传输速率为50~9600bps16550支持的速率高达115200bps151.8250的寄存器9种可访问的寄存器用引脚A0~A2来寻址,再用通信线路控制寄存器的DLAB位(最高位)来区别共用地址的不同寄存器DLABA2A1A0寄存器COM1地址COM2地址000××××××11000000001010011100101110111000001读接收缓冲寄存器写发送保持寄存器中断允许寄存器中断识别寄存器通信线路控制寄存器调制解调器控制寄存器通信线路状态寄存器调制解调器状态寄存器不用除数寄存器低8位除数寄存器高8位3F8H3F8H3F9H3FAH3FBH3FCH3FDH3FEH3FFH3F8H3F9H2F8H2F8H2F9H2FAH2FBH2FCH2FDH2FEH2FFH2F8H2F9H168250的接收缓冲寄存器RBR存放串行接收后转换成并行的数据并行数据检测接收错误删除起始位、校验位、停止位串行数据CPU接收缓冲寄存器接收移位寄存器同步控制8250SIN0/10/10/10/1178250的发送保持寄存器THR包含将要串行发送的并行数据并行数据加入起始位、校验位、停止位串行数据CPU发送保持寄存器发送移位寄存器同步控制8250SOUT0/10/10/10/1188250的除数寄存器除数寄存器保存设定的分频系数分频系数=基准时钟频率÷(16×比特率)起始位时钟(RCLK)数据线(SIN)T16T16T8T198250的通信线路控制寄存器LCR指定串行异步通信的字符格式DLABD7D5D4D3D2D1D0寄存器选择0正常值1除数寄存器中止字符0无作用1发送中止字符校验位设置××0无校验位001设置奇校验011设置偶校验101校验位为1111校验位为0停止位个数01位11.5位(数据位为5位时)12位(数据位为6~8位时)数据位个数005位016位107位118位208250的通信线路状态寄存器LSR提供串行异步通信的当前状态0D6D5D4D3D2D1D0为1,表示发送移位寄存器空;当数据由发送保持寄存器移入发送移位寄存器时,该位为0为1,表示发送保持寄存器空,当CPU将字符写入发送保持寄存器后,该位为0为1,表示正在传输中止字符为1,表示出现帧错误为1,表示出现奇偶错为1,表示出现溢出错为1,表示接收数据缓冲器收到一个数据,既接收数据准备好;当CPU读走数据后,该位为0奇偶错误PE帧错误FE溢出错误OE218250的调制解调器控制寄存器MCR设置8250与数据通信设备联络的输出信号为1使DTR*引脚为低否则为高000LOOPOUT2OUT1RTSDTR为1使RTS*引脚为低否则为高为1使OUT1*引脚为低否则为高为1使OUT2*引脚为低否则为高为1使8250为循环工作方式否则为正常工作方式循环工作方式:4个控制输入信号在内部与4个控制输出信号相连发送的串行数据在内部被接收检测8250发送和接收功能,不必外连线228250的调制解调器状态寄存器MSR反映4个控制输入信号的当前状态及其变化MSR高4位中某位为1:相应输入信号当前为低有效MSR低4位中某位为1:从上次CPU读取该状态字后,相应输入信号已发生改变,从高变低或反之产生调制解调器状态中断,当CPU读取该寄存器或复位后,低4位被清零238250的中断允许寄存器IER8250有4级10个中断接收线路状态中断(4个)奇偶错、溢出错、帧错和中止字符接收器数据准备好中断发送保持寄存器空中断调制解调器状态中断(4个)中断允许寄存器低4位控制4级中断是否允许某位为1,则对应的中断被允许否则,被禁止优先权高优先权低248250的中断识别寄存器IIR表明是否有中断保存正在请求中断优先权最高中断级别编码00000ID1ID0IP0有中断1无中断ID1ID0优先权中断类型111001001234接收线路状态接收数据准备好发送保持寄存器空调制解调器状态252.初始化编程对8250的内部控制寄存器进行编程写入⑴设置传输率写入除数寄存器⑵设置字符格式写入通信线路控制寄存器⑶设置工作方式写入调制解调器控制寄存器⑷设置中断允许或屏蔽位写入中断允许寄存器26写入除数寄存器设置传输率moval,80hmovdx,2fbhoutdx,al;写入通信线路控制寄存器,使DLAB=1movax,96;分频系数;1.8432MHz÷(1200×16)=96=60Hmovdx,2f8houtdx,al;写入除数寄存器低8位moval,ahincdxoutdx,al;写入除数寄存器高8位27写入通信线路控制寄存器设置字符格式;假设使用7个数据位、1个停止位、奇校验moval,00001010bmovdx,2fbhoutdx,al;写入通信线路控制寄存器;同时使DLAB=0,以方便下述初始化过程28写入调制解调器控制寄存器设置工作方式;设置查询通信方式moval,03h;禁止中断(D3=0)movdx,2fchoutdx,al;写入调制解调器控制寄存器;设置中断通信方式moval,0bh;允许中断(D3=1)movdx,2fchoutdx,al;设置查询的循环测试通信方式moval,13h;循环测试(D4=1)movdx,2fch;禁止中断(D3=0)outdx,al29写入中断允许寄存器设置中断允许或屏蔽位;禁止所有中断moval,0movdx,2f9houtdx,al;写入中断允许寄存器(DLAB=0);仅允许接收中断moval,1movdx,2f9houtdx,al;写入中断允许寄存器(DLAB=0)30〔例8-3〕异步通信程序-1;数据段msgbyte'Whatyouseeis…….',13,10,0;代码段……;初始化编程movsi,offsetmsg;SI指向发送信息movbx,1;BX=1需要发送信息movcx,1;CX=1可以接收信息;读取通信线路状态,查询工作statue:movax,bxorax,cx;BX=CX=0,接发完成jzdone;转向结束31〔例8-3〕异步通信程序-2movdx,2fdh;读取线路状态寄存器inal,dxtestal,1eh;接收有错误否?jzstatue1;没有错误,继续;接收有错,响铃报警movdx,2f8h;读出接收有误的数据inal,dxmoval,07h;响铃控制的ASCII码calldispcjmpstatue;继续查询32〔例8-3〕异步通信程序-3statue1:testal,01h;接收到数据吗?jzstatue2;没有收到数据,继续;已接收字符,读取该字符并显示movdx,2f8h;读取输入缓冲寄存器inal,dxcmpal,0;是结尾字符吗?jnzreceivexorcx,cx;CX=0,不再接收数据jmpstatue;继续查询receive:andal,7fh;标准ASCII码取低7位calldispc;屏幕显示该数据jmpstatue;继续查询33〔例8-3〕异步通信程序-4statue2:cmpbx,1;有要发送的字符吗?jnestatue;无字符,继续查询testal,20h;能输出数据吗?jzstatue;不能输出,继续查询;保持寄存器已空,可以发送数据moval,[si];获得要发送的字符incsicmpal,0;是结尾字符吗?jnztransmitxorbx,bx;无发送字符,BX=0jmpstatue;继续查询34〔例8-3〕异步通信程序-5transmit:movdx,2f8h;将字符输出给发送保持寄存器outdx,al;串行发送数据jmpstatue;继续查询done:;返回DOSWhatyouseeiswhatyouget.显示结果