590 likes | 777 Views
第七章 MCS-51 的串行口. 本章主要介绍串行通信概念及 51 系列单片机的串行口问题,将具体介绍以下内容: 计算机串行通信基础 ---- 基本概念、标准接口 。 51 单片机串行口 ---- 串行口结构、串行口的控制寄存器、串行口的工作方式、应用举例。. 本章学习目标. *** 串行通信概述. 7.1 串行口的结构. 7.2 串行口的 4 种工作方式. 7.3 多机通信. 7.4 串行口的编程和应用. *** 串行通信概述. 1. 异步通信与同步通信. 并行通信方式 — 空 间上区分各位数据及
E N D
第七章 MCS-51的串行口 本章主要介绍串行通信概念及51系列单片机的串行口问题,将具体介绍以下内容: 计算机串行通信基础----基本概念、标准接口 。 51单片机串行口----串行口结构、串行口的控制寄存器、串行口的工作方式、应用举例。
本章学习目标 ***串行通信概述 7.1 串行口的结构 7.2 串行口的4种工作方式 7.3 多机通信 7.4 串行口的编程和应用
***串行通信概述 1. 异步通信与同步通信 并行通信方式—空间上区分各位数据及 联络控制信号。占用传 输线多,速度快。 通 信 方 式 串行通信方式—时间上区分各位数据及 联络控制信号。占用传 输线少,速度慢。
*2. 串行通信方式 ----信息传输在一个方向上只占用一跟通信线,它既作为数据线,又作为联络线。 异步通信方式—按字符传输 信息各式上分 同步通信方式—按数据块传输
*3. 异步通信方式 第N个字符 第N-1个字符 停止位 停止位 起始位 奇偶校验 7位数据位 1 0 高位 低位
异步传送方式中字符按帧格式传送。 异步通信方式利用每一帧的起、止信号建立发送和接收之间的同步。 特点: a、每一帧内部各位均采用固定的时间间隔 b、帧与帧之间的间隔是随机的 c、接收机依靠每一帧的起始位和停止位识别字符传送 是否结束,或是一个新字符 d、异步传送时不传送同步时钟脉冲
在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为1~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续按顺序接收数据。在同步通信中,数据或字符开始处是用一同步字符来指示(一般约定为1~2个字符),以实现发送端和接收端同步,一旦检测到约定同步字符,下面就连续按顺序接收数据。 *4.同步通信SYNC(Synchronous Data Communication)
同步传送方式是一种连续传送方式。 特点: a、在被传送的数据块前加上同步字符SYN; b、数据之间没有间隙; c、传输速度高、容量大; d、发送方在发送数据的同时,要将时钟信号同时传 送。
*5. 串行通信的波特率 波特率(band rate)是异步通信中每秒钟传送的二进制数码的位数(比特数),单位是位/秒。 作用:1、反映串行通信的速率; 2、反映对传输通道的要求:波特率越高,要求的传输 通道的频带宽度就越宽异步通信:波特率为每秒传 送的字符数和每个字符位数的乘积。 例如:数据传送的速率为120个字符每秒,每个字符由1个起始位、8个数据位和1个停止位组成,则其传送波特率为: 10b×120/s=1200b/s=1200波特。 注意:时钟频率和波特率不是同一个概念,时钟频率比波特率高得多。
*6. 串行通信的方式 按照数据传送方向,串行通信可分为半双工(half duplex)制式和全双工(full duplex)制式。 1.半双工制式 在半双工制式下,甲机和乙机之间只有一个通信回路,接收和发送不能同时进行,只能分时发送和接收。 2.全双工制式 在全双工制式下,甲、乙两机之间数据的发送和接收可以同时进行,称为全双工传送。不管哪种形式的串行通信,在两机之间均应有共地线。
数据流 接收器 发送器 数据流 数据流 *7. 数据传送方向 单工方式 全双工方式 半双工方式
7.1 串行口的结构 • MCS-51 单片机串行接口的硬件 • P3.0 位的第二功能 —— 收端 RXD • P3.1 位的第二功能 —— 发端 TXD • MCS-51 单片机串行接口的控制 • 寄存器 SCON、PCON、SBUF • 寄存器 IE、IP • MCS-51 单片机串行接口工作方式 • 方式 0 • 方式 2 • 方式 1 • 方式 3
有两个数据缓冲寄存器SBUF,一个输入移位寄存器,一个串行控制寄存器SCON和一个特殊功能寄存器PCON等组成。有两个数据缓冲寄存器SBUF,一个输入移位寄存器,一个串行控制寄存器SCON和一个特殊功能寄存器PCON等组成。 8 位SBUF是全双工串行接口寄存器, 它是特殊功能寄存器,地址为 99H,不可位寻址;串行输出时为发送数据缓冲器,发送寄存器只写不读,数据从 发送端TXD(P3.1)输出; 串行输入时为接收数 据缓冲器,接收寄存 器只读不写,数据从 接收端 RXD(P3.0) 输入;由指令确定是对发 送寄存器或接收寄存器作用。
7.1.1 串行口控制寄存器SCON • SM0、SM1 —— 串行接口工作方式定义位 • SM0、SM1 = 00 —— 方式 0,8位同步移位寄存器 • SM0、SM1 = 01 —— 方式 1,10 位异步接收发送 • SM0、SM1 = 10 —— 方式 2,11 位异步接收发送 • SM0、SM1 = 11 —— 方式 3,11 位异步接收发送 注意: 方式 0 的特点,方式 2、方式 3 的差异
串行口控制寄存器SCON • SM2 —— 多机通信控制位(方式2和3) • SM2 = 0,无多机通信 • SM2 = 1,允许多机通信 • REN —— 串行口接收数据控制位 • REN = 1,允许串行口接收数据 • REN = 0,禁止串行口接收数据 由软件置位或清除
串行口控制寄存器SCON • TB8 —— 发送串行输出数据的第 9 位 • 双机通信时它可作奇偶校验位;在多机通信中可作为 • 区别地址帧或数据帧的标识位。 • RB8 —— 接收串行输入数据的第 9 位 • 在方式2和方式3中是接收的第9位数据。
串行口控制寄存器SCON • TI —— 串行口中发送完一组数据后的中断标志 • 若串口发送完一组数据,则由硬件自动置 TI = 1 • 若串口还要发数据,则应手动编程使 TI = 0 • RI —— 串行口中接收完一组数据后的中断标志 • 若串口接收完一组数据,则由硬件自动置 RI = 1 • 若串口还要收数据,则应手动编程使 RI = 0
7.1.2 特殊功能寄存器PCON • 串行数据传送速率控制寄存器 —— PCON 地址:87H TDL:等待方式位 • SMOD = 0,定义波特率不变 PD:掉电方式 GF1、 GF2通用标志位 • SMOD = 1,定义波特率加倍 注:PCON 寄存器的地址为87H, 仅 b7 位有用,不可位寻址。 ANL PCON,#7FH:对SMOD位清零 ORL PCON,#80H:对SMOD位置位
方式 波特率 SM0 SM1 功 能 fosc/12 0 0 同步移位寄存器 0 可变 0 1 1 10位异步收发 fosc/64或fosc/32 1 0 2 11位异步收发 可变 1 1 3 11位异步收发 7.2 串行口的4种工作方式 SM0 SM1 串行口工作方式选择位
7.2.1 方式 0 —— 移位寄存器输入/输出方式 串行口为同步移位寄存器方式 • 非串行通信用方式-扩展并行I/O • 用并入串出移位寄存器扩展并行输入口 • 用串入并出移位寄存器扩展并行输出口 • RXD、TXD 线的作用 • RXD — 串 → 并、并 → 串 数据传送线 • TXD — 同步时钟线,同步时钟为 fosc/12(固定波特率) 注:为应用串行接口扩展并行接口的方式。
7.2.2 方式 1 —— 10 位异步接收/发送(波特率可变) 串行口为8位异步通信接口 • 方式 1 的数位 • 1 位起始位 — 值 0 • 8 位数据位 — 为有用信息(低位在前,可含 1 位校验位) • 1 位停止位 — 值 1 • 异步传送时的速率设置 • 速率设置的方法 —— 设置定时器 T1 的初值 • 常用波特率: • 用T1作为波特率发生器,B=(2SMOD/32)×T1溢出率。
方式 1(续) • 异步发送时的工作过程 • 发送条件 —— 清 SCON 中发送中断标志 TI = 0 • 发送指令 —— MOV SBUF,A 注: 需发送的 8 位字节数据送串行数据缓冲器 SBUF 后将启动异步发送开始。 • 起始位 0、停止位 1 在执行发送指令时自动加入 • 发送传输线 —— TXD、GND • 发送 10 位数据结束 —— 发送中断标志 TI = 1 注: 若需继续发送,置TI = 0,送数据到 SBUF
方式 1(续) • 异步接收时的工作过程 • 接收条件 —— 清 SCON 中接收中断标志 RI = 0 • 置 SCON 中接收控制标志 REN = 1 • 接收传输线 —— RXD、GND • 接收同步位 —— 接收传输线 RXD 有从 1 到 0 的信号 • 接收数据 —— 9 位数据送数据接收器 8 位字节数据送串行数据缓冲器 SBUF 1 位停止位送入 SCON 中的 RB8 = 1 • 接收 10 位数据结束 —— 接收中断标志 RI = 1 注: 若需继续接收,置RI = 0
7.2.3 方式 2 —— 11 位异步接收/发送(波特率固定) 串行口为9位异步通信接口 • 方式 2 的数位 • 1 位起始位 —— 值 0 • 8 位数据位 —— 为 1 字节有用信息 • 1 位校验位 —— 对有用信息的奇偶校验 • 1 位停止位 —— 值 1 • 异步传送时的速率设置 • 若 PCON 中 SMOD = 0,速率 = fosc/32 • 若 PCON 中 SMOD = 1,速率 = fosc/64
方式 2(续) • 异步发送时的工作过程 • 基本过程同方式 1 • 1 位校验位在发送前应先置入 SCON 中的 TB8 • 异步接收时的工作过程 • 基本过程同方式 1 • 1 位校验位(第 9 位)送 SCON 中的 RB8 注: RB8 中未存放 1 位停止位
7.2.4 方式 3 —— 11 位异步接收/发送(波特率可变) • 方式 3 —— 11 位异步接收/发送(波特率可变) • 基本定义同方式 2 • 速率设置同方式 1 注: 方式 0 —— 固定波特率为 fosc/12 方式 2 —— 固定波特率为 fosc/32或fosc/64 上述方式与单片机主频有关 方式 1 —— 可变波特率 方式 3 —— 可变波特率 上述方式与定时器 T1 的初值有关
7.3 多机通信 • 多个MCS-51单片机可以利用串行口进行多机通信。在多机通信中要保证主机与所选择的从机实现可靠地通信,必须保证串行口具有识别功能。 • 控制寄存器SCON的SM2位就是为满足这一条而设置的多机通信控制位。 • 原理:在串行口以方式2(或方式3)接收时,若SM2=1,表示置多机通信功能位,此时可能出现两种情况: • 接收到的第9位数据为1时,数据才装入SBUF,并置中断标志 RI=1,向CPU发出中断请求。 • 接收到的第9位数据为0时,则不产生中断标志,信息抛弃 若SM2=0,则接收到的第9位数据不论为0还是1,都产生RI=1中断标志,接收到的数据装入SBUF。
多机通信系统示意图 多机通信的实现,主要靠主、从机之间正确地设置与判断多机通信控制位SM2和发送或接收的第9数据位(D8)。下面简述如何实现多机通信。
(1)主、从机均初始化为方式2或方式3,置SM2=1,允许(1)主、从机均初始化为方式2或方式3,置SM2=1,允许 中断。 (2)主机置TB8=1,发送要寻址的从机地址。 (3)所有从机均接收主机发送的地址,并进行地址比较。 (4)被寻址的从机确认地址后,置本机。SM2=0,向主机 返回地址,供主机核对。 (5)核对无误后,主机向被寻址的从机发送命令,通知从机 接收或发送数据。 (6)通信只能在主、从机之间进行,两个从机之间的通信需 通过主机作中介。 (7)本次通信结束后,主、从机重置SM2=1,主机可再对 其他从机寻址。
主机程序: ORG 0030H MAIN:MOV SCON,#98H M1: MOV SBUF,#02H L1: JNB TI,$ CLR TI JNB RI,$ MOV A,SUBF XRL A,#02H JZ RHT AJMP M1 例:主机向02号从机发送50H~5FH中的数据;02号从机将接收到的数据放到内RAM30H ~3FH单元中。 • RHT :CLR TB8 • MOV R0,#50H • M1: MOV R7,#10H • L3: MOV A,@R0 • MOV SBUF,A • JNB TI,$ • CLR TI • INC R0 • DJNZ R7,L3 • AJMP MAIN • END
从机程序: ORG 0030H MAIN: MOV R0,#30H MOV R6,#10H SI: MOV SCON,#0B0H SR1: JNB RI,$ CLR RI SR2: MOV A,SUBF XRL A,#02H JNZ SR1 CLR SM2 MOV SBUF,#02H JNB TI,$ CLR TI • SR3 :JNB RI,$ • CLR RI • JNB TB8,RHT • SETB SM2 • SJMP SR1 • RHT: MOV A,SBUF • MOV @R0 , A • INC R0 • DJNZ R6,SR3 • AJMP SI • END
7.3 波特率的制定方法 波特率的定义--串行口每秒钟发送(或接收)的位数。 (1)方式0的波特率 在方式0下,串行口通信的波特率是固定的,其值为fosc/12(fosc为主机频率)。 (2)方式2的波特率 在方式2下,通信波特率为fosc/32或fosc/64,根据特殊功能寄存器PCON中SMOD位的状态来决定串行口在那个波特率下工作。选择公式为:
(3)方式1或方式3的波特率 在这两种方式下,串行口波特率是由定时器的溢出率决定的,因而波特率是可变的。波特率的公式为: 式中:K为定时器T1的位数。
7.3 串行口的编程和应用 • 方式 0 用于扩展并行 I/O口 • 方式 1 和方式 3 仅传送数位不同 • 方式 2 为固定波特率 • 方式 1 和方式 3 均需设置可变波特率
方式 0 用于扩展并行 I/O口 • 串 → 并方式,扩展并行输出口 • 电路图 8031 串入并出移位寄存器 RXD TXD DATA CLK • 功能线 • RXD —— 接移位寄存器的数据输入端 • TXD —— 接移位寄存器的同步时钟端 注: 注意信号方向
方式 0 用于扩展并行 I/O口 • 并 →串方式,扩展输入口 • 电路图 8031 并入串出移位寄存器 RXD TXD DATA CLK • 功能线 • RXD —— 接移位寄存器的数据输出端 • TXD —— 接移位寄存器的同步时钟端 注: 注意信号方向
方式 0 用于扩展并行 I/O口 例10.1:用 8031 的串口外接 1 个串入并出移位寄存器 芯片CD4094 扩展为 8 位并行输出口,并口接 8 个 LED,并循环轮流显示。 • 电路图 P1.0 8031 DATA CLK CD4094 RXD TXD TBS
方式 0 用于扩展并行 I/O口 • 编程 ORG 0000H LJMP MAIN ORG 0023H LJMP SBR MAIN: MOV SCON,#00XXXX0XB ; 方式 0,TI = 0 SETB EA SETB ES MOV A,#10000000B ; 初值,左边 LED 亮 CLR P1.0 ; CD4094 输出并口关闭 MOV SBUF,A ; 数据传出,产生中断 LOOP: SJMP $
方式 0 用于扩展并行 I/O口 • 编程(续) SBR: SETB P1.0 ; CD4094 输出并口打开,LED 亮 ACALL DELAY CLR TI ; 手动清中断标志 RR A ; 循环位移 ; 80H、40H、20H、10H、08H … CLR P1.0 ; CD4094 输出并口关闭 MOV SBUF,A ; 数据传出,产生中断 RETI END 注: 延时子程序 DELAY 未给出
方式 0 用于扩展并行 I/O口 例10.2:用 8031 的串口外接 1 个并入串出移位寄存器 芯片 CD4014 扩展为 8 位并行输入口,并口 接 8 个开关量输入,开关 K 闭合时有效。 • 电路图 8031 K CD4014 RXD DATA TXD CLK P//S P1.1 P1.0
方式 0 用于扩展并行 I/O口 • 编程 START: JB P1.0,START ; 若 K 未合上则循环查询 SETB P1.1 ; CD4014 并行数据输入有效 MOV SCON,#00X1XXX0B ; 方式 0,REN = 1 允许接收,RI = 0 CLR P1.1 ; CD4014 串行数据输出有效 LOOP: JNB RI,LOOP ; 若 RI = 0 数据未收完 ; 若 RI = 1 数据已收完 CLR RI ; 手动清 RI,准备下次传送数据 MOV A,SBUF
方式 1 用于串行通信 例10.3:8031串行口双工方式收发 ASCII 字符,最高 1 位用来作奇偶校验位,采用奇校验方式, 波特率为 1200 。 • 工作方式 方式 1, 7 位 ASCII 码,1 位校验码 • 数据区 发送数据区首址 20H,接收数据区首址 40H • 主频选用 fosc = 6MHz • T1 设置 方式 2,初值为 F4H(查表 10.2)
方式 1 用于串行通信 • 主程序(2 个单片机均有) ORG 0000H LJMP MAIN ORG 0023H LJMP SBR1 MOV TMOD,#20H ; 定时器 T1 设置为方式 2 MOV TL1,#0F4H MOV TH1,#0F4H ; 装定时器 T1 的初值 SETB TR1 ; 启动定时器 T1
方式 1 用于串行通信 • 主程序(2 个单片机均有) MOV SCON,#50H ; 串口工作方式 1,REN = 1 MOV R0,#20H ; 发数据区首址 MOV R1,#40H ; 收数据区首址 SETB ET1 ; 开 T1 中断 SETB ES ; 开串口中断 SETB EA ; 开总中断 ACALL SOUT ; 调用发送子程序 SJMP $
方式 1 用于串行通信 • 串行口中断服务程序 SBR1: JNB RI,SEND ACALL SIN ; 若 RI = 1,调用接收子程序 SJMP NEXT SEND: ACALL SOUT ; 若 RI = 0,调用发送子程序 NEXT: RETI
方式 1 用于串行通信 • 发送子程序 SOUT: MOV A,@R0 MOV C,P CPL C MOV ACC.7,C INC R0 MOV SBUF,A CLR,TI RET
方式 1 用于串行通信 • 接收子程序 SIN: MOV A,SBUF MOV C,P CPL C ANL A,#7FH MOV @R1,A INC R1 CLR RI RET
7.3.1 串行口扩展显示器 【例7-1】用8位串入并出移位寄存器74HC164扩展显示器。 7.3 单片机串行口的应用