1、第9章 BIOS和DOS中断调用程序设计,9.1 键盘输入中断调用9.2 显示器输出中断调用,开 始,DOS中断和BIOS中断,在存储器系统中,内存从0FE000H高端8K的ROM中存放有基本输入输出系统(Basic Input/Output System,BIOS)例行程序。BIOS给PC系列的不同微处理器提供了兼容的系统加电自检、引导装入、主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。 使用BIOS功能调用,给程序员编程带来极大方便。程序员不必了解硬件的具体细节,可直接使用指令设置参数,并中断调用BIOS例行程序,所以利用BIOS功能调用编写的程序简洁,可读性好,而且
2、易于移植,磁盘操作系统(Disk Operating System)是PC机上最重要的操作系统,它是由软盘或硬盘提供的。它的两个DOS模块IBMBIO.COM和IBMDOS.COM使BIOS使用起来更方便。因为DOS模块提供了更多更必要的测试,使用DOS操作比使用相应功能的BIOS操作更简易,而且DOS对硬件的依赖性更少些。 DOS模块和ROM BIOS的关系如下图所示。,DOS中断和BIOS中断使用方法,DOS功能调用与BIOS功能都通过软件中断调用。在中断调用前需要把功能号装入AH寄存器,把子功能号装入AL寄存器,除此之外,还需要在CPU的寄存器中提供专门的调用参数。一般来说,调用DOS或
3、BIOS功能时,有以下几个步骤:(1)将调用参数装入指定的寄存器。(2)如需功能调用号,把它装入AH。(3)如需子功能调用号,把它装入AL。(4)按中断号调用DOS或BIOS。(5)检查返回参数是否正确。,表9.1 BIOS中断类型,地址(Hex) 类型码 中断名称 03 0 除以0 47 1 单步 8B 2 非屏蔽 CF 3 断点 1013 4 溢出 1417 5 打印屏幕 181B 6 保留 1D1F 7 保留 2023 8 定时器 2427 9 键盘 282B A 保留的硬中断 2C2F B 异步通信(COM2) 3033 C 异步通信(COM1) 3437 D 硬盘 383B E 软盘
4、 3C3F F 并行打印机,地址(Hex) 类型码 中断名称4043 10 视频显示I/O调用4447 11 设备检测调用484B 12 存储器容量检测4C4F 13 软/硬盘I/O调用5053 14 通信I/O调用5457 15 盒式磁带I/O调用585B 16 键盘I/O调用5C5F 17 打印机I/O调用6063 18 ROM BASIC6467 19 引导程序入口686B 1A 时间调用6C6F 1B 键盘CTRL-BREAK控制7073 1C 定时器报时7477 1D 显示器参数表787B 1E 软盘参数表,7C7F 1F 字符点阵结构参数表,BIOS中断向量,表9.2 DOS中断类
5、型,9.1 键盘输入中断调用,9.1.1 ASCII与扫描码 9.1.2 BIOS键盘中断 9.1.3 DOS中断调用,9.1.1 ASCII与扫描码,键盘是计算机最基本的一种输入设备,用来输入信息,以达到人机对话的目的。键盘主要由3种基本类型的键组成:(1)字符数字键:(2)扩展功能键:如Home、End、Backspace、Delete、Insert、PgUp、PgDown以及功能键F1F10(3)和其他键组合使用的控制键:如Alt,Ctrl,Shift等,键盘和主机通过5芯电缆相连,这5根线分别是电源线、地线、复位线以及键盘数据线和键盘时钟线。PC机系列的键盘触点电路按16行8列的矩阵来
6、排列,用单片机Intel8048来控制对键盘的扫描。按键的识别采用行列扫描法,即根据对行线和列线的扫描结果来确定闭合键的位置,这个位置值称为按键的扫描码,通过数据线将8位扫描码送往主机。当在键盘上“按下”或“放开”一个键时,如果键盘中断是允许的(21H端口的第一位等于0),就会产生一个类型9的中断,并转入到BIOS的键盘中断处理程序。,该处理程序从8255可编程外围接口芯片的输入端口读取一个字节,这个字节的低7位是按键的扫描码。最高位为0或者为1,分别表示键是“按下”状态还是“放开”状态。按下时,取得的字节称为通码,放开时取得的字节称为断码。如ESC键按下取得的通码为01H(00000001B
7、),放开ESC键时会产生一个断码81H(10000001B)。 BIOS键盘处理程序将取得的扫描码转换成相应的字符码,大部分的字符码是一个标准的ASCII码;没有相应ASCII的键,如Alt和功能键(F1F10),字符码为0;还有一些非ASCII码键产生一个指定的操作。,键盘缓冲区键盘缓冲区是一个先进先出的环形队列,其所占内存区域如下:,键盘缓冲区是一个环形队列,其性质与数据结构课程中对“环形队列”所描述的性质完全一致。虽然缓冲区的本身长度为16个字,但出于判断“对列满”的考虑,它最多只能保存15个键盘信息。当缓冲区满时,系统将不再接受按键信息,而会发出“嘟”的声音,以示要暂缓按键。当KBHe
8、adKBTail时,表示无键盘输入。,KBHead DW? ;其内存地址为0000:041AH,缓冲区头指针KBTail DW? ;其内存地址为0000:041CH,缓冲区尾指针KBBuff DW16 DUP(?) ;其内存地址为0000:041EH,该缓冲区 的缺省长度为16个字,9.1.2 BIOS键盘中断,类型 16H 的中断提供了基本的键盘操作,它的中断处理程序包括3个不同的功能,分别根据AH寄存器中的子功能号来确定。 (1)AH=0 本功能为从键盘读字符到AL寄存器中。(AL=字符码,AH=扫描码) (2)AH=1 本功能为读键盘缓冲区字符到AL寄存器中, 并置ZF标志位。(若ZF=
9、0,则AL=字符码,AH=扫描码, ZF=1,缓冲区空) (3)AH=2 本功能为读取特殊功能键的状态。(AL=键盘状态字节),code segment assume cs:code mov ah, 0 int 16h mov ah, 4ch int 21h code endsend,从键盘读字符,在计算机键盘上除了可输入各种字符(字母、数字和符号等)的按键之外,还有一些功能键(如:F1、F2、等)、控制键(如:Ctrl、Alt、Shift等)、双态键(如:Num Lock、Caps Lock等)和特殊请求键(如:Print Screen、Scroll Lock等)。 键盘中的控制键和双态键是
10、非打印按键,它们是起控制或转换作用的。当使用者按下控制键或双态键时,系统要记住其所按下的按键。为此,在计算机系统中,特意安排的一个字来标志这些按键的状态,我们称该字为键盘状态字。 键盘状态字的各位含义如图所示。,键盘状态字,code segment assume cs:code mov ah, 2 int 16h mov ah, 4ch int 21h code endsend,读取特殊功能键的状态,9.1.3 DOS键盘功能调用(INT 21H),无,get_key:mov ah, 1 int 21h cmp al , y je yes cmp al, n je no jne get_key
11、,1)单字符输入例92 接收键盘输入并对其进行测试。,wait_here: mov ah, 7 int 21h cmp al, 0dh jne wait_here,例93 检测键盘输入的字符是否是回车键。,code segment assume cs:code mov ah,7 int 21h cmp al,0 je get_char jmp errorget_char_ mov ah,7 int 21h cmp al,3bh;F1 je option1 cmp al,3ch;F2 je option2 mov ah,4ch int 21hcode endsend,如果程序要求能接收功能键或数
12、字组合键必须进行两次DOS功能调用:第一次回送00第二次回送扫描码,例9-4 检测键盘输入的功能键。,data segment smax db 21 sact db ? stri db 21 dup(?)data endscode segment assume cs:code,ds:data Start:mov ax,data mov ds,ax lea dx, stri mov ah,0ah int 21h mov ah,4ch int 21h code endsEnd start,(1) smax db 21 sact db ? stri db 21 dup(?)(2) smax db 2
13、1 db ? db 21 dup(?)(3)smax db 21, ?, 21 dup(?),例9-5 输入字符串程序,2)输入字符串,Int 21的功能0ch能清除键盘缓冲区,然后执行在AL中指定的功能。AL中指定的功能可以是1,6,7,8或0AH。,mov ah, 0chmov al, 08h int 21h inc al je exitExit:,3)清除键盘缓冲区,例 编写按任意键结束程序的程序段,mov ah, 0bh int 21h inc al je exitExit:,4)检验键盘状态,显示器可以简单的分为单色显示器和彩色显示器。随着显示技术的发展,种类也更加丰富,常见的有阴极
14、摄像管(CRT)、液晶显示器、等离子显示器等。 显示器是通过显卡与主机相连。显示器的显示屏通常称之为屏幕,现在常用的显示器有14和17,常用的显示分辨率为800600或1024768等。常用的显示卡类型为VGA、SVGA、EVGA和TVGA等,显示卡上也都带有大量的显示存储器,能快速显示精美的图象。1MDA MDA(Monochrome Display Adapter )属于单色显示适配器,是IBM最早研制的视频显示适配器。2CGA 在MDA推出的同时,IBM也推出了彩色图形显示适配器CGA(Color Graphics Adapter)。,9.2 显示器I/O,3EGA 增强图形显示适配器E
15、GA(Enhanced Graphics Adapter)是IBM公司推出的第二代图形显示适配器,它兼容了MDA和CGA的全部功能。4VGA 视频图形阵列显示适配器VGA(Video Graphics Array)是IBM公司推出的第三代图形显示适配器,它兼容了MDA、CGA和EGA的全部功能。5. XGA XGA(Extended Graphics Array)是IBM公司继VGA之后推出的扩展图形显示适配器。,显示模式 计算机系统中的显示器都有二种显示方式:文本显示方式和图形显示方式。 在DOS操作系统环境下,其默认的显示方式为文本显示方式,而在Windows操作系统环境下,其显示方式是图
16、形显示方式,其绝大多数操作界面是以图形界面的窗口形式出现的。,文本显示方式 文本显示方式是指以字符为最小单位的显示方式,每个字符都是以矩形块形式显示的。在BIOS ROM中存有多种不同大小的字符集,主要的显示字符集大小为:88(标准)、814和816等。 在常用的文本显示模式(模式3)下,屏幕被划分成25行,每行可显示80个字符,所以,每屏最多可显示2000(8025)个字符。为了便于标识屏幕上的每个显示位置,我们就用其所在行和列来表示之,并规定:屏幕的左上角坐标为(0, 0),右下角坐标为(24, 79)。 在显示字符时,用一个字节存储该字符的ASCII码,用另一个字节存储的显示属性,即:显
17、示颜色。 在8025的文本显示模式下,满屏可显示2000个字符,也就需要4000个字节来存储一屏的显示信息。,图形显示方式 图形显示是目前最常用的一种显示方式,也是Windows操作系统的默认显示方式。在该显示方式下,我们可以看到优美的图象、VCD、浏览丰富多彩的网页等。 图形显示的最小单位是象素,对每个象素可用不同的颜色来显示。所以,在显示缓冲区内记录的信息是屏幕各象素的显示颜色。 由于各种图形显示模式所能显示的颜色和象素是不同的,它决定了显示缓冲区的存储方式也是不同的。下面给出三个具体的图形显示模式及其存储方式,通过它们可看出各种显示模式在显示缓冲区存储方式上的明显差异。,4色320200
18、图形显示模式 由于每个象素只能是四种颜色之一,而四种情况用2位二进制就可表示,所以,一个字节可表示4个象素的显示颜色,存储一行上的所有象素信息就需要80个字节。 在具体存储过程中,它又把偶数行象素和奇数行分开来存储。偶数行和齐数行的象素总数各有32000个,也都需要8000个字节来存储,并规定: 偶数行象素从0B800:0000H开始存储, 奇数行象素从0B800:2000H开始存储。 该显示模式的存储形式如图所示。,16色640480图形显示模式 640480图形显示模式共有307200个象素,每个象素可选用16种颜色,它需要用4位二进制来表示。该显示模式在存储显示信息时,把该4位分在四个位
19、平面P1、P2、P3和P4上,所以,位平面Pi(i=1,2,3,4)共有307200个二进制位,即有38400个字节。其显示缓冲区的存储形式如图所示。,256色320200图形显示模式 表达256种不同颜色需要8位二进制,即一个字节。在该模式下,其显示缓冲区的存储方式是非常简单的,即:第一个字节存储第一个象素的颜色,第二个字节存储第二个象素的颜色,以此类推,所以,存储满屏象素所需要的字节数为:320200164000。其显示缓冲区的存储方式如图所示。,从上面三种不同图形显示模式的介绍,不难看出:各种显示模式在显示缓冲区存储方式上的明显差异,操作象素方法的难易程度相差也很大,所以,再次建议:程序
20、员不要用直接操作显示缓冲区的办法来达到改变显示象素的目的,最好是通过BIOS内的中断功能来实现相应的功能,这样,所编写的程序能很方便地适应不同的图形显示模式。,9.2.1 字符属性 显示器的屏幕通常划分为行和列的二维系统,显示适配器就在行列组成的网格位置上显示字符。对应屏幕上的每个字符位置,主存空间都有相应的存储单元与之对应,因此可说是显示屏幕式“存储器的映像”。对应显示屏幕上的每个字符,在存储器中由连续的两个字节表示,一个字节表示ASCII码,另一个字节保存字符的属性。,单色显示的属性值,7 6 5 4 3 2 1 0,背景,前景,闪烁,亮度,1、单色字符属性,2、彩色字符显示,彩色字符显示
21、属性字节,背景颜色组合,前景颜色组合,3. 显示存储器,对于所有的显示适配器,文本方式下显示字符的原理是一样的,所不同的是显存的起始地址不同,对于MDA,显存的起始地址为B000:0000;对于CGA、EGA、VGA是B800:0000.每个字符的ASCII码和属性码字节存放于两个连续的字节中。图形显示方式下,其显示缓冲区段地址为0A000H。 在25 X 80的文本显示方式下,屏幕可有2000个字符位置,因每个字符需要用两个字节,显存容量需要多少?如果显存有16K,可保存几屏幕的数据?对CGA,EGA和VGA的80列显示方式,0页的起始地址是B800:0000,1页的起始地址是B800:10
22、00,2页的起始地址为B800:2000,3页的起始地址为B800:3000 。 如何计算一个字符在显存中的位置?,9.2.2 BIOS显示中断调用,10H中断调用为显示器中断,共有17种功 能。下面列出几种主要功能的使用情况。 (1)设置显示方式(0号功能)入口参数:AH=0(功能号),AL=设置方式(07)。出口参数:无。(2)设置光标类型(1号功能)入口参数:AH=1(功能号),CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小。,(3)设置光标位置(2号功能) 入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置
23、。(4)读当前光标位置(3号功能)入口参数;AH=3(功能号),BH=页号。出口参数:DH=行号,DL=列号,CX=光标大小。(5)初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。,(6)初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。DX=下滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,顶部为空白输入行。(7)读当前光标位置的字符与属性(8号功能)入口参数:AH=08H,BH=页
24、号。出口参数:AL为读出的字符,AH为字符属性。,(8)在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符重复次数。出口参数:无。(9)在当前光标位置写字符(10号功能)入口参数:AH=0AH,BH=页号,AL=字符的ASCII码,CX=写入字符重复次数。出口参数:无。,(10)显示字符串(13号功能)ES:BP=串地址CX=串长度DH,DL=起始行列BH=页号AL=0,BL=属性串:char,charchar 光标返回到起始位置AL=1,BL=属性串:char,charchar 光标跟随串移动AL=2串:char,c
25、harchar 光标返回起始位置AL=3串:char,charchar 光标跟随串移动,code segment assume cs:code start:mov ch,5 mov cl,7 mov ah,1 int 10h mov dh,5 mov dl,6 mov bh,0 mov ah,2 int 10h mov ah,4ch int 21hcode endsend start,例 置光标开始行为5,结束行为7,并把它设置到第五行第六列,设置光标位置(2号功能) 入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。,设置光标类型(1号
26、功能)入口参数:AH=1(功能号),CH=光标开始行,CL=光标结束行。出口参数:无。根据CX给出光标的大小。,例:编写清除全屏幕的程序,clear segment assume cs:clear mov ah,6 mov al,0 mov bh,7 mov ch,0 mov cl,0 mov dh,24 mov dl,79 int 10h mov dx,2 mov ah,2 int 10h mov ah,4ch int 21hclear endsend,初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白
27、行的属性。出口参数:无。当滚动后,底部为空白输入行。,设置光标位置(2号功能) 入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。,例 清除左上角为(00)右下角为(24,39)的窗口,初始化为反相显示。该窗口相当于屏幕的左上角,clear segment assume cs:clear mov ah,7 mov al,0 mov bh,70h mov ch,0 mov cl,0 mov dh,24 mov dl,39 int 10h mov dx,2 mov ah,2 int 10h mov ah,4ch int 21hclear en
28、dsend,设置光标位置(2号功能) 入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。,初始窗口或向下滚动(7号功能)入口参数:AH=7,AL=下滚行数,CX=下滚窗口左上角的行、列号。DX=下滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,顶部为空白输入行。,例 在屏幕中心显示小窗口,data segment esc_key equ 1bh win_ulc equ 30 win_ulr equ 8 win_lrc equ 50 win_lrr equ 16 win_width equ 20data endscode
29、 segment assume cs:code,ds:datastart:mov ah,2 mov dh,win_lrr mov dl,win_ulc mov bh,0 int 10h mov cx,win_widthget_char: mov ah,1 int 21h,cmp al, esc_key jz exit loop get_char mov ah,6 mov al,1 mov ch,win_ulr mov cl,win_ulc mov dh,win_lrr mov dl,win_lrc mov bh,7 int 10h jmp startexit:mov ah,4ch int 21
30、h code endsend,设置光标位置(2号功能) 入口参数:AH=2(功能号),BH=页号,DH=行号,DL=列号。 出口参数:无。根据DX确定了光标位置。,初始窗口或向上滚动(6号功能)入口参数:AH=6,AL=上滚行数,CX=上滚窗口左上角的行、列号。DX=上滚窗口右下角的行、列号。BH=空白行的属性。出口参数:无。当滚动后,底部为空白输入行。,例:在品红背景下,显示5个浅绿色闪烁的星号,code segment assume cs:codestart: mov ah,9 mov al,* mov bh,0 mov bl,0dah mov cx,5 int 10h mov ah,4c
31、h int 21h code endsend start,在当前光标位置写字符和属性(9号功能)入口参数:AH=9,BH=页号,AL=字符的ASCII码,BL=字符属性,CX=写入字符数。出口参数:无。,在屏幕上以红底蓝字显示字符串“WORLD SCENERY”,data segmentstring db world scenearlen equ $-stringdata endscode segment assume cs:codestart:mov ah,0 mov al,3 int 10h mov bp,seg string mov es,bp mov bp,offset string,
32、mov cx,len mov dx,0 mov bl,41h mov al,0 mov ah,13h int 10h mov ah,4ch int 21h code endsend start,设置显示方式(0号功能)入口参数:AH=0(功能号),AL=设置方式(07)。出口参数:无。,(10)显示字符串(13号功能)ES:BP=串地址CX=串长度DH,DL=起始行列BH=页号AL=0,BL=属性串:char,charchar 光标返回到起始位置AL=1,BL=属性串:char,charchar 光标跟随移动AL=2串:char,charchar 光标返回起始位置AL=3串:char,char
33、char 光标跟随移动,例 用直接写屏方式在屏幕第5行、第10列以黄色(0EH)显示字符串Hello。解:在文本显示方式下,每行显示80个字符,每个字符占2个字节,所以,显示一行需要160个字节。若在第m行、第n列位置显示字符,则该位置所对应存储单元的偏移量为:m160 + n2。,.MODEL SMALL.DATAYellowEQU0EHMSG1DBWelcome.CountEQU$-MSG1.CODE.STARTUPMOV AX, 0B800HMOV ES, AX ;彩色显示器的显示缓冲区段地址MOV DI, 5IMUL DI, 160 ;5行所跳过的显示存储单元,MOV CX, 10SH
34、L CX, 1 ;10列所跳过的显示存储单元ADD DI, CX ;第5行、第10列之前所跳过的所有显示单元MOV CX, CountLEA SI, MSG1 ;CX:字符个数,SI:显示字符首地址MOV AH, Yellow ;设置显示属性,即显示颜色.REPEATLODSB;取显示字符STOSW ;向显示缓冲区设置显示字符和属性.UNTILCXZ.EXIT0END,9.2.3 DOS显示功能,计算机与外设交换信息的过程中:并行通信:多位数据通过多条数据线同时传送。串行通信:多位数据通过同一条数据线按位传送。 并行通信就是把一个字符的各数位用几条线同时进行传输。与串行通信(一位一位传输)相比
35、,在相同传输率下,并行通信的信息实际传输速度快、信息率高。但并行通信比串行通信所用电缆多,随着距离的增加,电缆的开销会成为突出的问题。所以,并行通信总是用在数据传输率要求较高,而传输距离较短的场合。,9.3 串行通信口I/O,串行通信可以分为两种类型:同步通信、异步通信。,异步通信,一个字符一个字符地传输,每个字符一位一位地传输,传输一个字符时,以起始位开始,然后传输字符本身的各位,接着传输校验位,最后以停止位结束该字符的传输。一次传输的起始位、字符各位、校验位、停止位构成一组完整的信息,称为帧(Frame)。帧与帧之间可有任意个空闲位。起始位之后时数据的最低位。,在异步通信中,每个字符都要用
36、起始位作为字符的开始和结束的标志,占用了传输的时间,所以在数据块传送时,为了提高效率,就要去掉这些标志,采用同步通信。同步通信方式不给每个字符都加起始位和停止位,而把字符顺序的连接起来,组成一个数据块(首尾相连的数据串),把这样一个数据块称为一个信息桢。在数据的开始加上一个同步字符,而在信息的末尾加有一定的差错检验字符,其格式如下:,同步通信,同步字符 字符1 字符2 字符n 校验字符,数据块,实现串行通信有专用的接口芯片,常用的有USART(通用同步/异步接收/发送器)如Intel8251和UART(通用异步接收/发送器)如Ins 8250。无论是UART,还是USART,均能实现数据发送时
37、所需要的并串转换以及数据被CPU接收时所需要的串并转换。,串行通信接口,串行通信基础,起始位,最低位,最高位,奇偶位,停止位,数据位,起始位逻辑01位数据位逻辑0或15位、6位、7位、8位校验位逻辑0或11位或无停止位逻辑11位、1.5位或2位空闲位逻辑1任意数量,异步通信的信息格式:,并行通信中,传输速率以每秒钟传输多少字节来表示。而串行通信中,传输速率是用波特率来表示。所谓波特率是指单位时间内传送二进制数据的位数(简写为bps)。在计算机里,每秒传输多少位和波特率的含义是完全一致的。但是要注意,在最初的定义上(波特率是每秒传输离散信号的数目),每秒传输多少位和波特率是不相同的。收、发双方的
38、波特率必须一致。传输一位所需要的时间T叫“位周期”。,波特率和传输率,例:计算串行传输5页,每页80x25个字符总共需要多少位?假设每个字符8位,1位起始位和1位终止位。计算传输上述五页所需要的时间。数据传输率分别为2400bps 和9600bps,RS232串行通信接口,为了兼容各厂家生产的数据通信设备,1960年电子工业协会(Electronics Industries association ,EIA)制定了RS-232接口标准,以后又陆续发布了修订版本RS-232A,RS-232B和RS-232C。目前广泛应用于个人计算机上的RS-232串行接口,他安装于PC机内的通信适配器版上。PC
39、机上的COM1、COM2接口,就是RS-232C接口,使用9针和25针连接器,RS-232C采用负逻辑,且信号电平与TTL不兼容,规定逻辑“1”在-3V-15V之间,逻辑“0”在+3V+15V之间。RS-232C不是TTL电平的接口标准,当计算机与外设进行通信时,必须有相应的电平转换电路。通常采用的是MC1488和MC1489电平转换器。,串行接口芯片8250、8251均使用TTL电平,应使用电平转换电路与RS-232C连接器连接。MC1488:TTL电平RS232电平 (用于发送方)MC1489:TTL电平RS232电平 (用于接收方),IBM PC通信端口 在微机系统中,可以有两个或多个端
40、口连接到不同的外部设备上进行通信,如IBM PC和80X86兼容机可以连接4个通信端口,他们的编号为COM14(BIOS编号为COM03),但程序每次只能对其中一个端口进行存取。当微机加电自检时,由加电自检程序来测试通用异步收发器的4个COM端口是否存在,如果微机系统中设置了COM端口,则设置的每个COM端口的I/O地址就写到BIOS数据区的0040:00000040:0007,每个端口地址占用两个字节。如果没有连接串行端口,BIOS数据区 的这几个单元的内容就成为0。可以用DEBUG查看URAT的端口地址。 保存在BIOS数据区的COM端口地址称为基地址,因为每个 COM端口都包括一组位的寄存器,程序员可以通过这些寄存器进行编程,以控制数据按设定的格式发送或接收数据。 BIOS数据区的COM端口地址是第一个寄存器的地址。,串行口功能调用、DOS串行通信口功能使用DOS命令可以设置串行通信参数,如波特率,字长,校验位和终止位。格式:MODE COMm:b ,p ,d , s例如:MODE COM1 :24,O,8,1说明:波特率用最高两位来表示,P是校验位(N无,O奇,E偶。端口号的分配:BIOS位,DOS为,