对串行接口编程,就是对其内部的10个寄存器进行必要的读或写,编程时注意要指明是对那个寄存器进行读写。
在X86系统中,串行接口的端口地址为:COM1为3F8H~3FEH,
COM2为2F8H~2FEH。所以各寄存器的读写端口地址如下表所示:
DLAB COM1 COM2 寄存器 读/写
0 3F8H 2F8H 发送保持寄存器 OUT
0 3F8H 2F8H 接收缓冲寄存器 IN
1 3F8H 2F8H 除数寄存器低字节 OUT
1 3F9H 2F9H 除数寄存器高字节 OUT
0 3F9H 2F9H 中断允许寄存器 OUT
× 3FAH 2FAH 中断识别寄存器 IN
× 3FBH 2FBH 通信线路控制寄存器 OUT
× 3FCH 2FCH MODEM控制寄存器 OUT
× 3FDH 2FDH 通信线路状态寄存器 IN
× 3FEH 2FEH MODEM状态寄存器 IN
对8250编制通信软件,首先应对芯片初始化,然后按照程序查询或中断
方式实现通信。
2) 8250初始化
8250初始化就是设置波特率,确定通信的具体格式,是否使用中断,是
否自测试操作。以下对COM1编程。
1. 波特率设置
假设设置波特率为9600,则初始化程序片段为:
mov dx,3fbh ;指向线路控制寄存器端口
mov al,80h ;DLAB=1
out dx,al
mov dx,3f8h
mov al,0ch ;置产生9600波特率的除数低字节
out dx,al
mov dx,3f9h
mov al,00h ;除数高字节
out dx,al
2. 通信数据格式设置
例如:数据格式为8位,1位停止位,奇校验,则程序如下:
mov dx,3fbh ;指向线路控制寄存器端口
mov al,0bh ;线路控制寄存器控制字
out dx,al
3. 工作方式设置
中断输出(INTPRT),外接成受OUT2信号控制输出的三态门控制,只有
当OUT2信号为低,并有INTPRT产生时,中断信号才可通过此三态门,所以控制OUT2输出,就可控制是否允许中断产生。对MODEM控制寄存器写入控制字,使位3为1,即OUT2为低电平,三态门成为常通状态,就可以工作在中断方式。编程示例如下:
不允许中断输出:
mov dx,3fch ;MODEM控制寄存器地址
mov al,03h ;使OUT2为高,DTR有效,RTS有效
out dx,al
允许中断输出:
mov dx,3fch
mov al,0bh ;使OUT2为低,允许INTPRT去申请
out dx,al
自测工作方式:
mov dx,3fch
mov al,1bh
out dx,al
3) 程序查询方式通信编程
采用程序查询方式工作时,CPU通过读线路状态寄存器(3FDH),查相
应状态位(D0与D5),来检查接收缓冲寄存器是否就绪(D0=1)与发送保持器是否空(D5=1)。
谢谢了大家
不一定要用汇编,只要能实现一台机输入字符另一台能显示出来就可以了