- 122.00 KB
- 2022-07-28 发布
- 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
- 网站客服QQ:403074932
8251A是通用同步异步接收发送器,具有独立的发送器和接收器,能以单工、半双工和全双工三种方式通信,可用同步和异步方式传输信息。通过初始化编程设置串行通信接口芯片的工作方式、波特因子、数据帧格式及8251A的工作状态。1)与CPU连接信号D0~D7(数据线):接至系统的D7—D0,用于传数据、控制和状态信息。RD、WR(读写控制):接至IOR、IOW,控制CPU与I/O端口间的数据、命令和状态信息的写入与读出。CS:(片选信号):可接至系统的片选译码器CS=0,CPU可读写8251.C/D(地址线):可接系统的A0。=1:CPU访问命令寄存器或状态寄存器=0:CPU访问数据寄存器(2)状态信号:供CPU查询或向CPU申请。TxRDY:发送器准备好。=1表示发送器已准备好,通知CPU可以向8251发送数据。CPU写入一个发送字符后,TxRDY=0TxRDY可用于查询的条件,CPU可从状态字的D0位读出,判断后可决定是否向8251写入发送字符。TxRDY也可以用作中断请求信号,=1表示请求CPU向8251写入发送的数据。②RxRDY:接收器准备好,=1表示8251A已从它的串行输入端接受了一个字符,通知CPU取走。CPU取走接收的字符后RxRDY=0。RxRDY可用于查询的条件,CPU可从状态字的D1位读出,判断后可决定是否读8251接收的字符。RxRDY也可以用作中断请求信号,=1表示请求CPU读出8251接收的数据。③TxE:发送器空,=1指示发生器中的数据已经发送,在半双工方式时可用于数据传送方向的切换控制,④SYNDET:同步字符检出/间断信号检出BD。同步方式设为内同步:输出,表示8251检出了同步字符。同步方式设为外同步:输入,表示外部检出同步字符后通知8251。异步方式时当8251检出间断信号BD后,输出为1.3)时钟信号①TxC:发送器时钟,由外部波特率时钟发生器提供。②RxC:接收时钟,由外部波特率时钟发生器提供。TxC、RxC用于控制8251的异步通信过程。8\n收发时钟的频率=K×波特率③CLK:工作时钟,由外部提供。在同步方式下,CLK>TxC、RxC30倍异步下为4~5倍。(4)面向调制解调器信号①DTR:数据终端准备好输出,CPU写8251命令寄存器D1=1,反向后DTR=0→DCE,表示8251A准备好。②DSR:数据装置准备好,DCE就绪后置DSR=0,反向后8251状态寄存器D7=1.CPU读取后可知DCE(调制解调器)已准备好③RTS:请求发送,CPU需要发送时,可设置工作命令寄存器的D5=1,反向后RTS=0→DCE(MODEM),表示8251A需要发送。④CTS:允许传送,是DCE(MODEM)对8251ARTS信号的响应,CTS=0表示8251A可以发送数据。⑤TxD:发送数据线⑥RxD:接收数据线(1)数据总线缓冲器:负责与系统总线D7—D0连接,可以传送CPU写8251的方式字和命令字,也可以传送8251的状态到CPU。(2)发送器:将待发送的并行数据转换成所要求的帧格式并加上校验位,然后在TxC的作用下,由TxD引脚一位一位地串行发送出去。发送一帧后,TxRDY=1,通知CPU发下一个数据。(3)接收器:在接收时钟RxC作用下接收RxD引脚上的帧格式化串行数据并把转换为并行数据。同时将检错信息存于状态寄存器,供CPU处理。若无错时,将并行数据存入数据缓冲器,RxRDY=1,通知CPU取数。D1D0:设置8251的同步方式。=008251为同步方式。≠008251为异步方式,在异步方式时:D1D0=01设置K=1D1D0=10设置K=16D1D0=11设置K=64D3D2:设定字符中的数据位数。D3D2=00数据为5位,D3D2=01数据为6位D3D2=10数据为7位,D3D2=11数据为8位D4:设置是否要用奇偶校验位。D5:设置要用奇或偶校验。D4=0不用奇偶校验位(此时D5无效)D4=1要用奇偶校验位,D5=0为奇校验D5=1为偶校验D7D6:①在同步方式时用于同步字符方式的设置。D7D6=×08251设为内同步D7D6=×18251设为外同步D7D6=0×8251设为双同步字符方式D7D6=1×8251设为单同步字符方式②在异步方式时用于停止位方式的设置。8\nD7D6=00无效D7D6=01设为1位停止位D7D6=10设为1.5位停止位D7D6=11设为2位停止位例:在某异步通信中,数据格式采用8位数据位,1位起始位,2位停止位,偶校验,波特因子为64,端口地址为210H和211H,将方式命令字写入端口中。程序为:MOVAL,11111111BMOVDX,211HOUTDX,AL例:允许8251A的发送器和接收器工作,并实现差错复位的功能。写出8251A的工作命令字D0:设置允许发送TXEN。D0=1允许8251做发送操作。D0=0禁止8251做发送操作。相当于发送中断的屏蔽。D1:数据终端准备就绪DTR.CPU设8251的D1=1→反向=0→引脚DTR=0→MODEM,表示DTE就绪。D2:设置允许接收RXE。D2=1允许8251做接收操作。D2=0禁止8251做接收操作。相当于接收中断的屏蔽D3:设置是否发送中止字符SBRK.D3=1要发送中止字符,强迫TXD为低电平,输出连续的空号(0)。D3=0不发送中止字符,出现空闲时TXD输出连续的传号(1)。D4:设置错误标志复位ER。D4=1设置错误标志复位ER有效,清除出错标志(PE/OE/FE)复位,在每次接收之前需要设置为清除,以便识别新的出错情况。D5:设置请求发送RTS.CPU设8251的D5=1→反向=0→引脚RTS=0→MODEM,表示请求发送。D6:设置内部复位命令IR。CPU设8251的D6=1,8251进入内部复位状态,清除原先设置的通信方式,等待CPU重新初始化,D6=1后必须对8251重新做初始化。D6=0,该字为正常通信的命令字。D7:在同步方式时启动搜索同步字符。例:设置对8251做内部复位,设端口地址为308H(数据口)、309H(控制口)程序为:MOVDX,309HMOVAL,01000000B;D6=18\nOUTDX,AL例:检查8251A是否接收到一个字符,若接收到,存于BL寄存器。写出完成上述功能的程序段(210H、211H)D0(TXRDY):发送器准备好状态。当发送器空的时候,D0=1,CPU在查询方式时可以通过查询D0的状态决定是否可以发送数据。D0与引脚TXRDY功能相同,但产生的条件稍微有点不同。引脚TXRDY可用作中断请求信号,=1表示请求CPU向8251写入需要发送的数据。D1(RXRDY):接收器准备好,=1表示8251A已从它的串行输入端接受了一个字符,RxRDY可用于查询的条件,CPU可从状态字的D1位读出,判断后可决定是否读8251接收的字符。D1与引脚RxRDY功能相同,但引脚用作中断请求信号,=1表示请求CPU读出8251接收的数据。D2(TXE):发送器空状态,与引脚功能相同。D3(PE):奇偶校验错状态。当8251接收的通信字符出现丢1时,D3=1.D4(OE):溢出错状态。当8251接收了通信字符而上一次接收的数据CPU还没有取走,出现覆盖错时出现D4=1。D5(FE):帧错状态。当8251接收的通信字符出现无停止位1时,D5=1。D5D4D3的出错状态在8251接收前必须用命令字D4=1清除,在8251接收后CPU可读取D5D4D3的出错状态,发现有错时需要做相应的处理。D6(SYNDET):8251工作在同步方式时,当检出同步字符后,D6=1,可供CPU检测。D7(DSR):DCE就绪状态。DCE就绪后置8051引脚DSR=0,反向后8251状态寄存器D7=1.CPU读取后可知DCE(调制解调器)已准备好。例:检查8251A是否接收到一个字符,若接收到,存于BL寄存器。写出完成上述功能的程序段SCAN:INAL,211HTESTAL,02HJZSCANINAL,210HMOVBL,AL例:CPU检测TXRDY是否为1.L:MOVDX,309H;指向状态口8\nINAL,DX;读状态字TESTAL,00000001B;测D0JZL;D0=0,转L继续测…….;D0=1,发送器准备好例:在接收程序中检查出错信息。L:MOVDX,309H;指向状态口INAL,DX;读状态字TESTAL,00111000B;测D5D4D3JNZERROR;D5D4D3≠0,转出错处理…….;D5D4D3=0,无错8251A初始化编程步骤:1)向控制口写入40H,使芯片内部复位;(2)向控制口写入方式命令字,设工作方式、波特因子和帧数据结构;(3)向控制口写入工作命令字。(4)读取8251状态,与命令字结合控制数据收发。(查询方式上图所示电路利用8251实现CPU与I/O的操作,下面程序完成的功能是:连续地从RS-232C接口读取串行字符,将接收的字符取反,然后将其送回RS-232C接口。接收和发送的每个字符的长度为8位,使用2个停止位,无奇偶校验。INT8251:MOVAL,01000000;写工作命令字MOVDX,211HOUTDX,AL;复位MOVAL,11001110;写方式命令字OUTDX,AL;2个停止位,8数据,K=16MOVAL,00010101;写工作命令字OUTDX,AL;CHRRX:INAL,DX;检查是否接收到一个字符RORAL,1RORAL,1;RXRDY→CFJNCCHKRX;RXRDY=0未收到,转CHKRX8\nMOVDX,210H;RXRDY=1已收到,数据口INAL,DX;读接收的数据NOTAL;把接收到的字符求反MOVBL,AL;暂存CHKTX:MOVDX,211H;指向控制口INAL,DX;检查是否能发送字符RORAL,1;TXRDY→CFJNCCHKTX;TXRDY=0,不能发送返回MOVAL,BL;TXRDY=1发送已求反的字符MOVDX,210HOUTDX,AL;发送的字符送数据口JMPCHKRX1)要求甲发乙收,2DH个字节,异步方式,8位数据位,2位停止位,无校验,波特因子64,查询方式,零MODEM连接,甲机首址SRC,乙机首址DST,8251A地址308H、309H(2)硬件连接(3)软件编程甲、乙机方式命令:0CFH=110011112个停止位,不校验,8个数据位,K=64甲机发送工作命令:23H=00100011RTS=1(请求发送)DTR=1(DTE就绪)TXEN=1(发送允许)乙机接收工作命令:16H=00010110ER=1(复位出错标志)RXE=1(允许接收)DTR=1(DTE就绪)(甲机发送程序段)MOVDX,309HMOVAL,01H;空操作OUTDX,ALMOVAL,40H内部复位OUTDX,ALMOVAL,0CFH;方式命令OUTDX,ALMOVAL,23H工作命令OUTDX,ALLEASI,SRC;指向发送缓冲区MOVCX,2DH;数据个数L:MOVDX,309H;指向控制口INAL,DX;读状态字ANDAL,01H;测TxRDYJZL;TxRDY=0,返回等待MOVDX,308H;TxRDY=1,发送,指向数据口MOVAL,[SI];取发送数据OUTDX,AL;送数据口输出INCSI;指向下一单元LOOPL;循环8\n;发送完毕;以下为乙机接收程序段MOVDX,309H;指向控制口MOVAL,01H;空操作OUTDX,ALMOVAL,40H;内部复位OUTDX,ALMOVAL,0CFH;写入方式命令OUTDX,ALMOVAL,16H;写入工作命令字OUTDX,ALLEADI,DST;指向接收缓冲区MOVCX,2DH;数据个数L:MOVDX,309H;控制口INAL,DX;读状态字TESTAL,38H;测出错标志JNZERR;出错,转错误处理ANDAL,02H;测RxRDYJNZL;RxRDY=0,未收到字符,等待MOVDX,308H;RxRDY=1指向数据口INAL,DX;接收MOV[DI],AL;存入输入缓冲区INCDI;指向下一单元LOOPL;循环;接收完毕START:MOVAX,DATAMOVDS,AXMOVDX,20BH;MOVAL,96HOUTDX,AL(设置8253计数器2工作方式,计数器0工作在方式3,只写计数初始值低8位,二进制计数。MOVDX,20AH;(MOVAL,52;OUTDX,AL;)MOVDX,211HXORAL,ALMOVCX,(3)DELAY:CALLOUT1LOOPDELAYMOVAL,(40H);内复位命令CALLOUT1MOVAL,(4EH);方式命令字CALLOUT18\nMOVAL,(15H);允许发送和接收CALLOUT1MOVAH,9MOVDX,OFFSETMES1INT21HWAIT:MOVDX,211HINAL,DXTESTAL,(01H);发送是否准备好?JZWAITMOVAH,01HINT21H;从键盘上读一字符CMPAL,(1BH);若ESC,结束JZEXITMOVDX,210HINC(AL)OUTDX,(AL);发送MOVCX,400HS51:LOOPS51;延时NEXT:MOVDX,211HINAL,DXTESTAL,(02H)JZNEXTMOVDX,210HINAL,DXMOVDL,ALMOVAH,02H;将接收到的字符INT21H;显示在屏幕上JMPWAITEXIT:MOVAH,4CHINT21HCODEENDSENDSTART8