470 likes | 716 Views
第 6 章 串行通信技术. 6.1 串行接口的工作原理和控制 6.2 MCS-51 串行通信的工作方式 6.3 串行口的应用. 1. 教学内容 : 1 ) 串行通信技术的基本概念、结构、工作方式 和工作原理 2 ) MCS-51 单片机的串行口的特点和用法 2. 教学重难点 串行通信、并行通信、同步通信、异步通信 几个串行口专用寄存器 串行通信的几种工作方式 3. 课时 6 4. 作业 习题 2 , 4 , 5. 6.1 串行 接口的工作原理和控制. 并行 和 串行
E N D
第6章 串行通信技术 6.1 串行接口的工作原理和控制 6.2 MCS-51串行通信的工作方式6.3 串行口的应用
1.教学内容: 1) 串行通信技术的基本概念、结构、工作方式 和工作原理 2)MCS-51单片机的串行口的特点和用法 2.教学重难点 串行通信、并行通信、同步通信、异步通信 几个串行口专用寄存器 串行通信的几种工作方式 3.课时 6 4.作业 习题2,4,5
6.1 串行接口的工作原理和控制 并行 和 串行 计算机数据传送有两种方式:并行通信和串行通信 并行通信是指数据各位同时传送。特点是数据传送速率高、效率高,但数据有多少位就需要多少根数据线,传送成本高。在集成电路芯片内部、同一插件板上各部件间、同一机箱内各插件板之间的数据传送多采用并行通信,通信距离一般小于30米 。
串行通信是指数据按位顺序传送。 特点是:线路简单,最多只需要一对传输线即可,通信线既能传送数据信息,又能传送控制信息;对信息的传送格式固定为异步和同步两种;对信息的逻辑定义与TTL不相容,需进行电平转换
6.1.1 串行通信的基本方法 1. 同步通信(Synchronous Communication) 同步方式是将一大批数据分成几个数据块, 数据块之间用同步字符予以隔开,依靠同步字符保持通信同步,而传输的各位二进制码之间都没有间隔。 其基本特征是发送与接收时钟始终保持严格同步。 数据流 同步字符1 同步字符2 数据 数据 数据 同步通信数据传送格式 同步是指发送、接收双方的数据帧与帧之间严格同步
2. 异步通信(Asynchronous Communication) 异步方式是以字符帧为单位传送数据, 它利用每一帧的起、止信号来建立发送与接收之间的同步,每帧内部各位均采用固定的时间间隔, 但帧与帧之间的时间间隔是随机的。其基本特征是每个字符必须用起始位和停止位作为字符开始和结束的标志, 它是以字符为单位一个个地发送和接收的。 起始位 一个字符帧 停止位 起始位 奇偶校验位 空闲位 8位数据 D0 1 1 D1 D2 D3 D4 D5 D6 0 D0 D7 0/1 1 异步通信字符帧格式 异步通信串行帧的位严格同步,位周期相同
6.1.2 串行通信中的几个概念 1. 单工、半双工 和 全双工 单工:信息只能沿着一个方向传播 半双工:信息可以沿一条线双向传播,但不能同时实 现双向传播。 全双工:使用两条独立的数据通道,收发可同时进行,全双工方式要占用单片机的两个I/O脚,传输线至少要3根
2. 串行通信的波特率 波特率是衡量串行通信中数据传送速率的单位,表示每秒钟传送多少位二进制数,用bps表示 1波特=1位/秒( bps) 一位的传送时间为波特率的倒数 串行通信中,数据位的发送和接收分别由发送时钟和接收时钟脉冲进行定时控制,时钟频率高,通信速度快,一般波特率取时钟频率的1/16或1/64
4.2 MCS-51串行通信接口 • MCS-51单片机内部有一个功能很强的可编程全双工串行异步通信接口,具有通用异步接收和发送器(UART)的作用,内部有2个独立的接收/发送移位缓冲器。帧格式有8位,10位,和11位,波特率可变。
6.1.3串行口的控制 • MCS-51单片机的串行口通过引脚串行数据发送端(TXD)和引脚串行数据接收端(RXD)与外界进行通信。 • 内部由2个物理上独立的数据缓冲寄存器(即接收缓冲器和发送缓冲器SBUF)、发送控制器、接收控制器、输入移位寄存器、输出门电路、波特率发生器和串行控制寄存器组成。
TXD(P3.1) 发送SBUF 输出门 发送控制器 串行 控制 寄存器 波特 信号发生器 串行中断 + 接收控制器 RXD(P3.0) 接收SBUF 输入移位寄存器 图6.1 串行通信口的结构
注意: • 接收缓冲器和发送缓冲器共用一个缓冲器名称SBUF,共同占用一个地址99H • 发送缓冲器只能写入,不能读出 • 接收缓冲器只能读出,不能写入 • 所以:CPU写SBUF,即修改发送缓冲器 CPU读SBUF,即读接收缓冲器
1. 数据缓冲器SBUF 串行口缓冲器SBUF是可直接寻址的特殊功能寄存器, 其内部RAM字节地址是99H。在物理上, 它对应着两个独立的寄存器, 一个发送寄存器, 一个接收寄存器。发送时, 就是CPU写 SBUF的时候(51 系列单片机没有专门的启动发送状态的指令); 接收时, 就是读取SBUF的过程, 接收寄存器是双缓冲的, 以避免在接收下一帧数据之前, CPU未能及时响应接收器的中断, 没有把上一帧数据读走, 而产生两帧数据重叠的问题。
2. 串行口控制寄存器SCON SCON用于控制和监视串行口的工作状态, 其各位定义如图 所示。相应的各位功能介绍如下: SM0、SM1: 用于定义串行口的操作模式, 两个选择位对应 4 种模式,见表6.1。其中fosc是振荡器频率, UART为通用异步接收和发送器的英文缩写。 SM1 SM2 TB8 RB8 TI RI SM0 REN
SM2: 多机通信时的接收允许标志位。 1) 在模式 2 和 3 中, 若SM2 = 1, 且接收到的第 9 位数据(RB8)是 0, 则接收中断标志(RI)不会被激活;若SM2=0,无论接收到的第 9 位数据(RB8)是 0 还是1,都产生中断标志,接收到的数据装入SBUF。 2)在模式1中, 若SM2=1 且没有接收到有效的停止位, 则 RI不会被激活。 3)在模式 0 中, SM2 必须是 0。
REN:允许串行口接收控制位(软件置位或清除)REN:允许串行口接收控制位(软件置位或清除) • 为1时,串行口进入接收状态,为0时禁止接收 • TB8: 方式2和3中,是发送的第9位数据可 作为奇偶校验位 • 多机通信时,为1表示发送的本帧数码为 地址码,为0表示发送的本帧数码为数据码 • RB8:方式2和3中,是接收的第9位数据
TI: 发送中断标志位(判断一帧数据是否发送完成),为1时申请中断,响应后CPU发送一帧数据,必须由软件清零 • 方式0时,发送完第8位数据时由硬件自动置位,其它方式中,发送“停止位”之后由硬件自动置位 • RI:接收中断标志位,(判断一帧数据是否接收完成),为1时申请中断,要求CPU取走所收到的数据 • 注意:TI和RI共用一个中断源和一个中断入口地址
3. 电源控制寄存器PCON 特殊功能寄存器PCON中, 只有一位(最高位)SMOD与串行口的工作有关, 该位是串行口波特率系数的控制位: SMOD=1 时, 波特率加倍, 否则不加倍。 PCON的地址为 87H, 不可位寻址, 因此初始化时需要字节传送。
6.2 串行通信的 4 种工作模式 • 模式 0 (波特率固定为fosc/12)同步移位寄存器输入输出模式,可外接移位寄存器,以扩展I/O口。 • 输出状态: 图 6.2 同步移位寄存器输出
输入状态: 当满足RI=0且REN=0时,就启动一次接收过程。 图6.3 同步移位寄存器输入
2. 模式 1 串行口工作于模式 1 时, 为波特率可变的 8 位异步通信接口。数据位由 P3.0 (RXD)端接收, 由P3.1(TXD)端发送。 传送一帧信息为 10 位: 一位起始位(0), 8 位数据位(低位在前)和一位停止位(1)。波特率是可变的, 它取决于定时器 T1 的溢出速率及SMOD的状态。( T1溢出率/N) (1) 模式 1 发送过程。 用软件清除 TI后, CPU执行任何一条以 SBUF为目标寄存器的指令, 就启动发送过程。数据由 TXD引脚输出, 此时的发送移位脉冲是由定时器 /计数器 T1 送来的溢出信号经过 16 或 32 分频而取得的。一帧信号发送完时, 将置位发送中断标志TI=1, 向CPU申请中断, 完成一次发送过程。
(2) 模式 1 接收过程。 • 用软件清除 RI后, 当允许接收位 REN被置位 1 时, 接收器以选定波特率的 16 倍的速率采样 RXD引脚上的电平, 即在一个数据位期间有 16 个检测脉冲, 并在第 7、 8、9 个脉冲期间采样接收信号, 然后用三中取二的原则确定检测值, 以抑制干扰。 并且采样是在每个数据位的中间, 避免了信号边沿的波形失真造成的采样错误。当检测到有从“1”到“0”的负跳变时, 则启动接收过程, 在接收移位脉冲的控制下, 接收完一帧信息。 当最后一次移位脉冲产生时能满足下列两个条件: • ① RI=0; • ② 接收到的停止位为 1 或 SM2=0。
则停止位送入RB8,8位数据进入SBUF,并置RI=1,完成一次接收过程。否则,所接收到的一帧信息将丢失,接收器复位,并从新开始检测负跳变,以便接收下一帧信息。则停止位送入RB8,8位数据进入SBUF,并置RI=1,完成一次接收过程。否则,所接收到的一帧信息将丢失,接收器复位,并从新开始检测负跳变,以便接收下一帧信息。 注意:接收中断标志RI应由软件清除。
3. 模式 2 和模式 3。 串行口工作于模式 2 和模式 3 时, 被定义为 9 位异步通信接口。 它们的每帧数据结构是 11 位的: 最低位是起始位(0), 其后是 8 位数据位(低位在先), 第 10 位是用户定义位(SCON中的 TB8或 RB8), 最后一位是停止位(1)。模式 2 和模式3 工作原理相似, 唯一的差别是模式 2 的波特率是固定的, 即为 fosc / 32或 fosc / 64; 而模式 3的波特率是可变的, 与定时器 T1的溢出率有关。
(1) 模式 2和模式 3的发送过程。 • 发送过程是由执行任何一条 SBUF为目的寄存器的指令来启动的。 由“写入SBUF”信号把 8位数据装入 SBUF, 同时还把 TB8 装入发送移位寄存器的第 9 位, 并通知发送控制器要求进行一次发送。 • 第 9 位数据(TB8)由软件置位或清零, 可以作为数据的奇偶校验位, 也可以作为多机通信中的地址、数据标志位。如把 TB8 作为奇偶校验位, 可以在发送程序中, 在数据写入 SBUF之前, 先将数据位写入 TB8。
发送开始, 把一个起始位(0)送到 TXD端。 移位后, 数据由移位寄存器送到TXD端。再过一位, 出现第一个移位脉冲。 第一次移位时, 把一个停止位“1”由控制器的停止位发生端送入移位寄存器的第 9 位。 此后, 每次移位时, 数据位由右端移出,而左边不断补入0,因此, 当 TB8 的内容送到移位寄存器的输出位置时, 其左面一位是停止位“1”, 而再往左的所有位全为“0”。 这种状态由零检测器检测到后, 就通知发送控制器作最后一次移位, 然后置 TI=1, 请求申请中断。
(2) 模式2和模式3接收过程。 与模式 1类似, 模式 2和模式 3接收过程始于在 RXD端检测到负跳变时如果所接收到的起始位无效(为1),则复位接收电路, 等待另一个负跳变的到来。 若起始位有效(为 0)则起始位移入移位寄存器, 并开始接收这一帧的其余位。 当起始位 0 移到最左面时, 通知接收控制器进行最后一次移位。 把 8 位数据装入接收缓冲器 SBUF, 第 9 位数据装入SCON中的 RB8, 并置中断标志RI=1。
装入 SBUF和 RB8以及置位 RI的信号只有在产生最后一个移位脉冲且同满足下列两个条件, 才会产生: • ① RI=0; • ② SM2 =0 或接收到的第 9 位数据为“1”。 • 上述两个条件中任一个不满足, 所接收的数据帧就会丢失, 不再恢复。 两者都满足时, 第 9 位数据装入 TB8, 前 8 位数据装入 SBUF。 • 请注意: 与模式 1 不同, 模式 2 和 3 中装入 RB8 的是第 9 位数据, 而不是停止位。所接收的停止位的值与SBUF、 RB8 和 RI都没有关系, 利用这一特点可用于多机通信中。
4. 波特率的设计 串行口每秒钟发送或接收的数据位数称为波特率。 假设发送一位数据所需时间为T, 则波特率为 1/T。 (1) 模式 0 的波特率等于单片机晶振频率的 1/12, 即每个机器周期接收或发送一位数据。 (2) 模式 2 的波特率与电源控制器PCON的最高位SMOD的写入值有关: 即SMOD=0, 波特率为(1/64) fOSC; SMOD=1, 波特率为(1/32)fOSC。
(3) 模式 1 和模式 3 的波特率除了与SMOD位有关之外, 还与定时器 T1 的溢出率有关。 定时器 T1 作为波特率发生器, 常选用定时方式 2( 8 位重装载初值方式), 并且禁止 T1 中断。此时 TH1 从初值计数到产生溢出, 它每秒钟溢出的次数称为溢出率。
实际使用时一般是固定一个通信波特率再去计算T1的预置初值实际使用时一般是固定一个通信波特率再去计算T1的预置初值
例:假设某MCS - 51 单片机系统, 串行口工作于模式 3, 要求传送波特率为1 200 Hz, 作为波特率发生器的定时器T1工作在方式 2 时, 请求出计数初值为多少? 设单片机的振荡频率为6 MHz 因为串行口工作于模式 3 时的波特率为 当SMOD=0 时, 初值TH1=256-6×106/(1 200×12×32/1) =243=0F3H 当SMOD=1 时, 初值TH1=256-6×106/(1200×12×32/2) =230=0E6H
SMOD的设置会影响数据传输的准确性,为保证串行通信的可靠性,需要选择波特率相对误差最小的。SMOD的设置会影响数据传输的准确性,为保证串行通信的可靠性,需要选择波特率相对误差最小的。
6.3 串行口的应用 • 一、 串行口的编程 串行口需初始化后, 才能完成数据的输入、输出。其初始化过程如下: (1) 按选定串行口的操作模式设定SCON的SM0、SM1两位二进制编码。 (2) 对于操作模式 2 或 3, 应根据需要在 TB8 中写入待发送的第 9 位数据。 (3) 若选定的操作模式不是模式 0, 还需设定接收/发送的波特率。 设定SMOD的状态, 以控制波特率是否加倍。 若选定操作模式1或3, 则应对定时器 T1进行初始化 以设定其溢出率。
二、 串行口的应用 例1 用 8051 串行口外接 74LS165(或CD4014) 移位寄存器扩展8位输入口, 输入数据由 8 个开关提供, 电路示意如图6.4 所示。输入 8 位开关量, 处理不同的程序。 编程把8位开关量读入累加器 图 6.4
程序如下: START: SETB P1.1 ; 165并行输入数据 CLR P1.1 ; 开始串行移位 MOV SCON, #10H ; 串行口模式 0并启动接收 JNB RI, $ ; 查询RI CLR RI ; 查询结束, 清RI MOV A, SBUF ; 输入数据 RET
二、双机通信 图6.5 双机通信接口电路 若两台单片机应用系统在进行通信时距离较近(不超过15米),接口只需3根导线,将串口直接相连即可
甲机发送(采用查询方式)(将RAM中30H-3FH中的16个数据发送出去)甲机发送(采用查询方式)(将RAM中30H-3FH中的16个数据发送出去) ORG 0050H MOV TMOD ,#20H MOV TL1 ,#0E8H MOV TH1,#0E8H MOV PCON, #00H; SMOD=0, 波特率不加倍 MOV SCON, #80H ; 设置工作方式2 SETB TR1 MOV R0, #30H ; 数据区地址指针 MOV R3, #10H ; 数据长度
XHA: MOV A, @R0 ; 取发送数据 MOV C, P ; 奇偶位送TB8 MOV TB8, C MOV SBUF, A ; 送串口并开始发送数据 LOOP: JBC TI, ZZ1 ; 检测是否发送结束并对TI清0 AJMP LOOP ZZ1: INC R0; 修改发送数据地址指针,发送下一字节 DJNZ R3, XHA END
乙机接收(中断方式): ORG 0050H MOV TMOD ,#20H MOV TL1 ,#0E8H MOV TH1,#0E8H SETB EA CLR ET1 MOV PCON, #00H; 置SMOD=0 SETB TR1 MOV SCON, #90H; 模式2, 并允许接收 MOV RO, #30H ; 置数据区地址指针 MOV R1, #10H ; 等待接收数据长度 SETB ES
RWAIT : SJMP RWAIT ORG 0023H MOV A, SBUF ; 接收一帧数据 CLR RI ;清除接收中断 MOV @R0, A ; 存放一帧数据 DJNZ R1 ,RNEXT CLR ES CLR TR1 RETI RNEXT: INC R0 RETI
三、 多机通信 图6.6 多处理机通信系统
MCS-51采用主从式多机通信方式可构成各种分布式测控系统MCS-51采用主从式多机通信方式可构成各种分布式测控系统 • 多机通信中,要保证与所选择的从机实现可靠的通信,必须保证通信接口具有识别功能 MCS-51串行控制寄存器中的SM2就是多机通信的控制位(方式2和3) • 当采用不同的通信标准时,还要进行相应的电平转换,以增大通信距离,对传输信号进行光电隔离
多机通信的控制过程: • 1) 使所有从机的SM2置1,处于只接收地址帧的状态 • 2)主机发送一帧地址信息(第9位TB8为1) • 3)每个从机接收到地址帧后,将其与各自的本机地址比较,符合的从机将SM2清零,使从机处于接收数据状态,并把本机地址发回作为应答 • 4)主机收到应答地址确认是否正确 • 5)从机接收主机发来的数据或信息,对于地址不符的从机保持SM2为1,对主机发来的数据不予理睬 • 注意: 从机在接收时,若出现 SM2为1时,有2种情况 若SM2为0,都产生中断标志,将数据装入SBUF
发送程序:(主机呼叫从机,R2存从机地址,数据在30H-5FH) ORG 0050H MAIN: MOV SCON, #98H;工作方式2,REN=1,TB8=1 MOV A, R2 ;R2存放从机地址 MOV SBUF, A ;发送从机地址 LOOP1: JBC TI, RESP AJMP LOOP1 RESP: JBC RI, RE1 ; 接收从机应答信号 AJMP RESP RE1: MOV A, SBUF ; 取从机应答信号 XRL A, R2 ;判断是否是呼叫的从机 JNZ MAIN ;若不是,转重发 CLR TB8 ; 若是,清除地址标志准备发送数据 MOV R0, #30H MOV R6, #30H
LOP2: MOV A, @R0 ;取数据 MOV SBUF, A ;发送数据 LOP3: JBC TI, NEXT ;判断一个字节是否发送完 AJMP LOP3 NEXT: INC R0 ;取下一个单元 DJNZ R6, LOP2 LJMP MAIN END