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

单片机21串行口介绍

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
串行口是单片机与外界进行信息交换的工具。
* [3 s2 }% i3 `" G7 D/ T0 R6 r1 Y6 s. K  J1 w4 ?1 J7 Y
8051单片机的通信方式有两种:! O& \% x% W8 F  V

" S2 o; k$ i4 r0 w& i并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
; ]5 k0 L2 s0 a  a7 |5 u
5 X3 g- g/ X6 a/ i' \( _

# M+ f4 f* j( f9 D3 R7 ?2 e
) _! t1 \4 S( |6 k# Z7 t8 P9 h! M, J串行通信的方式:
* X! b$ m- M* A0 {; a. @! ?; n
: w2 ?- }& y: L2 t- @. I8 q- Y异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:) c7 F" f2 x  W. E6 Z  D& T

; v9 @/ K! E& X在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
- x/ }( z* ^: @3 X* s) H# r; |5 g. l5 y/ T' S4 Z
在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。  u$ l7 y) b1 B4 b8 V
, |% t; n6 G) a. w
波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。0 k3 P' y7 M$ U8 R( j; q7 B/ [

2 T, [6 k  M. f/ k. x) w同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
6 N; w, c( {# \# J4 X1 c( z7 k8 u6 E
通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。* x% l8 c/ B% {1 Y

1 h. v# \% `  v2 k9 i2.8051单片机的串行接口结构* U7 T1 z5 r9 \9 Z% Q" n* Y

, U' r9 d( B2 o! o( R8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
$ q+ @; Z+ y- o8 p6 B) u' _6 [' Q) e, r9 u% m
8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。( j3 Y% ?0 `  l

/ n" s, K4 Q2 m3 b串行口的控制与状态寄存器
7 q, K$ i  I. Y, x
* e3 M) K* K: P- `5 J串行口控制寄存器SCON% A, X6 Q; V" a& C; d( s/ N
0 K5 P$ }* z6 t% Y% ]8 U
它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:
( b: l1 j5 P2 w( b9 g( B2 b$ w0 }! O% R' i  b2 O1 k3 i6 e4 C

, J. }# ~, W) }) }5 U: V; Y. z) ^& a2 |8 z0 w& B
SM0、SM1:串行口工作方式选择位,其定义如下:$ @) H. r! Q3 u4 O' x

9 \8 ^" l$ m" j% O+ C

5 F- g8 \+ Z7 y& |
7 |, ~) E6 m+ R8 f' [0 s  |其中fosc为晶体震荡器频率& s: ]4 y% n* |3 d# t% }4 Q' R
sm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
. X6 s' i  J# z  K6 P0 i
0 R1 L( h# P& B- nREN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
3 ^2 G. w$ f( i9 O6 y
& h( N+ q* `* G' i+ M1 A; h$ Z6 Q3 GTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。, ?7 v1 X- s+ x& d- o

7 M$ ?* W& f. x( \RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。; W$ d7 _' v/ P

5 Z. x# M) c) Q/ H8 I& b. sti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。! h; c: V& B& G, K+ i  x

5 A! ?$ Y8 T2 ?: MRI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。
" e+ z* f, |& f' ~7 C  ~( f: n$ c1 h& `
特殊功能寄存器PCON, u* C, j" v& K5 y5 t

% }+ O' K  W/ qPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。/ k0 u; V5 p: ?4 ~4 K* l8 ?6 E

4 b4 n4 R, J1 \# ~9 U串行口的工作方式
8 F: v: u4 e$ e
, U: v- g9 m& ?" M% y8051单片机的全双工串行口可编程为4种工作方式,现分述如下:2 N' ^0 z: f7 w" a- z
. F3 a& @3 [; `4 c: c" |
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
- }0 b& E9 G5 U
  E* e" |5 c- g, S# j" r输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
, N7 j8 [9 P  f' \6 l) ?( _- V/ \
3 B" B, t+ C% s! N$ ?1 y9 @8 ^输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。0 j& S4 t- M% f( R! `5 i4 y
& p9 w, x/ S2 `8 j6 Z0 b) w
下面两图分别是方式0扩展输出和输入的接线图。0 ?0 y, W4 M2 R" W( B% t( @

: E: S8 A2 Y: _

% w6 Q8 Z: A! f8 @/ y' j" Z9 ~
<单片机串行口接线图>
) V+ K7 d. U$ ^" ]5 R. T( o7 [3 g
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
7 l# |, C( R6 H+ [9 h& b0 \1 B1 K! H6 y4 Q8 e, `3 Q
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
4 |7 H, ?$ K/ T/ H6 x3 \* X
! M% c: C8 `" ~- |4 t2 g输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。+ O3 D+ g) l; [5 g1 v5 i
) y4 y" U! A3 i( P; X7 M+ G8 e
方式2
1 P( s4 I' D6 ]$ e) {- i5 e( E; E% ?( S( i
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。
/ a" S) r. i: Z5 z+ a0 R6 \7 `( K9 l3 \6 l5 k. S
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
/ H8 _: K: C0 I' A4 \: I# J* ~1 z
* x+ b  d" i# \- z: O5 V输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
! G5 g" A  G# _* ^" }/ _5 `0 _3 s
工作方式3
6 k) i6 ?+ ]( F* G; m9 ~
( Q) y% d: z( o( c; j, A方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
2 |( {' ?2 y$ v$ {: p7 @- `( Y; k! M
波特率选择
( e9 b* r. F3 d( G& J! k% M  y5 D9 F4 g3 g" w3 @- Z4 a, K0 I
如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。6 S/ s, i! C/ ?; |# k) a1 ~9 x
8 O2 f- r) K% }; L2 V& `& o
方式0, V! g* p2 J2 B7 T; q: z

- d( b- b0 `. t/ U) c& E* {方式0的波特率固定为主振频率的1/12。
* q7 e8 T4 k4 [! D# B3 U2 o' r. C$ N
! v6 l* R5 z; E' ~$ P方式2
. U" R& l- d* ?8 O
1 b6 q" v% T% k3 F! J) d方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
! x* t/ j1 z4 P; L. H1 T
0 X/ n) L1 b  C波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc! o6 g" J; E- M, _& q7 I
8 e" `& J7 A) G6 a
3.方式1和方式3
6 U  v: {# _# j
  o& K0 U+ a* x% B; P! m7 n定时器T1作为波特率发生器,其公式如下:$ }. t* q$ t! F7 L9 x2 Y
0 g( p; m6 V5 h: X: d5 U
波特率=定时器T1溢出率
, _3 p- j+ r! \# k2 u; o) G+ {; W" e1 b, m% b
T1溢出率= T1计数率/产生溢出所需的周期数. h& _) l/ O/ n9 e2 v

& c9 p" ^9 |  N7 X2 D& E式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。: g# ?6 [& d4 n, [
" [( f: s4 m+ ~
定时器T1工作于方式0:溢出所需周期数=8192-x
) n" B8 I3 k4 n  @3 O& J
* r# Z1 I9 W2 D' z1 F- q定时器T1工作于方式1:溢出所需周期数=65536-x
: p0 i- i4 G# |: Z% L' E& R! j& H- d* m. q3 D: `/ g- J
定时器T1工作于方式2:溢出所需周期数=256-x, R3 L9 M  w( `- n
7 }# a) u  s7 l' D7 d; t
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
1 o) @7 r% k. [' H! O3 M) g: `2 Z; {! S% \
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
& R4 ~% g4 h: o2 j
& L! V% _0 J( B下表列出了定时器T1工作于方式2常用波特率及初值。, G1 `/ a) @# L  ~3 L2 y" e

! Z) z+ N! Y% z4 v: D# U' r* O1 b
8 z9 @, s% b% _# v

# k; c3 \" D% m( y3 g

' {: T: P/ @* h8 m1 `4 n4 r
. S0 C6 R0 I- \# {

: D2 ?! q+ K* M$ h/ L  A* s1 r

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-4 20:54 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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