计算机通信与接口

8253/8254

8253 是一种典型的可编程计数器/定时器,也称可编程间隔定时器,还可用于可编程方波频率产生器、分频器、程控单脉冲发生器等多种场合,其特点:
①内部具有 3 个相互独立的 16 位计数器通道;
②通过编程,每个通道可按 6 种不同的方式工作;
③可按二进制或 BCD 码计数,最高计数频率2MHz(这个看具体情况);

初始化步骤:
先写入控制字(写入控制端口),再写入计数值(写入各计数值对应的端口)。

工作方式:
方式 0:不重复,计数结束中断,输出一个正跳变(计数开始时先一直负,到达计数值之后变为正)
方式 1:可重复,可编程单稳输出,输出一个宽度可调的负脉冲(计数开始时先一直负,到达计数值后变为正,周期循环)
方式 2:可重复,频率发生器,输出序列负脉冲(先正,到达计数值后输出负,再循环,到1时变)
方式 3:可重复,方波发生器,方式 2、3 均可 N 分频
方式 4:不可重复,软件触发选通,写入 N 开始计数,(计数结束后输出负)
方式 5:不重复。硬件(GATE 上升沿)触发选通。(先正,到0时变为负)

8354读出现行计数值的方式
方式1:通过数据端口读。(先通过8354的锁存功能锁住计数值,再读数据端口,主要要指出要锁存的是哪个计数器)
方式2:用自带的读回功能。(主要命令字中要指出是锁住计数值还是锁住计数器的状态)(其实也就是增加了个锁多个和读状态的功能)
先读入低8位再读入高8位。

8255

1、数据端口 A、B 和 C
端口 A:包含 1 个 8 位的数据输出锁存器/缓冲器,1 个 8 位的数据输入锁存器。A 口作输入或输出时数据均能锁存。
端口 B:包含 1 个 8 位的数据输入/输出锁存器/缓冲器,1 个 8 位的数据输入缓冲器。
端口 C:包含 1 个 8 位的数据输出锁存器/缓冲器,1 个 8 位的数据输入缓冲器,无输入锁存功能,分成两个 4 位端口时,每个端口有 1 个 4 位
内部有控制寄存器(姑且看做是控制端口),能接收 CPU 送来的命令字,决定 A 组和 B 组的工作方式,或对 C 口的每 1位执行置位/复位操作。

在 8 位系统中,常将 A1A0 与地址总线 A1A0 相
连。若 8255A 端口基地址为 60H,则 A 口、B 口、
C 口和控制口分别为 60H,61H,62H 和 63H。
在 16 位数据总线的 8086 系统中,可将地址
总线的 A2A1 连到 8255A 的 A1A0 端。若它的数据线
D7~D0接在 CPU 数据总线的低 8 位上,则要用偶端
口地址来寻址 8255A;而当 D7~D0接在数据总线的
高 8 位上时,要用奇地址口。例如:若 8255A 的基地址为 F0H,则
A2A1=00,选 A 口,即口地址 F0H;
A2A1=01,选 B 口,口地址 F2H;
A2A1=10,选 C 口,口地址 F4H;
A2A1=11,选控制寄存器,口地址 F6H。

工作方式:
方式0:基本输入输出方式。
方式1:选通输入输出方式。(c口的某些引脚可用作联络信号,其实方式0也行)
方式2:双向选通方式。(只有A口支持方式2)

方式1和方式2中,c口用作联络信号,用 IN 指令读取 C 口内容可检测外设状态,这样,就可采用查询方式而不用复杂的中断方式实现数据交换,有时很有用
方式一状态字:
方式二状态字:

双机通信:

采用方式0的:
发送方:
先将c口通知位置零初始化,传输数据,通知对方,检查对方是否收到,通知位再置零,检查对方的通知位是否复位,继续循环。
接收方:
先将c口通知位置零初始化,检查是否有数据,接受数据,通知位置位,等待对方通知位置位。

采用方式1的:
相较于前者不用担心通知位复位的问题。
发送方:传送数据,检查INTR位(为什么是检查这位?输出设收到 CPU 输出的数据后,INTR变高,请求 CPU 再输出 1 个数据到外设。这标志着对方已经接受),循环继续。
接受方:检查IBF(该信号标志着缓冲区已满),接受数据,循环继续。

传输数据的一种方式
采用中断方式和方式1的:
用信号量标志这传输完毕。先将信号量置零,再设置INTE为1(意味着允许中断),传输数据,检查信号量(只有中断服务程序有资格将信号量置1),重新将信号量置0,循环继续。

8251

8251A 是通用同步/异步数据收发器(USART),是常用的可编程通信接口器件,用于全双工通信并具有同步或异步工作方式。两种方式,均有检测奇偶校验错、溢出错和帧错误的功能。
有数据端口和控制端口,例如:52H(控制口、状态口),50H(数据口)
初始化编程:
为可靠复位,应先向控制口连续写入 3 个 0,再写入 1 个复位字,然后写入方式字及命令字(同步方式在写入命令字之前还需输入同步字符)。注意均向控制口写入。

异步串行通信:
初始化后,
发送方:发送数据,检查TxRDY(发送数据缓冲器是否为空,准备好接收数据),循环继续
接收方:从控制端口那里获得状态字,检查RxRDY(高电平时,表示接收数据缓冲器中已收到一个字符数据,可将其输入到 CPU 去。),取出数据,检查接受的数据是否错误(FE,OE,PE),循环继续。

同步串行通信:
初始化后,(例子里面只有初始化的内容)

注意命令字的内容,发送方要将TxEN置1,接收方要将ER、RxE置1.

8259

四个寄存器:
1、中断请求寄存器 IRR
2、中断屏蔽寄存器 IMR
3、中断服务寄存器 ISR
4、优先级判决器 PR

初始化:
初始化命令字 ICW1~ICW4顺序写入控制口,设置 8259A 初始状态。8086 系统中 ICW1、ICW2和 ICW4必须要有,ICW3只在级联时用。
ICW1设置工作方式(?),ICW2设置中断向量的高5位,ICW3在级联时使用,指明级联时的连接方式,ICW4设置嵌套方式和缓冲方式和结束中断方式。

操作命令字:
OCW 在应用程序内部设置,没有规定写入顺序,但写入的端口地址有规定:OCW1 必须写入奇地址口,OCW2和 OCW3要求写入偶地址口。
OCW1对中断屏蔽寄存器IMR 的各位进行置 1 或清 0
OCW2用于设置优先级循环方式和中断结束方式。
OCW3可用来查询。

初始化,(单片连接为什么用的是从片缓冲方式?),(为什么主片采用的是特殊全嵌套方式,而从片采用的是全嵌套方式?)

读查询字和(ISR,IRR):
利用OCW3对偶端口发出查询命令,再从偶端口取出查询字。
利用OCW3对偶端口发出读ISR或IRR的命令,从偶端口里读。

中断向量

设置中断向量:
方法1:直接在对应中断向量地址填入中断服务程序的地址。
此时段基址应为0,低地址填偏移地址,高地址填段地址。
方法2:利用中断21H中的功能号25H设置中断向量
入口参数:DS:DX=中断向量
AL=中断类型号 N
AH=25H

相对应的,取得中断向量的方式也一一对应。
对于方法二:
入口参数:AL=中断类型号 N
AH=35H
执行结果:N 号中断的中断向量从中断向量表
中取到 ES:BX 中

BIOS功能调用

  1. 键盘输入
    中断类型码为16H,
  2. 显示器输出
    类型码是10H

DOS功能调用

所有的DOS系统功能调用都是利用软中断指令INT 21H来执行

  1. 单字符输入,1、7、8功能号
  2. 字符串输入,0AH号功能号
  3. 显示器输出,
    1. 单字符显示:功能2、6
    2. 字符串显示:9号
  4. 返回到DOS
    功能号4CH