1、波特率因子寄存器是用来控制串行数据传输的数率。波特率因子=1843200(分频值16)内部设置波特率因子寄存器DLL/DLH,在初始化时将选用的波特率因子值的高低、低字节分别放入DLH和DLL中。若设定通信波特率为1200bps,波特率因子寄存器的初始化程序为:MOV DX,3FBHMOV AL,80HOUT DX,ALMOV DX,3F8HMOV AL,60HMOV DX,3F9HMOV AL,00H2.2.2通信线路控制寄存器(LCR)通信线路控制寄存器LRC主要用来指定异步通信数据格式,即字符长度、停止位位数、奇偶校验。LRC的控制字如下D7D6D5D4D3D2D1D0DLABSBSPE
2、PSPENSTBWLS1WLS02.2.3通信线路状态寄存器通信线路状态寄存器用来表示数据接收和数据发送时8250的状态。控制字如下TSRETHREBTFEPEOEDR2.2.4中断允许寄存器中断源提出的中断请求被允许还是被禁止是由允许中断寄存器控制。控制字格式如下EMSIELSIETBEIERBFI2.2.5中断识别寄存器为了具体识别时哪种事件引起的中断,直到该中断请求被CPU响应并服务之后,才能接收其他的中断请求。该寄存器为只读寄存器,内容格式为ID2ID1IP2.2.6调制解调控制寄存器MODEM控制寄存器用来设置对MODEM的联络控制信号和芯片自检,寄存器的各位定义如下:LOOPOUT
3、2OUT1RTSDTR2.2.7MODEM状态寄存器Modem状态寄存器用来检测和记录来自Modem的联络信号及其状态变化。此寄存器的各位定义为:RLSDRIDSRCTSRLSDRIDSRCTS2.2.8发送保持寄存器和接收缓冲寄存器 发送时,CPU首先将待发送的字符写到8250的发送保持寄存器THR中,然后进入发送移位寄存器,在发送始终的作用下,从SOUT引脚输出。一旦THR的内容送到发送移位寄存器TSR后,THR就变空,同时将LSR的THRE位置“1”,产生中断请求,要求CPU发送下一个字符。CPU向THR写入下一个字符后,THRE位自动清“0”。如此重复,直到全部数据发送完毕。接收时,串
4、行数据在接收时钟的作用下,从SIN引脚先输入到移位寄存器RSR,然后由RSR并行输入到接收缓冲寄存器RBR,一旦RBR变满,将LSR的DR位置“1”,产生中断请求,要求CPU读取数据字符。CPU从RBR读取该字符后,DR位自动清“0”。如此重复,直到所有的数据接收完毕。2.3INS 8250的各寄存器的地址寄存器COM1端口下的地址COM2端口下的地址THR3F8H2F8HRBRLSBMSB3F9H12F9H1IER3F9H2F9HIIR3FAH2FAHLCR3FBH2FBHMCR3FCH2FCHLSR3FDH2FDHMSR3FEH2FEH3程序设计3.1程序设计思路 根据设计要求,要实现通过
5、串口进行通信,就必须有一个发送端和一个接收端,因此要编写两个程序,在发送端编写发送程序,在接受端编写接收程序。发送PC机和接收PC机通过RS-232C的3根信号线(TXD、RXD、GND)进行相连。我决定采用查询方式编写发送程序和接收程序。编写接收程序的时候,首先要初始化段寄存器,设置发送缓冲区指针。然后初始化8250,通过初始化8250来设置串口的参数。再根据线路状态寄存器的内容,测试发送保持寄存器是否为空,如果不为空,继续读线状态寄存器的内容,判断发送保持寄存器是否为空,如果为空的话,读取按键字符并显示和发送它。我事先规定当输入某一个字符的时候发送结束,这时候我就要判断按键是否为该字符,是
6、该字符的时候结束程序。编写接收程序的时候首先要设置接收缓冲区,设置接收错信息,初始段寄存器,设置接收缓冲寄存器地址指针然后初始化8250,初始设置和接收端的保持一置。以上完成后开始接收,在屏幕上显示接收开始。然后读线状态寄存器,判断是否接收错,在屏幕上显示接收错误,继续读线状态寄存器,如果接收无误,则测试接收数据是否准备好了,为准备好则循环测试,准备好了则接收字符。判断接收的字符是否为规定的结束字符,如果是结束程序,如果不是显示字符。两台机器的连接图如下。3.2程序流程图3.2.1发送端程序流程图3.2.2接收端的程序流程图3.3具体的程序3.3.1发送端的程序代码DATA SEGMENTDI
7、SP DB TRANSMISSION START:,0AH,0DH,$DATA ENDSSTACK SEGMENT PARA STACK STACK DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV DX,3FBH;置DLAB=1 MOV AL,80H OUT DX,AL MOV DX,3F8H;置波特率因子寄存器 MOV AL,60H;波特率因子低字节 OUT DX ,AL MOV DX,3F9H
8、MOV AL,0;波特率因子高字节置线路控制寄存器 MOV AL,0AH;数据位7位,停止位1位、奇校验 MOV DX,3FCH ;置MODEM控制寄存器 MOV AL,02H;禁止中断 MOV DX,3F9H;置中断允许寄存器屏蔽所有中断 MOV DX,OFFSET DISP;显示发送提示信息 MOV AH,9 INT 21HLOP: MOV DX,3FDH;读线路状态寄存器 IN AL,DX TEST AL,20H;测试发送保持寄存器 JZ LOP ;不空,则循环测试 MOV AH,1;读取按键字符并显示发送该字符 CMP AL,P;判断按下的字符是否为P JZ OVER;是,则结束 JM
9、P LOP;不是继续循环OVER: MOV AH,4CH;返回DOSCODE ENDSEND START3.3.2接收端的程序源代码RBUF DB 30 DUP(0)RECEIVE START:ERROR DB RECEIVE ERRO!ASSUME CS: LEA SI,RBUF;置接收缓冲区地址指针置通信线路控制寄存器数据位7位、停止位1位、奇校验 MOV DX,3FCH; MOV AL,02;显示接收提示信息读接收缓冲器内容,不处理 TEST AL,1EH;测试接收错误? JNZ ER;有,转错误显示 TEST AL,01H;无,则测试接收数据准备好 JZ LOP;未准备好则循环测试 MOV DX,3F8H AND AL,7FH判断接收结束吗? JZ OVER ;结束转OVER MOV SI,AL;未结束则存入缓冲区 INC SI MOV DL,AL;显示该字符 MOV AH,02 JMP LOPER:清标志位 MOV DX,OFFSET ERROR;显示错误信息 MOV DL,AL MOV AH,2CODE
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1