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

单片机教程21单片机串行口介绍

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-8-5 10:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
介绍:串行口是单片机与外界进行信息交换的工具。
& I1 K4 Z* u+ p5 \8 J8051单片机的通信方式有两种:
, x$ ?) r* i) [) t+ _并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
: J) \3 o. |) B8 b: `, b1 o* G2 G) X+ t0 ^+ a; h: j7 a
串行通信的方式:
7 P8 S0 q2 V* l  c异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:! D( y2 g. v6 }+ Q- @/ q
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。8 ~6 K5 y) Q- K
在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。
6 @4 j& v, j2 u波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。% f2 o3 I: A; z) L, I
同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
5 {) }; X- A2 C, F通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
3 A' a$ M, V  M1 D& }' w2.8051单片机的串行接口结构3 q+ `, A# [0 q7 S2 R* ]1 l
8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。8 I$ ^) d# J0 O% y6 X$ s. R
8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。* @7 U$ F) E  Q0 d
串行口的控制与状态寄存器
6 s" d" O) \! d" N- ]' x- D串行口控制寄存器SCON
, E+ V) P. }! l0 v3 e它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:4 e8 I) A2 q+ \8 g4 t6 u; d

9 \: v5 x* H3 f7 N) {  }9 w
            D7
. [6 n; \* M( N1 P3 K            
            D6
# ~$ O8 N: z7 G" Q; p            
            D5
  g* l. O0 Y9 h, O5 ^- j+ k! d# E            
            D4; o: y7 D" W8 b$ ?( d0 Q
            
            D37 n1 ?0 {9 }7 d. V$ C
            
            D2; ~& h! r6 @2 ~; s
            
            D1
  d8 v: Y" ^. n/ ]: ^, G            
            D0
9 q6 A+ z4 x" ^9 Q+ A! m3 e% `            
            SM02 R- D% i4 ]) _" U) ]/ C- S
            
            SM1; w2 f! J# [7 C) c8 K( |2 Q
            
            SM25 s2 {8 J3 `5 a4 x
            
            REN' H0 w3 P% Y3 v' H$ A
            
            TB8
& Z: L5 |# M3 A3 a5 ?            
            RB8+ T5 W% t, L% x6 l4 [8 S6 J$ `
            
            TI
: @# h. L; j/ G! \: P            
            RI! H3 @$ a: S8 n/ b: G$ H9 b7 R
            
SM0、SM1:串行口工作方式选择位,其定义如下:
+ w4 r- _" |7 a
) _3 ~/ w  ]/ K7 q/ v! L
            SM0、SM1
  a% r/ b" u! k' i/ _  B6 ~' H            
            工作方式
4 Z. V+ \1 L7 S2 |" Q            
            功能描述0 c9 c0 l7 [9 V! F$ P# _+ g
            
            波特率6 k5 }) ^( O/ E- ^
            
            0 0
) p/ u6 r: e9 T' q            
            方式0
0 K9 S" i1 @9 o* p            
            8位移位寄存器& U' c5 V3 H# g1 ?5 n
            
            Fosc/129 Q  {* b7 q5 d( y
            
            0 1
* ]( n3 K: U4 P2 v! t            
            方式1
8 c* T6 g) J% H7 f* b% N' b8 F. x            
            10位UART
$ v. D- N: ?2 ^/ k            
            可变
% J; ]! M4 G6 i2 ~. U) t            
            1 0
" d% h3 Y+ x9 r+ o1 H7 D- b            
            方式2, L9 k. d$ p* ]- o6 F) r6 ^+ w
            
            11位UART7 `& m: Z% S- M( h. q
            
            Fosc/64或fosc/32
) F& t% ~. g  d' A  t1 r            
            1 1
' [) o$ z. c6 J  P  p            
            方式3
1 P- i4 Q# N2 G4 Y3 W            
            11位UART6 ]! L" O$ J* C$ P2 O% H, F3 X
            
            可变. H6 U: ~; J! L) C- ?
            
3 [; j2 B) X: X
其中fosc为晶体震荡器频率SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。, S3 s' q6 g( a$ z
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
/ p7 Z$ ^( j6 s& E+ _1 C) g3 uTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。# c+ ~) V$ e% n% P. H/ l5 g3 k
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。+ i( x. J9 @' }/ S6 F
TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。% v" e1 U7 K2 q: G6 K2 r
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。1 f. T2 e, P* V0 G8 G% N7 N
特殊功能寄存器PCON
3 b' a) y6 D+ P* @* RPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
* E8 ?' G9 z* q( f7 a  e串行口的工作方式
: h$ `0 P9 K* [5 k8051单片机的全双工串行口可编程为4种工作方式,现分述如下:- z- f4 |/ ~! _1 {2 O: ], W
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。# y* z, i3 K9 F1 I; q8 T2 W" ~
输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
( [( P- i- v, g" l! I输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。0 d6 C. Y, o6 T7 \, @
下面两图分别是方式0扩展输出和输入的接线图。
6 B; Y( k  t/ o2 Z  K$ r% A8 ^6 c
<单片机串行口接线图>, D1 ?/ A6 X) }: l& z
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
8 }$ `  `% q7 J, E8 h! s输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。5 }$ i( P& y1 l; i2 K
输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。/ H3 d. T8 u! z
方式29 z# r' K( h# N
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。2 s  r, P3 O( h4 S! ?" m- Z8 s
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。' |7 v; i6 D  ^% j$ N
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
  M# r, L% E  K" i4 ~) M" N& h工作方式3
9 Q" A* X, U# I方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。/ i2 K" ~* U7 w& X
波特率选择
8 V; o2 _3 A2 R+ @1 j9 |如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。! V) u  W) Z% k2 r
方式0
- N: w9 x9 G4 l# G$ `9 x方式0的波特率固定为主振频率的1/12。
/ C& J6 s! {" \! V5 @) a. G方式2
. C& c0 r. }& X. A/ P方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:$ ]! y. r7 Z4 |7 M" }( E- x% |. M& X
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
2 L2 Q$ _; }6 K$ w; D+ x9 {- Y+ B3.方式1和方式34 m- M  Z" T4 c3 R& Q" r
定时器T1作为波特率发生器,其公式如下:
+ _# m. Z9 ]2 A3 S% W2 y6 F% c7 h波特率=定时器T1溢出率
- @$ y# e, V7 ]$ |  _T1溢出率= T1计数率/产生溢出所需的周期数- M: Z- ]6 `# L8 ?( z  Q1 r7 T
式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
1 F/ L5 f4 m) Q. j5 _/ R# \; b/ E定时器T1工作于方式0:溢出所需周期数=8192-x
" A2 ~1 _3 t9 A- B* k9 e1 T定时器T1工作于方式1:溢出所需周期数=65536-x
  @. `, R  B1 |. p* |( M定时器T1工作于方式2:溢出所需周期数=256-x  P- e1 n  a% e! N8 S5 n5 l
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。  U  B$ W; v, X; c) a; u% D- y' K) a
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。  N, E4 y6 |# H
下表列出了定时器T1工作于方式2常用波特率及初值。
3 s3 D4 F/ C' B' ?( Y' \5 k
% S0 e. C9 M/ h
            常用波特率
9 Z2 _4 ]" V% R9 S+ J            
            Fosc(MHZ)3 S- E) {- O4 P
            
            SMOD* G! r3 a8 y4 S/ n; }
            
            TH1初值
1 e% L: l/ @/ e8 D            
            19200( s& f* }6 d# H) P* j
            
            11.0592- k8 A# l; w. J5 X; W) V
            
            15 E4 z. h* w8 x4 @
            
            FDH! T1 M( e; {5 Z9 j: E2 R
            
            9600
0 k. d2 z/ c% {# \( {            
            11.05925 w/ ^! G8 O, U, ^, n0 }; }6 p
            
            09 J5 t2 M" ~/ i0 l
            
            FDH
& M6 H+ X8 J$ n1 K7 E7 O! r. T- H% h, F            
            4800
9 `* A3 l1 ^5 H! F8 E            
            11.05924 |* R# M* z1 B$ H- k- @
            
            0/ {! q. p$ [% D' M9 f) {
            
            FAH& N, R+ x# I! t2 G6 I, P
            
            2400
& W# ^: A7 i, T: e: s            
            11.0592% |+ i9 F4 W. s+ O, X5 d
            
            0
' R" u! K3 ~- _3 L8 r! d  b            
            F4h
9 k/ f8 j: m# K0 u( I& u& n! C            
            1200  A* b! n0 \# ]9 g0 `- K) b
            
            11.0592
; ?' [6 d# o/ [. U! S0 n0 Z            
            0  X% I0 F; O+ v. l
            
            E8h$ R) F# K# v- t
            

8 F! f) Y4 \! [# H
4 K3 `6 }6 I1 E* z4 u) U

该用户从未签到

2#
发表于 2022-8-5 11:27 | 只看该作者
谢谢楼主,很不错的东西

该用户从未签到

3#
发表于 2022-8-5 14:10 | 只看该作者
谢谢LZ分享那么好的东西。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 01:41 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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