资源描述:
《串行口补充部分》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、串行口补充部分80x86兼容机可连接4个串行口,其编号分别为COM1~COM4(相应的BIOS编号为COM0~COM3)若微机系统设置了COM端口,则设置的每个端口的地址就写到BIOS数据区的0040:000~07H中。其中每个COM端口占2个字节。COM0:0040:0000~0001COM1:0040:0002~0003COM2:0040:0004~0005COM3:0400:0006~0007可用DEBUG查看端口地址C>DEBUG_D0040:0000L080040:0000F803F80200000000即端口COM0的地址为:3F8H,COM1的地址为2F8H一、BIOS串行通信
2、功能INT14H调用ROMBIOS串行通信例行程序,该通信例行程序包括:串行口的初始化(波特率、帧格式等),检查控制器的状态等,读和写(接收和发送)等功能。表一串行口通信BIOS功能(INT14H)AH功能入口参数出口参数0初始化串行通信口(AL)=初始化参数(AH)=通信口状态(DX)=通信段口号(AL)=调制解调器的状态COM1=0COM2=1,etc1向串行口写字符(AL)=所写字符写字符成功:(DX)=通信口号(AH)=0,(AL)=字符COM1=0写字符失败COM2=1(AH)7=1,(AH)0-6=口状态2从串行口读字符(DX)=通信口号读成功:COM`1=0(AH)7=0,(A
3、H)0-6=口状态COM2=1读失败:(AH)7=1,(AH)0-6=口状态3取通信口状态(DX)=通行口号(AH)=通信口状态COM1=0(AL)=调制解调器状态COM2=1.etc串行口初始化参数76543210000=110波特校验01=奇校验终止位字长10=7位001=150波特11=偶校验0=1位11=8位010=300波特X0=无校验1=2位10011=600111=9600波特串行通信端口状态字76543210超时发送位移器空发送空间断帧格式错奇偶错超越错数据准备好奇偶错:通信线上的噪声引起数据位的改变会产生奇偶错,检测到奇偶措时,发送放应在发送一次。超越错:在上一个字符还没被
4、取走,又有字符传送过来,则会引起超越错。帧格式错:当接收器没收到一个字符的停止位,会引起帧格式错。引起的原因可能是噪声引起停止位的丢失,或由于收发双方初始化参数不匹配所致。间断:在某些通信环境中设置的“空格”状态,它占一个字符的传输时间,当器超过一个字符的传输时间时,间断位为1。利用BIOSINT14H,可通过COM端口与另一台微机通信,通信程序的编写过程如下:1、用INT14,AH=0,(DX)=通信端口号,(AL)=初始化参数;设置通行双方的初始化参数。2、用INT14H,AH=1,(AL)=字符,(DX)=通信段口号;发送一个字符。3、为了接收字符,用INT14H,AH=3来获得端口的
5、状态,出口参数在AH中。4、检查端口状态值的第0位,若为1,说明已经收到一个字符并送到了8250的数据缓冲寄存器。5、用INT14H,AH=2来读取字符,被读取的字符放在AL中。例:对主串行口进行外环自动测试,测试电文为:THEQUICHBROWNFOXJUMPSLAZYDOG(狡猾的狐狸越过懒狗的背)程序流程:调1号功能发送数据、若发送成功调2号功能接收数据,否则转出错处理;若接收成功,把接收的字符送显示器显示。DATASEGMENTTEXTDB'THEQUICKBROWNFOXJUMPSOVERLAZYDOG'DB0DH,0AHLLLEQU$-TEXTERRORDB'COM1BAD!',
6、0DH,0AH,'$'DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXCALLI8250MOVCH,10AGAIN:MOVCL,LLLMOVBX,OFFSETTEXTSEND:MOVAL,[BX]MOVAH,1MOVDX,010INT14HTESTAH,80HJNZDISPERRRECE:MOVAH,2MOVDX,0INT14HTESTAL,80HJNZDISPERRANDAL,7FHDISP:MOVAH,2MOVDL,ALINT21HINCBXDECCLJNZSENDDECCHJNZAGAINJMPRETURN
7、DISPERR:MOVAH,9MOVDX,OFFSETERRORINT21HRETURN:MOVAH,4CHINT21HI8250PROCMOVAX,0083HMOVDX,0INT14HRETI8250ENDPCODEENDSENDSTART例:两台pc机通过串行端口进行通信,要求从一台pc机上键入的字符能从传送到另一台上,若按下ESC键则退出程序。要求使用COM2端口,并初始化为4800波特,8位数据位,无