|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
介绍:串行口是单片机与外界进行信息交换的工具。3 }2 Y: B/ o* }) R
8051单片机的通信方式有两种:
- j- c2 a0 p( z( U并行通信:数据的各位同时发送或接收。 串行通信:数据一位一位次序发送或接收。参看下图:
4 `2 c- e! o8 P2 I, V + K q, R* r8 [( j6 I% h. N* W% G. r! E
串行通信的方式:
, V8 _5 O0 K/ U$ e异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:
% O$ N: d. K1 {8 `* n5 k8 Q在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。
1 L2 N' |8 F# a- P, }2 v$ C在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。3 Q/ G7 G$ p% B, m
波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。: |! i: K6 X, Y& I( |: P. v \ J
同步通信:在同步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。* ]: H1 A& a+ S5 r4 G" I
通信方向:在串行通信中,把通信接口只能发送或接收的单向传送办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。) k: |+ l$ Q$ k/ E+ x+ | t- R
2.8051单片机的串行接口结构
: K/ v- c9 S4 e) u3 r N+ D; F8051单片机串行接口是一个可编程的全双工串行通信接口。它可用作异步通信方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通信协议进行全双工的8051多机系统也能通过同步方式,使用TTL或CMOS移位寄存器来扩充I/O口。
/ Z# r! [& ]6 ~. ]8051单片机通过管脚RXD(P3.0,串行数据接收端)和管脚TXD(P3.1,串行数据发送端)与外界通信。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。
0 _' N0 ~, J! O. ^5 Y+ \% a串行口的控制与状态寄存器0 M) X: u% {! |$ O5 v
串行口控制寄存器SCON
; n6 _/ P8 Q9 l5 ]# K! y它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:
& A2 o* Y& @) u8 I* q: X. [) F6 e: N" h
D7
! X1 q) C4 m4 ^" v4 s6 V+ D | D6
O% t( h) f* h- x6 N8 A0 ]+ }- f | D5
4 @' N0 q0 j( H. k | D4
6 Y0 }, h/ [" Q6 l" y1 P | D3* a& o0 f: d7 ~8 Q" A
| D2
' x4 X* c. _% i- d/ s+ g | D1% n, L* e' B/ V/ L+ C1 b: h
| D0
- k' \$ b9 @7 d% K) y- k1 F | SM0
) A5 l) j+ ~; a3 r1 c& R- t | SM1
" T7 M4 S4 m' o% f; J4 j/ G. t1 ? | SM2
- O, ]' _7 \/ C) [2 K$ f$ [3 j | REN3 T& o3 P, F3 P4 W6 H5 ^' ~) D" G& S
| TB88 x; s8 {, Z1 b8 D! B% @
| RB83 y7 t4 p6 d$ P# s1 z; U
| TI0 O/ K# O* Z: m3 y1 l
| RI
( ], L& b" N2 @ F1 K | SM0、SM1:串行口工作方式选择位,其定义如下:
/ D% k- D4 x; I# P4 H4 e7 a! \- `8 V% o' M9 {1 d
SM0、SM11 h D9 g+ z; ?& v" c
| 工作方式
, p! a2 J3 r$ I& Y# {$ h | 功能描述
6 k6 i" E# R5 O; w- f | 波特率- A$ F7 P+ A: w2 R( l- }" C
| 0 0: d9 S" |! u; K/ \! x8 r k
| 方式0
# [% S. {! M4 \8 e# O4 A& N | 8位移位寄存器
1 o1 V6 X; Q; f2 E | Fosc/12
# V; v: `7 D3 n+ t" q | 0 1
5 J7 f% H0 v8 Q' k! q | 方式1, D' R( i- U, A- P# @
| 10位UART1 r3 |- h& w& @- c# J
| 可变
# a9 {# C! \. I/ }0 j/ t | 1 09 s+ M, N9 m; O! ` Z' ~! L# u
| 方式2* H- y4 K/ O! W" W4 Y
| 11位UART( ?- ?# O0 \% l! J" ~$ p
| Fosc/64或fosc/32* ?. t; D4 ]: G" `( O
| 1 12 R/ \; |/ p' X E% X
| 方式3! X! j N# u9 t4 R2 |: K
| 11位UART
' c: }$ F. s& g" h( a, i) L | 可变, ~3 A6 [6 E! a
|
! B* |* l$ P3 E+ ]其中fosc为晶体震荡器频率SM2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。% s& ~0 U: K0 B' S
REN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
4 [" ^4 V4 J6 y, x3 |TB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。! s7 R( S* c3 N) a3 t. _: @
RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
. o* l5 v& G* gTI:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。& }% M/ T m* ^- O, V* ~
RI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。* v9 L, ?7 a+ V. W4 C4 q
特殊功能寄存器PCON
7 I4 \/ g2 P3 G2 {9 oPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
9 a& y. \ f$ S+ h5 N. \7 s串行口的工作方式
& h3 b$ F. L$ L8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
+ d" G' k' C: Z8 L8 _方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
, K: d: Z+ K& i: a b输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。9 ?4 ?, J. T( y4 g
输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。4 e) o- D) T$ z' e( H4 Q0 x
下面两图分别是方式0扩展输出和输入的接线图。
9 P K5 o, @: C- h( R/ i![]()
* A! K0 f/ W g<单片机串行口接线图>
: E. L9 n$ m* V3 @4 u* m0 v1 v方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。& B+ ^- J" O; a3 B
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。- Z2 a" i$ y# l9 R
输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。) M$ p3 z9 C* e! S
方式2, J, S' @& F U) J
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。- f# k( z& W. N% Z: h: a, r* u6 d
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
! B+ e+ z0 [$ A5 c输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。$ E- C* y# ^- X) L& r7 e |
工作方式3' N. r( S6 V: F1 ]$ z) T, Z6 G
方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。) y0 r. M8 t. Y
波特率选择
9 [9 A- Y2 y' L) z4 H如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。2 V O6 A, g5 n( h" y: c$ o) [
方式0
- e. ~" N, Z$ D! {9 }方式0的波特率固定为主振频率的1/12。; R; l$ y* e1 E" a/ N h5 N
方式2
! `! A9 c4 I9 A* J4 J方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
: C( X) `! e0 H* v波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
) v4 y# g' @8 |+ q3.方式1和方式3
. \: [6 g% }& B; d' W/ e定时器T1作为波特率发生器,其公式如下:
" P) i( J/ H) I U波特率= 定时器T1溢出率
8 m: o z9 W1 ?5 F% K) GT1溢出率= T1计数率/产生溢出所需的周期数
! ~2 m8 R* U5 F: m9 n' s式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
; V% l3 G- _5 e定时器T1工作于方式0:溢出所需周期数=8192-x0 t* v$ o; P! P; U1 S3 P/ c, @
定时器T1工作于方式1:溢出所需周期数=65536-x D# Z1 p( a, B
定时器T1工作于方式2:溢出所需周期数=256-x3 Q; P% G3 j/ s
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
2 @7 ]4 A) I9 m0 t当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。; o% d$ P6 N, I' F' ~" R
下表列出了定时器T1工作于方式2常用波特率及初值。! [+ B O6 x+ _% p5 X$ Q4 h
" j8 `. D% }4 ]" b+ z" @$ t
常用波特率- Q' A' \- m) X$ _5 v6 ?" Z
| Fosc(MHZ)5 m& N; @3 o* R- |
| SMOD
7 q: B3 a2 i3 P* `4 I1 x6 M2 W* t! ` | TH1初值
/ c1 N, ?4 z0 z, @. l! p$ o. u | 19200( A+ S3 [$ g+ m; m' B
| 11.0592
+ W4 g; H4 w+ x( d$ o8 S% r | 1
e! L4 U+ i. w2 H3 ~( H+ l | FDH
3 c Q3 @9 G( N3 R$ N2 z | 9600- [) M2 W& ~8 `5 e9 h9 z
| 11.0592- Q8 r0 V$ x7 S
| 0
* j& b2 R' g1 x | FDH s1 z( u- w4 V' K4 X$ F
| 4800
0 a+ @" [7 f# | | 11.05929 b2 K9 n+ ?9 Y! D k. Y
| 0
9 K6 a- K/ L/ l* q+ Z7 h! e/ J | FAH! f& t2 [( n8 ], I: Y% ~
| 2400, J* D8 u3 {- b. K) Q$ C
| 11.0592: E- N1 X0 N$ J& I0 x
| 0
( f7 e" c& |) ]0 K | F4h& S: ]/ {: J8 q" w9 F. Y- a
| 1200: L% P" b" j8 j5 g5 o
| 11.0592
( L V, C. X& x* U. [$ E6 m% ?* J0 d | 0
, l* i7 w9 E1 a | E8h
; d6 s7 T8 E; M& ` | 6 b8 m R1 N0 k0 Y
' y& ]3 @5 Y0 ?( s0 L+ i
|
|