《《微机原理与接口》第9章串行通信接口.ppt》由会员分享,可在线阅读,更多相关《《微机原理与接口》第9章串行通信接口.ppt(145页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术易凡 武汉大学物理学院电子科学与技术系,第九章 串行通信与接口,教学重点异步通信协议和RS232C接口8051、8250芯片的结构与编程使用 异步通信程序,9.1 串行通信基础,串行通信:将数据分解成二进制位用一条信号线,逐位顺序传送的方式串行通信的优点:通信的线路少,因而在远距离通信时可以极大地降低成本串行通信适合于远距离数据传送,也常用于速度要求不高的近距离数据传送PC系列机上有两个串行异步通信接口、键盘、鼠标器与主机间采用串行数据传送,传输制式,单工方式(Simplex):只允许数据按照一个固定的方向传送,图示,传输制式(续),半双工方式(Half-Duplex)收发双
2、方均具备接收和发送数据能力。由于只有一条通道,不能同时在两个方向上传送数据。,图示,传输制式(续),全双工方式(Full Duplex):收发双方均具备接收和发送数据能力,并可以同时进行双向传输。,图示,传输速率,比特率(信息传输速率):每秒传送的二进制数位数(比特数)单位为bps(bit per second)波特率(码元传输率):每秒传送的码元(符号)数单位为:波特(Baud)即每秒传送1个码元(符号)称传输率是1波特。,传输速率(续),波特率与比特率的差异若每个码元所含的信息量为1比特(Bit),则波特率等于比特率,否则二者不等例如,在四相调制系统中,每次调制取4种相位差值,它代表2 位
3、二进制信息位,此时,比特率=2波特率标准波特率系列为:110、300、600、1200、1800、2400、4800、9600、19200,串行通信协议,通信协议:收发双方共同遵守的基本通信规程(Protocol)通信协议主要内容:同步方式传输控制步骤差错检验方式数据编码数据传输速率通信版文的格式控制字符的定义等,串行通信的基本方式,串行通信有两种基本方式异步串行通信在通信的数据流中,字符间异步,字符内部各位间同步。“异步”体现在字符与字符之间通信没有严格的定时要求。一旦传送开始,收/发双方则以预先约定的传输速率,在时钟的作用下,传送这个字符中的每一位。同步串行通信数据流中的字符与字符之间和字
4、符内部位与位之间都同步。同步串行通信是以数据块(字符块)为信息单位传送,而每帧信息包括成百上千个字符;传送一旦开始,要求每帧信息内部的每一位都要同步。,异步通信协议(起止式通信协议)格式,起始位:每一帧字符的开始,1位,逻辑0 数据位:紧接着起始位,数据位个数为58位,数据从最低位开始发送奇偶校验位:数据位之后,发送1位奇偶校验位,也可以不发校验位停止位:一帧字符的最后发停止位,它可以是1位、1.5位或2位的逻辑1信号空闲位:在每一帧字符之间可以有不等位数的逻辑1信号,表示没有传送,图示,异步通信协议(起止式通信协议)格式,比如ASCII 字符 A,二进制是0100 0001(8位),它们在起
5、始位和2位停止位之间传送,并使用了1位奇校验位。,Out,为了确保异步串行通信传输正确:,15,用相反极性的起始位和停止位/空闲位提供准确的时间基准接收器在每位的中心采样,以获得最大的收/发时钟频率偏差容限接收器采用比传送波特率更高频率的时钟来控制采样时间,以提高采样的分辨能力和抗干扰能力。,例题:异步传输7位ASCII码,如果需要数据传输速率为240字符/秒,使用1位奇偶校验位和1位停止位,则:波特率应该是多少?有效数据位传输位是多少?传输效率是多少?,答:波特率是(7位数据位+1位起始位+1位校验位+1位停止位)240=2400b/s 有效数据位传输位是:7240=1680b/s 传输效率
6、是:1680/2400=70%,以一个数据块(帧)为传输单位,每个数据块附加1个或2个同步字符,最后以校验字符结束同步通信的数据传输效率和传输速率较高,但硬件电路比较复杂串行同步通信主要应用在网络当中最常使用高级数据链路控制协议HDLC,同步通信协议,同步通信协议的格式:,多个数据字节加上同步字符构成一个数据包称为1帧每一帧以1个或2个同步字符(SYNC)为起始紧跟同步字符之后是 N个数据字符,N可由用户设定以两个检验字符(CRC)作为1帧的结束,SYNC2,a.单同步数据格式,b.双同步数据格式,c.外同步数据格式,信号的调制与解调,调制(Modulating)发送方将数字信号转换成模拟信号
7、(实现频谱搬移)解调(Demodulating)接收方将接收的模拟信号还原成数字信号调制解调器MODEM具有调制和解调功能的器件合制在一个装置数字信号的带宽较宽,模拟信号带宽较窄远距离传送需要调制,图示,21,调制方法:,按照调制技术的不同分为调频(FM)、调幅(AM)和调相(PM)三种,根据传输数字信号的变化规律去调整载波的频率、幅度或相位,信道复用,时分多路复用TDM(Time Division Multiplexing)就是将一条物理传输线路按时间分成若干时间片轮换地为多个信号所占用,每个时间片由复用的一个信号占用。频分多路复用FDM(Frequency Division Multipl
8、exing)利用频率调制原理,将要同时传送的多个信号进行频谱搬移,使它们互不重叠地占据信道频带的不同频率段,然后经发送器从同一信道上同时或不同时地发送出去。计算机串行数据通信及其接口中使用时分多路复用系统。,9.2 串行接口标准RS-232C,RS-232C是美国电子工业协会EIA制定的通用串行接口标准1962年公布,1969年修订,1987年1月正式改名为EIA-232D是数据终端设备DTE(Data Terminal Equipment)与数据发送设备DCE(Data Communication Equipment)之间相互连接的标准接口,最高数据传输率为19.2Kbps,传输电缆长度不超
9、过15米RS232C接口采用标准的D型25针连接器(DB25连接器)及九针连接器,图示,9.2 串行接口标准RS-232C,RS232C引脚定义:,232C包括两个信道:主信道和次信道次信道为辅助串行通道提供数据控制和通道,但其传输速率比主信道要低得多,其他跟主信道相同,通常较少使用,表9.1 常用的RS232C接口信号,RS232C引脚定义(续),DTR(Data Terminal Ready):DTE准备好信号DET接通电源并进入工作状态后向DCE发出DTR信号,仅当DCE收到信号后方可进行通信DSR(Data Set Ready):DCE准备好信号DCE接通电源并进入工作状态后向DTE发
10、出DSR信号,DTE确信该信号有效后,发出请求发送信号。,RTS(Request To Send):数据请求发送当DTE设备准备发送数据时,向DCE发出RTS信号CTS(Clear To Send):允许发送信号是DCE设备对DTE发来RTS信号的回答,数据才能被发送。,RS232C引脚定义(续),DCD(Data Carrier Detected):数据载波检测信号当DCE检测到线路上出现有效载波信号后,向 DTE发出DCD信号。RI(Ring Indicate):振铃指示当调制解调器接收到对方的拨号信号期间,该引脚信号作为电话铃响的指示、保持有效,TxD:发送数据串行数据的发送端RxD:接
11、收数据串行数据的接收端GND:信号地为所有的信号提供一个公共的参考电平,RS232C引脚定义(续),保护地(机壳地):起屏蔽保护作用的接地端TxC:发送器时钟控制数据终端发送串行数据的时钟信号RxC:接收器时钟控制数据终端接收串行数据的时钟信号,RS-232C的连接,微机利用232C接口连接调制解调器,用于实现通过电话线路的远距离通信微机利用232C接口直接连接进行短距离通信。这种连接不使用调制解调器,所以被称为零调制解调器(Null Modem)连接,连接调制解调器,不使用联络信号的3线相连方式,为了交换信息,TxD和RxD应当交叉连接程序中不必使RTS和DTR有效也不应检测CTS和DSR是
12、否有效,“伪”使用联络信号的3线相连方式,RTS和CTS各自互接,DTR和DSR各自互接表明请求传送总是允许、数据装置总准备好,使用联络信号的多线相连方式,通信比较可靠所用连线较多,不如前者经济,电气特性,RS-232C采用EIA电平逻辑“1”在3V15V之间逻辑“0”在3V15V之间实际常用12V或15V,图示,标准TTL电平高电平:2.4V5V低电平:0V0.4V,RS232C电平与 TTL电平不兼容,二者之间通常需加电平转换电路,图示,必须抗共模噪声干扰,RS-232C由于在发送器与接收器之间有公共信号地,不可能使用双端信号,因此共模噪声很容易引入信号系统中,且噪声幅度可高达好几伏,这是
13、迫使RS-232C使用较高传输电压的主要原因。另一个原因是为了补偿传输线上的信号衰减和沿线附加电平的影响。,最大传输速率和最大传输线长度的关系,37,一般应用情况下,RS-232C的最高传输速率为20Kb/s,最大传输线长度为30m。,机械特性,连接器,连接器的连接,电缆长度,在通信速率低于20Kb/s时,RS-232C所能直接连接的最大物理距离为15m(50ft)。RS-232C规定,若不使用MODEM,则码元的畸变要小于4%,驱动器的负载电容应该小于2500pF,则单位(1ft)长度的电容值为NpF的电缆的长度应该是:,使用特制的低电容电缆也能有效地提高电缆长度,可以达到150m(500f
14、t)甚至更多。,RS-232 的局限,RS-232C采用单端驱动、单端接收的单端双极性电路标准。仅用一条线路传输一种信号,根据该信号线上电平相对于公共的信号地电平的大小来决定逻辑的“1”和“0”。对于多条信号线来讲,它们的地线是公共的,这种共地传输方式,抗干扰能力很差。尽管采用电平转换器来提高信号传输电平,但在较长距离时,由于电压损失,仍不可避免错误。当信号穿过电磁干扰环境时,也可能因附加的干扰信号电平使发送的“0”变为“1”或“1”变为“0”。故其信号波特率不能过高,仅限在20Kb/s以下,且距离不大于15m。,异步通信适配器,PC微机异步通信适配器是微机与微机、微机与MODEM及微机与外设
15、之间进行异步通信的接口。其核心是UART。USART(Universal Synchronous/Asynchronous Receiver and Transmitter)通用同步/异步接收发送器常见的UART主要有8251A、INS8250、PC16450和PC16550。此外,还有带更大缓冲的UART,称为PC16650和PC16750,9.3 可编程串行通信接口芯片8251A,可用于同步传送和异步传送同步传送58位/字符;内同步或外同步;可自动插入同步字符异步传送 58位/字符;时钟频率为波特率的1、16、64倍;可产生终止字符;可产生1、1.5、2位的停止位;可检测假起始位;自动检测
16、和处理终止字符,9.3.1 8251A的基本功能,9.3.1 8251A的基本功能,波特率:064K(同步);019.2K(异步)全双工双缓冲器发送和接收出错检测:具有奇偶、溢出和帧错等检测电路输入输出电平与TTL电平兼容;单一+5V电源;单一TTL电平时钟;双列直插封装,9.3.2 8251A的结构,数据总线缓冲器:三态双向8位缓冲器,8251A通过它与CPU交换信息读/写控制逻辑电路:控制读/写、复位等操作,图示,调制/解调控制电路:提供一组调制/解调控制信号,使8251A可与MODEM相连发送缓冲器:由数据发送缓冲器与并串移位寄存器组成,将并行数据转换成串行数据发送出去,9.3.2 82
17、51A的结构(续),发送控制电路:协调发送缓冲器工作,为传送提供识别控制信息位(如起始位,停止位、同步字符等)接收缓冲器:接收串行数据,并按相应格式转换成并行数据接收控制电路:协调接收缓冲器工作,8251A的引脚功能,与CPU连接信号D7D0:双向数据线,与系统的数据总线相连,传送命令字,状态信息和收发数据RESET:复位信号,有效时,将内部寄存器和控制逻辑清0CS#(Chip Select):片选信号,来自CPU的I/O地址译码器RD#、WR#:读、写控制信号,与系统的IOR、IOW相连CLK:系统时钟信号,产生8251A内部的时序信号C/D#:控制口/数据口选择信号;C/D#=1,选中控制
18、/状态端口C/D#=0,选中数据端口,表9.2 RD*、WR*、C/D*的编码和对应的操作,与CPU连接信号,TxRDY(transmitter Ready):发送器准备好信号,输出,高电平有效TxRDY有效的条件是:CTS#引脚是低电平,初始化命令字的TxEN=1,当发送缓冲器为空时,此信号有效它有效表明CPU可以向8251A发送数据在中断方式下,TxRDY可作为中断请求信号CPU向8251A写入一个字符后,TxRDY自动复位,与CPU连接信号,TxE(Transmitter Empty)发送器空信号,输出,高电平有效表示发送器中并串转换器已空,发送过程已完成;8251A从CPU接收待发的数
19、据后,自动复位;字符发送完,TxE又变为高;TxRDY较TxE之前有效,RxRDY(Receiver Ready)接收器准备好信号,输出,高电平有效表示8251A已经接收了一个数据,正等待CPU取走;该信号可作为向CPU发出的中断请求信号;当CPU读取数据后,RxRDY自动复位。,与CPU连接信号,SRNDET(Synchronous Detect)同步检验信号,双向,高电平有效。该信号仅用于同步方式,其输入输出由程序控制。内同步方式:SRNDET端输出。当8251A检测到同步字符时,该信号为高电平,表示接收发送达到同步。外同步方式:SRNDET端输入。当片外电路检测到同步字符时从该端输入高电
20、平,它使8251A在RxC时钟下开始装配字符。,与调制/解调器的接口信号,DTR#(Data Terminal Ready)数据终端准备好信号,低电平有效。有效表示DTE设备已准备好。DSR#(Data Set Ready)数据装置准备好,输入,低电平有效。它是MODEM对DTR信号的回答,表示MODEM已准备好。,RTS#(Request To Send)请求发送信号,输出,低电平有效。用于通知MODEM,DTE设备要求发送数据,与调制/解调器的接口信号,CTS#(Clear To Send)允许发送信号,输入,低电平有效。是MODEM对RTS 的响应信号,表示允许DTE设备发送数据TxD(
21、Transmitter Data)发送数据线RxD(Receiver Data)接收数据线,传输速率控制线,TxC(Transmitter Clock)发送器时钟,控制8251A发送字符的速率RxC(Receiver Clock)接收器时钟,控制8251A接收字符的速率在同步方式下:TxC和RxC的频率等于字符传输的波特率在异步方式下:TxC和RxC的频率可以是字符传输波特率的1倍、16倍或64倍,由初始化编程设定,9.3.3 8251A的编程使用,工作方式字作用:设定8251A的工作方式,如异步/同步方式,字符格式,传输率等写入次序工作方式字必须紧跟复位操作之后写入工作方式字的格式为:,工作
22、方式字的格式,工作方式字的格式说明,D1、D0:同步异步/波特率系数选择D1D0=00,为同步方式控制字此时由D7D6位来选择同步的方式D1D000,是异步方式控制字D1D0=01、10、11,其波特率系数分别为:1、16、64TxC和RxC的频率、波特率系数和波特率的关系为:,工作方式字的格式说明,D3、D2:字符长度选择D3D2=00、01、10、11,数据分为:5、6、7、8位D5、D4:奇/偶校验选择D5D4=0、10、11,分别为:无校验、奇校验、偶校验D7、D6:同步控制方式/停止位长选择当D1D0=00,为同步控制方式设置D7D6=00、01、10、11,分别为双/单同步下的内/
23、外同步;当D1D000,为停止位长选择D7D6=01、10、11,停止位长分别为:1、1.5、2位,例9.1 设定8251A工作于异步方式,波特率系数是16,每个字符7位数据位,1位起始位,2位停止位,偶校验。,则其工作方式字为:1111 1010B=0FAH设定工作方式程序段为:MOVDX,309H;8251A的控制口MOVAL,0FAH;工作方式字OUTDX,AL,工作命令字,作用:确定8251A的实际操作,使8251A进入某种工作状态,以便发送或接收数据工作命令字的格式:,工作命令字的格式:,D0:发送允许D0=1,允许发送,D0=0,禁止发送D1:数据终端准备就绪。D1=1,置引脚DT
24、R#有效,表示数据终端准备好D2:接收允许D2=1,允许接收,D2=0,禁止接收D3:发中止字符D3=1,使引脚TxD为低电平,输出中止字符D3=0,正常工作情况,工作命令字的格式说明,D4:错误标志复位D4=1,使状态寄存器中出错标志(FE、OE、PE)复位D5:发送请求D5=1,置引脚RTS#为低电平,向MODEM提出发送请求D6:内部复位。D6=1,使8251A复位D7:搜索同步字符,只用于内同步方式D7=1,8251A对RxD引脚输入的信息进行同步字符搜索,若搜索到,使SYNDET输出高电平,例9.2 要使8251A内部复位,且允许接收和发送,应先发复位字,再发允许收发字。,程序段为:
25、MOVDX,309H;309H 8251A命令口MOVAL,0100 0000B;置D6=1,OUTDX,AL;使内部复位MOVAL,0000 0101B;置D2=1,D0=1OUTDX,AL;允许接收与发送,状态字,8251A内部设有状态寄存器,CPU用IN指令读入8251A的状态字,查询接口当前的工作状态。状态字的格式:,状态字的格式说明,RxRDY(D1)、TxE(D2)和SYNDET(D6)的含义与同名引脚的含义和状态相同DSR(D7)=1,表示DSR#引脚为低电平TxRDY(D0)=1,只表示输出缓冲器已空,这与输出引脚TxRDY的含义有所不同。仅当状态位TxRDY=1,引脚CTS#
26、为低和命令字的TxEN位=1,三者同时满足时,输出引脚TxRDY=1,状态字的格式说明,FE=1表示帧格式错,即在异步方式下,当一个字符结束而没有检测到规定的停止位的差错OE=1表示溢出错,即CPU尚未读取上一个字符而又接收了下一个字符的错误PE=1表示当前出现了奇偶校验错FE、OE和PE的有效并不影响8251A的操作,它们被工作命令字的ER位复位。,例9.3 查询8251A接收器是否准备好,可用以下程序段:,MOVDX,309H;309H:状态口地址L:INAL,DX;读状态字ANDAL,02H;查D1(RxRDY)=1?JZL;未准备好,继续查询MOVDX,308H;308H:数据口地址I
27、NAL,DX;已准备好,读取数据,例9.4 在传输过程中要检查出错信息,MOV DX,309H;309H为 状态口IN AL,DX;读状态字TEST AL,38H;检查D5D4D3三位(FE、OE、PE)JNZ ERROR;若其中有一位为1,则出错ERROR:,工作方式字和 工作命令字的使用,方式字、命令字、状态字之间的关系方式字只约定了双方通信的方式、数据格式、传输速率等参数数据的发送或接收,要靠命令字来确定要正确地接收/发送数据,则需要CPU查询状态字来进行控制,方式字和命令字的写入,8251A的工作方式字与操作命令字占有同一端口地址,写入方式字和命令字时要按一定的顺序先后写入对8251A
28、复位之前,最好先写3个“0”,并作相应的延时写入顺序:写三个0 复位工作方式字工作命令字1工作命令字2。,图示,8251A与CPU的信息交换方式,查询方式CPU先读入8251A状态字若状态字的D0(TxRDY)=1,CPU可向8251A数据口写入数据,完成串行数据的发送若状态字的D1(RxRDY)=1,CPU可从8251A数据口读取数据,完成一帧数据的接收,中断方式,8251A没有单独的中断请求引脚,TxRDY引脚可作为发送中断求信号引脚RxRDY可作为接收中断请求信号;若数据发送与接收均采用中断方式,则TxRDY和RxRDY可通过“或门”向CPU提出中断请求,CPU转入中断程序后再查询状态字
29、,分别转向发送或接收处理程序,8251A的编程举例,例9.5 设定8251A工作于异步方式,波特率因子为64,每字符7个数据位,偶校验,2个停止位,写出初始化程序段,设数据口地址为50H,控制口地址为51H。工作方式字:1111 1011B=0FBH工作命令字:0100 0000B=40H(内部复位)工作命令字:0001 0111B=17H(清出错标志,接收发送允许,使DTR有效),初始化程序段:,MOV AL,40H;使内部复位OUT 51H,AL;51H 是8251A的控制口MOV AL,0FBH;设定工作方式OUT 51H,AL MOV AL,17H;设定工作命令字OUT 51H,AL,
30、例9.6 8251A工作于同步方式,双同步,采用内同步方式(SYNDET引脚为输出),奇校验,每个字符8个数据位,写出初始化程序段。设8251A的数据口地址为308H,控制口地址为309H。,工作方式字:0001 1100B=1CH同步字符:16H工作命令字:1000 0111B=97H,工作程序段:,MOV AL,40H;使内部复位MOV DX,309H;309H 是控制口地址OUT DX,AL MOV AL,1CH;设定工作方式OUT DX,AL MOV AL,16H;输出工作命令字OUT DX,AL;连续输出两个同步字符OUT DX,ALMOV AL,97H;写工作命令字OUT DX,A
31、L,例9.7 用8251A实现与终端(显示器,键盘)的串行通信,即CPU接收键盘输入字符,然后输出到显示器显示。设8251A工作于异步方式,波特率因子为16,每字符7个数据位,奇校验,1个停止位。8251A数据口地址为0D0H,控制口地址为0D1H。,硬件连接:采用“自环”方式连接,传送单个字符到显示器的程序段,BEGIN:MOV AL,5AH;写方式字OUT 0D1H,AL;0D1H为控制口地址MOV AL,37H;写命令字,使错误标志复位OUT 0D1H,A;发送、接收允许,DTR和RTS输出低电平STATE:IN AL,0D1H;读状态字TESTAL,01H;检查TxRDY1?JZSTA
32、TE;如不为1,则继续查询MOVAL,4AH;输出字符 J的ASCII码OUT0D0H,AL;0D0H为数据口地址HLT,字符回送到显示器程序段,要求串行接口接收从键盘输入的一个字符,并立即将该字符回送到显示器显示。,BEGIN:MOVAL,5AH;写方式字OUT0D1H,AL;到控制口MOVAL,37H;写命令字,使错误标志复位OUT0D1H,AL;发送、接收允许,DTR和RTS输出低电平STATE1:INAL,0D1H;读状态字TESTAL,02H;检查RxRDY1?JZSTATE1;不为1,则继续查询,INAL,0D0H;接收一个字符MOVBL,AL;暂存于BL中STATE2:INAL,
33、0D1H;读状态字TESTAL,01H;检查TxRDY1?JZSTATE2;不为1,则继续查询MOVAL,BL;BL中暂存的字符送ALOUT0D0H,AL;字符输出给显示器JMPSTATE1;继续准备接收,字符回送到显示器程序段,要求串行接口接收从键盘输入的一个字符,并立即将该字符回送到显示器显示。,例9.8 利用8251A实现双机通信,要求:甲,乙两台微机之间串行通信,甲发,乙收,要把甲机上的一段程序(长度为2DH)传送到乙机中;采用异步方式,每个字符8个数据位,2个停止位,波特率因子为64,无校验;CPU于8251A之间用查询方式交换数据;口地址分配是:309H命令口/状态口,308H为数
34、据口。硬件连接:用两片8251A,经电平转换构成RS-232C接口,最简方式连接。,图示,发送方(甲机)初始化及控制程序段,START:MOV DX,309H;命令口MOV AL,00HOUT DX,AL;空操作MOV AL,40H;内部复位OUT DX,ALNOP;空格延时MOV AL,0CFH;方式字OUTDX,ALMOVAL,11H;命令字(ER和TXEN均置1)MOV CX,2DH;传送字节数MOV SI,300H;发送区首址为300H,L1:MOV DX,309H;状态口TEST AL,01H;检查TxRDY1?JZ L1;发送未准备好,继续查询MOVDX,308H;数据口MOVAL
35、,SI;取一个字节数据OUTDX,AL;发出INCSI;修改地址指针DECCX;字节数减1JNZL1;未发完继续发HLT,发送方(甲机)初始化及控制程序段(续),接收方(乙机)初始化及控制程序段,START:MOV DX,309H;命令口MOV AL,00HOUT DX,AL;空操作MOV AL,40H;内部复位OUT DX,ALNOP;空格延时MOV AL,0CFH;工作方式字OUT DX,ALMOV AL,14H;命令字(ER和RXE均置1)OUT DX,AL;错误标志复位,接收允许MOV CX,2DH;接收字节数MOV DI,400H;接收区首址为400H,L2:MOVDX,309H;状
36、态口INAL,DX;查状态字 TESTAL,02H;查D1(RXRDY)=1?JZL2;接收未准备好,继续查询TEST AL,38H;查出错JNZ ERR;有错误转出错处理MOV DX,308H;数据口IN AL,DX;接收准备好,接收一个字符MOV DI,AL;存入接收区INC DI;修改接收区地址指针LOOP L2;未接收完,继续HLT,接收方(乙机)初始化及控制程序段(续),9.4 通用异步接收发送器8250,串行传输,需要并行到串行和串行到并行的转换,并按照传输协议发送和接收每个字符(或数据块)这些工作可由软件实现,也可用硬件实现通用异步接收发送器UART是串行异步通信的接口电路芯片I
37、BM PC/XT机的UART芯片是INS8250后来使用NS16550,8250的内部结构,8250实现了起止式串行异步通信协议,支持全双工通信通信字符可选择数据位为58位停止位1、1.5或2位可进行奇偶校验具有奇偶、帧和溢出错误检测电路8250支持的数据传输速率为509600bps,8250的内部结构,88,串行数据的发送,双缓冲寄存器结构保证数据的连续发送,起始位的检测,起始检测,确定已检测到起始位,采样数据,数据接收时钟频率是数据传输频率的16倍正确识别起始位,防止因干扰引起的误识别,串行数据的接收,双缓冲寄存器结构保证数据的连续接收,接收错误的处理,奇偶错误PE(Parity Erro
38、r)若接收到的字符的“1”的个数不符合奇偶校验要求帧错误FE(Frame Error)若接收到的字符格式不符合规定(如缺少停止位)溢出错误OE(Overrun Error)若接收移位寄存器接收到一个数据,并送至输入缓冲器时,CPU还未取走前一个数据,就会出现数据溢出若接收缓冲器的级数多,则溢出错误的几率就少,9.4.2 8250的引脚,分成连接CPU的部分和连接外设的部分注意:8250不是Intel公司的产品,所以该芯片引脚名称与前面学习的8253、8255等Intel产品有所不同,但是引脚功能却是类似的,9.4.2 8250的引脚,处理器接口引脚(1),数据线D0D7:在CPU与8250之间
39、交换信息地址线A0A2:寻址8250内部寄存器片选线:8250设计了3个片选输入信号CS0、CS1、CS2#和一个片选输出信号CSOUT。3个片选输入都有效时,才选中8250芯片,同时CSOUT输出高电平有效。地址选通信号ADS#:当该信号低有效时,锁存上述地址线和片选线的输入状态,保证读写期间的地址稳定,处理器接口引脚(2),读控制线数据输入选通DISTR(高有效)和DISTR#(低有效)有一个信号有效,CPU从8250内部寄存器读出数据相当于I/O读信号写控制线数据输出选通DOSTR(高有效)和DOSTR#(低有效)有一个有效,CPU就将数据写入8250内部寄存器相当于I/O写信号8250
40、读写控制信号有两对,每对信号作用完全相同,只不过有效电平不同而己,处理器接口引脚(3),驱动器禁止信号DDIS:CPU从8250读取数据时,DDIS引脚输出低电平,用来禁止外部收发器对系统总线的驱动;其他时间,DDIS为高电平主复位线MR硬件复位信号RESET中断请求线INTRPT:8250有4级共10个中断源,当任一个未被屏蔽的中断源有请求时,INTRPT输出高电平向CPU请求中断,时钟信号,时钟输入引脚XTAL1:8250的基准工作时钟时钟输出引脚XTAL2:基准时钟信号的输出端波特率输出引脚BAUDOUT#:基准时钟经8250内部波特率发生器分频后产生发送时钟接收时钟引脚RCLK:接收外
41、部提供的接收时钟信号;若采用发送时钟作为接收时钟,则只要将RCLK引脚和BAUDOUT#引脚直接相连,串行异步接口引脚,SIN:串行数据输入。SOUT:串行数据输出。DSR#:数据设备就绪,输入线DTR#:数据终端就绪,输出线RI#:振铃指示,输入线。RLSD#:接收线路信号检测,输入线。RTS#:请求发送,输出线。CTS#:清除发送,输入线。,串行异步接口引脚(续),输出线,OUT1#和OUT2#:两个一般用途的输出信号由调制解调器控制寄存器的D2和D3使其输出低电平有效信号复位使其恢复为高,9.4.3 8250的寄存器,8250内部有9种可访问的寄存器,除数寄存器是16位的,占用两个连续的
42、8位端口内部寄存器用引脚A0A2来寻址;同时还要利用通信线路控制寄存器的最高位,即除数寄存器访问位DLAB,来区别共用两个端口地址的不同寄存器,注:DLAB是线路控制寄存器的D7位。,表9.2 8250内部寄存器的访问控制,A2A1A0=011,线路控制寄存器LCR,线路状态寄存器LSR,接收缓冲区满,接收奇偶错,接收格式错(无正确的停止位),中止识别标志,发送移位器空,A2A1A0=101,接收重叠错,发送保持器空,FIFO中接收数据错误(16550),接收缓冲寄存器RBR,存放串行接收后转换成并行的数据,DLAB=0,A2A1A0=000,发送保持寄存器THR,包含将要串行发送的并行数据,
43、DLAB=0,A2A1A0=000,这是软件控制的分频器,输出的工作时钟频率为16倍的波特率。除数寄存器值=基准时钟频率(16波特率)INS8250芯片输入的基准时钟频率为1.8432MHz,若波特率为4800b/s,则波特率除数为0018H,DLH中应填00H,DLL中应填18H。注意:PC16550的基准时钟一般为18.432MHz。,DLAB=1,A2A1A0=001(高)或000(低),波特率除数锁存器 DLH、DLL,中断识别寄存器IIR,中断类型标识,A2A1A0=010(读),表9.3 8250的中断类型控制,中断允许寄存器IER,进入低功耗模式(16550),进入睡眠模式(16
44、750),DLAB=0,A2A1A0=001,MODEM控制寄存器MCR,A2A1A0=100,数据终端就绪,请求发送,辅助输出1,自动流量控制(16750),环路检测(内部自循环),辅助输出2,PC用做中断,注意:这里的OUTi位极性和OUTi引脚相反。,A2A1A0=110,CTS位发生改变,DSR位发生改变,收到“振铃指示”后沿(下降沿),收到“数传机就绪”,收到“清除发送”,RLSD位发生改变,收到“振铃指示”,收到“接收线载波检测”,MODEM状态寄存器MSR,FIFO控制寄存器(FCR),A2A1A0=010(写)16550后才有,允许FIFO缓冲器工作,清除接收FIFO缓冲器,清
45、除发送FIFO缓冲器,允许64字节FIFO(16750),保留,DMA方式选择,接收端中断触发器水平(LSB),接收端中断触发器水平(MSB),触发器水平即是指示在中断产生之前,接收缓冲器应该装满多少个字节。,9.5 异步通信适配器,IBM PC/XT机的串行异步通信适配器以8250为核心完成发送时的并转串和接收时的串转并以及相应的控制工作配置了TTL电平与EIA电平转换电路等展开异步通信适配器的硬件电路软件编程,9.5.1 异步通信适配器的接口电路,注意:J9J11跨接器和OUT2#的作用,9.5.2 异步通信适配器的初始化编程,对8250的内部控制寄存器进行编程写入写入除数寄存器设置传输率
46、写入通信线路控制寄存器设置字符格式写入调制解调器控制寄存器设置工作方式写入中断允许寄存器设置中断允许或屏蔽位,设置传输率,mov al,80hmov dx,3fbhout dx,al;写入通信线路控制寄存器,使DLAB1mov ax,96;分频系数:1.8432MHz(120016)9660Hmov dx,3f8hout dx,al;写入除数寄存器低8位mov al,ahinc dxout dx,al;写入除数寄存器高8位,8250初始化编程举例,写入除数寄存器,设置字符格式,mov al,00001010bmov dx,3fbhout dx,al;写入通信线路控制寄存器;这段程序同时使DLA
47、B0,8250初始化编程举例,写入通信线路控制寄存器,设置工作方式,;设置查询通信方式mov al,03h;控制OUT2#为高,DTR#和RTS#为低 mov dx,3fchoutdx,al;写入调制解调器控制寄存器;设置中断通信方式mov al,0bh;控制为OUT2#低,允许INTRPT产生请求mov dx,3fchout dx,al,写入调制解调器控制寄存器,8250初始化编程举例,设置中断允许或屏蔽位,mov al,0;禁止所有中断mov dx,3f9houtdx,al;写入中断允许寄存器(此时DLAB0),写入中断允许寄存器,8250初始化编程举例,9.5.3 异步通信程序举例,程序
48、循环读取8250的通信状态寄存器数据传输错误就显示一个问号“?”接收到数据就显示出来可以发送数据就从键盘输入发送字符(用户没有输入字符就不发送)如果按下ESC键返回DOS,statue:mov dx,2fdh;读通信线路状态寄存器inal,dxtest al,1eh;接收有错误否?jnz error;有错,则转错误处理test al,01h;接收到数据吗?jnz receive;是,转接收处理testal,20h;保持寄存器空吗?jz statue;不能,循环查询,异步通信程序,查询通信线路状态,mov ah,0bh;检测键盘有无输入字符int 21hcmpal,0jzstatue;无输入字符
49、,循环等待movah,0;有输入字符,读取字符int 16h;采用01号DOS功能调用,则有回显cmpal,1bhjzdone;是ESC键,程序返回DOS,检测键盘输入,异步通信程序,mov dx,2f8h;将字符输出给发送保持寄存器outdx,al;串行发送数据jmp statue;继续查询,发送数据,异步通信程序,receive:mov dx,2f8h;从输入缓冲寄存器读取字符in al,dxand al,7fh;传送标准ASCII码(7个数据位),仅取低7位push ax;保存数据,接收数据,异步通信程序,mov dl,al;屏幕显示该数据mov ah,2int 21hpop ax;恢复
50、数据cmp al,0dh;数据是回车符吗?jnz statue;不是,则循环mov dl,0ah;是,再进行换行mov ah,2int 21hjmp statue;继续查询,显示数据,异步通信程序,error:mov dx,2f8h;读出接收有误的数据,丢掉in al,dxmov dl,?;显示问号mov ah,2int 21hjmp statue;继续查询,接收错误处理,异步通信程序,9.5.4 中断通信方式的编程方法,关键解决主程序与中断服务程序的数据传递注意处理好8250的4级10种中断源简便方法只允许接收数据准备好中断,中断通信方式的循环队列,8250,自测试循环工作方式,数据终端准备