+ E: [ v5 H, z. }* a9 V
# h1 A3 i" e8 c5 \" y: H: Y ]
5 G4 v6 b- {4 q! n$ Q5 \引腳功能:
4 z) N- m, V" m) l0 R& v# |5 ]MCS-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,引腳分布請(qǐng)參照----單片機(jī)引腳圖:
9 O2 Z4 f4 [) P! J, {3 zl P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號(hào)端子),。
" L g3 \' e2 H" fl P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號(hào)端子),。 * y3 J$ J' T7 p* q
l P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號(hào)端子),。
- k5 P* C4 g# T! Il P3.0~P3.7 P2口8位雙向口線(在引腳的10~17號(hào)端子),。
: F2 L, Z- t0 A& j* X這4個(gè)I/O口具有不完全相同的功能,,大家可得學(xué)好了,其它書本里雖然有,,但寫的太深,,對(duì)于初學(xué)者來(lái)說(shuō)很難理解的,我這里都是按我自已的表達(dá)方式來(lái)寫的,,相信你也能夠理解的,。
- N' v7 _" O5 C Y$ j2 C, XP0口有三個(gè)功能:
# b; Q# D+ P- |1、外部擴(kuò)展存儲(chǔ)器時(shí),,當(dāng)做數(shù)據(jù)總線(如圖1中的D0~D7為數(shù)據(jù)總線接口)
! M* F6 s9 g, N/ P0 J! j$ n' E2,、外部擴(kuò)展存儲(chǔ)器時(shí),當(dāng)作地址總線(如圖1中的A0~A7為地址總線接口) ! |* D) a* r6 O& t
3,、不擴(kuò)展時(shí),,可做一般的I/O使用,但內(nèi)部無(wú)上拉電阻,,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻,。
, L- S( @5 E/ Q4 Z- tP1口只做I/O口使用:其內(nèi)部有上拉電阻。 ; M$ S9 p1 [; v" w+ Y8 E
P2口有兩個(gè)功能: 7 S2 f4 z5 p- |! d5 |! l) E4 t
1,、擴(kuò)展外部存儲(chǔ)器時(shí),,當(dāng)作地址總線使用
0 `3 c6 d4 _' x1 A9 @+ b( @2、做一般I/O口使用,,其內(nèi)部有上拉電阻,; " c: V/ h" ^. s# y$ m5 u3 e1 j
P3口有兩個(gè)功能: ( S. y$ `: V% R! x2 Z3 @5 U
除了作為I/O使用外(其內(nèi)部有上拉電阻),還有一些特殊功能,,由特殊寄存器來(lái)設(shè)置,,具體功能請(qǐng)參考我們后面的引腳說(shuō)明。 ( H# h( L3 T1 ~5 V
有內(nèi)部EPROM的單片機(jī)芯片(例如8751),,為寫入程序需提供專門的編程脈沖和編程電源,,這些信號(hào)也是由信號(hào)引腳的形式提供的,
: L' |- b3 N* X& S% U2 |; O即:編程脈沖:30腳(ALE/PROG)
# m: C) ], @+ @7 V編程電壓(25V):31腳(EA/Vpp)
2 ?5 n* t4 o( T" p% L d; p6 h$ q( |+ Q接觸過工業(yè)設(shè)備的兄弟可能會(huì)看到有些印刷線路板上會(huì)有一個(gè)電池,,這個(gè)電池是干什么用的呢,?這就是單片機(jī)的備用電源,當(dāng)外接電源下降到下限值時(shí),,備用電源就會(huì)經(jīng)第二功能的方式由第9腳(即RST/VPD)引入,,以保護(hù)內(nèi)部RAM中的信息不會(huì)丟失。 ( J4 K# v" R! Y9 G {5 C3 S
(注:這些引腳的功能應(yīng)用,,除9腳的第二功能外,,在“新動(dòng)力2004版”學(xué)習(xí)套件中都有應(yīng)用到。) : A* _$ }% j; V3 T" m
在介紹這四個(gè)I/O口時(shí)提到了一個(gè)“上拉電阻”那么上拉電阻又是一個(gè)什么東東呢,?他起什么作用呢,?都說(shuō)了是電阻那當(dāng)然就是一個(gè)電阻啦,,當(dāng)作為輸入時(shí),上拉電阻將其電位拉高,,若輸入為低電平則可提供電流源,;所以如果P0口如果作為輸入時(shí),處在高阻抗?fàn)顟B(tài),,只有外接一個(gè)上拉電阻才能有效,。
2 B' K9 _8 ^5 ~$ `$ ~ ALE 地址鎖存控制信號(hào):在系統(tǒng)擴(kuò)展時(shí),ALE用于控制把P0口的輸出低8位地址送鎖存器鎖存起來(lái),,以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離,。參見圖2(8051擴(kuò)展2KB EEPROM電路,在圖中ALE與4LS373鎖存器的G相連接,,當(dāng)CPU對(duì)外部進(jìn)行存取時(shí),,用以鎖住地址的低位地址,即P0口輸出,。
8 X2 G$ R) t+ C由于ALE是以晶振六分之一的固定頻率輸出的正脈沖,,當(dāng)系統(tǒng)中未使用外部存儲(chǔ)器時(shí),ALE腳也會(huì)有六分之一的固定頻率輸出,,因此可作為外部時(shí)鐘或外部定時(shí)脈沖使用,。
# ? g! W/ R- W: g; f! V9 B% D PSEN 外部程序存儲(chǔ)器讀選通信號(hào):在讀外部ROM時(shí)PSEN低電平有效,以實(shí)現(xiàn)外部ROM單元的讀操作,。 0 d% ?) J' V# G/ h- i4 H
1,、內(nèi)部ROM讀取時(shí),PSEN不動(dòng)作,;
# e2 y* @1 ^" f2,、外部ROM讀取時(shí),在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次,;
- }8 R( I7 W1 v$ N3,、外部RAM讀取時(shí),兩個(gè)PSEN脈沖被跳過不會(huì)輸出,; + w5 M* r8 N9 ~+ Q2 W
4,、外接ROM時(shí),與ROM的OE腳相接,。
0 \ W: F2 |+ Q% t參見圖2—(8051擴(kuò)展2KB EEPROM電路,,在圖中PSEN與擴(kuò)展ROM的OE腳相接) $ D8 ~$ \8 q9 S$ G, }: N
EA/VPP 訪問和序存儲(chǔ)器控制信號(hào) , c& ]" Z$ N' i N* I
1、接高電平時(shí): : @1 ^$ w0 P: j- T
CPU讀取內(nèi)部程序存儲(chǔ)器(ROM) & d; }: A9 E. {: p
擴(kuò)展外部ROM:當(dāng)讀取內(nèi)部程序存儲(chǔ)器超過0FFFH(8051)1FFFH(8052)時(shí)自動(dòng)讀取外部ROM,。
5 y M+ |6 |2 x3 z1 b3 T2,、接低電平時(shí):CPU讀取外部程序存儲(chǔ)器(ROM)。
4 z( b$ I9 u5 {/ X3,、8751燒寫內(nèi)部EPROM時(shí),利用此腳輸入21V的燒寫電壓。
; E6 s$ v2 [6 g0 Y* U# } RST 復(fù)位信號(hào):當(dāng)輸入的信號(hào)連續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,,用以完成單片機(jī)的復(fù)位初始化操作,。
8 r1 C( Z1 H4 n, z, X XTAL1和XTAL2 外接晶振引腳。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),,此二引腳用于外接石英晶體和微調(diào)電容,;當(dāng)使用外部時(shí)鐘時(shí),用于接外部時(shí)鐘脈沖信號(hào),。
VCC:電源+5V輸入 / f. E$ L3 y9 c, U
VSS:GND接地,。
9 P. Q$ X' H$ h) b5 N6 ~0 ?5 w
各端口工作原理講解
+ A$ \! C) a6 @+ m并行端口 ( E5 a' T6 u/ l& ?& Q, H
P0端口
; \* u6 m8 s; w( x5 Y. b總線I/O端口,雙向,,三態(tài),,數(shù)據(jù)地址分時(shí)復(fù)用,該端口除用于數(shù)據(jù)的輸入/輸出外,,在8031單片機(jī)外接程序存儲(chǔ)器時(shí),,還分時(shí)地輸出/輸入地址/指令。由Po端口輸出的信號(hào)無(wú)鎖存,,輸入的信息有讀端口引腳和讀端口鎖存器之分,。P0端口8位中的一位結(jié)構(gòu)圖見下圖: ; O r0 ^; ]" C# n0 }
% V/ p$ X8 `! q- K4 f* H$ H/ o. G' j. O管腳說(shuō)明.files/mcu1-461.gif)
8 F1 y; ^3 p- I+ `7 W0 O% K 由上圖可見,P0端口由鎖存器,、輸入緩沖器,、切換開關(guān)與相應(yīng)控制電路、場(chǎng)效應(yīng)管驅(qū)動(dòng)電路構(gòu)成,。 在輸出狀態(tài)下,,當(dāng)切換開關(guān)MUX向下時(shí),從內(nèi)部總線來(lái)的數(shù)據(jù)經(jīng)鎖存器反相和場(chǎng)效應(yīng)管T2反相,,輸出到端口引腳線上,。此時(shí),場(chǎng)效應(yīng)管T1關(guān)斷,,因而這種輸出方式應(yīng)為外接上拉電阻的漏極開路式,。當(dāng)切換開關(guān)MUX向上時(shí),一位地址/數(shù)據(jù)信號(hào)分時(shí)地輸出到端口線上,。此外,,由T1、T2的通斷組合,,形成高電平,、低電平與高阻浮動(dòng)三態(tài)的輸出。 在輸入狀態(tài)下,,從鎖存器和從引腳上讀來(lái)的信號(hào)一般是一致的,,但也有例外,。例如,當(dāng)從內(nèi)部總線輸出低電平后,,鎖存器Q=0,,Q=1,場(chǎng)效應(yīng)管T2開通,,端口線呈低電平狀態(tài),。此時(shí)無(wú)論端口線上外接的信號(hào)是低電乎還是高電平,從引腳讀入單片機(jī)的信號(hào)都是低電平,,因而不能正確地讀入端口引腳上的信號(hào),。又如,當(dāng)從內(nèi)部總線輸出高電平后,,鎖存器Q=1,,Q=0,場(chǎng)效應(yīng)管T2截止,。如外接引腳信號(hào)為低電平,,從引腳上讀入的信號(hào)就與從鎖存器讀入的信號(hào)不同。為此,,8031單片機(jī)在對(duì)端口P0一P3的輸入操作上,,有如下約定:為此,8031單片機(jī)在對(duì)端口P0一P3的輸入操作上,,有如下約定:凡屬于讀-修改-寫方式的指令,,從鎖存器讀入信號(hào),其它指令則從端口引腳線上讀入信號(hào),。 讀-修改-寫指令的特點(diǎn)是,,從端口輸入(讀)信號(hào),在單片機(jī)內(nèi)加以運(yùn)算(修改)后,,再輸出(寫)到該端口上,。下面是幾條讀--修改-寫指令的例子。 6 K) A& A' r/ O6 a+ R9 p( `, x
, i" e8 ~' ?4 d* A% F4 [
- O" n1 v/ S/ S+ ?9 e" d
- k/ y0 A2 w5 l9 _$ Z5 P, M2 gANL P0,#立即數(shù) |
& I' F, ^/ W3 }8 q 0→立即數(shù)P0 | 4 r5 X9 D# P( i) s7 U# b: ^
: i8 T' W% D# s2 R( E- n. w5 a
ORL P0,A | / q+ C0 e% |, P* U% l7 w( c
0→AP0 |
$ W9 r3 g% C" P5 p/ E2 u+ C& O
6 H' q; B. v. X! y' a6 kINC P1 |
0 G! e2 O1 V8 r# @& Y7 ~3 m 1+1→P1 |
, Q D. E. m* W8 z! f+ s& I& I8 ?. `
% A8 \# D9 @/ A1 LDEC P3 | # f5 s6 ^* Y) y1 S, x- U' ?
;P3-1→P3 | " b. F# P- C) n2 e
7 X6 W' U( s2 o! ~" }) C' M
CPL P2 |
. R, {8 v6 K3 x# a;P2→P2 | % w: s/ y1 N, @1 ?; N& g$ ]. d) H
這樣安排的原因在于讀-修改-寫指令需要得到端口原輸出的狀態(tài),,修改后再輸出,,讀鎖存器而不是讀引腳,可以避免因外部電路的原因而使原端口的狀態(tài)被讀錯(cuò),。 P0端口是8031單片機(jī)的總線口,,分時(shí)出現(xiàn)數(shù)據(jù)D7一D0、低8位地址A7一AO,,以及三態(tài),,用來(lái)接口存儲(chǔ)器、外部電路與外部設(shè)備,。P0端口是使用最廣泛的I/O端口,。 " O% @' p4 L* \. x9 _4 K
P1端口: 2 @$ C7 G0 Q, ~ E( u$ x
通用I/0端口,,準(zhǔn)雙向靜態(tài)口。輸出的信息有鎖存,,輸入有讀引腳和讀鎖存器之分,。P1端口的一位結(jié)構(gòu)見下圖. 由圖可見,P1端口與P0端口的主要差別在于,,P1端口用內(nèi)部上拉電阻R代替了P0端口的場(chǎng)效應(yīng)管T1,并且輸出的信息僅來(lái)自內(nèi)部總線,。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場(chǎng)效應(yīng)管反相后,,鎖存在端口線上,所以,,P1端口是具有輸出鎖存的靜態(tài)口,。 由下圖可見,要正確地從引腳上讀入外部信息,,必須先使場(chǎng)效應(yīng)管關(guān)斷,,以便由外部輸入的信息確定引腳的狀態(tài)。為此,,在作引腳讀入前,,必須先對(duì)該端口寫入l。具有這種操作特點(diǎn)的輸入/輸出端口,,稱為準(zhǔn)雙向I/O口,。8031單片機(jī)的P1、P2,、P3都是準(zhǔn)雙向口,。P0端口由于輸出有三態(tài)功能,輸入前,,端口線已處于高阻態(tài),,無(wú)需先寫入l后再作讀操作。 * l( V. r/ u0 o2 Y
管腳說(shuō)明.files/ru6.ht1.gif) 1 G; H8 z6 x7 q+ L/ N! ^
單片機(jī)復(fù)位后,,各個(gè)端口已自動(dòng)地被寫入了1,,此時(shí),可直接作輸入操作,。如果在應(yīng)用端口的過程中,,已向P1一P3端口線輸出過0,則再要輸入時(shí),,必須先寫1后再讀引腳,,才能得到正確的信息。此外,,隨輸入指令的不同,,H端口也有讀鎖存器與讀引腳之分,。 Pl端口是803l單片機(jī)中唯一僅有的單功能I/O端口,并且沒有特定的專用功能,,輸出信號(hào)鎖存在引腳上,,故又稱為通用靜態(tài)口。 & h5 E. w. V: _. N2 j
P2端口: P2端口的一位結(jié)構(gòu)見下圖:
$ [2 a' }; ~. l/ f0 l( n5 [管腳說(shuō)明.files/ru6.ht2.gif) % R( p: `; `* W' F" v( {& R" X
由圖可見,,P2端口在片內(nèi)既有上拉電阻,,又有切換開關(guān)MUX,所以P2端口在功能上兼有P0端口和P1端口的特點(diǎn),。這主要表現(xiàn)在輸出功能上,,當(dāng)切換開關(guān)MUX向左時(shí),從內(nèi)部總線輸出的一位數(shù)據(jù)經(jīng)反相器和場(chǎng)效應(yīng)管反相后,,輸出在端口引腳線上,;當(dāng)MUX向右時(shí),輸出的一位地址信號(hào)也經(jīng)反相器和場(chǎng)效應(yīng)管反相后,,輸出在端口引腳線上,。 由于8031單片機(jī)必須外接程序存儲(chǔ)器才能構(gòu)成應(yīng)用電路,而P2端口就是用來(lái)周期性地輸出從外存中取指令的地址(高8位地址),,因此,,P2端口的切換開關(guān)MUX總是在進(jìn)行切換,分時(shí)地輸出從內(nèi)部總線來(lái)的數(shù)據(jù)和從地址信號(hào)線上來(lái)的地址,。因此P2端口是動(dòng)態(tài)的I/O端口,。輸出數(shù)據(jù)雖被鎖存,但不是穩(wěn)定地出現(xiàn)在端口線上,。其實(shí),,這里輸出的數(shù)據(jù)往往也是一種地址,只不過是外部RAM的高8位地址,。 在輸入功能方面,,P2端口與P0和H端口相同,有讀引腳和讀鎖存器之分,,并且P2端口也是準(zhǔn)雙向口,。 可見,P2端口的主要特點(diǎn)包括: ①不能輸出靜態(tài)的數(shù)據(jù),; ②自身輸出外部程序存儲(chǔ)器的高8位地址,; ②執(zhí)行MOVX指令時(shí),還輸出外部RAM的高位地址,,故稱P2端口為動(dòng)態(tài)地址端口,。 P3端口: 雙功能靜態(tài)I/O口P3端口的一位結(jié)構(gòu)見下圖。
管腳說(shuō)明.files/ru6.ht3.gif)
6 V A4 L! u% b4 Y) R, B由上圖可見,P3端口和Pl端口的結(jié)構(gòu)相似,,區(qū)別僅在于P3端口的各端口線有兩種功能選擇,。當(dāng)處于第一功能時(shí),第二輸出功能線為1,,此時(shí),,內(nèi)部總線信號(hào)經(jīng)鎖存器和場(chǎng)效應(yīng)管輸入/輸出,其作用與P1端口作用相同,,也是靜態(tài)準(zhǔn)雙向I/O端口,。當(dāng)處于第二功能時(shí),鎖存器輸出1,,通過第二輸出功能線輸出特定的內(nèi)含信號(hào),,在輸入方面,即可以通過緩沖器讀入引腳信號(hào),,還可以通過替代輸入功能讀入片內(nèi)的特定第二功能信號(hào)。由于輸出信號(hào)鎖存并且有雙重功能,,故P3端口為靜態(tài)雙功能端口,。
8 c2 x& r' l2 f. F; mP3口的特殊功能(即第二功能):
. P% s6 @$ `* W4 K; o- u
9 S7 n3 B- A) N8 n# ?" V" V @1 i$ q6 x* Z! V! i
$ @3 o( h3 j8 P6 _& X! l3 t; O
8 M# v F6 c% v% ^% y6 C 口線 | ' ?6 q# `. H6 T" P6 t% F; Q
8 Y2 ?/ c$ G, G/ l
第二功能 |
# C2 A+ M9 _% j3 _
, K8 g% s; w: v$ R% R 信號(hào)名稱 | " L T: P" @) |. R- e
- `2 _* y+ i$ t7 j0 I5 f" d
$ [0 t+ o" D& Q+ ^ P3.0 | 1 G# @8 F6 _! f3 g
RXD |
9 K1 b. Q& p. ^- G# \" o% x串行數(shù)據(jù)接收 |
/ i' g' X5 b; Y* v1 \
, [% [. s+ r. H \
7 G2 @3 r- p( M5 g& A$ \$ g P3.1
|
% |7 u) t) K/ XTXD |
) F$ K) M7 U; f" p- _/ }+ ^串行數(shù)據(jù)發(fā)送 | 2 L. O1 r" i! L3 l9 Z2 _
. v1 F/ t$ D9 d0 w1 Y- U4 u, r/ p% g9 a h5 v
P3.2
|
% f: N) Z' @9 v9 a& o9 R3 f2 eINT0 |
/ c- i# o# a6 B/ e8 h3 h0 `& c外部中斷0申請(qǐng) | - X! X/ J5 \" L: c& g9 s
( W& ~* g! d, t0 J9 c
& s% x7 H: y4 e: `5 ?, q P3.3
|
- s' e9 i7 v9 b- S! ]+ t8 _' xINT1 | 1 |- }; V! V* c( }* v+ r( z2 s
外部中斷1申請(qǐng) |
/ T/ w2 w; e7 F0 t- W9 v4 b
& H- q8 C, o! }: }0 W4 ]9 ?6 I% ~2 }1 I1 M
P3.4
| 9 J' d) c4 T% D J, O/ ]1 c
T0 | % h: j" G3 N& v' N0 t
定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)輸入 |
6 ], V4 f2 i" I4 b
5 o6 l* H) o* G7 l& A, N6 [" d2 a- T, h' B3 w% G6 w( K
P3.5
| ) [4 x4 I1 j% ~! I
T1 |
5 M& q1 a1 M+ A/ c2 r定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)輸入 |
- }# z( N4 X, y
7 U7 g/ Z# J# ~$ `
3 s; W; W6 f9 v5 @6 o P3.6
| ) s9 b3 K4 P! t7 @* r$ X
WR | G, r6 k0 l1 J: N' v3 P0 u+ I
外部RAM寫選通 | ; S7 Z# o6 ?, a
( R2 O# P$ L) }8 r
! y. S6 e# Y; o' r) q- {
P3.7
|
, R+ X; t' V! \% g0 `/ ]2 p9 p# ^RD | , `3 P# q. y. r1 Q7 G
外部RAM讀選通 | & Q1 I, s' p/ ?3 ?# I8 ~
使P3端品各線處于第二功能的條件是: ; g$ I3 S1 g5 }; S
1\串行I/O處于運(yùn)行狀態(tài)(RXD,TXD); " K% t( b1 j9 Y" e# O2 x3 ?
2\打開了處部中斷(INT0,INT1); ' I( v3 Z: _: I2 e
3\定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)(T0,T1) 8 \4 h) \ ]$ }( @
4\執(zhí)行讀寫外部RAM的指令(RD,WR) 8 w6 I$ R C; I# i1 d
在應(yīng)用中,如不設(shè)定P3端口各位的第二功能(WR,RD信叼的產(chǎn)生不用設(shè)置),則P3端口線自動(dòng)處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài),。在更多的場(chǎng)合是根據(jù)應(yīng)用的需要,,把幾條端口線設(shè)置為第二功能,而另外幾條端口線處于第一功能運(yùn)行狀態(tài),。在這種情況下,,不宜對(duì)P3端口作字節(jié)操作,需采用位操作的形式,。
+ u: x7 O' e) c' ~# B
端口的負(fù)載能力和輸入/輸出操作:
7 Y5 y* w1 N7 K M7 ?9 Q. AP0端口能驅(qū)動(dòng)8個(gè)LSTTL負(fù)載,。如需增加負(fù)載能力,可在P0總線上增加總線驅(qū)動(dòng)器,。P1,,P2,P3端口各能驅(qū)動(dòng)4個(gè)LSTTL負(fù)載,。 前已述及,,由于P0-P3端口已映射成特殊功能寄存器中的P0一P3端口寄存器,所以對(duì)這些端口寄存器的讀/寫就實(shí)現(xiàn)了信息從相應(yīng)端口的輸入/輸出,。例如: MOV A,, P1 ;把Pl端口線上的信息輸入到A MoV P1,, A ,;把A的內(nèi)容由P1端口輸出 MOV P3, #0FFH ,;使P3端口線各位置l - r7 T9 {1 C+ O3 s! N1 E9 h6 n2 ^+ y
串行端口: MCS-51系列單片機(jī)片內(nèi)有一個(gè)串行I/O端口,,通過引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進(jìn)行全雙工的串行異步通信,。 * Z, v* [# {) O& P4 r) ?
1.串行端口的基本特點(diǎn) 8031單片機(jī)的串行端口有4種基本工作方式,通過編程設(shè)置,,可以使其工作在任一方式,,以滿足不同應(yīng)用場(chǎng)合的需要。其中,,方式0主要用于外接移位寄存器,,以擴(kuò)展單片機(jī)的I/O電路;方式1多用于雙機(jī)之間或與外設(shè)電路的通信,;方式2,,3除有方式l的功能外,還可用作多機(jī)通信,,以構(gòu)成分布式多微機(jī)系統(tǒng),。 串行端口有兩個(gè)控制寄存器,用來(lái)設(shè)置工作方式,、發(fā)送或接收的狀態(tài),、特征位、數(shù)據(jù)傳送的波特率(每秒傳送的位數(shù))以及作為中斷標(biāo)志等,。 串行端口有一個(gè)數(shù)據(jù)寄存器SBUF(在特殊功能寄存器中的字節(jié)地址為99H),,該寄存器為發(fā)送和接收所共同。發(fā)送時(shí),,只寫不讀,;接收時(shí),只讀不寫,。在一定條件下,,向陽(yáng)UF寫入數(shù)據(jù)就啟動(dòng)了發(fā)送過程;讀SBUf就啟動(dòng)了接收過程,。 串行通信的波特率可以程控設(shè)定,。在不同工作方式中,由時(shí)鐘振蕩頻率的分頻值或由定時(shí)器Tl的定時(shí)溢出時(shí)間確定,,使用十分方便靈活,。
1 e& ~& C& y. p$ C2.串行端口的工作方式 ①方式0 8位移位寄存器輸入/輸出方式。多用于外接移位寄存器以擴(kuò)展I/O端口,。波特率固定為fosc/12,。其中,fosc為時(shí)鐘頻率,。 在方式0中,,串行端口作為輸出時(shí),只要向串行緩沖器SBUF寫入一字節(jié)數(shù)據(jù)后,串行端口就把此8位數(shù)據(jù)以等的波特率,,從RXD引腳逐位輸出(從低位到高位),;此時(shí),TXD輸出頻率為fosc/12的同步移位脈沖,。數(shù)據(jù)發(fā)送前,,僅管不使用中斷,中斷標(biāo)志TI還必須清零,,8位數(shù)據(jù)發(fā)送完后,,TI自動(dòng)置1。如要再發(fā)送,,必須用軟件將TI清零,。 串行端口作為輸入時(shí),RXD為數(shù)據(jù)輸入端,,TXD仍為同步信號(hào)輸出端,,輸出頻率為fosc/12的同步移位脈沖,使外部數(shù)據(jù)逐位移入RxD,。當(dāng)接收到8位數(shù)據(jù)(一幀)后,,中斷標(biāo)志RI自動(dòng)置。如果再接收,,必須用軟件先將RI清零。 串行方式0發(fā)送和接收的時(shí)序過程見下圖,。 ②方式1 9 }0 X( p1 a4 S8 F8 z8 o
管腳說(shuō)明.files/mcu1-426.gif) 0 f( u9 ?6 \- x7 O C1 p: C7 W
10位異步通信方式,。其中,1個(gè)起始位(0),,8個(gè)數(shù)據(jù)位(由低位到高位)和1個(gè)停止位(1),。波特率由定時(shí)器T1的溢出率和SMOD位的狀態(tài)確定。 一條寫SBUF指令就可啟動(dòng)數(shù)據(jù)發(fā)送過程,。在發(fā)送移位時(shí)鐘(由波特率確定)的同步下,,從TxD先送出起始位,然后是8位數(shù)據(jù)位,,最后是停止位,。這樣的一幀10位數(shù)據(jù)發(fā)送完后,中斷標(biāo)志TI置位,。 在允許接收的條件下(REN=1),,當(dāng)RXD出現(xiàn)由1到O的負(fù)跳變時(shí),即被當(dāng)成是串行發(fā)送來(lái)的一幀數(shù)據(jù)的起始位,,從而啟動(dòng)一次接收過程,。當(dāng)8位數(shù)據(jù)接收完,并檢測(cè)到高電乎停止位后,即把接收到的8位數(shù)據(jù)裝入SBUF,,置位RI,,一幀數(shù)據(jù)的接收過程就完成了。 方式1的數(shù)據(jù)傳送波特率可以編程設(shè)置,,使用范圍寬,,其計(jì)算式為: 波特率=2SMOD/32×(定時(shí)器T1的溢出率) 其中,SMOD是控制寄存器PCON中的一位程控位,,其取值有0和l兩種狀態(tài),。顯然,當(dāng)SMOD=0時(shí),,波特率=1/32(定時(shí)器Tl溢出率),,而當(dāng)SMOD=1時(shí),波特率=1/16(定時(shí)器T1溢出率),。所謂定時(shí)器的溢出率,,就是指定時(shí)器一秒鐘內(nèi)的溢出次數(shù)。波特率的算法,,以及要求一定波特率時(shí)定時(shí)器定時(shí)初值的求法,,后面將詳細(xì)討論。 · 串行方式1的發(fā)送和接收過程的時(shí)序見下圖,。 ③方式2,,3 11位異步通信方式。其中,,1個(gè)起始位(0),,8個(gè)數(shù)據(jù)位(由低位到高位),1個(gè)附加的第9位和1個(gè)停止住(1),。方式2和方式3除波特率不同外,,其它性能完全相同。方式2,,3的發(fā)送,、接收時(shí)序見下圖。 由圖可見,,方式2和方式3與方式l的操作過程基本相同,,主要差別在于方式2,3有第9位數(shù)據(jù),。
9 v3 X5 l5 g; _* z; P
6 y/ _4 h9 Q$ c 發(fā)送時(shí),,發(fā)送機(jī)的這第9位數(shù)據(jù)來(lái)自該機(jī)SCON中的TB8,而接收機(jī)將接收到的這第9位數(shù)據(jù)送入本機(jī)SCON中的RB8,。這個(gè)第9位數(shù)據(jù)通常用作數(shù)據(jù)的奇偶檢驗(yàn)位,,或在多機(jī)通信中作為地址/數(shù)據(jù)的特征位,。 方式2和方式3的波特率計(jì)算式如下: 方式2的波特率=2SMOD/64×fosc 方式3的波特率=2SMOD/32×定時(shí)器T1的溢出率 由此可見,在晶振時(shí)鐘頻率一定的條件下,,方式2只有兩種波特率,,而方式3可通過編程設(shè)置成多種波特率,這正是這兩種方式的差別所在,。 3.串行端口的控制寄存器 串行端口共有2個(gè)控制寄存器SCON和PCON,,用以設(shè)置串行端口的工作方式、接收/發(fā)送的運(yùn)行狀態(tài),、接收/發(fā)送數(shù)據(jù)的特征,、波特率的大小,以及作為運(yùn)行的中斷標(biāo)志等,。 , Y$ l! M: U! d! u8 B' x7 l
管腳說(shuō)明.files/mcu1-427.gif) / ^1 z% d6 e' V# O& s) E1 H
管腳說(shuō)明.files/mcu1-428.gif)
5 r) U6 E5 i; P
8 C7 H5 N" R3 `- `5 Z) ] |