" D( |& [* f7 w# l% H
- J7 n/ J/ m K! q
$ j1 V$ f5 [# I3 F) \: y" H引腳功能: 9 Z( R7 O/ [+ u q+ K5 e
MCS-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,,引腳分布請(qǐng)參照----單片機(jī)引腳圖:
8 k8 e: ]' E5 G8 O5 S' J1 ^% Pl P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號(hào)端子),。 8 L7 P) p F2 }2 H$ ^1 ]7 R$ Q
l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號(hào)端子),。 0 A5 S' _; y1 v9 U* C2 R% b4 x
l P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號(hào)端子),。
8 Q6 y" n- B" n7 o7 ^l P3.0~P3.7 P2口8位雙向口線(在引腳的10~17號(hào)端子)。 1 F! r% q' ~ \" ]7 l# E, E+ K' b
這4個(gè)I/O口具有不完全相同的功能,,大家可得學(xué)好了,,其它書(shū)本里雖然有,但寫(xiě)的太深,對(duì)于初學(xué)者來(lái)說(shuō)很難理解的,,我這里都是按我自已的表達(dá)方式來(lái)寫(xiě)的,,相信你也能夠理解的。 . S/ E. P# }* K% v; J
P0口有三個(gè)功能: ; e6 G( T2 ^; {$ G6 m1 }; P8 R
1,、外部擴(kuò)展存儲(chǔ)器時(shí),,當(dāng)做數(shù)據(jù)總線(如圖1中的D0~D7為數(shù)據(jù)總線接口)
0 {3 D' A# t k2、外部擴(kuò)展存儲(chǔ)器時(shí),,當(dāng)作地址總線(如圖1中的A0~A7為地址總線接口)
( S3 P' U2 W C8 J3,、不擴(kuò)展時(shí),可做一般的I/O使用,,但內(nèi)部無(wú)上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻,。 : u( p9 J3 @2 d
P1口只做I/O口使用:其內(nèi)部有上拉電阻,。
' d2 t! O% o3 T3 \ TP2口有兩個(gè)功能:
% l% G' u) z- g6 N. Z1、擴(kuò)展外部存儲(chǔ)器時(shí),,當(dāng)作地址總線使用 - K( _! r' w. E- H
2,、做一般I/O口使用,其內(nèi)部有上拉電阻,;
8 N& T( ^ T2 N, h2 ^) DP3口有兩個(gè)功能: 1 |4 c8 W6 `& v* W& o$ {
除了作為I/O使用外(其內(nèi)部有上拉電阻),,還有一些特殊功能,由特殊寄存器來(lái)設(shè)置,,具體功能請(qǐng)參考我們后面的引腳說(shuō)明,。
4 e# P/ R+ ^0 Q! Y% R有內(nèi)部EPROM的單片機(jī)芯片(例如8751),為寫(xiě)入程序需提供專門(mén)的編程脈沖和編程電源,,這些信號(hào)也是由信號(hào)引腳的形式提供的,,
# m, B0 c3 h/ \6 v1 w( k) J即:編程脈沖:30腳(ALE/PROG)
( ~3 f' X6 Z/ [. R編程電壓(25V):31腳(EA/Vpp) $ q R, _4 a2 l( o" i0 }4 Q% F
接觸過(guò)工業(yè)設(shè)備的兄弟可能會(huì)看到有些印刷線路板上會(huì)有一個(gè)電池,這個(gè)電池是干什么用的呢,?這就是單片機(jī)的備用電源,,當(dāng)外接電源下降到下限值時(shí),備用電源就會(huì)經(jīng)第二功能的方式由第9腳(即RST/VPD)引入,,以保護(hù)內(nèi)部RAM中的信息不會(huì)丟失,。
" M+ X3 r" x4 z1 M E. ^ c(注:這些引腳的功能應(yīng)用,除9腳的第二功能外,,在“新動(dòng)力2004版”學(xué)習(xí)套件中都有應(yīng)用到,。) 6 l+ Z; D6 U- t
在介紹這四個(gè)I/O口時(shí)提到了一個(gè)“上拉電阻”那么上拉電阻又是一個(gè)什么東東呢?他起什么作用呢,?都說(shuō)了是電阻那當(dāng)然就是一個(gè)電阻啦,,當(dāng)作為輸入時(shí),上拉電阻將其電位拉高,若輸入為低電平則可提供電流源,;所以如果P0口如果作為輸入時(shí),,處在高阻抗?fàn)顟B(tài),只有外接一個(gè)上拉電阻才能有效,。
/ Q- `; F, E/ Z/ v5 K ALE 地址鎖存控制信號(hào):在系統(tǒng)擴(kuò)展時(shí),,ALE用于控制把P0口的輸出低8位地址送鎖存器鎖存起來(lái),以實(shí)現(xiàn)低位地址和數(shù)據(jù)的隔離,。參見(jiàn)圖2(8051擴(kuò)展2KB EEPROM電路,,在圖中ALE與4LS373鎖存器的G相連接,當(dāng)CPU對(duì)外部進(jìn)行存取時(shí),,用以鎖住地址的低位地址,,即P0口輸出。
. E. `/ d9 b: A# U$ r6 H由于ALE是以晶振六分之一的固定頻率輸出的正脈沖,,當(dāng)系統(tǒng)中未使用外部存儲(chǔ)器時(shí),,ALE腳也會(huì)有六分之一的固定頻率輸出,因此可作為外部時(shí)鐘或外部定時(shí)脈沖使用,。 3 ]% W5 G5 ?" `1 F/ t
PSEN 外部程序存儲(chǔ)器讀選通信號(hào):在讀外部ROM時(shí)PSEN低電平有效,,以實(shí)現(xiàn)外部ROM單元的讀操作。 / O# r+ Y; |+ M3 k7 |" l0 t
1,、內(nèi)部ROM讀取時(shí),,PSEN不動(dòng)作;
+ _3 T) A5 h! l* b- F2,、外部ROM讀取時(shí),,在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次; " C0 c% ~( T" z) q2 F S2 I# |
3,、外部RAM讀取時(shí),,兩個(gè)PSEN脈沖被跳過(guò)不會(huì)輸出;
6 T. v0 T- j, `: _, y' P( p4,、外接ROM時(shí),,與ROM的OE腳相接。 - q/ h8 B9 R" F! O; |' r. w5 I
參見(jiàn)圖2—(8051擴(kuò)展2KB EEPROM電路,,在圖中PSEN與擴(kuò)展ROM的OE腳相接) . R5 Q. E6 X- U+ `6 P4 X
EA/VPP 訪問(wèn)和序存儲(chǔ)器控制信號(hào)
. n1 ]$ K2 N/ s5 g' J4 y1,、接高電平時(shí):
2 O7 @# u2 w C9 B9 S2 ^: ?CPU讀取內(nèi)部程序存儲(chǔ)器(ROM)
. }0 q& d! Y% C5 O擴(kuò)展外部ROM:當(dāng)讀取內(nèi)部程序存儲(chǔ)器超過(guò)0FFFH(8051)1FFFH(8052)時(shí)自動(dòng)讀取外部ROM。
# P1 H- s8 B/ q, D2,、接低電平時(shí):CPU讀取外部程序存儲(chǔ)器(ROM),。 ; G7 f- @% I* a) s# p1 k" L! T! i
3、8751燒寫(xiě)內(nèi)部EPROM時(shí),,利用此腳輸入21V的燒寫(xiě)電壓,。
2 T6 `) h: D* [( c6 U* K2 E RST 復(fù)位信號(hào):當(dāng)輸入的信號(hào)連續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,用以完成單片機(jī)的復(fù)位初始化操作。 # L! d5 @9 Y, m' x% A
XTAL1和XTAL2 外接晶振引腳,。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),,此二引腳用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),,用于接外部時(shí)鐘脈沖信號(hào),。
VCC:電源+5V輸入
0 ^! G0 v4 Y l6 |4 S3 s2 a VSS:GND接地。
" v$ a: {0 U+ O2 q各端口工作原理講解
3 N8 W1 e3 u( q( H) ]并行端口
! @: Q, {. o* BP0端口 I" `% P( w4 f. ?
總線I/O端口,,雙向,,三態(tài),數(shù)據(jù)地址分時(shí)復(fù)用,,該端口除用于數(shù)據(jù)的輸入/輸出外,,在8031單片機(jī)外接程序存儲(chǔ)器時(shí),還分時(shí)地輸出/輸入地址/指令,。由Po端口輸出的信號(hào)無(wú)鎖存,,輸入的信息有讀端口引腳和讀端口鎖存器之分。P0端口8位中的一位結(jié)構(gòu)圖見(jiàn)下圖: $ i. b& ~5 `. ^: Q |2 ?# B/ {
2 e8 V9 a5 ~$ \* ?8 U, v管腳說(shuō)明.files/mcu1-461.gif)
4 \, v9 ^5 S, h 由上圖可見(jiàn),,P0端口由鎖存器、輸入緩沖器,、切換開(kāi)關(guān)與相應(yīng)控制電路,、場(chǎng)效應(yīng)管驅(qū)動(dòng)電路構(gòu)成。 在輸出狀態(tài)下,,當(dāng)切換開(kāi)關(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)為外接上拉電阻的漏極開(kāi)路式,。當(dāng)切換開(kāi)關(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開(kāi)通,端口線呈低電平狀態(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的輸入操作上,有如下約定:凡屬于讀-修改-寫(xiě)方式的指令,,從鎖存器讀入信號(hào),,其它指令則從端口引腳線上讀入信號(hào)。 讀-修改-寫(xiě)指令的特點(diǎn)是,,從端口輸入(讀)信號(hào),,在單片機(jī)內(nèi)加以運(yùn)算(修改)后,再輸出(寫(xiě))到該端口上,。下面是幾條讀--修改-寫(xiě)指令的例子,。
& j9 O- ~& {" {( `9 @1 r% L2 B) I% a7 k& i6 B: k9 T$ \! ^' t6 ]' {
: }3 t4 t. v7 e# }+ q) j/ A/ ]3 a3 ~, i4 K# ?9 l/ d
ANL P0,#立即數(shù) | * h3 z% x& J. V7 z. x/ `
0→立即數(shù)P0 | & Y$ i" `) T* Q; W6 H6 A( B" G
4 V9 R, T# i) a; O& l, U! BORL P0,A |
- ^9 p+ w4 G5 I9 `3 u0 B, E+ W0 n5 r: T 0→AP0 |
$ W; j2 G- s5 m' w
5 A- s6 R9 b+ [. [+ T/ kINC P1 | 1 k, H8 ?8 M/ o* J9 O q9 g7 c% \0 g
1+1→P1 | 3 u4 u( w; ~# Y( R- S
5 {/ e/ Z Q: Z5 W+ e
DEC P3 |
' o. \7 R* O; d. E5 N1 N) X;P3-1→P3 |
& {$ ~( {5 R1 Q' l w' Y0 O
+ }! a, x8 c! MCPL P2 | ) P2 X1 o8 R: ?
;P2→P2 |
$ g1 T# n9 O2 f! T5 U這樣安排的原因在于讀-修改-寫(xiě)指令需要得到端口原輸出的狀態(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端口,。
2 X- c2 t+ e M0 N& E' {P1端口: 3 ?3 O5 p k% E/ P: [
通用I/0端口,,準(zhǔn)雙向靜態(tài)口,。輸出的信息有鎖存,輸入有讀引腳和讀鎖存器之分,。P1端口的一位結(jié)構(gòu)見(jiàn)下圖. 由圖可見(jiàn),,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)口。 由下圖可見(jiàn),,要正確地從引腳上讀入外部信息,,必須先使場(chǎng)效應(yīng)管關(guān)斷,以便由外部輸入的信息確定引腳的狀態(tài),。為此,,在作引腳讀入前,必須先對(duì)該端口寫(xiě)入l,。具有這種操作特點(diǎn)的輸入/輸出端口,,稱為準(zhǔn)雙向I/O口。8031單片機(jī)的P1,、P2,、P3都是準(zhǔn)雙向口。P0端口由于輸出有三態(tài)功能,,輸入前,端口線已處于高阻態(tài),,無(wú)需先寫(xiě)入l后再作讀操作,。 4 i1 Q1 B- h; {: u! y3 E+ X
管腳說(shuō)明.files/ru6.ht1.gif)
: g' E; s7 W% n* G- y 單片機(jī)復(fù)位后,各個(gè)端口已自動(dòng)地被寫(xiě)入了1,,此時(shí),,可直接作輸入操作。如果在應(yīng)用端口的過(guò)程中,,已向P1一P3端口線輸出過(guò)0,,則再要輸入時(shí),必須先寫(xiě)1后再讀引腳,,才能得到正確的信息,。此外,隨輸入指令的不同,,H端口也有讀鎖存器與讀引腳之分,。 Pl端口是803l單片機(jī)中唯一僅有的單功能I/O端口,,并且沒(méi)有特定的專用功能,輸出信號(hào)鎖存在引腳上,,故又稱為通用靜態(tài)口,。 - K/ e. V, c: D5 p- C% P. s" J
P2端口: P2端口的一位結(jié)構(gòu)見(jiàn)下圖:
, P) C6 F( G& t管腳說(shuō)明.files/ru6.ht2.gif) 3 k; V& q/ l+ S: |4 f
由圖可見(jiàn),P2端口在片內(nèi)既有上拉電阻,,又有切換開(kāi)關(guān)MUX,,所以P2端口在功能上兼有P0端口和P1端口的特點(diǎn)。這主要表現(xiàn)在輸出功能上,,當(dāng)切換開(kāi)關(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端口的切換開(kāi)關(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ù)往往也是一種地址,,只不過(guò)是外部RAM的高8位地址。 在輸入功能方面,,P2端口與P0和H端口相同,,有讀引腳和讀鎖存器之分,并且P2端口也是準(zhǔn)雙向口,。 可見(jià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)見(jiàn)下圖,。
管腳說(shuō)明.files/ru6.ht3.gif)
0 q5 U% ], Q" M3 f- p3 r! V: ]' r由上圖可見(jiàn),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,通過(guò)第二輸出功能線輸出特定的內(nèi)含信號(hào),,在輸入方面,,即可以通過(guò)緩沖器讀入引腳信號(hào),還可以通過(guò)替代輸入功能讀入片內(nèi)的特定第二功能信號(hào),。由于輸出信號(hào)鎖存并且有雙重功能,,故P3端口為靜態(tài)雙功能端口。
9 @: r9 s- |3 L8 X/ W$ I1 ZP3口的特殊功能(即第二功能):
9 F0 w# @; ~8 D. F6 T1 O n. ?. _- C8 |
8 k* R5 s- I% V: c
/ X8 k4 A a) Q$ `) ~ U) B
8 k4 ?) h# X; ^5 L. w' _4 q! a/ X 口線 | ! Q3 F o- N3 Z% W8 O1 r _, k
6 m' ^0 P/ M' A/ q
第二功能 |
3 Y! r: f" t$ w# H/ r
( `& w& e* Z5 O, h& n6 K1 } 信號(hào)名稱 |
* P1 [/ K4 r7 `9 y5 J6 x! e
# M8 ?8 K C' \; @$ q* W" A9 F" `4 ~2 d" u# M
P3.0 | ; a9 Z" e/ l+ p, h" L+ z
RXD |
7 f0 y9 y2 A7 |! h$ Q7 h串行數(shù)據(jù)接收 |
6 U) Y2 o' k3 T' U, W6 S
- z; d5 l- _9 \# ]3 Y. p
5 `3 l% v0 [9 X; _0 ~% X P3.1
| $ B* K5 q9 P) s# d2 g$ b5 e8 {; @( W
TXD | 2 a+ |6 V7 X8 ?; M
串行數(shù)據(jù)發(fā)送 |
: a+ l9 h- v1 S( t0 E6 P/ e0 K, @/ f
$ a5 ]/ C9 [- [7 V2 X J3 P! K0 ]2 Y6 j2 y. E
P3.2
|
" ]) n f3 n+ E0 \' B+ XINT0 | % ]; G/ j' ]) m( `
外部中斷0申請(qǐng) |
+ U, M+ `$ E9 K8 I( `6 @
/ o% V; d$ c5 M' q B. M+ ]5 A3 b/ Q& w2 X& G- }' z
P3.3
| # Y0 k2 G6 J& A9 r6 { c
INT1 | : N# I w0 v" v: r) _0 w
外部中斷1申請(qǐng) | 4 @& r: k6 t* s* R
% E+ G9 w4 L h5 t: }! q! }0 T
. s9 p s/ ?' J/ A6 M" L9 U2 W P3.4
| + h. O J, W/ N: Y+ s
T0 |
9 m! f8 G) L0 o1 I6 z3 L定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)輸入 |
5 t# U' l) o9 {' K( D4 q2 R( V, R) q# c5 I* o; J" ?
0 ^5 V! F! _, m. h3 R* C3 |- U2 H( g1 d1 ^ P3.5
| : q- K6 L& R3 b! n4 E
T1 | * Q+ A. e/ q/ Y; ]! Y/ a$ A
定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)輸入 | c2 X& F u0 B6 y; t
$ I6 d6 x8 w1 U* X8 I& ?& s7 I5 j9 e' `8 G
P3.6
| % \* u) R& c7 ]: C. P
WR | ; h; u1 {8 i& P$ F
外部RAM寫(xiě)選通 |
5 Z: W" H) A9 s }' |' G1 d9 F( H4 a5 s+ r0 g
% l2 y* o- r' Z* z: E9 K P3.7
|
! u" U1 X# y _7 S: aRD |
/ Q! T* S; I( Y) ~5 H外部RAM讀選通 |
9 f8 x1 f# Q, e/ v- ?9 L使P3端品各線處于第二功能的條件是: 3 n" L$ x% P. B( A3 h
1\串行I/O處于運(yùn)行狀態(tài)(RXD,TXD);
( a/ j N- S4 f( q& | a2\打開(kāi)了處部中斷(INT0,INT1);
( q$ ^6 v4 \1 c& T2 c) R9 l3\定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)(T0,T1)
1 w' i/ [/ N2 b8 B# |4\執(zhí)行讀寫(xiě)外部RAM的指令(RD,WR)
% ]" X( ?5 f& [) t在應(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é)操作,,需采用位操作的形式,。
; b* F6 ]1 H1 x# ~9 P' `
端口的負(fù)載能力和輸入/輸出操作: 9 p2 m$ a8 o1 _
P0端口能驅(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ì)這些端口寄存器的讀/寫(xiě)就實(shí)現(xiàn)了信息從相應(yīng)端口的輸入/輸出。例如: MOV A,, P1 ,;把Pl端口線上的信息輸入到A MoV P1, A ,;把A的內(nèi)容由P1端口輸出 MOV P3,, #0FFH ;使P3端口線各位置l
! r) L: P1 I$ K0 V串行端口: MCS-51系列單片機(jī)片內(nèi)有一個(gè)串行I/O端口,,通過(guò)引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進(jìn)行全雙工的串行異步通信,。
4 b2 X% r7 B% V* X% J. W# M1.串行端口的基本特點(diǎn) 8031單片機(jī)的串行端口有4種基本工作方式,,通過(guò)編程設(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í),只寫(xiě)不讀,;接收時(shí),,只讀不寫(xiě)。在一定條件下,,向陽(yáng)UF寫(xiě)入數(shù)據(jù)就啟動(dòng)了發(fā)送過(guò)程,;讀SBUf就啟動(dòng)了接收過(guò)程。 串行通信的波特率可以程控設(shè)定,。在不同工作方式中,,由時(shí)鐘振蕩頻率的分頻值或由定時(shí)器Tl的定時(shí)溢出時(shí)間確定,使用十分方便靈活,。 7 I& ~& F4 D1 B+ g
2.串行端口的工作方式 ①方式0 8位移位寄存器輸入/輸出方式,。多用于外接移位寄存器以擴(kuò)展I/O端口。波特率固定為fosc/12,。其中,,fosc為時(shí)鐘頻率。 在方式0中,,串行端口作為輸出時(shí),,只要向串行緩沖器SBUF寫(xiě)入一字節(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í)序過(guò)程見(jiàn)下圖,。 ②方式1 + E# G: a p& J2 B0 G. d
管腳說(shuō)明.files/mcu1-426.gif)
/ ?2 J* M- T& m! q' W8 U10位異步通信方式。其中,,1個(gè)起始位(0),,8個(gè)數(shù)據(jù)位(由低位到高位)和1個(gè)停止位(1)。波特率由定時(shí)器T1的溢出率和SMOD位的狀態(tài)確定,。 一條寫(xiě)SBUF指令就可啟動(dòng)數(shù)據(jù)發(fā)送過(guò)程,。在發(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)一次接收過(guò)程。當(dāng)8位數(shù)據(jù)接收完,,并檢測(cè)到高電乎停止位后,,即把接收到的8位數(shù)據(jù)裝入SBUF,,置位RI,,一幀數(shù)據(jù)的接收過(guò)程就完成了,。 方式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ā)送和接收過(guò)程的時(shí)序見(jiàn)下圖。 ③方式2,,3 11位異步通信方式,。其中,1個(gè)起始位(0),,8個(gè)數(shù)據(jù)位(由低位到高位),,1個(gè)附加的第9位和1個(gè)停止住(1)。方式2和方式3除波特率不同外,,其它性能完全相同,。方式2,3的發(fā)送,、接收時(shí)序見(jiàn)下圖,。 由圖可見(jiàn),方式2和方式3與方式l的操作過(guò)程基本相同,,主要差別在于方式2,,3有第9位數(shù)據(jù)。 Z E" O" L( h T% o& ~, O
! E: z6 Q4 M, g- h; n5 q6 J 發(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的溢出率 由此可見(jiàn),在晶振時(shí)鐘頻率一定的條件下,方式2只有兩種波特率,,而方式3可通過(guò)編程設(shè)置成多種波特率,,這正是這兩種方式的差別所在。 3.串行端口的控制寄存器 串行端口共有2個(gè)控制寄存器SCON和PCON,,用以設(shè)置串行端口的工作方式,、接收/發(fā)送的運(yùn)行狀態(tài)、接收/發(fā)送數(shù)據(jù)的特征,、波特率的大小,,以及作為運(yùn)行的中斷標(biāo)志等。
5 t3 p7 x+ }3 y+ s2 }1 g! {# E管腳說(shuō)明.files/mcu1-427.gif)
! s7 S: j Y E4 e J) ?管腳說(shuō)明.files/mcu1-428.gif) 5 I# f# `8 h7 q
$ T' W2 f' N. G/ ?% D
|