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

单片机21串行口介绍

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
串行口是单片机与外界进行信息交换的工具。) G' C* B( |+ p2 V* g% _7 r
% {& l) l: ?% }2 U
8051单片机的通信方式有两种:
, K; ]7 h* }9 y3 t) A# ^5 y6 ]( n  e
并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
% |- {* _& M8 z/ P  I  _* s$ O# i" m4 {' {% e% m7 x- O

% X: Q; I# [' d7 K8 E6 V
' j* A8 a- ^3 x3 n串行通信的方式:
4 d/ j( S% O" w7 a
1 b0 o( F% a- U: c* Q, \$ T6 p异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:' W3 P. o  P8 H8 x  P" Z4 A

& Y+ l% _' k5 i5 W; r" E在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
# X5 S) h: Y' H
. f+ I, f( k; B+ X在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。
' P! j0 W4 }! q4 I! Z' N% g! g3 H$ i. v" P0 ~
波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。" q, v* B, }  A4 {2 A* {

* F" t! V- n/ T$ y同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
, r5 r+ i; ]0 V  K
* L% Q' [  R/ i1 @通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。9 u; \: \" l* N/ Q: Z% Z* A
1 C+ D% R; J# y2 v: u& `6 e
2.8051单片机的串行接口结构
$ j+ s9 {- h$ ?8 y
* ^& }- w: Z' D1 R8 |, _2 N8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
0 Y. }0 {* U5 t% a$ Y9 d! j7 l) C; F) o: @+ [" O7 p3 K9 F" s
8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
- R, M% C2 R/ H7 x0 k3 ^8 ?) e
" m+ u* C9 H& _* Z3 Z9 |5 z' E串行口的控制与状态寄存器! x* p$ v! H; Q" a8 N* ^  t

/ k+ t& \1 B/ o' P( e) V串行口控制寄存器SCON% }# N% }* t& s( i% [1 }
6 K  g: O* g  z4 A
它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:) g3 K- ~) H8 Y* j: r+ J
: M# y6 e7 Y- h

& I0 c2 N0 ?" L5 H& Y- U/ e
* ^( w. b0 _/ k" qSM0、SM1:串行口工作方式选择位,其定义如下:
9 y9 y/ A1 s" N
: f/ P' |- h) S* }

* c( b2 T1 m( q' B
* O/ x: q/ ?8 b/ l其中fosc为晶体震荡器频率0 h2 }& ^. k, I# M- O
sm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。* y4 l8 B5 Z8 \0 a3 u
' _! g  x, T0 }7 P4 q7 q3 T
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
- X% _, J9 d0 _" F8 M6 D+ l; c
8 h+ `- J- I8 I& nTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。7 ~1 Q! y1 z4 v3 L+ U% W% B

1 Y/ D2 R, l) j8 l6 \9 i; JRB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。- d9 n4 X  Z. F4 @% Q0 }/ K) E1 `$ F
" `1 d4 w8 \8 y
ti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。
# k6 D; J1 ?$ g7 Q/ j; x- o: H7 ~  I, E) B- z# n
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。
, x* z; Y; s9 o" f8 b; v+ ~# b
4 V- o/ h9 f! g  p特殊功能寄存器PCON( [9 k( s8 D0 ?( k. ]
8 d4 h( C$ Z/ t2 x9 d5 e/ I
PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
. L7 F. {9 z: r5 G; h* c! p. z4 @# |" n% L8 g( t, b
串行口的工作方式7 U. h# Q: @) I  I# n
! x* K2 [: O$ S7 K( s/ P
8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
4 ?2 a7 ?* v& q0 N
2 Y" t. K# G; \1 U1 T方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
; L$ V  L# q$ l2 T/ Y: \9 L
+ ^+ U+ Y8 |1 J; D2 n输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。3 S7 m) t+ P' D) Z3 X4 e6 |

& i9 b3 U6 F, Y) u输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。5 T& \2 h5 w1 g/ y+ @( G
$ c( T* b6 E; y
下面两图分别是方式0扩展输出和输入的接线图。2 J" Y3 G  F) V
6 ]( a8 R) o: ?. v# Z

  P, E3 m/ @( G& \/ r
<单片机串行口接线图>
1 Z# e, [5 u( R) f
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。. N) k/ C0 z4 ?- ]
1 w, t3 |6 o- ?3 r9 j
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
) o; u- J+ O( D' P' i/ [; `0 c# U( e* f6 U1 K" h! }
输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。; p! p% {" [: P5 ?2 @
* _  G* P, [2 P  c; w# p/ m, }
方式29 F5 u# L& v, c7 B, }8 v
) S7 R, N8 w! p+ g$ B3 Y3 W' P& @, B
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。; V" B/ u& s( X* l6 Z+ C& {6 P
/ y5 {7 ^, Y& Q/ P  f
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。2 K$ T1 g/ q" p0 U
- P) g; t+ y( f* n: ?. ?' l/ [4 f
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。  `% n  A5 ?2 H1 [) o9 P

: g  p; F0 R6 N' m! h# ^) |$ q工作方式3& ~& q: X* l* H: B4 a* l

. Z" o+ e, S4 W1 f* f方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
0 Y7 _, P& Q$ [0 K  N
/ o. f: [8 t1 B- o7 M$ B波特率选择, p' R* F+ a; n

" D& x8 ^  D2 R/ E. K如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。4 D  f0 P: I2 x4 V# d% `' e

( ~. ~$ f7 z0 b: M9 |方式0  l- J: t( I/ X3 ~
/ t, W0 U+ Y' E! j
方式0的波特率固定为主振频率的1/12。
/ a/ ]5 v/ ~- ~; i
8 t( ^6 J; x* h# _4 h方式2
! L5 G! k) B' f' o$ a6 I1 n' T. ^6 S
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:" x- {* Z$ f# F$ w- B* {1 e$ I
" K( }6 h! i+ u  d6 W
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
5 M7 S/ S/ p* V
2 x6 d3 ?, D6 N3.方式1和方式3. c5 F) d: _' y/ [

& Z- X+ v& i7 r; L定时器T1作为波特率发生器,其公式如下:
; {- N# ?  O; E: B
6 I" E: `, n5 H; Z7 q. x3 w波特率=定时器T1溢出率
% j- V1 j6 [/ Q' h3 K2 G* x) g$ P& d9 l& n1 F' z7 [; I
T1溢出率= T1计数率/产生溢出所需的周期数8 L  q7 n; g- j9 b, ~$ W6 m- w" m$ [

1 G4 q) ~; z+ ~6 c) c3 r. d% V式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。: f# T7 Z4 w% B0 n: P0 D4 j
! D9 _+ \% D8 s; y
定时器T1工作于方式0:溢出所需周期数=8192-x
# A" }( u6 `5 ?  y6 |. u9 o
6 J7 A0 p$ g* P0 c& t定时器T1工作于方式1:溢出所需周期数=65536-x; g8 I8 y% f; W( b! z# Z1 }
) V" V1 X4 Q( b7 Q6 E. \: P
定时器T1工作于方式2:溢出所需周期数=256-x
7 O: I! Z. J+ E
  @, o# `! J) |# _& e- f  W- f# q因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。. b' F& k8 R+ M. I1 ]6 m! \
; L! [  k8 B7 X6 K8 H9 S  c9 `5 Q3 H
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
, c/ d$ `7 _" ~$ i( f
* ?( ^. Z. w3 @9 O. e% `; R3 `下表列出了定时器T1工作于方式2常用波特率及初值。) k8 j7 ?$ V( j3 I, C
1 N# [3 R5 G! V
1 {- ]/ f+ n. {2 @
; c. ^5 `) k% N9 j
, P! k$ B' @0 y7 I

& }1 z. N) ~, ]3 E# Y, O) n/ c

4 [( u5 n7 B( M* a  L

! o' b# f& Q/ A

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 11:05 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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