当前位置:首页 >> 信息与通信 >>

模块七 通信系统的设计


模块七

通信系统的设计

本章主要介绍单片机串行通信系统的概念及应用。串行通信功能模块对于单片机的应 用具有重要的作用和地位,我们从单片机串行口的控制使用方法,典型应用系统——秒表 的设计制作,单片机与计算机串行口通信以及多机串口通信等方面阐述,从而达到掌握串 口的控制和应用的基本方法。
【教学聚焦】

知识

目标:
1、了解单片机的串行口通信基础 2、掌握单片机的串行通信的过程 3、掌握串行口的控制方式

技能目标:
1、能够熟悉单片机的串行口的结构 2、能够掌握串行口的工作方式 3、能掌握多个单片机间的串行通信方式 【课时建议】8 课时

教学重点: 单片机的串行口通信基础 教学难点: 单片机的串行口的结构和工作方式
【课堂随笔】

项目 7.1 串行通信基础知识
在有悠久历史的中国,通信的起源至少可以追溯到周朝。众所周知,中国历史上有周幽王烽火戏诸 侯的故事。 这个故事就是古代应用光通信的见证, 它证明光通信在中国的应用至少可以追溯到公元前 800 年,这在世界上也是领先的。烽火是非常原始的通信,而且是最简单的二进制数字通信。它利用有或无 光信号表示有或无“敌情” 。

图 7-1 航天卫星测控系统示意图 2012 年 6 月 18 日下午,神舟九号飞船与天宫一号空间站完成自动交会对接,我们通过安装在飞船

上的摄像机等设备,欣赏到从太空眺望地球的美景,听到航天员与地面指挥员的对话,看到航天员在飞 船内的“空翻”表演,这一切则要依靠非常重要的测控与通信系统。 我们从中可以归纳通信的几个要素: (1) 两个或两个以上的通信主体(信源和信宿) 。 (2) 可用的通信媒介(信道) 。 (3) 达成一致的通信语言(通信协议) 。 从单片机的角度来看,因为 A T89C51 系列单片机具有串行口的通信机制,以单片机或计算机作为 通信的主体,以串行信道作为通信的媒介,以单片机串口的逻辑电平、数据格式、数据传输波特率等作 为通信的协议基础,单片机也就具有了多系统信息传递,协同工作的能力,这也就为单片机的多系统控 制和应用打开了崭新的天地。 7.1.1 串行口的结构 对于单片机, 它跟通用计算机一样, 具有串行通信的结构, 也就是通用的异步接收器/发送器 UART 。 在串行传送中,数据是一位一位按顺序进行的,而计算机内部的数据是并行的。因此当计算机向外发送 数据时,必须将并行的数据转换为串行的数据再行传送。反之,又必须将串行数据转换为并行数据输入 计算机中。上述并 →串或串 →并的转换既可用软件实现,也可用硬件实现。但由于用软件实现会使 CPU 的负担增加,降低了其利用率,故目前往往用硬件办法完成这种转换。 在串行数据传输时,分为异步(asynchronous) 和同步(synchronous) 两种方式。A T89C51 单片机的串行 口采用的是异步传输方式, 每次串行口通信时只发送或接收 1 个字节的数据。 通用的异步接收器/发送器, 简称 UART(Universal Asynchronous Receiver/Transmitter) , 正是这个 UART 结构实现了单片机与外界的全 双工异步数据通信,它是串行接口的核心部件,现介绍如下:

图 7-2 硬件 UART 电路 硬件 UART 电路如图 7-2 所示,它既能发送,由并行 →串行输出,又能接受,由串行 →并行输入。 对每一方来说都是一个双缓冲器结构。当 UART 接收数据时,串行数据先经 RXD 端(Receiver Data) 进入移位寄存器,再经移位寄存器输出并行数据到缓冲器,最后通过数据总线送到 CPU;当 UART 发 送信息时,先由 CPU 经数据总线将并行数据送给缓冲器,再由并行缓冲器送给移位寄存器,最后逐位 由 TXD(Transmitter Data)端输出。所有这些工作都是在时钟信号和其它控制信号作用下完成的。 为了检测传送中可能发生的错误,UART 在发送时会检查每个要传送的字符中的“1”的个数。自 动在奇偶校验位上添“l”或“0” ,使得“1”的总和(包括奇偶校验位)在偶校验时为偶数。奇校验中 为奇数。UART 在接收时会检查字符中的每一位(包括奇偶校验位)计其“1”的总和是否符合要求, 以确定是否发生传送错误。在 UART 中设置有出错标志,一般有以下三种: (1)奇偶错误(Parity error ) ; (2)帧错误(Frame eror) ,表示字符格式不符合规定; (3)溢出(丢失)错误(Overrun error) 。 一旦传送中出现上述错误,会发出出错信息。 UART 是用外部时钟的方法与数据进行同步的。外部的时钟周期 Tc 和数据中每一位数据所占的时 间 Td 有如下关系:

Tc ?

Td K

其中 K=16 或 64

若 K=16,在每一个时钟脉冲的上升沿采样接收数据线,当发现了第一个“0” (即起始位的开始) , 以后又连续采样 8 个“0” ,则确定它为起始位(不是干扰信号) ,然后开始读出接收数据的每个数位值, 如图 7-3 所示。

图 7-3 外部时钟与接收数据的起始位同步 由于每个数据位时间 Td 为外部时钟的 16 倍,所以每 16 个外部时钟脉冲读一次数据位。如图 7-4 所示。从图中看出,取样时间正好在数据位时间的中间时刻,这就避开了信号在上升或下降时可能产生 的不稳定状态,保证了采样数值的正确。

图 7-4 UART 接收数据的读数时刻 7.1.2 串行通信的过程 作为通信的数据传输端口,单片机的串行口完成了通信的数据发送与接收。大多数单片机都提供了 专门用于通信的端口。如 A T89C51 单片机的 P3.0 和 P3.1 除作为一般 I/O 口外,还分别在串行通信中充 当接收口(RXD) 和发送口(TXD),如图 7-5 所示。

图 7-5 AT89C51 单片机的串行口

RXD 口和 TXD 口可以分别实现串行通信的数据接收和发送, 为了清楚地认识 A T89C51 单片机的串 行通信过程, 我们将通过以下两个范例分别讲解如何利用单片机的 RXD 口和 TXD 口来接收和发送数据。 一、串行发送数据 在流水灯的项目设计中,我们可以把 I/O 口输出的显示数据归纳在一个矩阵中,如图 7-6 所示。矩 阵中的每一行就是某一时刻 I/O 口(例如 P0 口)的状态,1 代表高电平,0 代表低电平。矩阵中一行 8 个位的显示数据同时从 P0 口输出,这就是典型的并行通信方式。 那串行方式是什么样子的?很简单,即把数据按位逐一从单片机的 TXD 口发送。如图 7-6 所示, 例如原本的并行数据 11111110 被逐位地从 TXD 口发送出去。

图 7-6 从并行数据到串行数据 在 TXD 口和 8 支发光二极管之间使用一个移位寄存器将串行数据组合成并行数据后就可以正常显 示了, 如图 7-7 所示是利用 A T89C51 单片机串行通信口构成的流水灯系统电路图, 该电路使用了单片机 的串行通信口 RXD 和 TXD。

图 7-7 单片机串行口构成的流水灯系统电路图 集成电路 U2 是一个“8 位串入/并出移位寄存器” ,型号为 74164。所谓串入/并出即输入 74164 的是 串行数据,而输出的是并行数据。74164 的第 l、2 管脚 A 和 B 是串行数据输入口,与单片机的 RXD 相 连。有人也许会问 RXD 不是单片机的串行接收口吗?为什么使用的不是 TXD 口来向 74164 发送数据? 其实 A T89C51 单片机的 RXD 和 TXD 并不是绝对的接收和发送口,它们会因工作方式的不同具有不同 的功能,这一点在下一个知识点将会讲解到。 74164 的第 9 管脚是清 0 端 CLR ,低电平使能。由于这个实例只在系统上电时需要移位寄存器清 0,所以将 CLR 端与一个由电阻 R1 和电容 C4 构成的复位电路相连。 74164 的第 8 管脚是移位寄存器的时钟信号输入端, 它与单片机的 TXD 相连, 至于为什么这么做也 能在下一个知识点中找到答案。最后,74164 的并行输出端 QA~QH 与 8 支发光二极管相连,向它们输 出并行的显示数据。 通过对系统电路的简单分析后,我们可以从程序中更具体地学习单片机如何发送串行数据。如程序 7-1 所示,其中阴影部分的指令是与串行口控制有关。程序从数据表 TABLE 中获取显示数据载入 ACC 中,如果不是结束码 88H,就通过 SEND:程序段中的指令“ MOV SBUF,A”将 ACC 中的显示数据载 入串行口缓冲区 SBUF 中。一旦 SBUF 中被载入数据,单片机就会自动将数据从串行口发送。如果数据 发送完成,标志位 TI 会被置 1,于是指令“JBC TI ,NEXT ”判断发送完成情况。 程序 7-1:显示数据的串行发送(对应图 7-7) ORG START: MOV MOV LOOP: CLR MOVC CJNE JMP SEND: MOV CHECK: JBC JMP NEXT: CALL INC JMP DELAY: D1: D2: MOV MOV MOV DJNZ DJNZ DELAY DPTR LOOP R3,#20 R4,#20 R5,#248 R5,$ R4,D2 ;调延时子程序 ;DPTR 自增 1,指向数据表中的下一个数据 ;跳回 LOOP,向串行口载入新数据 ;延时子程序 TI,NEXT CHECK ;发送完成标志位 TI=1,跳转到 NEXT ;否则循环等待 SBUF, A ;将数据载入串行口缓冲区 SBUF 寄存器,自动被发送 SCON,#00H DPTR,#TABLE A A,@A+DPTR A,#88H,SEND START ;设置串行口工作在方式 0 下,发送数据 ;DPTR 指向数据表 TABLE 的表头 ;ACC 清 0 ;将数据表中的数据载入 ACC 中 ;遇到结束码 88H 则结束 ;循环 00H

DJNZ RET TABLE: DB DB DB DB DB END

R3,D1 ;显示数据表 0FEH, 0FDH, 0FBH, 0F7H ;左移 0FEH, 0FDH, 0FBH, 0F7H 0FEH, 0FDH, 0FBH, 0F7H ;右移 0FEH, 0FDH, 0FBH, 0F7H 88H ;结束码

程序 7-1 中的流水灯使用单片机的串行口发送显示数据, 这种做法一是节约了单片机的 I/O 口资源, 二是只使用两根数据线就可以实现 8 支发光二极管的控制,在远距离数据传送中可节约导线的成本。 通过以上这个例子,我们对单片机串行发送数据的过程有了初步的认识,接着再讲解单片机接收串 行数据的过程。 二、串行接收数据 单片机串行口接收并行数据时,一般也需要一个转换芯片将并行数据转换成串行数据。在如图 7-8 所示的例子中,我们使用 8 位并行装载移位寄存器 74166,把 DIP 开关 S1 产生的由 8 个不同电平信号 构成的并行数据转换成串行数据。 74166 的第 15 管脚 S/L 是移位/载入控制端,当单片机的 P3.2 口向其输入一个低电平时,74166 就 将 DIP 开关 Sl 产生的并行数据读入并进行串行转换。 程序 7-2 实现的功能是从串行口接收转换后的串行 数据,然后再变成并行数据从 P0 口输出,最终实现 8 支发光二极管的状态与 DIP 开关 S1 的状态相关, 即如果 S1 某一位为低电平,则对应位的发光二极管被点亮。程序 7-2 中带阴影的指令与串行口操作有 关,详细的知识将在接下来的知识点中介绍。

图 7-8 串行口用于接收并行数据的系统电路 程序 7-2:显示数据的串行接收(对应图 7-8)

ORG START: MOV ENABLE: CLR NOP NOP NOP NOP SETB CHECK: JBC JMP DISPLAY: MOV MOV CALL JMP DELAY: D1: D2: MOV MOV MOV DJNZ DJNZ DJNZ RET END 7.1.3 串行口的控制

00H SCON,#10H P3.2 ;设置串行口工作在方式 0 下,接收数据 ;使能 74166 进行并行数据装载与转换 ;空指令,耗时间,等待 74166 操作完成

P3.2 RI,DISPLAY CHECK A,SBUF P0,A DELAY START R3,#20 R4,#20 R5,#248 R5,$ R4,D2 R3,D1

;恢复 P3.2 电平,准备下一次转换 ;接收完毕 RI=1,跳转到显示 DISPLAY 段 ;如果没有接收完毕循环等待 ;将串行口缓冲区 SBUF 数据载入 ACC ;从 P0 口输出显示 ;调延时子程序 ;循环 ;延时子程序

串行口作为单片机的内部功能模块, 与定时/计数器一样通过相应的特殊功能寄存器控制。 例如程序 7-1 和程序 7-2 中对 SCON 寄存器的操作决定了串行口的工作方式和模式。 我们在这个知识模块中将具体了解如何使用 SCON 寄存器来控制串行口工作。 一、串行口缓冲区 SBUF 在串行口结构知识点中我么已经知道串行口的数据发送和接收都是通过串行口的缓冲器进行的, 在 串行通信过程这个知识点中,通过程序 7-1 和程序 7-2 我们也了解到用串行口缓冲区 SBUF 进行发送接 收的指令。SBUF 这是一个 1 个字节长度的寄存器,位于特殊功能寄存器区的 99H 上。在发送数据时, 只要把数据载入 SBUF 中,UART 就会自动地将数据从串行口发送出去。类似地,在接收数据时,SBUF 寄存器保持着从单片机串行口接收的数据,以供程序读取。 所以,往 SBUF 中载入数据就自动发送;接收的数据保存在 SBUF 中供读取。 二、串行口控制寄存器 SCON

串行口控制寄存器 SCON 是一个 1 个字节长度的寄存器,位于特殊功能寄存器区的 98H,是控制单 片机串行通信的重要寄存器,可对其进行位寻址。SCON 各位的名称和功能如图 7-9 所示。 SCON 复位值:0000 0000 7 FE/SM0 FE/SM0 SMl SM2 REN TB8 RB8 TI RI 6 SM1 5 SM2 4 REN 3 TB8 2 RB8 1 TI 0 RI

误帧位/串行口方式 0 位。 串行口方式 l 位。 多单片机通信使能位。清 0 屏蔽多单片机通信功能;置 l 使能多单片机在方式 2 和 3,最终在方式 l 下的通信功能。该位应该在方式 0 时清 0。 接收使能位。清 0 时关闭串行口的数据接收;置 1 时使能串行口的数据接收。 不常用 不常用 发送中断标志位。清 0 以确认中断;方式 0 下第 9 位发送完后,或在其他方式下 在停止位开始时,都由硬件置 1 该位。 接收中断标志位。清 0 以确认中断;方式 0 下第 9 位接收完后,该位由硬件置 l。 图 7-9 SCON 各位的名称和功能

? ? ?

FE/SM0 位与 SMl 位——设置串行口工作方式。这两位设置的是串行口的工作方式,不同 工作方式下数据帧有所不同; SM2——多单片机通信使能位。该位可以控制使能多个单片机之间的通信; REN——接收使能位。当 REN 位置 l 时,单片机可以从串行口接收数据,如果 REN 清 0, 则接收功能被关闭。该位与 SCON 其他位一样可以进行位寻址,所以置 1 和清 0 可分别由 指令“SETB SCON.4”和“CLR SCON.4”完成;

? ?

TI——发送中断标志位。 TI 与 RI 一样都是串行通信中重要的标志位。 当单片机完成 SBUF 中的数据发送后,该位由硬件置 1,以利于程序判断数据发送的完成情况。 RI——接收中断标志位。粗略的描述是当单片机从串行口接收完数据后该位被硬件置 1, 以利于我们判断数据接收的完成情况。

通过串行口控制知识点的介绍,我们对 UART 的控制有了初步的认识,虽然还很模糊。现在可以再 回头看程序 7-1 和程序 7-2 中带阴影的指令,结合这里的描述,看看程序是如何设置串行口工作方式、 操作串行口缓冲区 SBUF、判断标志位 TI 或 RI 的。 7.1.4 串行口的工作方式及波特率设置 A T89C51 系列单片机的串行口由 SCON 寄存器中的 SM0 和 SMl 位设置工作在 4 种不同方式下,如 下表所示。这里介绍 4 种方式的具体内容,并结合后面几节的实例来理解和运用。 表 7-1 串行口工作方式 S M0 0 M1 0 S 工作 方式 方式 移位寄存器方式,用于 I/O 口扩展 特点

0 0 1 1 1 0 1 方式 1 方式 2 方式 3 以上几种方式中,方式 1 使用的较多。该方式下,数据帧由 8 位数据、1 个停止位和 1 个开始位组 成。 这种方式与计算机的串行口方式兼容, 这就使得在这种方式下单片机与计算机可以进行串行口通信。 更重要的是,方式 1 下,波特率可以通过单片机的 Timer1 来改变,这就使得单片机与计算机进行串行 通信中的数据传输速率得到很好的控制。 由于异步传输时每一次只传输 1 个字节的数据, 所以衡量串行口传输速度的方法就是看它每秒传输 多少个字节的数据,例如串行口 1 秒传输 1024 个字节,则数据传输率为 1024Bps ,即 1KBps 。单位 Bps 代表“字节/秒”(Bytes per second) 。更小的单位的是 bps ,即“位/秒”(bits per second) 。注意区分大小 字的字母 B 和 b。 除了以上两个单位,另一个广泛使用的描述数据传输率的单位是波特(baud),波特率则用来描述数 据传输率。这个单位来自计算机的调制解调器(modem) 。 波特的定义是:传输数据中每秒信号的变化量。严格来说,波特与 bps 并不总是相等,这是因为有 时单个信号的改变是通过多位数据实现的,但在本书单片机中,可以简单地把波特与 bps 看成相等,即 1 波特(Bd)等于 1 位/秒(bps): 1Bd=1bps A T89C51 单片机的 UART 在传输数据时,可被设置不同的波特率,以达到不同的传输速率。我们将 会具体结合每种工作方式讨论如何通过指令设置波特率。 一、方式 0 该工作方式下,UART 实际上是一个同步移位寄存器,该方式下只发送或接收 8 位数据。注意,此 时数据由单片机的 RXD 管脚发送或接收,而 TXD 作为发送或接收的移位脉冲。发送或接收数据时,低 位数据在前,高位数据在后。 方式 0 下 SCON 中的 SM2 应设为 0,TB8 位无用。其波特率是固定的,为系统晶振频率的 1/12。 即: 9 位 UART ,波特率为时钟频率/32 或/64 9 位 UART ,波特率可变 8 位 UART ,波特率可变

波特率 ?

晶振频率 12

(7-1)

例如晶振频率=12MHz,则 波特率 ?

12 ? 106 ? 1( MHz) 。 12

①方式 0 下发送(程序 7-1) 。将要发送的 8 位数据载入 SBUF,UART 自动将 SBUF 中的数据转换 成 8 位串行数据,并以晶振频率/12 作为波特率从 RXD 发送出去。当数据发送完成后,TI 会被置 1。这 时,可用指令“JBC TI,CHECK”来检测 TI 并将其清除为 0。方式 0 下发送时序如图 7-9(a)所示。 ②方式 0 下接收(程序 7-2) 。 在 UART 接收串行数据之前需要设 SCON 中的 RI=0、REN=1。UART 就会启动接收过程,此时 RXD 为数据接收端,TXD 仍然为移位脉冲输出。当 1 个字节的数据接收完毕

后,UART 将其载入 SBUF,同时 RI 被置 1。可用指令“JBC 0 下接收时序如图 7-9(b)所示。

RI,LOOP ”来检测并清除 RI 为 0。方式

(a) 方式 0 下发送时序

(b) 方式 0 下接收时序 图 7-9 方式 0 下发送和接收时序 二、方式 1 该方式下, UART 作为异步通信口, 每一帧发送或接收 10 位数据, 这 10 个位分别是 1 个起始位 “0” 、 8 个数据位和 1 个停止位“1” 。单片机的 TXD 为发送管脚,RXD 为接收管脚。 该方式下通信的波特率是可变的,一般由 Timer 1 工作在方式 2 下,通过载入 TH1 和 TL1 的计数 初始值来设置波特率。Timer 工作在方式 2 下,是一个 8 位自动重新装载的定时器,装载时需要向 TH1、 TL1 同时装载相同的计数初始值。单片机会自动根据 Timer 1 的设置情况使 UART 工作在特定的波特率 下。方式 1 下波特率和 THl(TLl)中载入计数初始值之间的关系如公式(7-2)所示:

波特率 ?

2 SMOD 1 晶振频率 ? 32 12 ? [256- (T H1)]

(7-2)

其中,THl 是 Timerl 寄存器,SMODl 是电源控制寄存器 PCON 中的位 7,如图 7-10 所示。当串行 口工作在方式 l、2、3 时,并且使用的是 Timer 1 来设置波特率,则如果 SMODl=0 为单倍波特率,而 SMODl=l 则为双倍波特率。以下是 SMODl 在 PCON 中的位置。 7 SMOD1 6 SMOD0 5 保留 4 POF 3 GF1 2 GF0 1 PD 0 IDL

图 7-10 SMOD1 在 PCON 中的位置 例如使用单倍波特率,SMOD1=0,晶振频率=11.0592MHz,向 TH1 中载入 F3H,即 TH1=243,则 波特率为:

波特率 ?

2SMOD1 晶振频率 20 11.0592? 106 ? ? ? ? 2400。 32 12 ? [256- (T H1)] 32 12 ? [256- (243)]

由于在方式 1 下波特率与载入 THl(=TLl) 的计数初始值和晶振频率有关,又由于计数初始值是一个 整数,但公式(7-2)的计算并不总能得到整数的波特率,而在单片机与计算机进行串行口通信时,计算机 端一般只设定整数值的波特率,这样造成了单片机与计算机的通信波特率不全然相等,导致传输错误的

发生。所以为了保证数据传输的正确性,在表 7-2 中给出了一些常用的波特率与晶振频率、SMODl 位、 THl(=TL1)的计数初始值的关系,以供以后应用中直接使用。 方式 1 与方式 3 下的波特率计算公式相同,所以表 7-2 适用于方式 l 和方式 3 中。 表 7-2 方式 1 和方式 3 下波特率与 TH1(=TL1) 的计数初始值 Timer 1 工作在方式 2 下 波特率 600 1200 2400 4800 1200 2400 4800 9600 19200 晶振频率(MHz ) 12 12 12 12 11.0592 11.0592 11.0592 11.0592 11.0592 SMOD1 位 0 1 0 1 0 0 0 0 1 载入 TH1(=TL1)的 计数初始值 0CCH 0F6H 0F3H 0F3H 0E8H 0F4H 0FAH 0FDH 0FDH

①方式 1 下发送:UART 以方式 1 发送时,数据由 TXD 端送出。向 SBUF 载入数据后即自动发送。 发送完一帧数据后,发送中断标志位 TI=1,可用“JBC TI, CHECK”来检测 TI 位并将其清除为 0。 ②方式 1 下接收:UART 接收串行数据之前需将 SCON 中的 REN 位置 1, UART 就会启动接收过 程。RXD 为数据接收端。接收完 1 帧数据后,RI 位被置 1,可用“JB RI, CHECK”来检测 RI 位以判 断接收完成情况。 三、方式 2 该方式下 UART 为一个 9 位异步通信口,每一帧共发送或接收 11 位数据。这 11 位数据由 1 个起始 位“0” 、8 个数据、第 9 位数据(TB8 位,位于 SCON 内)和 1 个停止位“1”组成。方式 2 下的波特 率为晶振频率的 1/32 或 1/64,这取决于 PCON 中的 SMOD1 的设置,计算公式为:

波特率 ?

2 SMOD 1 ?晶振频率 64

①UART 以方式 2 发送时, 数据由 TXD 端送出, 数据中的第 9 位数据从 SCON 中的 TB8 位取得 (可 用指令“MOV T B8, bit”向 TB8 位载入数据) 。向 SBUF 载入数据后即自动发送。发送完一帧数据后, 发送中断标 志位 TI=1,可用指令“JBC TI, CHECK”来检测 TI 并将其清除为 0。 ②在 UART 接收串行数据之前需要设 SCON 中的 REN=1。UART 就会启动接收过程。RXD 为数据 接收端, 数据中的第 9 位载入 SCON 中的 RB8 位上。 接收完 1 帧数据后, RI 位被置 1, 可用指令 “JB RI, CHECK”来检测 RI 位以判断接收完成情况。 四、方式 3 该方式与方式 2 的发送/接收过程和 UART 功能几乎完全一样, 只是方式 3 的波特率可变, 与方式 1 具有相同的计算公式,在实际应用中,可以参考下表来选择晶振和设置计数初始值。 从上面对 4 种方式的分析知道,除方式 0 倾向于用在扩展 I/O 口外,方式 1 和 3 具有灵活设置波特 率的特点,所以在应用中可以“偏爱地”使用。至于说 SMODl 决定了是单倍还是双倍波特率,可通过 简单的 MOV 指令完成。 7.1.5 串行口的协议

因为单片机串行口在传输数据时是异步数据传送方式,在异步传送中,每一个字符要用起始位和停 止位作为字符开始和结束的标志,它是以字符为单位一个个地发送和接收的。 异步传送时,每个字符的组成格式如下:首先是一位起始位表示字符的开始;后面紧跟着的是字符 的数据字,数据字可以是 5、6、7 或 8 位数据,在数据字中可根据需要加入奇偶校验位;最后是停止位, 其长度可以是一位,一位半或两位。所以,串行传送的数据字加上成帧信号的起始位和停止位就形成一 个字符串行传送的帧。起始位用逻辑“0”低电平表示,停止位用逻辑“1”高电平表示。图 7-11(a)所示 为数据字为 7 位的 ASCII 码,第 8 位是奇偶校验位。加上起始位、停止位,一个字符由 l0 位组成。这 样加上成帧信号后,字符便可以一个接一个地传送了。 在异步传送中,字符间隔不固定,在停止位后可以加空闲位,空闲位用高电平表示,用于等待传送。 这样,接收和发送可以随时地或间断地进行,而不受时间的限制。图 7-11(b)为有空闲位的情况。 在异步数据传送中,CPU 与外围设备之间先必须约好两项事宜: 第一、字符格式。双方要约好字符的编码形式.奇偶校验形式、以及起始位和停止位的规定;

(a)

(b) 图 7-11 异步通信的数据格式 第二、波特率(Baud rate) 。波特率是衡量数据传送速率的指标,它要求发送方和接收方都要以相同 的数据传送速率工作。 假设数据传送的速率是 120 字符/秒,而每一个字符假如为 10 位,则其传送的波特率为: 10 位/字符×120 字符/秒=1200 位/秒=1200 波特(二进制电平时) 简而言之,传送采用二进制电平时, “波特”就是每秒传送多少位。1200 波特,就意味着每秒可以 传送 1200 位。而每一位的传送时间 Td 就是波特率的倒数,如上例中,则为:

Td ?

1 ? 0.833 ms 1200

应注意,波特率和有效数据位的传送速率并不一致。例如,上述 10 位中,真正有效的数据位只有 7 位。所以,有效数据位的传送速率只有

7×120=840 位/秒 此外,波特率也是衡量传输通道频宽的一个指标。 异步通信的传送速率在 50~9600 波特之间,常用于计算机到 CRT 显示器和字符打印机之间的通信、 直通电报、以及无线电通讯的数据发送等。

项目 7. 2 应用项目七 简易秒表的制作
7.2.1 串行口扩展并行 I/O 口 单片机并行 I/O 口数量总是有限的,有时并行口需做其他更重要的用途,一般也不会用数量众多的 并行 I/O 口专门用来驱动显示电路, 能否用 89C51 的串行通信口加上少量 I/O 扩展芯片用于显示电路呢? 答案是肯定的。 A T89C51 的串行通信口是一个功能强大的通信口,而且是相当好用的通信口,用于显示驱动电路再 合适不过了。串口工作方式 0 是移位寄存器的工作方式,这也就为我们把串口用来扩展并行 I/O 口提供 了方法。 下面我们就根据这种需要设计一个用两个串行通信口线加上两根普通 I/O 口, 设计一个 4 位 LED 显 示电路。当然只要再加上两根 I/O 口线即可轻易实现 8 位 LED 的显示电路。图 7-7 中单片机串行口送出 数据扩展成并行 I/O 口用于显示流水灯的电路已经为我们提供了范例。本项目将结合秒表系统功能,把 扩展的 I/O 口用于显示七段数码管。 7.2.2 秒表电路制作分析 本节展现的系统是一个计时用的秒表,为了使问题简单一些,它的功能被设计为两位七段数码管在 开机时显示“00” ,并在系统中添加一个按钮开关。当第一次按下按钮开关后秒表开始计时,第 2 次按 下后计时停止,第 3 次按下后两个数码管清 0,并回到一开始的计时状态。由于只设计了两位七段数码 管,所以该秒表最大计时 99 秒。 在系统功能实现上,结合前面知识点涉及的串行口扩展并行 I/O 口方法,我们把单片机送给七段数 码管显示的计数数字用单片机的串行口送出,利用 74LS164 串并移位寄存器,转换成并行数据再送给数 码管显示,在数码管显示的控制上,我们利用 BCD-7SEG 解码驱动器 74LS47 来处理单片机送出来的秒 表计时值的 BCD 编码。这样单片机只要完成秒表的时间单位,也就是 1 秒,这样的时间单位的定时, 然后每 1 秒计时值加 1,在按键的控制下,把计时值通过串口移位发送出去就可以了。 以下为串口移位寄存扩展并行 I/O 口来处理计时值的硬件电路图:

图 7-12 秒表系统电路图 从图 7-12 可以看出,按键被设计与 P1.0 口相连,通过 R4 连到电源正极,P1.0 口低电平表示按键 被按下。单片机串口 RXD 作为数据发送端口连接到 74LS164 的输入端,在 TXD 送出的移位脉冲控制 下,74164 完成串-并转换,送给 U3、U4 两个 74LS47 的输入端的就是一个字节的并行数据。74LS47 把 并行输入的 BCD 编码计时值解码后送到数码管 a~g 字段显示相应的数字。 7.2.3 编制程序流程图 在硬件系统设计的基础上,我们开始软件程序的编写。首先,软件在实现系统功能上把主程序主要 用来查询按键的状态,在定时中断子程序里完成计时值数据的处理和送显。如图 7-13 为系统软件主程 序流程图。 在主程序中,初始化阶段完成串口工作方式的设置、开定时器中断、设置送显计数器的初始值以及 送显“00”的工作,然后第 1 次按键按下后程序开启定时中断,此时每次定时时间到都会执行定时中断 子程序;而相对简单的是,第 2 次按键按下只要原地等待第 3 次按键动作,第 3 次按键按下后直接返回 程序开始处。

图 7-13 秒表主程序流程图 在定时中断子程序中主要是在定时 1 秒时间到的情况下,完成计时值调整并显示的工作。中断子程 序流程图如图 7-14 所示。

图 7-14 秒表定时中断子程序流程图 在以上程序流程图的基础上,对源程序进行编写,编写的时候要注意在处理按键时,判断有按键按 下时要进行消除开关抖动,以防止误操作的发生,其中消抖要编写一个延时子程序,当判断有按键按下

后,延时 30ms 然后仍然是按键按下的状态才判定按键按下成立,直到按键被松开后才去处理按键按下 对应的程序功能。 7.2.4 电路调试 电子电路调试技术包括调整和测试两部分。调整主要是对电路参数的调整,如对电阻、电容和电感 等,以及机械部分进行调整,使电路达到预定的功能和性能要求;测试主要是对电路的各项技术指标和 功能进行测量与试验,并与设计的性能指标进行比较,以确定电路是否合格。电路测试是电路调整的依 据,又是检验结论的判断依据。实际上,电子产品的调整和测试是同时进行的,要经过反复的调整和测 试,产品的性能才能达到预期的目标。 对于单片机电路调试不仅仅具有以上两方面硬件的调试问题, 还有很重要的是软件的调试和系统软 硬件联调。在软件调试过程中,可以利用 keil μ vision 软件的调试功能,其中本项目的按键动作可以用软 件中 Peripherals 菜单项的 I/O Port—Port1 子菜单项调出 Parallel Port1 对话框, 如图 7-15 所示, 在这个选 项卡上可以直接单击 P1.0 对应的端口两次,可以来模拟 P1.0 口上连接的按键动作。

图 7-15 Parallel Port1 对话框

图 7-16 Serial Channel 对话框

对于单片机的串口,我们也可以在软件调试时调出 Peripherals 菜单项的 Serial 子菜单项调出 Serial Channel 对话框, 如图 7-16 所示。 并且, 在 Mode 选项中选择 8 位的移位寄存器方式即 8-Bit Shift Register , 其他不变,其中 Baudrate 表示在系统时钟下串口数据的波特率。 仿真时,设置的断点可以在进入定时中断子程序并且达到了 1 秒时间的定时之后,因为这样可以看 到软件处理计时值的过程,并且串口送出更新之后的计时值的过程也可以在 Serial Channel 选项卡的 SBUF 寄存器中看到,每次串口发送数据完成之后,TI 标志位会被置 1。 在硬件电路和软件编程仿真都完成后, 我们可以在 proteus 软件中进行软硬件联调。 如图 7-17 所示, 在单片机 A T89C51 的属性编辑对话框中, Program File 项选取编译生成的.Hex 源文件, 在 Clock Frequency 项设置单片机晶振频率为 12MHz。

图 7-17 proteus 软件的单片机属性编辑对话框 设置好软件源程序后,在 proteus 软件左下角点选开始仿真按钮,则单片机软硬件系统联调开始仿 真,按下按钮观察数码管显示情况,根据仿真情况对软硬件做修改和调整。 在以上调试的基础上,我们可以把软件源程序下载到单片机实验板上,配合实际硬件一起验证系统 设计想过的实现。

项目 7. 3 单片机与 PC 机通信
7.3.1 RS-232C 总线标准的结构

单片机能与别的单片机进行串行通信,也能和普通计算机通过 RS-232 标准的串口进行通信。这是 单片机一个极大的特点,使得它在通信与控制领域得到广泛的应用。 什么是标准?最简单的例子就是电源插座和插头是依据一定的标准生产出来的, 它们具有一定的尺 寸和规格,这使得用电器能在一定范围内顺利地供电。例如,在广东顺德买一个豆浆机到了北京仍可以 使用,是因为国内的插座和插头执行标准是一样的,不存在插头插不进插座的情况。 但在国内买的电器就不能在英国直接使用了,因为英国的电源插座和插头执行的是 BS 1363 标准, 如图 7-8 所示。这里 BS 1363 就是一个标准的名字,它定义了英国、爱尔兰和一些英属殖民地国家的家 用交流电源插座和插头的规格。有了这个标准,这些地区的电器使用和插座插头的生产才能达成一致。

图 7-18 英国的电源插头和插座 所以标准定义为一个群体相互之间使用某种事物达到某种目的的方法。我们讨论的 RS-232 标准, 是一种在数据终端设备(DTE) 与数据运载设备(DCE)之间进行串行二进制数据交换的标准, 该标准主要应 用于计算机端口中。RS-232 只是众多标准的一种。 RS-232 中 RS 是“RETMA Standard”的首字母缩写,RETMA(Radio-Electronics and Televis ion Manufactures Association,无线电、电子、电视设备制造商协会)是 RS-232 标准的发布者。现在 RETMA 已经发展成为 EIA(Electronic Industries Alliance,电子工业联合会)。所以 RS-232 标准与 EIA-232 标准是 相同的。 由于 RS-232 标准早在 1960 年就已经被制订,而那时 TTL 逻辑电路还没有降生,所以它规定的逻 辑电平比较奇怪,与今天的 TTL 电平不兼容。 TTL 逻辑中逻辑 1 和逻辑 0 的电平分别为+2~+5V 和 0~+0.8V, 如图 7-19(a)所示。 而 RS-232 定义 的却分别为-3~-25V 和+3~+25V,如图 7-19(b)所示。A T89C5l 单片机的 I/O 口都是依据 TTL 逻辑电平 来设计的,与 RS-232 标准的逻辑电平不兼容,导致了单片机不能直接进行 RS-232 标准的通信,而需要 通过一个电平接口芯片 MAX232 来进行电平的转换。关于如何利用这个电平接口芯片将在下一个知识 点讲解。

(a)TTL 逻辑电平

(b)RS-232 逻辑电平

图 7-19 TTL 和 RS-232 的逻辑电平 RS-232 既然确定的是一种在数据终端设备(DTE)与数据运载设备(DCE)之间进行串行二进制数据交 换的标准,它一定涉及类似图 7-18 的接口器件的尺寸、规格等问题。标准的 RS-232 插座和插头都是 25 芯的,称为 DB-25 接头,如图 7-20 所示。按照顺时针方向,针脚的序号为 1、2、3、4?25。

图 7-20 标准 25 芯 DB-25 接头 这个 25 芯的接头可以提供包括电源线在内的 25 条通信线。 这 25 条通信线在 RS-232 通信中各具名 称和功能。由于本书的重点在单片机上,所以不深入介绍 RS-232 过于详细的内容。 RS-232 标准问世若干年后,IBM 公司将 25 芯简化成 9 芯,制成 DB-9 接头应用到普通计算机上, 这就是我们俗称的串行通信口(serial port) ,或简称串口。一般能在台式计算机或一些老式笔记本电脑中 找到,如图 7-21 所示。

图 7-21 (台式)计算机的串口 在数据通信中的接头一般不叫做插座和插头,而是以母头和公头的名称代替。在计算机端的 DB-9 口都是公头(带针脚),称为 DB-9P。而可插入公头的是母头(带针孔),称为 DB-9S,如图 7-21 所示。这 种 9 芯的 RS-232 口是单片机与 PC 之间串行通信将要用到的接口,今后如果谈到 RS-232 口或计算机的 串口都指图 7-21 所示的接口。它的 9 个芯的功能说明如表 7-3 所示。其中只有 3 个芯——RXD、TXD 和 GND 会在 PC 与单片机之间的通信中使用到。 表 7-3 RS-232 接口数据线说明
串口示意图 序号 1 2 3 4 5 6 7 名称及功能说明 DCD :载波检测位 RXD :接收数据位 TXD :发送数据位 DTR:数据终端准备信号位 GND :接地位 DSR:数据发送准备信号位 RTS:请求发送位

8 9

CTS:等待发送位 RI :响铃位

今天,一些台式计算机和笔记本电脑已经不再设有串口了,因为原来使用串口的外围设备如调制解 调器等都内置化或 USB 接口化。所以许多计算机生产商用增加 USB 口数量以满足 USB 外设的需要。 如果你的计算机没有如图 7-21 所示的串口, 就需要买一个串口转换线(价格在 30~100 元)来继续以下的 实验。串口转换线如图 7-22 所示,图 7-22(a) 为 USB 转串口型,可用于台式机或笔记本。图 7-22(b)为 PCMCIA 转串口型,只用于笔记本电脑。

(a)TTL 逻辑电平 图 7-22 串口转换器

(b)RS-232 逻辑电平

使用串口转换器需要安装驱动,驱动程序的光盘随转换器配送。插上串口转换器并安装完成对应的 驱动后,会在 Windows 的设备管理器中找到相应的硬件。打开设备管理器的方法是右击“我的电脑”图 标,在弹出的快捷菜单中选择“属性”命令,在系统属性对话框中打开“硬件”标签,其中就有一个“设 备管理器”按钮,单击它就可以打开计算机的设备管理器窗口。 7.3.2 RS-232C 接口电路

从前面的介绍中我们知道 A T89C5l 单片机有串行口 RXD 和 TXD,而计算机串口上也具有 RXD 和 TXD 两个端口。 单片机与单片机之间、 计算机与计算机之间都可以通过串口实现通信链路的硬件连接并 进行数据交换。那单片机与计算机之间是不是也能通过串口进行通信呢?答案是肯定的。 但是这其中有一个小的问题,计算机串口执行的是 RS-232 标准,RS-232 定义的高、低电平分别为 -3~-25V 和+3~+25V,与单片机的 TTL 逻辑中的+2~+5V 和 0~+0.8V 不兼容。为了跨越这个障碍, 我们可使用一个电平转换的接口芯片来实现单片机与计算机之间的串行通信,如图 7-23 所示,单片机 与计算机的串口之间使用一个“接口芯片”来实现电平的匹配,图中箭头代表数据传输方向。另外,计 算机与单片机串口的 5 脚 GND 相连共地。

图 7-23 单片机与 PC 串行口的接口 图 7-23 中的接口芯片型号,最常用的要数 MAX220~MAX249 系列中共 26 种芯片。这些芯片都可 以完成 TTL 逻辑电平与 RS-232 标准逻辑电平之间的相互转换, 且特别适用于以电池供电的单片机系统。 其中 MAX225、 MAX233、MAX235、MAX245、 MAX246、MAX247 甚至不需要外围器件就能独立完 成电平转换,特别适用于电路板空间有限的场合。这个系列的每一个芯片都有一些特定的应用方面,可 以在选择时参考这个系列的器件手册。 这个系列中,较为常用的接口芯片是 MAX232。它能很好地完成 TTL 与 RS-232 的逻辑电平转换, 工作电压与 A T89C51 单片机相同均为+5V,可以使用同一个电源。MAX232 集成了两组电平转换器,如 图 7-24 所示。MAX232 芯片通过电解电容 C1、C2、C3、C4 的辅助,完成电压的加倍与反相,最终实 现 TTL 与 RS-232 的匹配。

图 7-24 MAX232 内部结构 通过 MAX232 的接口可以实现单片机与计算机串行口的通信链路连接。A T89C51 单片机的 TXD 与 MAX232 的第 2 组电平转换器的输入端 T2IN(10 管脚) 相连,经过 MAX232 转换后,输出端 T2OUT(7 管脚)输出的信号进入计算机串口的 RXD。同样地,计算机串口的 TXD 与 MAX232 的 R2IN(8 管脚)相 连,经过电平转换后,由 R20UT(9 管脚)输出到单片机的 RXD 上。如此一来,MAX232 完成了 TTL 与 RS-232 之间的逻辑电平转换,使单片机与计算机之间的通信链路接接口完毕。 在某些场合电路板尺寸由于某些原因被限制,为了节省空间,可选用 MAX233 来代替图 7-24 中的 MAX232 实现电平转换,MAX233 不需要外围电容 C4、C5、C6、C7 就能正常工作,于是节省了电路 板的空间。这个节省并不是无偿的,MAX233 的器件价格比 MAX232 要高出许多。另外,需要注意 MAX232 和 MAX233 管脚排列并不兼容,所以在使用 MAX233 作为接口时要注意电路连接。 7.3.3 PC 机与单片机间的串行通信

如果完成图 7-25 所示的通信连接后,单片机与计算机之间就做好了串行通信的准备。由于接口芯 片 MAX232 或 MAX233 等在系统中只是一个逻辑电平转换器,在电平转换的前后 TXD 和 RXD 数据线 上的电平改变,但传输的数据是一致的。我们通过一个简单的例子看看计算机与单片机之间串行通信的 硬件和软件是如何配合工作的。 如图 7-25 所示是一个单片机与计算机之间串行通信实验的电路图。单片机的 P0 口与 8 支发光二极 管相连, P2 口与 DIP 开关相连。 串行口 RXD 和 TXD 通过 MAX232 与计算机的串口构成串行通信链路。 完成连接后,在单片机中下载程序 7-3 所示的接收程序。

图 7-25 单片机与 PC 之间的串行通信 程序 7-3:单片机接收计算机串口发送的数据(对应图 7-25) ORG START: MOV MOV MOV MOV SETB WAIT: DISPLAY: MOV MOV JMP END 在单片机中运行程序 7-3, 接着在计算机上运行串口调试软件, 设置好相应的串口号, 波特率为 2400。 然后打开串口,在数据发送区任意输入一个字母,然后发送,如果一切正常,就会看到发光二极管的状 态发生改变。例如输入的是字母 A,则计算机从串口发送的数据是“A”的 ASCII 码 0100 0001,单片机 接收后从 P0 口输出,则点亮对应的发光二极管。如果再发送其他数据,发光二极管就会相应地改变状 态。 这样便实现了计算机通过串口向单片机发送数据和单片机接收数据的实验。 接下来再向单片机中下 载程序 7-4,看看单片机如何向计算机发送数据。 程序 7-4:单片机通过串口向计算机发送数据: ORG START: MOV SCON, #50H ; ①设置串行口工作在方式 1 下,接收使 00H A, SBUF P0, A WAIT ; ⑥接收到的数据载入 ACC ; 将接收到的数据输出显示 ; 循环 JBC JMP SCON,#50H TMOD,#20H TH1, #0F3H TL1, #0F3H TR1 RI, DISPLAY WAIT ; ④启动 Timer 1 ; ⑤判断是否接收到数据 ; ①设置串行口工作在方式 1 下,接收使能 ; ②使用 Timer 1 工作在方式 2 下 ; ③波特率 2400 00H

MOV MOV MOV SETB SEND: MOV MOV MOV WAIT: JBC JMP END

TMOD, #20H TH1, #0F3H TL1, #0F3H TR1 A, P2 P0, A SBUF, A TI, SEND WAIT

; ②使用 Timer 1 工作在方式 2 下 ; ③波特率 2400 ; ④启动 Timer 1 ; 把 DIP 开关的状态载入 ACC 中 ; 显示 DIP 开关的状态 ; ⑤发送数据 ; ⑥判断是否发送完毕

向单片机下载完程序 7-4 后, 先在计算机上运行串口调试软件, 设置好相应的串口号, 波特率为 2400。 然后打开串口,等待接收数据。可以拨动一下 DIP 开关,例如设置成 0100 0001,然后运行程序 7-4,单 片机就会通过串口向计算机发送 DIP 开关产生的数据。如果一切正常,就会在计算机上的串口调试软件 中接收到并显示 0100 0001 对应字母“A” 。

项目 7. 4 多机通信系统
7.4.1 主从式通信总线 单片机构成的多机系统常采用总线型主从式结构。所谓主从式,即在数个单片机或计算机中,有一 个是主机,其余的是从机,从机要服从主机的调度、支配。从机不主动发送命令或数据,一切都由主机 控制。并且在一个多机通信系统中,只有一台单机作为主机,各台从机之间不能相互通讯,即使有信息 交换也必须通过主机转发。A T89C51 单片机的串行口方式 2 和方式 3 适于这种主从式的通信结构。当然 采用不同的通信标准时,还需进行相应的电平转换,有时还要对信号进行光电隔离。在实际的多机应用 系统中,常采用 RS-485 串行标准总线进行数据传输。
TXD RXD 主机 RXD TXD 1号从机 RXD TXD 2号从机 ? ? RXD TXD N号从机

图 7-26 总线式主从多机串行通信 主从通信方式的弊端主要有以下四点: (1)由于采取主机轮询方式进行通信,因此,通信的吞吐量较低,不适用于通信量要求较大,或 平均通信量较低,但呈突发式的场合,如:消费系统、考勤系统等。 (2)由于采取主机轮询方式进行通信,因此,系统较大时,实时性较差。 (3)由于采取主机轮询方式进行通信,主机在不停地查询各从机,每个从机都必须对主机的查询 作出响应,以决定是否对该机进行通信,这样,势必增加各从机的系统开销。 (4)当从机之间需要进行通信时,必须通过主机,增加了从机间通信的难度。 但是,主从式串口单片机通信也有着先天的优势。首先,这种方式使软件的设计大为简化,主从通 信方式也对产品的可靠性也有很大的提升。由于 485 总线是异步半双工的通信总线,在某一个时刻,总

线只可能呈现一种状态,所以这种方式一般适用于主机对分机的查询方式通信,总线上必然有一台始终 处于主机地位的设备在巡检其它的分机, 所以它需要的只是制定一套合理的通信协议来协调总线的分时 复用。它的线路设计简单、价格低廉、控制方便,只要是合理的使用在很多情况下仍然能发挥良好的作 用。 7.4.2 RS-485 通信接口技术

RS-485 与 RS-232 不一样, 它使用一对双绞线, 数据信号采用差分传输方式, 也称作平衡传输。 RS-485 串行总线接口标准以差分平衡方式传输信号,具有很强的抗共模干扰的能力,允许一对双绞线上一个发 送器驱动多个负载设备。 它对于通常的噪声包括冲击、 火花、 振荡以及电磁干扰等具有很好的抑制效果, 同时在串行通信网络中,每个 RS-485 节点的对地电压差的不同也不会影响串行通信,所以,工业现场 控制系统中一般都采用该总线标准进行数据传输。 下面具体分析 RS-485 的接口芯片及接口电平转换电路等。

图 7-27

MAX485 引脚图

在图 7-27 中显示出了 RS-485 的引脚图。 RS-485 采用差分信号负逻辑, +2V~+6V 表示 “0” , -6V~ -2V 表示“1” 。RS-485 有两线制和四线制两种接线,四线制只能实现点对点的通信方式,现很少采用, 现在多采用的是两线制接线方式,这种接线方式为总线式拓朴结构在同一总线上最多可以挂接 32 个结 点。 在 RS-485 通信网络中一般采用的是主从通信方式, 即一个主机带多个从机。 很多情况下, 连接 RS-485 通信链路时只是简单地用一对双绞线将各个接口的“A” 、 “ B”端连接起来。 由于 PC 机默认的只带有 RS-232 接口,有一种方法可以得到 PC 上位机的 RS-485 电路即通过 RS-232/RS-485 转换芯片将 PC 机串口 RS-232 信号转换成 RS-485 信号,利用单片机本身所提供的简单 串行接口,加上总线驱动器如 SN75176 等组合成简单的 RS-485 通讯网络,如图 7-28 所示。

图 7-28

RS-232/RS-485 协议转换接口电路

RS-485 专用的收发 IC 中,最常见的有 TI、National Semiconductor 及 Motorola 等公司的 7517X 系 列,我们这里仅举出其中最常用的 75176,图 7-29 是其引脚图及接收与发送端的特性表。75176 内部各 有一个发送端及接收端, 是否发送是由 DE (drive enable ) 引脚来控制, 是否接收则是由 RE (receive enable)

引脚控制,而且 DE 与 RE 的控制状态刚好反相,所以,我们可以用一个控制脚去掌握 75176 是接收还 是发送。由图中我们可以看出 75176 实际的发送与接收点是共享的,所以在传输上是归类为半双工的通 信方式,这就是说:每个节点都能接收与发送数据,但是不能同时收发。半双工的通信方式对于 RS-485 而言是最方便不过的,而且可以使接线数降到只有两线。

封装

电路符号

图 7-29 75176 电路、封装及收发功能表 7.4.3 PC 机与多个单片机间的串行通信系统

当主机采用 PC 机,与多个单片机构成串行通信系统时,可以利用丰富的主机资源进行屏幕显示, 设置“菜单”式的中、西文提示,将从机发送过来的数据进行存储、计算处理和存盘、打印等,并且可 以查询、监测从机的工作状态,向从机发命令。而从机则用作数据采集或基本控制器来完成对现场的数 据采集或现场控制任务。 单片机在多机通信领域中最典型的应用是分级分布式控制系统,或者称为集散控制系统。在这种控 制系统中,单片机作为前沿计算机,可独立完成数据采集和控制的任务。因此,前沿机与上级计算机(简 称上位机,例如监控计算机、管理计算机)之间必须进行通信联系才能完成分散控制,集中监控、调度 和管理,从而达到最优化控制,以适应现代化工业生产和科学实验的需要。 应用 PC 机和多台单片机构成小型分布系统在一定的应用范围内是最经济可行的方案,已被广泛采 用。这种分布系统在许多实时工业控制和数据采集系统中,充分发挥单片机功能强、抗干扰性能好、温 限宽、面向控制等优点,同时又利用:PC 机弥补单片机的数据处理及交互性操作能力差的不足。在应 用系统中,一般是以上位机的 PC 机作为主机,定时扫描以单片机为核心的智能化控制器(即从机作为前 沿机)以采集数据或发送控制信息。在这样的系统中,智能化控制器既能独立地完成数据处理和控制任 务,又可将数据传送给 PC 机。PC 机则将这些数据形象地显示于显示器或由打印机打印成各种报表,并 将控制命令传送给各仪表,以实现集中管理和最优控制。因此,要完成分散控制系统,必须解决 PC 机 与多台单片机之间的数据通信问题。 A T89C51 的特殊功能寄存器 SCON 和 PCON 分别用于设定四种不同的通信方式及定义波特率;它 的串行口工作方式 3 是可变波特率的 9 位数据异步通信方式, 发送或接收一帧数据为 11 位: 1 位起始位

(O)、8 位数据位、1 位附加的校验位和 1 位停止位(1),其中,附加的第 9 位数据是可编程的,利用这一 可控的第 9 位数据,可实现多机通信。 在多机通信时, A T89C51 发送的帧格式是 11 位,其中第 9 位是 SCON 中的 TB8,它是多机通信时 发送地址(TB8=I) 或发送数据(TB8=0)的标志。串行发送时自动装入串行的帧格式的相应位。在接收端, 一帧数据的第 9 位信息被装入 SCON 的 RB8 中, 接收机根据 RB8 以及 SM2 的状态确定是否产生串行中 断标志,从而可以响应或不响应串行中断,这样就实现了多机通信。 单片机处于从机地位,每台单片机被分配一个节点地址。单片机每收到一个 PC 机送给本节点的命 令帧,则根据命令帧中的命令代码向 PC 机回送一个响应帧。其系统程序流图如图 7-30 所示:

图 7-30

程序流程图

重点串联

MCS——51 的串行通信 接口 串行通信基础知识

串行接口的 4 种工作方式 串行口的控制 串行口的协议 波特率设置

串行通信概述 字符格式 传送速率 调制与解调

单片机与 PC 机通信 RS-232C 总线标准 的结 构 RS-485S 通信接口技术

基础训练: 一、填空题 1. A T89C51 通信口采用的是_________通信,它可以有_________种工作方式; 2. 3. A T89C51 单片机的串行通信引脚端口是________和_________; 单片机与计算机串行通信中使用 MAX232 等接口芯片的作用是___________________。

二、选择题 1. AT89C51 单片机串行口接收数据的次序是下述的顺序: B (1) 接收完一帧数据后,硬件自动将 SCON 的 RI 位置 1 (2) 用软件将 RI 清零 (3) 接收到的数据由 SBUF 读出 (4) 置 SCON 的 REN 为 1,外部数据由 RXD(P3.0) 输入 A. ( 1) (2 ) ( 3) (4 ) B. ( 4) (1 ) ( 2) ( 3) C. ( 4) (3 ) (1) ( 2 ) D. (3 ) (4) ( 1) (2 ) AT89C51 单片机串行口用工作方式 0 时: C A. 数据从 RXD 串行输入,从 TXD 串行输出 B. 数据从 RXD 串行输入或输出,同步信号从 TXD 串行输出 C. 数据从 RXD 串行输出,从 T XD 串行输入 D. 数据从 T XD 串行输入或输出,同步信号从 RXD 串行输出 单片机与计算机串口通信时,最常用 MAX220-MAX249 系列接口芯片,以下芯片只有哪个需 要外围器件才能完成电平转换: A. MAX225 B.MAX232 C.MAX235 D.MAX245 三、判断题 1. SBUF 作为双工通信的发送缓冲寄存器使用时,不能同时接收数据 2. 3.

2.

3.





串口模式 0 的接收端口是 RXD ,发送端口是 TXD ( ) 串行口的中断, CPU 相应中断后,必须在中断服务程序中,用软件清除相应的中断标志位,

以撤销中断请求。 四、计算题 1.





单片机时钟电路晶振频率为 11.0592MHz , 串口工作在方式 1 , 使用单倍波特率, 即 SMOD1=0 , 定时器 1 的计数初始值为 TL1=T H1=0F3H,则计算串行口的波特率?

五、简答题 1. 概要回答 AT89C51 单片机串行口发送数据的步骤顺序是怎样的? 技能训练 【课时建议】 2 课时

AT89C51 的串行接口实验
技能训 练 7.1:单片机 与 PC 机通信 调试实训。
一、 实训目标: 1. 2. 了解串行通信基本知识; 掌握用单片机串行口与计算机进行通信的方法;

二、 实训器材 PC 机、A T89C51 实验电路板、电源(或 PC 机 USB 供电) 、串口连接线(一公一母) 、PC 端串口调 试软件、示波器、万用表等。 三、 实训原理 根据项目 7.3 单片机与 PC 机通信,我们知道运用 MAX232 等串口电平转换接口芯片,可以实现单 片机的 TTL 电平串行信号与计算机 RS-232 标准电平的串行信号双工传输。 系统电路图为:

图 7-1 单片机与 PC 之间的串行通信 源程序一:单片机接收计算机串口发送的数据(对应图 7-25) ORG START: MOV SCON,#50H ; ①设置串行口工作在模式 1 下,接收使能 00H

MOV MOV MOV SETB WAIT: JMP DISPLAY: MOV MOV JMP END JBC

TMOD,#20H TH1, #0F3H TL1, #0F3H TR1 RI, DISPLAY WAIT A, SBUF P0, A WAIT

; ②使用 Timer 1 工作在模式 2 下 ; ③波特率 2400 ; ④启动 Timer 1 ; ⑤判断是否接收到数据

; ⑥接收到的数据载入 ACC ; 将接收到的数据输出显示 ; 循环

源程序二:单片机通过串口向计算机发送数据: ORG START: MOV MOV MOV MOV SETB SEND: MOV MOV MOV WAIT: JBC JMP END TI, SEND WAIT ; ⑥判断是否发送完毕 SCON, #50H TMOD, #20H TH1, #0F3H TL1, #0F3H TR1 A, P2 P0, A SBUF, A ; ④启动 Timer 1 ; 把 DIP 开关的状态载入 ACC 中 ; 显示 DIP 开关的状态 ; ⑤发送数据 ; ①设置串行口工作在模式 1 下,接收使 ; ②使用 Timer 1 工作在模式 2 下 ; ③波特率 2400 00H

四、 实训方法与步骤 1. 2. 3. 4. 5. 6. 按照硬件设计电路图设计并连接好硬件电路,把单片机电路板与 PC 机串口(DB-9)用连接 线可靠地连接起来; 首先,在 keil μ vision 软件中编辑并编译单片机接收计算机串口发送数据的源程序,并下载到 单片机运行; 在 PC 上,打开“我的电脑”——“属性”——“硬件”——“设备管理器”——“通信端 口(COM1) ” 等,在串口属性设置中设置好该串口的波特率和数据格式; 在 PC 端,打开串口通信软件调试工具(可以在网上搜索“串口调试工具” 、 “串口调试助手” 等) ,设置好串口通信的波特率、串口号以及数据格式等,打开串口; 在 PC 端串口调试软件中发送一个字节的二进制数值,则单片机端电路板上的发光二级管根 据发送的二进制数值进行亮灭显示; 按照同样方法设置单片机通过串口向计算机发送数据程序的编写、下载、串口设置等,然后

在单片机端电路板上按键动作,对应的,计算机端串口调试软件中接收到按键信息,并显示。 五、 思考与总结 1. 2. 3. 4. 本次单片机与 PC 的串口通信,单片机的串口设置成何种工作模式,其波特率为多少,是怎 样得到的? PC 机端接收和发送二进制数值与单片机端电路中的发光二级管有何关系? 单片机端电路板上设计了 MAX232 芯片,它的作用是什么? 总结单片机串行口的 4 种工作方式。

六、 实训报告


相关文章:
模块七 通信系统的设计
模块七 通信系统的设计_信息与通信_工程科技_专业资料。模块七 通信系统的设计 本章主要介绍单片机串行通信系统的概念及应用。串行通信功能模块对于单片机的应 用具有...
数字通信系统的设计
方面介绍 本系统的设计与实现,最后通过 Matlab 程序分模块仿真,完成通信系统的实...[-7*df1*length(mn1):df1:6*df1*length(mn1)-df1]-fs1/2; figure(...
小型通信系统的设计报告
小型通信系统的设计报告_信息与通信_工程科技_专业资料...七、考核方式与成绩评定办法 评定项目 1、设计方案...设计原理 (1)音频收集模块 一个无线话筒,则音频...
通信系统课程设计报告
通信系统课程设计报告_计算机硬件及网络_IT/计算机_专业...利用各基本的业务组成模块、提供广泛的业务和应用、...七、结果电话配置成功界面如下图 7.1 图 7.1 ...
数字通信系统课程设计
数字通信系统课程设计_工学_高等教育_教育专区。数字通信系统课程设计 ,2PSK MATLAB...模块六、用 matlab 来设计理想的巴特沃斯低通滤波器 模块七、根据位同步信号进...
第七章 系统设计
系统划分的方法 (1)按职能划分 (2)按逻辑功能划分 (3)按通信划分 (4)按业务处理顺序划分 (5)按业务处理的时间关系划分 6.模块设计的主要工作步骤 首先要...
基于MATLAB通信系统的设计仿真
根据通信系统的基本原理,确定总的系统功能,并将各部分功能 模块化,找出各部分...我们也在课程设计中,不仅学到了新知 识,也巩固了旧知识! 七、参考文献《基于...
基于单片机的无线通信系统的设计
RC 单片机片上各功能模块的学习和 应用训练,进一步熟悉 51 单片机汇编程序设计。...单片机的多机无线通信系... 7页 1下载券 基于单片机及无线通信技... 31页...
基于RS-485的单片机通信系统设计
的单片机通信系统设计 1.利用 RS485 实现单片机的双向通讯; 2.通过键盘实现从...7 3.5 通信模块......
串行通信系统接口模块的设计与优化
串行通信系统接口模块的设计与优化_英语_初中教育_教育专区。串行通信系统接口模块...低位计数器最坏情 况下进位只需传递 7 位,提升了设计的时序性能。而高位计数...
更多相关标签:
系统功能模块设计 | 系统模块设计 | 系统功能模块详细设计 | 架构设计 系统间通信 | 系统模块化设计 | 数字通信系统原理设计 | 通信系统机房设计 | 系统功能模块结构设计 |