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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
介绍:串行口是单片机与外界进行信息交换的工具。
/ s  G2 s8 r& ~+ N! N8 t8051单片机的通信方式有两种:  \& b, r: ~1 o  P
并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
2 D5 R3 X1 t; G& {! u6 i2 X9 y. R1 @4 z9 s; d( p2 e2 f
串行通信的方式:
5 j& r! t9 t$ e) I! I- @异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:) O: Y0 o  s+ q- h( K4 y
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
  s! x- E' h) ~8 v4 r3 b在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。
" |8 k+ j+ N' o, \2 h4 M. T波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。
$ W* j8 |. Q( Z8 I同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
0 @/ [! z# I/ g通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。7 I  x. \5 \( m5 M# e# |6 V
2.8051单片机的串行接口结构
7 F/ v/ U' W2 ?6 a; p* ^5 @" T8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。4 ]1 ?' N! t0 J$ V- s+ g* e
8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。6 p2 m1 C/ Y# R7 i
串行口的控制与状态寄存器
) n' n2 x( h3 v2 S" ?串行口控制寄存器SCON
& p$ F( d9 p6 r1 X) e它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:2 d* ^- B' c6 \3 \) W8 m
! Y9 i, O( E! V% E1 U1 \
            D76 |6 d* z: _; m7 A7 P7 u; s( c1 m
            
            D6; a7 E- ^! y5 u  L$ T. ]8 s/ D2 C2 L
            
            D5/ ^& O6 e/ l/ {& B7 X" E
            
            D4
6 d! n+ I4 P- x- q( m            
            D3: ]( o4 _3 Q, Q3 w* U" Y. d
            
            D2
8 a: T! {+ _% e% Q% B            
            D1) p, ~( a6 {/ \8 r/ [
            
            D0
  Q  b' Q% @  A. T6 W* X            
            SM0
  p2 l0 ^1 F; t. h% p            
            SM1
4 v5 a8 ]9 ~: B' D: ]4 I5 i            
            SM2; K  Y' N% u! h
            
            REN
" }6 y% S$ G' q) |3 B- K            
            TB8% e" E+ a# Z7 t% z& w6 G
            
            RB8
* x! F$ }3 Y+ q3 W. }            
            TI
% o7 `. {( [( }9 J* |; i            
            RI
& |* ], m4 L+ c4 C) m            
SM0、SM1:串行口工作方式选择位,其定义如下:% v$ @2 K3 X! m1 h
! k$ O3 t: ^# `  o) C1 P7 I) R
            SM0、SM1
; J- W8 a, i7 e            
            工作方式; g/ ~7 e+ ]) Y; ?
            
            功能描述. T. a5 l; z9 {6 w- A8 ^5 f
            
            波特率6 J3 k7 W/ k0 P- ^5 S0 I
            
            0 0+ a7 X5 j( J' D8 z8 ?; U1 e
            
            方式0
8 e" j& ?5 A$ n            
            8位移位寄存器
+ L, ~# d+ |% x6 ?" t" d  S0 I$ q# m            
            Fosc/12' M2 s; g( x" B- h
            
            0 1
; T( y4 B& @- s3 ]9 b            
            方式15 |% m7 f/ R) o& }6 P# P* W
            
            10位UART7 ?7 F8 [5 O( Z1 \  c) ^& N6 E3 _
            
            可变0 V- J0 z6 m" `
            
            1 0
: R4 t. d/ T  X            
            方式2
3 h# j: v3 |1 R, w9 Q            
            11位UART, Q  o0 y4 x0 y) Z
            
            Fosc/64或fosc/32( F6 K6 X, ]2 ]1 A) f* I
            
            1 15 z; |. a% k. f, t) E
            
            方式3/ I2 J* ?# V3 v7 P  L
            
            11位UART
$ n6 q/ x8 A& ]" o/ y8 V            
            可变
5 E' Z4 m% e; _7 r/ K. @6 O            

! I0 ~1 w* |( }- k+ A其中fosc为晶体震荡器频率SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
4 O- _  J/ d9 Q% l* G  k5 _REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。/ b& O5 U$ e8 `  @1 J
TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。
8 c( P. H+ @  w6 iRB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
+ L, l/ O+ }/ F- h* T0 rTI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。9 \  k0 a; Q$ G! b  E
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。$ y0 I, L) [6 V- k/ o( [" J, ~
特殊功能寄存器PCON
+ L( i% X3 U0 S+ A2 kPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。& e" p! A, v$ i- ^
串行口的工作方式
% W: m, M3 \7 W2 I% V5 \$ ^8 C8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
* i1 e- ~; i6 j, f% X* X2 n0 V# n方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。6 Q8 e1 T- ]- {3 O2 q5 O
输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
- i/ C7 z! ?' @$ v( {! |输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。2 g; `8 p  [/ |! {& ]
下面两图分别是方式0扩展输出和输入的接线图。
' I( ^) S; p$ P& d1 T, x$ y9 q- v1 @+ a/ T
<单片机串行口接线图>1 W, M7 }" C" t
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
# Z( g' U/ T" A% l输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
0 D; A, i7 K1 @8 U2 m8 A( t输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。: F7 J8 l2 o4 [" G5 ?' _
方式2
" u' t* [) L& i. T0 n% x方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。
7 z; L, `, r: e/ b输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
$ F# {+ h! q$ M6 C输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。9 x# h2 \* D5 s' R. r
工作方式3# k2 B% `% y% |* E" t! f7 B
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。8 i  m8 Y5 q' J* v$ k& g+ ^( b6 I
波特率选择# E! c+ T" n1 f4 d! C' T* k8 V
如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。8 p  m! [/ {1 \" k; k$ T
方式0
8 d$ h8 s; g) }; ?方式0的波特率固定为主振频率的1/12。
  D# q* |7 u8 a6 t3 `* Q2 Y方式2  e  b' P  h0 u* W- N8 @
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:  `5 k& Y6 r8 o) y
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc9 |" i% Y* Q7 a2 E2 [
3.方式1和方式3
: @$ d/ q- i0 S4 a& J7 `4 ~/ l定时器T1作为波特率发生器,其公式如下:5 u, {  v( Y7 W0 K
波特率=定时器T1溢出率5 |+ }  u3 P6 |
T1溢出率= T1计数率/产生溢出所需的周期数
9 b$ n! l! h! y5 d& B2 b式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
% U- d8 B( ?( q5 d% R! O定时器T1工作于方式0:溢出所需周期数=8192-x4 ]% U4 e+ l! z" M
定时器T1工作于方式1:溢出所需周期数=65536-x
' O" W6 u1 Y6 d" I8 v# w4 ]定时器T1工作于方式2:溢出所需周期数=256-x$ W# a- M2 `6 K4 N8 ~
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。2 g  B) @/ p* c# ]6 ~: w. x. W" x
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
2 h# X3 q  h- G' {2 R. B下表列出了定时器T1工作于方式2常用波特率及初值。
0 L0 H# e5 F& ^) q4 P+ b, Q  ]5 Z* u+ g/ _- l
            常用波特率
8 C! a  y! p' E# q. V            
            Fosc(MHZ)2 y1 [- ?( R% Z
            
            SMOD- _7 S. T. T9 |2 \5 }
            
            TH1初值
0 E, r- q7 y; I1 C5 |            
            192009 ]' H( j/ v) {2 ~; l
            
            11.0592
' ~; w% C5 L& ?) G/ k1 b+ g            
            15 @( u! v* s3 x1 C
            
            FDH" `9 }' p% p- ]8 {, D% {, a
            
            9600
) e5 P2 h3 b7 {2 u6 ?            
            11.0592
* T" z. F% x9 u- R" q7 w            
            01 T$ r+ G4 H3 o3 p1 X
            
            FDH
  h' F5 b/ F& c' @% o' c            
            4800
, m# r, T; @: P0 C# P2 i: `- p4 P% U( O8 l            
            11.0592
$ H. X5 _  r) o            
            0* G1 @9 i+ |$ }- k' V
            
            FAH* b. U* Z7 z, r/ r) m
            
            2400
9 E7 P; o5 h# p0 c2 q! |            
            11.0592
8 C0 u6 I- k! [4 B  @            
            0
  Z) W  Y& S5 r8 r) \6 O# {* K9 \            
            F4h
8 R; g9 d; [: R! J) p8 @, `- }% u            
            1200
" U4 i3 H6 H/ I0 F            
            11.0592
( {+ k1 [1 o4 q" q9 ~; s2 b9 R            
            0  Y- C3 C# x8 [2 u; x
            
            E8h$ t/ l* h3 Y( @+ X% y7 P9 |5 F
            
4 y1 u  y' b* s( q# I
8 D* P0 n* m% V4 c

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-8 14:20 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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