# 串并行通信及其接口技术

## 接口技术

接口电路按功能可分为两类：辅助电路（时钟信号等）、输入/输出接口电路（接收信息）。为了使CPU能适应各种各样的外设，就需要接口电路，完成信号转换、速度匹配、数据缓冲等功能。

接口的8个功能：寻址功能、输入/输出功能、数据转换功能、联络功能、中断管理功能、复位功能、可编程功能、错误检测功能。

设备信号有三种：数据信息（数字量，模拟量，开关量）、状态信息（BUSY，READY）、控制信息。三种信息不同，但CPU都通过IN和OUT指令传送，因此状态控制信息也是一种数据信息，通过数据总线传送。

每个接口部件包含一组寄存器，各类信息在接口中进入不同的寄存器，称为端口，每个端口都有一个地址。对应有数据端口、状态端口、控制端口。

有了地址就要寻址， 8086/8088系统中，有两个地址空间：内存地址空间，I/O端口地址空间。通过控制总线中的IO/M来区分，那么CPU对外设的操作都可以归结为对接口芯片端口的操作。

相应的，CPU对外设的寻址方式也有两种：存储器映像I/O，I/O独立编址。\
存储器映像I/O：外设端口作为存储器的一个单元来对待，优点：CPU对外设的操作可使用全部的存储器操作指令，寻址方式多，使用方便灵活。缺点：外设占用了存储单元的地址，使内存的容量减小，同时，程序的可读性下降。\
I/O独立编址：CPU有专门用于端口的输入输出指令，优点：容易掌握，编出的程序可读性好。缺点：可寻址的范围较小（取决于输入输出指令的寻址方式），必须有相应的控制线来区分是寻址内存还是外设。

## 并行通信与8255A

并行通信的定义：就是把一个字符的各位同时进行传输。并行通信的信息实际传输速度快，信息率高。但并行通信所用的电缆要多，故并行通信总是用在传输速率要求较高，而传输距离较短的场合。\
可编程的并行接口Intel 8255A，内部有三个并行I/O口。

### 8255芯片介绍

<figure><img src="/files/fw52SbYSlj81NTQYC4hU" alt="" width="120"><figcaption><p>8255引脚</p></figcaption></figure>

<figure><img src="/files/5QyDs9q5m7tKVHrVOnTQ" alt="" width="320"><figcaption><p>8255内部结构</p></figcaption></figure>

端口A：支持方式0、1、2；A组，常作数据端口，功能最强大。\
端口B：支持方式0、1；B组，常作数据端口。\
端口C：支持方式0；A组PC4-7，B组PC0-3；可作数据、状态和控制端口。

### 8255初始化编程

<figure><img src="/files/cdA4n8zMyOQ60H8uvX5v" alt="" width="180"><figcaption><p>8255端口地址</p></figcaption></figure>

<figure><img src="/files/vIa8rdO5EAsAukgSiKVR" alt="" width="180"><figcaption><p>8255控制字</p></figcaption></figure>

【例1】控制一片8255A的PA为方式1输入，C上半口为输出，下半口为输入，B为方式0输出。端口地址为FFFBH-FFFEH。

```x86asm
MOV AL, 10110001B
MOV DX, 0FFFEH
OUT DX, AL
```

【例2】对端口B的PB7输出1，芯片地址为FFF9H-FFFCH。

```x86asm
MOV DX, 0FFFAH
IN  AL, DX
OR  AL, 80H
OUT DX, AL
```

8255A可以锁存输出，输出模式可以读取当前端口状态，用与或操作只更改一位后输出，实现按位操作。

### 8255工作方式

* 方式0：基本输入输出方式

对应程序传送方式，无条件传送和查询方式，不使用联络信号，也不使用中断，所有口可定义为输入输出方式，C口两部分可分开定义。所有口输出均有锁存，输入只有缓冲，但无锁存，C口还具有按位将其各位清0或置1的功能。

<figure><img src="/files/g82ITMBVO6R78MUm4hAu" alt="" width="200"><figcaption><p>8255方式0时序图</p></figcaption></figure>

相当于一片74LS244，仅仅起到缓冲作用。

* 方式1：选通输入输出方式\
  A口借用C口的一些信号线用作控制和状态线，形成A组。B口借用C口的一些信号线用作控制和状态线，组成B组。在方式1下，端口提供有中断请求逻辑和中断允许触发器，A口和B口的输入输出均带有锁存。

  * 输入方式

  <figure><img src="/files/vHoNLbWOFGlkecBgXqxr" alt="" width="250"><figcaption><p>8255方式1输入引脚功能</p></figcaption></figure>

  STB：选通；\
  IBF：输入满；\
  INTE中断允许；都为高\
  INTR：中断请求可向CPU发发送中断请求。 端口A的INTEA对应PC4(STBA)\
  端口B的INTEB对应PC2(STBB)

  <figure><img src="/files/ZtsGUPApiD2YyOHohhvT" alt="" width="200"><figcaption><p>8255方式1输入时序图</p></figcaption></figure>

  * 输出方式

  <figure><img src="/files/K36dtlX0smKg6uiD14YU" alt="" width="250"><figcaption><p>8255方式1输出引脚功能</p></figcaption></figure>

  OBF输出满，表示CPU已经输出数据。\
  ACK：数据已经被外设接收。\
  INTR：接收完成，要求CPU继续来数据。\
  端口A的INTEA对应PC6(ACKA)\
  端口B的INTEB对应PC2(ACKB)

  <figure><img src="/files/VjsxgCDjMawasEqMyw0I" alt="" width="200"><figcaption><p>8255方式1输出时序图</p></figcaption></figure>

  简要分析端口B方式1输出数据时OBF、ACK、INTR、INTE如何配合工作。
* 方式2：双向方式\
  方式2将方式1的选通输入输出功能组合成一个双向数据端口，可以发送数据和接收数据。只有端口A可以工作于方式2，需要利用端口C的5个信号线，其作用与方式1相同。方式2的数据输入过程与方式1的输入方式一样。方式2的数据输出过程与方式1的输出方式有一点不同：数据输出时8255A不是在OBF有效时向外设输出数据，而是在外设提供响应信号ACK时才打开输出缓冲器送出数据。

<figure><img src="/files/Oq7iyTtTqDERle5TWI9Q" alt="" width="120"><figcaption><p>8255方式2引脚功能</p></figcaption></figure>

用PC6设置INTE1（输出），用PC4设置INTE2（输入）。

## 串行通信与可编程串行接口8251A

### 串行通信

数据传送方式：单工、半双工、全双工。

信号传输方式：基带传输、频带传输（载波传输）。

调制方式有：调频、调幅、调相。

串行通信是指在单根导线上将二进制数据一位一位顺序传送，特别适合于远距离传送。\
串行通信的优势：用于通信的线路少，因而在远距离通信时可以极大地降低成本。串行通信适合于远距离数据传送，也常用于速度要求不高的近距离数据传送。\
串行通信又分为同步通信（SYNC）和异步通信（ASYNC）。

**异步通信**时数据控制状态都用一根信号线传送，以一个**字符**为传送单位，两个相邻位时间间隔固定。收发双方必须遵守共同的通信协议，才能解决传送速率、信息格式、位同步、字符同步、数据校验等问题。其通信协议是起止式异步通信协议。\
异步通信协议：1起始位，5-8数据位，1校验位，1.5或2停止位。

<figure><img src="/files/r4IRr6SzImDoCNSwHrcA" alt="" width="220"><figcaption><p>异步通信</p></figcaption></figure>

串行接口举例：RS-232C（属于物理层），负逻辑，需要用电平转换芯片。

同步通信以一个数据块（帧）为传输单位，每个数据块附加1个或2个同步字符，最后以校验字符结束。同步通信的数据传输效率和传输速率较高，但硬件电路比较复杂。最常使用高级数据链路控制协议HDLC。

### 8251芯片

8251A是可编程的串行通信接口芯片，可以工作在同步方式，也可以工作在异步方式。同步方式下，波特率为0-64K，异步方式下，波特率为0-19.2K。

<figure><img src="/files/ZKpDs2A0sIua5o6F6BRH" alt="" width="120"><figcaption><p>8251芯片引脚</p></figcaption></figure>

<figure><img src="/files/w4I9DJUKWVMdvnq7KpYw" alt="" width="320"><figcaption><p>8251芯片内部</p></figcaption></figure>

当发送缓冲器为空，TxRDY有效。接收缓冲器满，RxRDY有效。\
SYNDET同步检测信号，外同步输入，内同步输出。\
CLK：要求CLK的频率在同步方式下，大于TxC/RxC的30倍。在异步方式下，大于TxC/RxC的4.5倍。

**初始化编程**

三个内容：模式字、控制字、状态字。

* ①模式字

<figure><img src="/files/ZYjnUByn4WFGhHaEwe6c" alt="" width="250"><figcaption><p>8251模式字(1)</p></figcaption></figure>

<figure><img src="/files/YPXMDeZjpxx2xr7cBpoE" alt="" width="270"><figcaption><p>8251模式字(2)</p></figcaption></figure>

* ②控制字

<figure><img src="/files/ORV8U4egQJ5qUNUXwrZh" alt="" width="270"><figcaption><p>8251控制字</p></figcaption></figure>

* ③状态字

<figure><img src="/files/rVrZwvLH2OUkqfzzz6Jk" alt="" width="270"><figcaption><p>8251状态字</p></figcaption></figure>

芯片复位以后，第一次往控制端口写入的是方式命令控制字即模式字。

<figure><img src="/files/afd6vrpJIZJ62ZKcGD0c" alt="" width="200"><figcaption><p>8251编程步骤</p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://embedded.xym.work/20_cs_courses/1_3_organization/4_8086/6-chuan-bing-xing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
