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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
介绍:串行口是单片机与外界进行信息交换的工具。
# b- ]: r# w% p7 g8051单片机的通信方式有两种:: s, e& W8 l% Q3 z
并行通信:数据的各位同时发送或接收。  串行通信:数据一位一位次序发送或接收。参看下图:
1 C. l/ o/ g( z9 p
0 I- ?4 ~0 O3 G1 l5 S! H0 s串行通信的方式:
9 H' G1 [" t6 w  u" J+ n异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
; g, `& i' ]7 R5 o在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
" l+ B; u& a! D" {在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。
  n) ]. z) P; ?6 q波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。8 y, J% x( T/ ^6 p+ I% e8 b, T4 s
同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。
& B& C* Q& U% D6 w. o2 d4 P通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。, H, O# T3 d! f* w. X( s0 o8 G2 R
2.8051单片机的串行接口结构
  a8 M8 ]" ]" Q7 O/ X8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。% w# u. D* D2 E1 E9 _! ^
8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。9 d0 _5 A) z# Q3 y
串行口的控制与状态寄存器
( @8 N8 \$ i3 g9 t) t3 s串行口控制寄存器SCON& E$ ?. b* S1 N; w
它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:
5 x4 V2 ~4 ~$ K! v, a% B2 y! x1 L! {0 D& i7 @8 b
            D7
2 J" K5 Y9 `& V9 b3 Q            
            D67 m+ \' G0 D) i) X& f) }
            
            D5
4 U8 j) Z' f# @9 ?% O  D            
            D4
3 T* T" n3 L* U2 n8 u+ g) d, b            
            D39 n( t+ k/ B: `: J' ^7 L9 u, Y% T
            
            D2
; |: _$ A' Y5 e) l/ U            
            D13 \. I2 ?: f' I8 F. E' u# t
            
            D0
7 C" Y* W' r0 m9 ^; w            
            SM0
" ]2 c. j' u! ^8 X1 p  v$ O# T            
            SM1, p4 T# G6 n/ Q1 E
            
            SM2
; |+ @# d2 d4 j& v            
            REN
) U; ?$ r1 U9 o3 {, z            
            TB8
8 F" I; P+ L1 l# G* u            
            RB8- ?/ X5 k+ W+ l4 y5 A$ ]8 u* |6 ^# I
            
            TI! m6 m( P8 V5 w% w$ s, [
            
            RI: I' v- G* W& P% j
            
SM0、SM1:串行口工作方式选择位,其定义如下:5 c1 ^% W$ Q. f

5 H  x( v' s9 b/ `5 H
            SM0、SM1$ u" M% c& c' A. ~# B, K
            
            工作方式
- }" W5 r& c" b: d& b( \            
            功能描述6 d5 ^; N7 s% X+ I" i( G( T% ]1 M6 `1 [
            
            波特率3 G1 |$ Z& h5 d' ?# n3 ~
            
            0 0
( ~5 q4 p0 e& z/ Q            
            方式05 E+ c' Y" V. [; @# l& |/ U
            
            8位移位寄存器  s, U1 j4 C3 q8 T9 o# o
            
            Fosc/12
8 Q6 M) s0 S3 m9 L            
            0 1
" d) ~, n# w' z3 B            
            方式1% U' e; h- q+ A0 H& N- Q
            
            10位UART% D: Q% X/ g# w% d
            
            可变# Z, `% k9 U; ^6 y/ u
            
            1 0
9 P" q  S3 M" f/ Q) E3 o. A            
            方式27 D: h8 v7 u& F! X; W) Q7 T
            
            11位UART
$ ^0 _+ i- I% I" {            
            Fosc/64或fosc/32# c% i( b; `" \5 q# U9 m
            
            1 1
* p, U7 K5 {7 N+ m, _            
            方式3
2 q& q9 F6 V1 q            
            11位UART
3 E9 H$ K' [, M6 ?            
            可变
% @7 Z2 X  t; h" o$ q            

( N$ Q) _2 |! y8 f其中fosc为晶体震荡器频率SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。  I) o- R# u( h' W4 ]" l- b
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
! N; I% d/ ~) ^9 {! a9 YTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。. W8 @) y2 i2 D" @7 c( L7 o3 D
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。( a( T" U5 L& S6 W# ~; ^# ~& s
TI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。
; j) d$ p3 o. {: U% u; Q5 |RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。* c( _0 B6 g; r  }& a. d0 H, }
特殊功能寄存器PCON
( \3 F. h. F8 L) B7 t# k5 FPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
1 b; Y; x. a7 ^; s串行口的工作方式+ g8 y5 g- l% f- R- z5 d3 A; d
8051单片机的全双工串行口可编程为4种工作方式,现分述如下:1 s5 h+ q( T. A; R% _
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。; N9 Y& r8 H( r$ k
输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
3 x) P' W; \2 O7 k输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
# E5 ^5 T8 I+ G, R下面两图分别是方式0扩展输出和输入的接线图。: `6 B0 `7 @9 e& Z7 G% O, F0 U
/ b% E3 {" m# ~* h
<单片机串行口接线图># s8 j7 a: ^2 L. R7 x
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
/ ?8 `8 A! v, j7 s" ]5 J4 T6 i: j$ f输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
( G8 i, g9 `' r- [6 m3 x' s' [' u输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。
+ z$ W; S2 t' M方式27 S8 L4 X/ T$ y0 [
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。$ h! v& E# n; f. T
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。8 }8 A7 Y. t" _* d
输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
' s! N0 ?  _( o- K! F, ~9 \  t7 S9 V1 I工作方式37 A; o+ ?; \; f7 o4 k3 F
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
# o- f8 T0 r: X+ Y$ g3 X; V4 [4 @波特率选择
( M% _4 L1 K  E" \4 C6 r如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。$ d5 j! j% @. _: R
方式08 V( k; x! w* p/ ?( n
方式0的波特率固定为主振频率的1/12。
* j5 w2 b3 O- ?* b  f4 {方式2- G. n, z' `9 y6 E; J! _# H
方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:3 k" y" n6 i* `" H
波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc0 p/ T# U6 E1 n  @( O2 v! l5 {
3.方式1和方式3
9 t; X9 Z( }' Y$ o  d9 b/ Y定时器T1作为波特率发生器,其公式如下:; U. L+ j1 d9 q; b7 Z
波特率=定时器T1溢出率; ^$ d# _; S- m( M: P7 v
T1溢出率= T1计数率/产生溢出所需的周期数
' N( l+ m; }; W0 R. A式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。* `  c9 B9 z# \( S6 Q! O
定时器T1工作于方式0:溢出所需周期数=8192-x
/ m' F# j2 \4 i/ }! Q2 |* {. l6 d定时器T1工作于方式1:溢出所需周期数=65536-x5 D6 H+ d9 c5 F1 A: s1 e
定时器T1工作于方式2:溢出所需周期数=256-x
  a9 x. H# v+ \因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。9 y/ Y( H+ \1 t, G! @9 ^
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
7 U( b0 T' m3 I$ K2 ^) ]下表列出了定时器T1工作于方式2常用波特率及初值。
- S7 n( M  Y- U& y) h  o* O9 Y$ c9 ^$ e% k, U3 z3 _
            常用波特率
' h( M% ]; a: g1 n( V9 F6 A            
            Fosc(MHZ)9 w+ a! n+ q4 _0 d
            
            SMOD- {# k% C+ l$ w  {* c$ a8 B
            
            TH1初值
/ L' F! h6 \9 v( E1 Q            
            19200& W3 X, W* D$ F% }
            
            11.0592
; e7 p' x3 \; b0 _0 K% S9 g2 o            
            13 h9 J: r& F4 ]# y1 M: U
            
            FDH! V: Y* _& n7 Y/ {
            
            9600: o6 E4 C) s( c* X
            
            11.05925 \4 B! N1 {7 y1 B* V- G
            
            0& r" ]* h/ w! M4 _( E: `$ E& M
            
            FDH! M/ p5 }# G' C5 q, I
            
            4800) w( f) D. Y1 a* V, s
            
            11.0592+ [& L* q+ P& k( @4 b3 u
            
            0
" ~  b' i$ ^" E8 t/ h9 y. r3 ]: i            
            FAH- Z6 j0 B' S) d" D6 Y/ }$ z7 w
            
            2400
  |7 F  q/ L# X$ z% n            
            11.0592
) S5 l% j( \, @+ C; V. p% S            
            0
1 r6 b9 x7 f+ v5 J$ R            
            F4h2 f6 Q' A1 S3 p& g( I
            
            1200
( f  P  Y# H6 r$ I% t) B+ W            
            11.0592
$ M. A; A/ c0 z6 x/ r0 g            
            0
  e& B5 K* V; j+ s2 N            
            E8h, I# N3 ?1 E7 X; w
            

4 @, }; [, w! |; Y! G8 L& W8 N5 {( ?9 G; G

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-4 11:19 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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