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

单片机21串行口介绍

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
串行口是单片机与外界进行信息交换的工具。
2 a" f. \  r6 H$ X* `
- \2 ^* W4 Z) o( _3 N- v7 F- ]2 _8051单片机的通信方式有两种:) H) k6 _/ v! ?" m# F

3 H+ v9 o! g. r$ J+ Q; m并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
/ r! a- d1 w9 j
* z; o+ l1 @: e+ a" }  G) v
, r8 ^% l8 L; q+ S9 C

; C6 n; @7 F) W2 V* `" K串行通信的方式:# c/ x3 ^. B4 A; ]" ?6 X+ r" [
. W! ^& q( O. F
异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:$ G; i- ?$ g/ E$ f+ Q2 X, F; U

/ u# U, `" O! Z, [, `在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。" N/ Q8 d9 m- w; A% E7 q7 H* L
7 F) C0 M' t6 Q1 a% V# ]8 [( l
在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。
$ G: J; z) b0 Z  [- A& \- F3 R1 l& L  U
波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。
8 N. E. \1 C0 A% {$ H
0 s# q! S% f! q  T$ C/ _同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
# a3 `( T' ?: t8 b9 F- J% S
, U0 s9 f9 d6 d5 M- |通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。  H% ]& M1 L: q

1 o# W; T! E6 U2.8051单片机的串行接口结构6 a% r, L: o) L+ ~% ]( r6 H
! H; T5 w8 L' k- p, g
8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
7 x* G" ^" X$ ?
2 ~# d, B4 c6 q( |+ ]8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
+ g& m  N: F  X/ H
1 g5 ]3 W# k: v/ `9 ?串行口的控制与状态寄存器3 P  R% o; B. u$ N# g

, K) F$ l: b  X# k2 s% W" \' Y串行口控制寄存器SCON
0 w0 w: d) E9 H! l
& [" B9 }( U* `! J, R; c1 c它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:! k9 @' W' J! k" {
, X4 g. k2 i$ M8 ]7 e$ E1 h- r: r
: C, K% B% |8 [0 r

% d5 d* A) ?3 z% r* p' oSM0、SM1:串行口工作方式选择位,其定义如下:
1 j3 t# ^* L6 U& t( c; W9 Z
9 \- ], b. G* j- F4 i$ K

5 E: _5 a, y" L# F) t
8 i0 b5 D- k! H! Z' p/ a其中fosc为晶体震荡器频率
1 }: o: h, v& B) T3 z7 ^: Fsm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
$ [/ x' S6 d+ b$ k
2 y) I* w/ J3 ~! ]7 J( x" U! WREN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
; t5 n3 v" L" N! E" O1 U
" j3 s3 T$ B( o8 NTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。3 P$ C1 s0 C: C8 ~. D, ^- t& ~
( d) D" v4 N6 I& V/ N/ {& [) v; X
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。& `6 i4 }1 Y' M' N& O) V

- |! h" T7 n( H! J' cti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。! d4 E* A/ f0 t
7 c' d1 `/ _- S! O, ?7 J
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。8 [5 X3 V, S3 J- r# a% X
0 G! D! e- f0 ^: ]" Z  T& i
特殊功能寄存器PCON
* W1 G3 A% V& w
0 F& C: L; c$ pPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。- `4 O% A* B2 F
" S9 F( B7 n8 _2 X" r/ S) F! u! X8 `
串行口的工作方式. ~: s1 T! @8 l2 S* G7 ?: n4 ~
7 t6 ?4 N" n% [9 l8 j5 ^0 K/ u
8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
3 \; j# p4 o+ Q& m  x  Q4 J% J& c7 j8 w/ U" c
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
: q; J- o' r2 E- h3 r8 m
4 Z' r+ C. m- B4 P6 G! ~输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
! J* m# m! P& _, n+ ^7 V4 s. G/ M  C$ p' Q1 {( L
输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
9 f7 |9 P3 x4 g$ @9 _6 O; W; d1 y/ r3 E, r6 Z
下面两图分别是方式0扩展输出和输入的接线图。
- J  |/ a" t" p
( V0 y  d* V" V7 N& i9 Q# X
5 `8 r$ d4 t4 z% s( N7 D; p
<单片机串行口接线图>

& S6 n- n; n. a+ r' }- N方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
2 D- b: k9 c; j8 K; Z9 M6 i4 u( V. s$ F' N; p* U7 O! p/ _# {
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。% B+ Y, p0 }- p

7 T+ x! i1 \0 l4 y9 I: A输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。
& V$ @$ y+ e) P( D6 H9 e. c: w; J
方式2
( {& f/ _. k' I) p5 T' o2 k9 z) R) D: ^' h' A
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。( C. W& z% U& Y

; v6 }1 d! G# R) d, S% P' I4 i输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
  {, q& G" Q/ C) a, a
" h6 c5 z6 G. `7 m, o; S0 B+ v5 W& j输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
- J" w) ^# G9 d" R  _! k5 z9 z; }; H2 i! w7 z& J; E9 a$ K8 A! d
工作方式3
: m/ [- E9 o( ^3 w, s  X0 h3 l( b  U3 ]9 n* }
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
( |( |& A$ B3 A$ _# d* F, P* s4 S) F: g- t9 ]0 J# k
波特率选择9 Q8 b" g+ M5 W4 K* C, K5 I
3 H  N9 F; y  [4 ?4 O
如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
$ M) `( y' N  U  K- S" l
' T- n( A: I& T, \( y6 X+ ~  P方式0
" U" n3 U6 z/ A+ [$ a. Q, m
, p8 u  J7 ?5 Y5 m: H方式0的波特率固定为主振频率的1/12。
2 x2 O/ e8 v+ {5 m0 Y' i  [) K
) b' B8 |6 g# P0 _方式2+ P9 f4 l2 j9 h5 B7 r
8 j" `  m- K; M) e1 C3 j( V
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:* J/ Y& S5 C: |1 ?1 b' _

/ I/ N& d/ ^- G# N4 ~( M& C- c4 G9 ~波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
6 y& p3 Q9 y- y) ~& Z1 @; x% E5 ~6 V& R. l) J
3.方式1和方式3* v1 s  t4 A4 V. p" C% e

9 A7 |7 E7 X1 I7 ?' r' q定时器T1作为波特率发生器,其公式如下:% z8 }1 _) |9 v1 a: ^& C

3 k& q3 W: j7 H4 T波特率=定时器T1溢出率" R) o3 Y$ v* p$ i: d% k3 L+ v$ P" Z

+ P( L/ S) |$ W3 _( k) yT1溢出率= T1计数率/产生溢出所需的周期数
1 e0 b% U) u5 I/ v* ^# v3 ?( |6 m" V* S. u
式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
. [6 ?0 p  o1 R; ~8 E8 b
& h* m9 C. K" [1 V/ y, Q, t. Y7 ^' l定时器T1工作于方式0:溢出所需周期数=8192-x
8 I" }" o, c6 L6 i' L* r  L/ z& X. ?  t6 q3 y9 ~- V
定时器T1工作于方式1:溢出所需周期数=65536-x0 h; b6 ^$ x/ o, @
8 `  n7 d+ C9 G3 m/ a
定时器T1工作于方式2:溢出所需周期数=256-x
  w0 _" i# A: y% _8 Y' J# I& w5 q8 b/ [( {# q; N
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
  c) }8 z/ C/ V7 O( C- D, j1 Z- [$ S" e
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。! ^; k& K7 Z7 G. H- G

5 w% f; H& w6 b+ O% u) L下表列出了定时器T1工作于方式2常用波特率及初值。/ @5 B# ~' @" ]# x# z

# N9 `6 f" [: B; y5 @3 d: N$ F* Q& J% \# E/ R  {6 J
4 @# k+ W- ~; X

1 @, ?1 n! K1 [: }# [- w9 e6 A

% X8 X8 H8 L/ y

7 S% c$ Z9 f( n! p3 i; T" k% C
5 z$ b2 J' j( b# F1 V8 k) u! Z

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 18:29 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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