找回密码
 注册
关于网站域名变更的通知
查看: 178|回复: 2
打印 上一主题 下一主题

单片机21串行口介绍

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-7 09:42 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
串行口是单片机与外界进行信息交换的工具。
# K% u/ c, t8 ]: ]6 f0 Z3 @* O* [, }' q# }* w# |; ~
8051单片机的通信方式有两种:
5 d! u" V: T$ D& c+ x6 K1 }
" Z9 s6 U, W8 e' W/ G并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:" [* O, W4 e5 T0 k7 \+ D8 g
) p) y5 l1 P% ~' [
5 G. L2 M  V' a) ]5 y; |0 ~+ Y
. |& c# L! Y- k0 S+ b- a5 g1 s
串行通信的方式:
2 ?! `5 H9 {1 T
. ^: a/ s: @* d异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
6 {# f% n3 y3 C* o# M" @6 X9 K
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
$ q( q- Y: g" Q7 P/ H! r7 ?
- a) j, S. O; P$ m在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。( [1 u* ?1 a7 {9 F. P- B

* [3 s. b) \5 s5 g# \波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。
/ Q3 @) A, S; I6 C  w: H- I5 [4 B# e% z! z/ D2 h2 {) w
同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
7 c1 g% c% W0 y% ^0 P( L, B$ ]9 q- b; ]1 J
通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
+ ?7 g1 k# _/ u1 ?* \
0 N- j: V* m7 `) _8 P: {1 j. M2.8051单片机的串行接口结构
5 `( B8 U7 i0 q! ]* {" ]  p( f! g& B/ w! f  b: Y( J$ V
8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
, ?& o% F: p* `( L; z! A: D3 v
+ [# s5 g  U- o9 I* B& j3 s) \" x8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
" w: C3 ~$ }  f* L$ Y3 `, D2 [
串行口的控制与状态寄存器; [7 r- E8 q' g8 {" b0 M3 J! H

; B* k& d5 [, u* N4 l串行口控制寄存器SCON3 r' l0 I9 j: x3 ]0 O6 E

/ ^. |1 e3 F5 n! h, Z4 {它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:9 ^" \$ u) d7 \3 d6 Y
1 `4 O: T9 q) i0 Z: h+ ?: A- Z
" B$ O3 X$ `5 `% X( @/ i6 k
7 R) M8 K8 z- f/ X0 s$ V; v* t
SM0、SM1:串行口工作方式选择位,其定义如下:8 c- t( M, Q; S8 R. u7 H9 V
% k6 y. N3 T$ v8 n2 A4 R% h0 K

2 W9 q8 f. ^6 c5 v% r( c- R! p6 f
: q" n8 S+ i( S其中fosc为晶体震荡器频率
: V' {+ k$ s. }0 U0 bsm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。5 l# T8 @: W4 W- X1 U( o* d1 h& e  |

4 p5 l8 t: r) O5 X! D+ J3 ]' mREN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
" @$ X/ m' j2 e/ x9 q! S
% ~. ?& E5 t% o: r* tTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。
6 i9 k9 E/ ?0 h) C& P  X# i# S
# ?" t- V5 J( j) L( h9 n# I5 BRB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。/ l- ?# b" J; K. e( O
/ v: O3 f; x  S2 |) N
ti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。: y/ @# o. ^) y
3 L3 a0 o/ F$ \/ M" H
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。
9 C0 w# k! A- i3 c" U% C" g! }+ C5 Y5 J0 e( D
特殊功能寄存器PCON
, M" ^6 C0 p$ x- F3 [, m5 G4 K4 U- i5 o/ w% T9 z
PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
; z, w1 ]: O9 a5 O2 l! ]
7 [; G( _; x8 D# t0 T5 a; }串行口的工作方式# F$ F& t6 X' n0 Z* ?6 S

8 c4 W# |! d( X# e* g) d5 W9 m8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
. i+ c+ u$ j) |' J# g4 l: z& _: Q9 t2 T
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
/ T0 ?7 n' g# S! E0 X, w8 @& S: v+ a# `( ^: ~  [" d
输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。. R! i  M, g5 A8 G) `

0 t, d* t5 m' j9 [) O输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。$ [) L) R: z7 D1 x

7 ^8 t  `" w2 @9 x0 E$ {* O下面两图分别是方式0扩展输出和输入的接线图。8 `2 K* z# R8 r8 ]# h2 K) i/ R

1 u6 g) L/ ~% X* c- D7 `

# D# z! |6 g/ ^+ V  q7 t0 t
<单片机串行口接线图>

/ n& v* J/ R: E* P* a- l方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。  ]. `8 B' R2 P
# i. J( `) j: c8 x
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
) i9 u; M1 b9 R6 t, G7 \. ?0 M) ~6 C# {- X0 A3 |! \6 A) F+ {3 }
输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。
8 v% F% L* @, t: t1 m' ~$ h* ~' D/ h! c+ g; u8 g. F/ ]7 E
方式2
- s. Q* ]& }6 Q2 f* `7 v7 j- V0 n/ G) t- u( F# W, e8 y; b
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。
: T# ?) r9 W/ _" z, x! ^- a- l$ H7 n
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。3 D' o# h$ u9 U  `. T
! d; u. D' K# g' ]" n7 S
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。! @7 E' S  g% C9 M( ?; R; Y) }
; C: I. H9 i6 N8 x2 M5 j: u
工作方式3" ^8 L: \/ f1 o
8 d& u8 a, ~: u' U
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。! P+ q% P3 s& B3 ?# e' A6 F

7 X! O4 k+ Q7 z: L% Y波特率选择
5 S  B3 {1 q( w* J  S3 O8 e& w3 m; L4 e( b; O5 x( Z1 K
如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
9 u2 U9 F( e6 j! Q* f9 o$ n: }) }4 N1 \4 _8 ^9 O- s4 X! X
方式0
& r. ?% w  I7 Y- n% `: c1 W# V/ P- q1 U7 W; G) }
方式0的波特率固定为主振频率的1/12。( N4 _1 J3 m4 Q$ _& z/ v, Y; ^

5 {2 n0 l# U- g. I% O3 q方式2
( }8 k+ w+ E$ h  i, \# J; x+ m+ F# p% B/ r' D; N
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
5 O; @' L# C  M) d6 h% \6 q
5 `7 K5 |" A& W2 W* p5 ?波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc$ Y2 E9 A* {! @# d

; `  X  M* A6 R% i3 M& F- }. p3.方式1和方式33 a' j5 a9 T9 U& F" g# ~

$ J8 A! E. }# J+ R, Z' s' K定时器T1作为波特率发生器,其公式如下:& L5 E6 I- x' U) B8 g6 Q8 G
" o* ~$ p% U( f5 a) `
波特率=定时器T1溢出率
0 m9 b6 Q1 r2 D6 G' ?% I- j$ M7 A% |7 B  J9 z/ N+ t
T1溢出率= T1计数率/产生溢出所需的周期数
7 Z: A, t, p. l9 W7 ]. `0 T( L- `' C& J! |/ `
式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
$ S* t  R1 Y0 }! h) m5 }/ {" w: L7 @* E
定时器T1工作于方式0:溢出所需周期数=8192-x% {9 W  v+ u+ |9 K6 y, y& {: Y

% X' a6 l) ], N1 d# s定时器T1工作于方式1:溢出所需周期数=65536-x' y; D: ~: ^  O' f( M
# t8 K3 Q* ?( o) U9 |0 ^
定时器T1工作于方式2:溢出所需周期数=256-x
' k- l9 y8 h, O/ z/ s9 F8 e6 B7 {
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
" |6 Q  q. O0 J# _; m
/ [5 K9 D* a0 \! T, z+ ^3 Q当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
" Y* W7 C5 }5 {) y. b3 c2 y' Z4 O/ E/ K8 {$ F" Z0 j1 X) l7 C, y. W
下表列出了定时器T1工作于方式2常用波特率及初值。
/ ~. W( J6 \) o/ l+ ?, O

  k) e2 ?, ~: _; e
# S; t7 o& i2 B) Z: ^
# t1 H6 M  m+ m

9 e; h* q' ?' h. J

; v: @9 B  D& J# |7 o+ R; u  y

* R' `( N9 y, `
3 g7 p3 Q% B1 `

该用户从未签到

2#
发表于 2022-7-7 10:41 | 只看该作者
看看就可以了,哈哈

该用户从未签到

3#
发表于 2022-7-7 13:44 | 只看该作者
多多交流学习技术知识
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-11 08:14 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表