5 F- g8 \+ Z7 y& |
7 |, ~) E6 m+ R8 f' [0 s |其中fosc为晶体震荡器频率
& s: ]4 y% n* |3 d# t% }4 Q' R
sm2:多机通信控制位。在方式0时,SM2一定要等于0。在方式1中,当(SM2)=1则只有接收到有效停止位时,RI才置1。在方式2或方式3当(SM2)=1且接收到的第九位数据RB8=0时,RI才置1。
. X6 s' i J# z K6 P0 i
0 R1 L( h# P& B- nREN:接收允许控制位。由软件置位以允许接收,又由软件清0来禁止接收。
3 ^2 G. w$ f( i9 O6 y
& h( N+ q* `* G' i+ M1 A; h$ Z6 Q3 GTB8: 是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如,可约定作为奇偶校验位,或在多机通信中作为区别地址帧或数据帧的标志位。
, ?7 v1 X- s+ x& d- o
7 M$ ?* W& f. x( \RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=0,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。
; W$ d7 _' v/ P
5 Z. x# M) c) Q/ H8 I& b. sti:发送中断标志。在方式0中,第8位发送结束时,由硬件置位。在其它方式的发送停止位前,由硬件置位。TI置位既表示一帧信息发送结束,同时也是申请中断,可根据需要,用软件查询的办法获得数据已发送完毕的信息,或用中断的方式来发送下一个数据。TI必须用软件清0。
! h; c: V& B& G, K+ i x
5 A! ?$ Y8 T2 ?: MRI:接收中断标志位。在方式0,当接收完第8位数据后,由硬件置位。在其它方式中,在接收到停止位的中间时刻由硬件置位(例外情况见于SM2的说明)。RI置位表示一帧数据接收完毕,可用查询的办法获知或者用中断的办法获知。RI也必须用软件清0。
" e+ z* f, |& f' ~7 C ~( f: n$ c1 h& `
特殊功能寄存器PCON
, u* C, j" v& K5 y5 t
% }+ O' K W/ qPCON是为了在CHMOS的80C51单片机上实现电源控制而附加的。其中最高位是SMOD。
/ k0 u; V5 p: ?4 ~4 K* l8 ?6 E
4 b4 n4 R, J1 \# ~9 U串行口的工作方式
8 F: v: u4 e$ e
, U: v- g9 m& ?" M% y8051单片机的全双工串行口可编程为4种工作方式,现分述如下:
2 N' ^0 z: f7 w" a- z
. F3 a& @3 [; `4 c: c" |
方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也能外接同步输入/输出设备。8位串行数据者是从RXD输入或输出,TXD用来输出同步脉冲。
- }0 b& E9 G5 U
E* e" |5 c- g, S# j" r输出 串行数据从RXD管脚输出,TXD管脚输出移位脉冲。CPU将数据写入发送寄存器时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。
, N7 j8 [9 P f' \6 l) ?( _- V/ \
3 B" B, t+ C% s! N$ ?1 y9 @8 ^输入 当串行口以方式0接收时,先置位允许接收控制位REN。此时,RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(RI)=0和(REN)=1同时满足时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。
0 j& S4 t- M% f( R! `5 i4 y
& p9 w, x/ S2 `8 j6 Z0 b) w
下面两图分别是方式0扩展输出和输入的接线图。
0 ?0 y, W4 M2 R" W( B% t( @
: E: S8 A2 Y: _
% w6 Q8 Z: A! f8 @/ y' j" Z9 ~<单片机串行口接线图>
) V+ K7 d. U$ ^" ]5 R. T( o7 [3 g
方式1为波特率可变的10位异步通信接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。
7 l# |, C( R6 H+ [9 h& b0 \1 B1 K! H6 y4 Q8 e, `3 Q
输出 当CPU执行一条指令将数据写入发送缓冲SBUF时,就启动发送。串行数据从TXD管脚输出,发送完一帧数据后,就由硬件置位TI。
4 |7 H, ?$ K/ T/ H6 x3 \* X
! M% c: C8 `" ~- |4 t2 g输入 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。只有当(RI)=0且停止位为1或者(SM2)=0时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。
+ O3 D+ g) l; [5 g1 v5 i
) y4 y" U! A3 i( P; X7 M+ G8 e
方式2
1 P( s4 I' D6 ]$ e) {- i5 e( E; E% ?( S( i
方式月为固定波特率的11位UART方式。它比方式1增加了一位可程控为1或0的第9位数据。
/ a" S) r. i: Z5 z+ a0 R6 \7 `( K9 l3 \6 l5 k. S
输出: 发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通信中地址/数据信息的标志位,也能作为数据的奇偶校验位。当CPU执行一条数据写入SUBF的指令时,就启动发送器发送。发送一帧信息后,置位中断标志TI。
/ H8 _: K: C0 I' A4 \: I# J* ~1 z
* x+ b d" i# \- z: O5 V输入: 在(REN)=1时,串行口采样RXD管脚,当采样到1至0的跳变时,确认是开始位0,就开始接收一帧数据。在接收到附加的第9位数据后,当(RI)=0或者(SM2)=0时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;不然信息丢失。且不置位RI。再过一位时间后,不管上述条件时否满足,接收电路即行复位,并重新检测RXD上从1到0的跳变。
! G5 g" A G# _* ^" }/ _5 `0 _3 s
工作方式3
6 k) i6 ?+ ]( F* G; m9 ~
( Q) y% d: z( o( c; j, A方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
2 |( {' ?2 y$ v$ {: p7 @- `( Y; k! M
波特率选择
( e9 b* r. F3 d( G& J! k% M y5 D9 F4 g3 g" w3 @- Z4 a, K0 I
如前所述,在串行通信中,收发双方的数据传送率(波特率)要有一定的约定。在8051串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。
6 S/ s, i! C/ ?; |# k) a1 ~9 x
8 O2 f- r) K% }; L2 V& `& o
方式0
, V! g* p2 J2 B7 T; q: z
- d( b- b0 `. t/ U) c& E* {方式0的波特率固定为主振频率的1/12。
* q7 e8 T4 k4 [! D# B3 U2 o' r. C$ N
! v6 l* R5 z; E' ~$ P方式2
. U" R& l- d* ?8 O
1 b6 q" v% T% k3 F! J) d方式2的波特率由PCON中的选择位SMOD来决定,可由下式表示:
! x* t/ j1 z4 P; L. H1 T
0 X/ n) L1 b C波特率=2的SMOD次方除以64再乘一个fosc,也就是当SMOD=1时,波特率为1/32fosc,当SMOD=0时,波特率为1/64fosc
! o6 g" J; E- M, _& q7 I
8 e" `& J7 A) G6 a
3.方式1和方式3
6 U v: {# _# j
o& K0 U+ a* x% B; P! m7 n定时器T1作为波特率发生器,其公式如下:
$ }. t* q$ t! F7 L9 x2 Y
0 g( p; m6 V5 h: X: d5 U
波特率=
![]()
定时器T1溢出率
, _3 p- j+ r! \# k2 u; o) G+ {; W" e1 b, m% b
T1溢出率= T1计数率/产生溢出所需的周期数
. h& _) l/ O/ n9 e2 v
& c9 p" ^9 | N7 X2 D& E式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fosc/12;当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值有关。
: g# ?6 [& d4 n, [
" [( f: s4 m+ ~
定时器T1工作于方式0:溢出所需周期数=8192-x
) n" B8 I3 k4 n @3 O& J
* r# Z1 I9 W2 D' z1 F- q定时器T1工作于方式1:溢出所需周期数=65536-x
: p0 i- i4 G# |: Z% L' E& R! j& H- d* m. q3 D: `/ g- J
定时器T1工作于方式2:溢出所需周期数=256-x
, R3 L9 M w( `- n
7 }# a) u s7 l' D7 d; t
因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。
1 o) @7 r% k. [' H! O3 M) g: `2 Z; {! S% \
当时钟频率选用11.0592MHZ时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶体震荡器就是这个道理。
& R4 ~% g4 h: o2 j
& L! V% _0 J( B下表列出了定时器T1工作于方式2常用波特率及初值。
, G1 `/ a) @# L ~3 L2 y" e
! Z) z+ N! Y% z4 v: D# U' r* O1 b
8 z9 @, s% b% _# v
# k; c3 \" D% m( y3 g