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

单片机21串行口介绍

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
串行口是单片机与外界进行信息交换的工具。
1 j% j2 m4 M; m# J1 P' k0 M2 A
8 J" b! z: _% H. r8051单片机的通信方式有两种:# N: T& c. w# X5 V
1 A3 y/ K; Z" w) _6 ]% _+ C$ d
并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
0 ?6 p# h0 m( y: B
: I2 }2 g* G, x) }9 i- P
, y% _% u/ F* z3 F

5 b% W4 F* r5 r, ~4 W, ]串行通信的方式:
9 a  ^' Y- R1 a& _) j- }& H  _! {( m4 R7 s
异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
/ X3 K& J* s5 a- W% y7 I4 E$ k
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。% `% M2 L# y/ j+ e) u! B3 u/ R
2 Z, _' n( z7 V8 u: g8 r2 F
在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。: ]1 O2 K% C, B

0 j9 \% x( g$ |! m4 g波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。6 M" B* j# M! Y  T' g2 H  M- X* M
% {( B; c0 `* f% K
同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
- _+ _9 V( o$ _, P
5 v$ Q; _3 j+ z2 ^( z8 u通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
  I0 f6 g. `& b$ m, C: S; {( p, g. k  c& f: z- x8 ?
2.8051单片机的串行接口结构. B+ \/ u. ^, ]7 Q/ p, P

' q; \" Q' \- B$ @# o5 J* T" c. P8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
0 d8 ?* ^8 W; S6 R1 k
' e* V2 J$ S3 q1 c7 B# J2 p# W8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。* _9 W% `( N/ o" w$ f6 W
7 L! t7 y$ q& z; E: J
串行口的控制与状态寄存器' D2 Y, t: P; o' S0 Y. M$ N

' p- d' ?& ?  N; u串行口控制寄存器SCON
5 }1 b) S: s4 @5 U. h6 N$ {' e2 v; F+ u% f( W2 {
它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:/ C/ S+ C0 d1 k% f
1 o8 T5 l" z( T4 q0 i1 O4 y0 h
  h* D; B, w( }  I; e7 ?

$ M( U4 O1 v+ P5 }( d/ E" |SM0、SM1:串行口工作方式选择位,其定义如下:
2 P) F. y8 p$ E, {: w7 ^  [7 U9 d9 v, f7 \# X
6 ]8 _) p' }7 G# G) L8 B$ R

3 [1 W; R# `2 P- N+ c, u. t. L其中fosc为晶体震荡器频率, ?. x4 k) L* o; f5 Y  ?
sm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。+ P. m( j( F3 |6 h2 R! J0 d
1 U8 E) g% ]+ Z; S- y
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。. t7 |3 v9 j7 S+ q! G5 j
, U* X* ^! J# b& o! I* B8 r
TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。4 c& W% M) S) s: ?# q3 U  i, g
5 E. Z0 r9 U7 X0 ^) s" g) f
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
/ \" R( ]' k4 ]: f/ K0 ^' G. }; ]2 R* @( [0 f* D
ti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。
6 M" w4 @8 S$ e  `* b& l2 P& N3 |* `/ v9 D* B: k$ j
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。+ U! h! i% G$ I: O% _
. `# f0 D' o( p1 E  R" n( [8 y8 Q" O
特殊功能寄存器PCON
7 b6 Q4 C& _1 k$ f+ l2 M8 `- s; L' C
PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
7 \. e! ]1 c  ]7 D0 d/ f: }1 w) W4 O( ]4 I
串行口的工作方式
: [4 \' ^* q: ^- d# d
+ T0 @9 F0 I% m0 X& s. Q) t8051单片机的全双工串行口可编程为4种工作方式,现分述如下:1 x3 {: w$ G# N- ^& @

8 Z* ]' K9 R/ P5 X方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
' G, V1 f6 S! n  h
6 E6 h$ M8 p( @9 g) Y输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。( V0 c. n1 N  @8 a0 _" @
1 \. q5 v8 d9 F! |
输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。/ r% ]" M: ]: H

7 J4 G# [' q. g. d/ o$ R下面两图分别是方式0扩展输出和输入的接线图。1 F+ T$ Q% `5 d6 ^: M6 T
/ B/ E( r$ C, N$ e8 K7 D

% ?4 U' r, ?* e+ ~( y& O. Z
<单片机串行口接线图>
4 W8 [( @8 ]* Q& x5 \1 v; z9 D
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。* m2 R6 f5 c  M5 B- e* c  q

  A* E. D. Q: p1 B% y  k输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。! _# T1 k+ `8 j9 ^
5 J# D' R4 A  }" i5 X, I
输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。& k# ~2 O. S1 M7 Z

5 u/ J9 k- b6 ]1 F+ W方式2, V6 D7 ^" B+ N$ O% Q4 b& z
# H& V8 ~- }, f2 Z
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。& R: ?. m* K! d( z- I3 ?0 U3 G
- T1 H* }4 R5 I/ v
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
$ k4 x* S1 R) O: s/ p$ z; S8 Y* v( k* N( }3 |; W; f
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。5 j& z9 N: y& l  w, Y& c. U
% E5 _* z8 n. i' k. f
工作方式31 n* {. k: K5 C+ K4 u
# ?/ c3 W' W4 W+ E5 V
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。5 i1 S# n& x  w3 y/ F
2 b$ h5 H0 k4 J7 `) Q$ B, k
波特率选择! t2 |. p3 |6 s+ w0 Q  }9 [$ \

. z. A# o6 N' u: C如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
5 r& {$ c2 I% p& |' [6 Q1 ]  q6 J7 x& C
方式0
! ~% @8 ]& ^1 W' h' x, x( T# H' c' v( p' f" S2 j
方式0的波特率固定为主振频率的1/12。
, I: m8 a) S; n' u0 L' [) Z! l) g. r" O3 n  A% ]5 c2 \3 Q  z
方式2, Z& {% {# e3 X: V( t

3 I3 y- r$ L$ H' [  Z方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
  k% W/ f* I7 z3 B1 n0 \+ `+ b8 a4 m) V' l$ A3 r
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
3 t; x" O% s2 u& t
. M( Q. C) z6 z2 }5 A4 [; j3.方式1和方式3# E) t# }9 ^/ a4 i  _( X7 R
9 s: _/ C( [7 Z
定时器T1作为波特率发生器,其公式如下:* `0 f/ A& L9 u
# P+ \: r% G5 |( q
波特率=定时器T1溢出率
; q$ r( C3 c$ ~$ ]7 g# p2 c" |2 r" ]3 c7 ~. e% s
T1溢出率= T1计数率/产生溢出所需的周期数" V' }- Q8 M) \0 I4 ?: i6 L

* @9 j( u; o$ T2 w/ p$ l1 M  y式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
. j9 ^6 z7 a* @$ H6 Y
) ?6 F6 a0 F2 T- F2 c$ t定时器T1工作于方式0:溢出所需周期数=8192-x
2 f) E9 h) F, O8 i/ I' ~
3 D  h4 v+ k* X定时器T1工作于方式1:溢出所需周期数=65536-x
$ Z3 \/ z% l* `8 p( ~* ?3 m1 o# c: u+ p7 X6 W
定时器T1工作于方式2:溢出所需周期数=256-x* _% U, a3 y" Z/ h5 @

" \) v' k! E: m0 a因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
7 W! s% ]7 v6 M* @7 L5 e  r1 v1 w. J* y! o
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。  Y/ q/ b8 q" P. T+ f
" a" }+ Y7 D% H
下表列出了定时器T1工作于方式2常用波特率及初值。8 n- J1 t  B( m, a) S
/ }! A  [/ z7 z7 N( A+ C
, x( y! F# a  g" X

! A# W( ^9 U0 g/ r" `7 e5 c
" A6 Q: f( L! F( L9 V
4 N, V' W5 W# R! x- m4 r  F% E% X

& B9 E  c  v5 y2 O( f* z
4 e5 e5 f0 k% G  S6 ?% o+ e

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-13 08:37 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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