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

单片机21串行口介绍

  [复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
串行口是单片机与外界进行信息交换的工具。+ C3 m9 |# `+ k! n

  u9 T0 {: B& T4 f' r0 l9 h8051单片机的通信方式有两种:
4 f' H& R8 m  e% u  U. S+ x) M# h
1 j8 K# y! ]% Y* F% }9 ]* U并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
2 ]/ T+ ?% {+ v* I: p! L3 _4 Y* Q. S6 N+ |5 T
9 U" H( n/ c2 Z6 z$ a" ^' A) E  r
& F$ Z7 D5 `; U- E
串行通信的方式:
3 ~( b3 K; Q) g5 P  P+ [* E+ S
$ O+ \# x/ J! R" X: {异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
! k5 |! C2 i* ~# ^: g. m% o) B  S9 s; R  S+ T
在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。# @: q; b$ k  H2 o* t/ G
: g9 M9 F' ?8 V# W) q3 c0 a
在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。  z5 t& G9 m5 g3 N

& ]+ d0 R$ C1 {  [. \波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。
; f, `0 C( m3 o
( g9 a  H# ~4 [; y7 L( U同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
/ D" V) S, _+ m  m7 p) C1 r6 S1 G: @" e! @" i" ]0 g) C% s- D
通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。
4 H0 N6 {2 X( P- q2 O
8 T4 k8 `6 e: {  V/ k& t( F3 p! G2.8051单片机的串行接口结构
, H7 s! V: }& u) m- L2 }# ~( u. q* X- W  D
8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。1 p8 M$ ]2 l: u6 Q3 C/ Z. }

* |$ j( |% ~! s' t0 L$ ]+ \8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。( W" ]1 C" h  R7 Q; W) j5 s

' C5 ?, x7 u0 `, u1 p串行口的控制与状态寄存器
/ L8 ^% f7 H4 W3 [% @& U
8 Y$ @7 a( F5 V. i1 i3 g. f7 e0 _串行口控制寄存器SCON
$ _% Y3 ^9 G7 K+ h% p. W; P
2 Z' `$ f0 g% f, U2 [它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:2 F7 s. y8 K, Y" \- _

( l7 b/ L; d4 S( ~& b3 h
* b6 J1 N; c( h
3 c/ w) R$ g( J1 \8 I& Q
SM0、SM1:串行口工作方式选择位,其定义如下:
" ]3 C# d# R+ M* h2 j
' }0 e* M4 s7 v* W) b
; _% ^! |" z7 Z  `
( S" C2 y/ F9 {& q, q/ x5 k
其中fosc为晶体震荡器频率! i3 w3 `" k8 m9 A+ R2 B  n( Z
sm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
. e! J" P! s3 z, R0 R$ J" t9 W( W: B/ a- {4 X
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。. g2 ]7 w1 n1 L; J( F7 i% o

( _: s+ \- P" N6 y, pTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。
8 D) i( T% D/ k0 b  |1 m5 A9 N1 W' e" P" d3 r2 D! J+ t
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
# K5 J* K8 r: C2 Y( q3 t7 C: G  J4 o
ti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。. s  C& H3 _  H

! E' _& L; I2 i: [7 v: ERI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。. X9 U7 O( x4 u& g' P) \
# F# B. R. p( c
特殊功能寄存器PCON0 h/ y. ]. w; {" z3 |

( V  O9 {$ o: b) @PCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。% R/ b2 @2 G+ y& H. J
. \7 A* ~( [+ w! J
串行口的工作方式
" E8 f; P/ F3 O7 i4 B; C# |
; r$ F" K% @" x3 t8051单片机的全双工串行口可编程为4种工作方式,现分述如下:% A# A  o3 N5 m0 D# R

0 T. W7 }" Y3 o+ k方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
  ?% ^- W+ j$ J% q) s! P) I
. t7 [+ X1 h' q8 A, W+ O输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。5 ^! R8 B  o% c5 f  \. G2 R/ q2 v

2 X1 B, w. q" ~5 A- y( ~% D输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。# }+ C4 s, h8 L

; s  P7 r7 c) m+ l( g下面两图分别是方式0扩展输出和输入的接线图。. @4 I0 ?$ M+ Z- G& O( o- E

3 Z6 s; I+ e9 m+ w% {5 ?8 t/ P! p0 v
* ]) v0 W9 w7 m' P7 w$ t
<单片机串行口接线图>
) M  n& s4 Q* p3 @
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。2 C5 Y# l; f7 J* u

9 Z: l% P, ]; V* \输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。4 i8 N! g8 L- G4 \8 P

; `/ [, f- h# b4 t. Z输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。* X9 U1 y# \: I5 y  ^; B2 h
4 M! g- A& D" T3 v( D% d: @9 S# O
方式2
: [  o; U9 O+ {4 A0 |0 {
; D& Z  Z& {0 O- `( L' w/ b方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。5 g" y5 [* _3 o1 K' i
! [9 b- z( y6 x7 ~
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
# q5 k) c- h! [6 b/ k/ A6 L$ R+ c3 B/ @5 J! ~* Q4 L! [5 k
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
; V6 a: B4 I+ v
6 o: R+ H$ O. g3 D( V2 B5 V工作方式3
& B' p! Q' I7 z: Y$ ~# h0 [
4 o& C9 g- V5 A" l5 j方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
7 {) P" T! s7 Y5 p! @, i0 O& a. Z7 \9 P5 F& u% H* A& }7 y. ]
波特率选择
! N1 Y1 o2 ?+ |0 x! y, Y
1 N4 c9 T( K& d* U如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。1 ?( Z0 |1 e, S) Q; o

& ]4 x  I% v2 q方式0
0 _# x2 i( k' I6 o1 ]& X: ^1 h, ?
3 q3 J& G8 u3 x) c- U; T方式0的波特率固定为主振频率的1/12。& O  m' |% c1 ^$ e3 d- z& s7 M

7 R5 F+ s% R8 o, ~方式28 b; T) Q, {; Q# R2 o
; ?5 \1 ^; \, ~; f+ y, O+ \
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:4 `) C# E" t+ m  Q% _8 A* e; ?

5 M: [" ~# C3 S/ v2 e波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc; R3 O" k. O" }; n, e
8 _. H5 _7 b8 q) z/ J
3.方式1和方式3/ G1 N* k; J  j; |% u( I6 ]( |+ O- Y
- D9 _$ A/ S+ \9 o9 ]: E1 e
定时器T1作为波特率发生器,其公式如下:. N) t7 u+ T) ?6 j4 i( M( ]
8 \$ D, {/ o1 l/ l+ R
波特率=定时器T1溢出率
  m0 P2 B. r/ a0 _0 y% \' y0 P# T8 t( _. U$ R. \) y
T1溢出率= T1计数率/产生溢出所需的周期数
& D# R8 I! ^, E, Z: l( ?
  K( J$ @8 p3 H* S+ e式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
3 c3 i9 j0 ]8 o1 j6 T- J% k5 v( k2 S
. X5 T3 I# A. x: t+ Q4 x7 q定时器T1工作于方式0:溢出所需周期数=8192-x
" n) P: F" V) H4 ]8 i/ {' K; z% C1 @9 s/ H
定时器T1工作于方式1:溢出所需周期数=65536-x
" p% H' s0 s9 C* H1 }$ w3 t) {- C& e$ ^& _! m* B
定时器T1工作于方式2:溢出所需周期数=256-x
6 b4 n; g) \/ V! m( B% @+ x. f7 F! t7 X, \- A, C% ^& P9 Z
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。3 }1 T2 |$ {6 l. \  Q

7 m: ~0 X6 R1 V4 p2 R6 @: F2 O当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
3 N$ l4 A7 E% ]' X4 M# f7 f/ @4 z. o! E: u: p4 `3 B
下表列出了定时器T1工作于方式2常用波特率及初值。
, ?( |8 Q9 |' c& x

% ~- ^* x$ X6 n, J0 c# C* G' f6 }1 d

; }/ E- d) @  i. v4 k; R/ L
# A6 ~) k$ _( R, {- U! }* S

0 Z- s  R/ |; m- D& \
1 Z' {8 ^: u  l0 i$ t/ |
6 I4 W7 j. I' S$ |- i

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-30 17:00 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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