数据格式
起始位 | 数据位 | 校验位 | 停止位 |
---|---|---|---|
1位 | 5~8位 | 1位(可选) | 1位或1.5位或2位 |
注: 停止位在8250寄存器中只有一位bit控制,为0则为1位停止位,为1则由8250根据数据位自动选择1.5位(5位数据)或是2位(大于5位数据)停止位。
波特率:
串行通信方式
微型计算机系统8250内部寄存器端口地址
DLAB | A2 A1 A0 | 被访问的寄存器 | 主串口地址 | 辅串口地址 |
---|---|---|---|---|
0 | 0 0 0 | 接收缓冲寄存器(读) | 3F8H | 2F8H |
发送保持寄存器(写) | ||||
0 | 0 0 1 | 中断允许寄存器 | 3F9H | 2F9H |
x | 0 1 0 | 中断识别寄存器 | 3FAH | 2FAH |
x | 0 1 1 | 通信线控制寄存器 | 3FBH | 2FBH |
x | 1 0 0 | MODEM控制寄存器 | 3FCH | 2FCH |
x | 1 0 1 | 通信线状态寄存器 | 3FDH | 2FDH |
x | 1 1 0 | MODEM状态寄存器 | 3FEH | 2FEH |
1 | 0 0 0 | 除数寄存器(低字节) | 3F8H | 2F8H |
1 | 0 0 1 | 除数寄存器(高字节) | 3F9H | 2F9H |
注: DLAB不是芯片引脚,是通信线控制寄存器的D7位(寻址位)
中断允许寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | X | X | X | X |
中断寄存器的D7F4位恒为0。D3D0位表示8250的4级中断是否被允许。
优先级顺序: 接收数据错中断请求>接收中断请求>发送中断请求>MODEM中断请求
中断识别寄存器
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | X | X | X | X |
8250内部有四个中断源,但是8250只能向CPU发出一个中断请求,为了识别是8250内部哪一个中断源引起的中断,在进入中断服务程序后,先读取中断识别寄存器的内容进行判断,然后再跳转入相应的处理程序。
中断识别寄存器的D7~D3位恒为0,D0位表示有无中断待处理,D0=1表示无中断待处理,D0=0则表示有中断待处理。
D2~D1位表示四种中断源识别码,其代表的中断源如表
8250的中断源
D2 D1 D0 | 中断优先级 | 中断类型 | 中断复位控制 |
---|---|---|---|
0 0 1 | —— | 无中断 | 3F8H |
1 1 0 | 最高 | 接收数据错 | 读通信线状态寄存器可复位 |
1 0 0 | 次高 | 接收数据准备好 | 读接收缓冲器可复位 |
0 1 0 | 次低 | 发送保持寄存器空 | 写发送保持寄存器可复位 |
0 0 0 | 最低 | 调制解调器状态改变 | 读调制解调器状态寄存器可复位 |
识别码和中断源如何对应记忆:
结合中断优先级顺序,识别码只与D2D1两位有关;
注意:这个优先级顺序与数字大小的对应关系和中断系统中优先级与中断类型号的数字大小相反
该寄存器规定了串行异步通信的数据格式
通信线控制寄存器格式
D7 | D6 | D5 D4 D3 | D2 | D1 D0 |
---|---|---|---|---|
寻址位 | 中止位设置 | 奇偶位选择 | 停止位选择 | 数据位选择 |
1
为奇校验)1
为偶校验)1
0
关于寻址位:
8250内部有10个可访问的8位寄存器,但8250只有3根用于端口选择的地址线,因此必然有些寄存器合用一个端口地址。
8250规定:高8位除数寄存器和中断允许寄存器合用一个口地址;低8位除数寄存器、发送保持寄存器和接收缓冲寄存器合用一个口地址。为了在访问时区分合用地址的寄存器,用通信线寄存器的D7位作为寻址位,即《微型计算机系统8250内部寄存器端口地址》表中的DLAB
当通信线控制寄存器中D7位为1时,对3F8H和3F9H地址访问即访问除数寄存器
当通信线控制寄存器中D7位为0时,对3F8H和3F9H地址访问即访问接收缓冲寄存器(读)、发送保持寄存器(写)和中断允许寄存器。
MODEM控制寄存器中D3~D0位的状态直接控制相关引脚的输出电平:
- D0=1,使引脚DTR
=0,从而使RS-232C引脚DTR
为0。
- D1=1,使引脚RTS
=0,从而使RS-232C引脚RTS
为0。
- D2=1,使引脚OUT1
=0,PC系列机未使用。
- D3=1,使引脚OUT2
=0,8250能送出中断请求。
D4位通常置0,设置8250工作在正常收/发方式;若D4置1,则8250工作在内部自环方式,即发送移位寄存器的输出在芯片内部被送回接收移位寄存器的输入。利用这个特点,可以测试8250的工作是否正常;但这只能测试CPU与8250之间及芯片的编程设置是否正常,不能测试与设备通信是否正常。
- D0位:接收数据准备好(接收缓冲器满)标志位。D0=1,表示接收器已接收到一帧完整的数据,并已转换成并行数据,存入接收缓冲器中。若8250工作在查询接收方式,在读取接收缓冲器之前要先查询此标志位,只有在此标志位为1时再去读接收缓冲器。
- D1位:溢出错标志位。D1=1,表示接收缓冲器中的数据未取走,8250又接收到新的数据,造成前一数据的破坏。
- D2位:奇偶校验错标志。D2=1,表示接收带的数据有奇偶错。
- D3位:帧错(接收格式错)标志位。D3=1,表示接收到的数据没有正确的停止位。
- D4位:线路间断标志位。D4=1,表示接收到长时间0信号(即中止信号)。
- D5位:发送保持寄存器空闲标志位。D5=1,表示数据已经从发送保持寄存器转移到发送移位寄存器,发送保持寄存器空闲,CPU可以写入新的数据。当新数据写入到发送保持寄存器后,D5为0。若8250采用查询发送方式,在写入数据前须查询此位,只有当此位为1时,才可以对发送保持寄存器进行写数据。
- D6位:发送移位寄存器空闲标志。D6=1,表示一帧数据已经发送完毕。当新的数据由发送保持寄存器移入发送移位寄存器时,该位为0。
D7位:恒为0。
D1~D4均为错误标志,只要其中一位为1,在中断允许的情况下,8250内部将产生“接收数据错”中断,当CPU读取状态寄存器后,自动复位。
这个寄存器从考试方面来说,考到的机会几乎为0
用两台计算机主串口进行短距离点——点全双工通信,要求:
BEG
开始存放,结束字符为0DH
。REBEG
开始的数据区中,当接收到结束字符0DH
时,将FLAG
单元置为FFH
。DATA SEGMENT
BEG DB "123456789" ,0DH
COUNT EQU $-BEG
REBEG DB COUNT DUP(00H)
FLAG DB 00H
INTTAB DD ?
INTIMR DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX ,DATA
MOV DS ,AX
CALL INIT8250
PUSHF
CLI
CALL REPL74
CALL REPLIMR
STI
MOV SI ,OFFSET BEG
MOV CX ,COUNT
CLD
SCAN: MOV DX ,3FDH
IN AL ,DX
AND AL ,00100000B
JZ SCAN
LODSB
MOV DX ,3F8H
OUT DX ,AL
LOOP SCAN
WAIT: MOV AL ,FLAG
CMP AL ,0FFH
JNE WAIT
CLI
CALL REST74
CALL RESTIMR
POPF
MOV AH ,4CH
INT 21H
INIT8250 PROC
PUSHA
MOV DX ,3FBH
MOV AL ,80H
OUT DX ,AL
MOV DX ,3F8H
MOV AL ,96
OUT DX ,AL
MOV DX ,3F9H
MOV AL ,00H
OUT DX ,AL
MOV DX ,3FBH
MOV AL ,00001010H
OUT DX ,AL
MOV DX ,3F9H
MOV AL ,01H
OUT DX ,AL
MOV DX ,3FC
MOV AL ,08H
OUT DX ,AL
POPA
RET
INIT8250 ENDP
REPL74 PROC
PUSHA
PUSH ES
MOV DI ,OFFSET INTTAB
MOV AX ,00H
MOV ES ,AX
MOV BX ,1D0H
MOV AX ,ES:[BX]
MOV [DI] ,AX
MOV AX ,OFFSET SERVICE
MOV ES:[BX] ,AX
ADD DI ,2
ADD BX ,2
MOV AX ,ES:[BX]
MOV [DI] ,AX
MOV AX ,SEG SERVICE
MOV ES:[BX] ,AX
POP ES
POPA
RET
REPL74 ENDP
REPLIMR PROC
PUSHA
IN AL ,21H
MOV INTIMR AL
AND AL ,11101111B
OUT 21H ,AL
POPA
RET
REPLIMR ENDP
REST74 PROC
PUSHA
PUSH ES
MOV AX ,00H
MOV ES ,AX
MOV BX ,1D0H
MOV AX ,WORD PTR INTTAB
MOV ES:[BX] ,AX
ADD BX ,2
MOV AX ,WORD PTR INTTAB+2
MOV ES:[BX] ,AX
POP ES
POPA
RET
REST74 ENDP
RESTIMR PROC
PUSHA
MOV AL INTIMR
OUT 21H ,AL
POPA
RET
RESTIMR ENDP
SERVICE PROC
PUSHA
MOV DX ,3F8H
IN AL ,DX
MOV BX ,OFFSET REBEG
MOV DI ,[BX+COUNT-1]
MOV [BX][DI] ,AL
CMP AL ,0DH
JNE NOT0DH
MOV BYTE PTR FLAG ,0FFH
JMP EXIT
NOT0DH: ADD BYTE PTR [DI]
EXIT: MOV AL ,20H
OUT 20H ,AL
POPA
IRET
SERVICE ENDP
CODE ENDS
END START