4 v. c, }$ p' e, v9 A5 b, C) |; F' A. J$ y
f; V- ?. b& L0 \# K* c8 @
引腳功能: & {9 J5 h+ D! J
MCS-51是標(biāo)準(zhǔn)的40引腳雙列直插式集成電路芯片,引腳分布請(qǐng)參照----單片機(jī)引腳圖:
% G! d' w! R2 _l P0.0~P0.7 P0口8位雙向口線(在引腳的39~32號(hào)端子)。 / b% z7 y2 o! L, M
l P1.0~P1.7 P1口8位雙向口線(在引腳的1~8號(hào)端子),。
! T. }% Z- I2 G/ r0 Tl P2.0~P2.7 P2口8位雙向口線(在引腳的21~28號(hào)端子)。
' w: G2 [5 ^0 C" u- `7 ol P3.0~P3.7 P2口8位雙向口線(在引腳的10~17號(hào)端子)。
! F J* D$ s0 J- r( o這4個(gè)I/O口具有不完全相同的功能,大家可得學(xué)好了,,其它書(shū)本里雖然有,,但寫(xiě)的太深,對(duì)于初學(xué)者來(lái)說(shuō)很難理解的,,我這里都是按我自已的表達(dá)方式來(lái)寫(xiě)的,,相信你也能夠理解的。
( S4 v0 s/ [6 NP0口有三個(gè)功能: $ }+ G' t3 R! i! _3 s6 ]
1,、外部擴(kuò)展存儲(chǔ)器時(shí),,當(dāng)做數(shù)據(jù)總線(如圖1中的D0~D7為數(shù)據(jù)總線接口)
* K% F+ M$ G' R+ D3 J2、外部擴(kuò)展存儲(chǔ)器時(shí),,當(dāng)作地址總線(如圖1中的A0~A7為地址總線接口) : K" i5 d0 T F7 @8 B9 w. W
3、不擴(kuò)展時(shí),,可做一般的I/O使用,,但內(nèi)部無(wú)上拉電阻,作為輸入或輸出時(shí)應(yīng)在外部接上拉電阻,。
1 ]$ k* b! g6 UP1口只做I/O口使用:其內(nèi)部有上拉電阻,。
0 R4 z1 y) o# [6 s' l' I0 QP2口有兩個(gè)功能:
9 U( s1 O- N' r6 z; \1、擴(kuò)展外部存儲(chǔ)器時(shí),,當(dāng)作地址總線使用
$ X/ i ]! b1 x# _" {2 E2,、做一般I/O口使用,其內(nèi)部有上拉電阻,;
9 g/ U4 U) }, p0 x ]: D& zP3口有兩個(gè)功能:
8 n6 H4 _5 s0 } L1 I. w: c除了作為I/O使用外(其內(nèi)部有上拉電阻),,還有一些特殊功能,由特殊寄存器來(lái)設(shè)置,,具體功能請(qǐng)參考我們后面的引腳說(shuō)明,。 - K- O- I9 i+ V D/ A* H7 y; m# p! Z
有內(nèi)部EPROM的單片機(jī)芯片(例如8751),為寫(xiě)入程序需提供專門(mén)的編程脈沖和編程電源,,這些信號(hào)也是由信號(hào)引腳的形式提供的,, Q8 c- d9 T7 t# x: N; j+ _$ s
即:編程脈沖:30腳(ALE/PROG) 2 [- F- H; f* W1 ^# K% }2 I; ]
編程電壓(25V):31腳(EA/Vpp) $ U5 p" a2 w4 C8 k8 k7 b" e& ^; _
接觸過(guò)工業(yè)設(shè)備的兄弟可能會(huì)看到有些印刷線路板上會(huì)有一個(gè)電池,這個(gè)電池是干什么用的呢,?這就是單片機(jī)的備用電源,,當(dāng)外接電源下降到下限值時(shí),備用電源就會(huì)經(jīng)第二功能的方式由第9腳(即RST/VPD)引入,,以保護(hù)內(nèi)部RAM中的信息不會(huì)丟失,。
2 [, d/ y8 R5 f9 ?(注:這些引腳的功能應(yīng)用,除9腳的第二功能外,,在“新動(dòng)力2004版”學(xué)習(xí)套件中都有應(yīng)用到,。) " |2 s# e0 J4 ^- v; ^; P% {6 I
在介紹這四個(gè)I/O口時(shí)提到了一個(gè)“上拉電阻”那么上拉電阻又是一個(gè)什么東東呢?他起什么作用呢,?都說(shuō)了是電阻那當(dāng)然就是一個(gè)電阻啦,,當(dāng)作為輸入時(shí),,上拉電阻將其電位拉高,若輸入為低電平則可提供電流源,;所以如果P0口如果作為輸入時(shí),,處在高阻抗?fàn)顟B(tài),只有外接一個(gè)上拉電阻才能有效,。 5 Y. r* S# I* O* s2 W7 h& [
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口輸出。 0 S* N0 g2 j( Q3 c$ f% y; g
由于ALE是以晶振六分之一的固定頻率輸出的正脈沖,,當(dāng)系統(tǒng)中未使用外部存儲(chǔ)器時(shí),,ALE腳也會(huì)有六分之一的固定頻率輸出,因此可作為外部時(shí)鐘或外部定時(shí)脈沖使用,。 p' N* f% T+ A. l7 |$ ]# w6 v
PSEN 外部程序存儲(chǔ)器讀選通信號(hào):在讀外部ROM時(shí)PSEN低電平有效,,以實(shí)現(xiàn)外部ROM單元的讀操作。
; O4 ~% {4 p0 J0 j1 Q( ]; G2 w1,、內(nèi)部ROM讀取時(shí),,PSEN不動(dòng)作; 2 z5 a, _! ?6 o
2,、外部ROM讀取時(shí),,在每個(gè)機(jī)器周期會(huì)動(dòng)作兩次;
5 k+ x& A3 z1 o! h& u3,、外部RAM讀取時(shí),,兩個(gè)PSEN脈沖被跳過(guò)不會(huì)輸出;
! P% `( X6 c% {5 w0 `8 {4,、外接ROM時(shí),,與ROM的OE腳相接。 8 ]2 }& O5 V+ g/ e4 m
參見(jiàn)圖2—(8051擴(kuò)展2KB EEPROM電路,,在圖中PSEN與擴(kuò)展ROM的OE腳相接) - s5 f* r& z( e1 |
EA/VPP 訪問(wèn)和序存儲(chǔ)器控制信號(hào) " M- k+ E. M+ o$ j/ W {
1,、接高電平時(shí):
% L; i( c' r9 R, F0 S9 ~CPU讀取內(nèi)部程序存儲(chǔ)器(ROM) 9 x0 f& C* g( o9 A
擴(kuò)展外部ROM:當(dāng)讀取內(nèi)部程序存儲(chǔ)器超過(guò)0FFFH(8051)1FFFH(8052)時(shí)自動(dòng)讀取外部ROM。
' O- f8 B& q+ |% T% d9 _5 H, W1 ^2,、接低電平時(shí):CPU讀取外部程序存儲(chǔ)器(ROM),。 7 X7 |1 b7 v5 B: u& \- s$ o. U g
3、8751燒寫(xiě)內(nèi)部EPROM時(shí),,利用此腳輸入21V的燒寫(xiě)電壓,。
- W* L3 s9 h3 O& t. D- d! n3 N RST 復(fù)位信號(hào):當(dāng)輸入的信號(hào)連續(xù)2個(gè)機(jī)器周期以上高電平時(shí)即為有效,,用以完成單片機(jī)的復(fù)位初始化操作。
, Y f6 y% |0 Q! k0 d/ q% W( Y. A XTAL1和XTAL2 外接晶振引腳,。當(dāng)使用芯片內(nèi)部時(shí)鐘時(shí),,此二引腳用于外接石英晶體和微調(diào)電容;當(dāng)使用外部時(shí)鐘時(shí),,用于接外部時(shí)鐘脈沖信號(hào),。
VCC:電源+5V輸入 ( {: h; h3 F6 o: A
VSS:GND接地。
- V) t6 z+ { H* ?4 [9 Y& X. D% S- Y各端口工作原理講解 1 L' S; o7 Z- q4 U) [
并行端口 3 [2 S+ m1 @, M3 B. S
P0端口 7 \$ d6 D; T% }: w9 N7 V
總線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)下圖: . A$ c! \: B' E3 Q8 p+ E) g' q0 o
2 M3 ~$ s+ Y. a: o$ d" e
管腳說(shuō)明.files/mcu1-461.gif)
( p& }) f5 X$ ]: o 由上圖可見(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ě)指令的例子,。 / @" N( q# d0 \: D a$ ?
0 q, g8 J$ w* _; S6 s* ~ z
* _& r' l! o: G3 k3 z0 B# _7 X4 f! V
! k) H* _5 i' D. a; kANL P0,#立即數(shù) |
4 Z9 t' Q/ w1 _% E' [, f 0→立即數(shù)P0 |
; c6 W, ?) \/ F5 D8 D# Z1 b) ? V: `! b6 n* g7 q
ORL P0,A |
1 Q, a5 p: e5 V/ u" [- @; F4 i$ } 0→AP0 |
9 [1 D( [" v' o5 s8 {) a8 b$ i1 w9 p$ E4 V+ g% H
INC P1 | $ ~( h3 x! j9 D0 ^% o+ R
1+1→P1 | $ R; c2 n N5 G$ N! ]: o
9 N! _: p8 E F' b; |8 l
DEC P3 | 4 P/ ]; X; s* C
;P3-1→P3 |
- o$ }$ C4 k- L3 V( p9 b/ C# W; }# I; D
CPL P2 | $ j9 ?# @" N) a9 U+ G
;P2→P2 |
+ { Q- h& G) E. X* l. X, g' }這樣安排的原因在于讀-修改-寫(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端口,。 $ _- p) w n- H; b/ {% T6 R& `9 D
P1端口:
1 B- V1 p+ H* [" t- H通用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后再作讀操作,。 * M7 m% b' i/ s- q# F: B
管腳說(shuō)明.files/ru6.ht1.gif) 8 Y5 K5 R& U. F2 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)口,。 # a0 Q6 V3 F |. f& ]
P2端口: P2端口的一位結(jié)構(gòu)見(jiàn)下圖: ( l8 ^/ `1 j& w4 {: X
管腳說(shuō)明.files/ru6.ht2.gif) 7 C i4 z. ?$ a) {. [' X4 s
由圖可見(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)
% f7 D( i! p2 D" Z+ P由上圖可見(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)雙功能端口。 ! f: d0 s: {: I( q$ [/ [
P3口的特殊功能(即第二功能):
5 _. H) \2 ]2 `- r4 O9 W6 I
' `8 W+ n& ^5 w0 |1 D. X0 |' i: j: a' ?3 L3 T
- j8 s' @* \( ]. X0 v1 }* r
1 d" \" L0 Z! t 口線 |
+ S! S4 Q4 O0 G0 f, t- }* @1 C
/ ~. u. Y& ~. X' w5 P8 O 第二功能 |
7 _3 z- W5 ]& b1 g( P
; k6 `+ Z. [' J9 P& k- F 信號(hào)名稱 |
9 ^" P- }# S& S) v6 l, ]3 |
' r# S3 c0 k+ k% c @9 B0 g+ I% H X0 O' h( Q* {6 f
P3.0 | " d# Y& H& N6 m# H5 l- F l1 e. _
RXD |
I# x; a' u3 u) H0 k串行數(shù)據(jù)接收 | 2 f% K, G8 V3 t
6 D! M6 k& P& t/ ]" h
$ Y. A1 T3 V* o, I% T. D
P3.1
| 5 s0 \( r N" ^* t1 V z
TXD |
7 h/ o1 m7 G x串行數(shù)據(jù)發(fā)送 |
# X" h8 z0 Z( u/ ?6 n* D5 I+ E8 x! q- Q$ u: A5 N9 Q; {9 a
% n# G3 \! \( X( q; o5 B P3.2
|
8 `- W2 c4 Q" B% @) z, h: E$ yINT0 | % D1 B$ W5 v+ P6 L4 d) h8 ` F
外部中斷0申請(qǐng) | j- L7 s6 ?/ @5 l* s" u
+ U9 x. c! ~' W0 e$ u
3 ?7 e/ Z2 C( h# e: n
P3.3
| ; G- h; {) k5 t# A; L' ]! p- N% q
INT1 | , P4 }8 F; L" f5 A/ R
外部中斷1申請(qǐng) | 8 Y q- A) Z6 e1 ^" L/ w3 b( T
. t s2 |4 O3 P
& z# G0 }% @6 z, E% ?
P3.4
| : R j- t r& U; s% e+ ^$ K2 {$ M# i
T0 |
1 R; m+ ]- L! K定時(shí)器/計(jì)數(shù)器0計(jì)數(shù)輸入 |
# o& |+ C+ @% [$ o8 J" d* l
/ M! t s4 S. Y, [
+ }% o& P. `5 G- \- [" m5 W/ | P3.5
| + U1 r3 Z4 ^, `0 u/ v' R! o- \# o5 P
T1 |
; P% F5 B8 `* Q( Y9 S定時(shí)器/計(jì)數(shù)器1計(jì)數(shù)輸入 |
( M, V9 x- F: }. C6 e5 E: h* a! `5 P# ]6 I, W- C
$ a" b5 J& F* _+ v5 L
P3.6
| 7 x7 Y/ M' a& K2 {" M5 L7 y/ Y
WR |
& i$ i1 L% b/ x# [, A/ b' ]外部RAM寫(xiě)選通 | + ~; g& h& u+ @- M/ h! [
7 a. a) m/ W& F9 \) [; k, p5 J7 k) M# z3 z
P3.7
| 2 O3 o7 d2 u0 ?4 G2 U
RD |
+ q( n1 t2 J4 }# R1 P& L1 i外部RAM讀選通 | . ~6 Q! d9 k6 Z" @9 @
使P3端品各線處于第二功能的條件是: - }7 k+ }# V. k# z# }1 k9 K9 h
1\串行I/O處于運(yùn)行狀態(tài)(RXD,TXD);
8 i+ b4 _7 F2 U* q/ d2 u1 _/ ]2\打開(kāi)了處部中斷(INT0,INT1);
/ R% ~" @2 S$ a+ o0 t3\定時(shí)器/計(jì)數(shù)器處于外部計(jì)數(shù)狀態(tài)(T0,T1)
6 K& s! ]. N0 v: q4 v/ i/ {* y4\執(zhí)行讀寫(xiě)外部RAM的指令(RD,WR) 8 g6 S: d9 w9 O( o
在應(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é)操作,,需采用位操作的形式,。
% q, Y4 ]' s+ U0 C" o1 ~0 _
端口的負(fù)載能力和輸入/輸出操作: 0 H- O; E1 l1 ~( O8 t
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
- \" l# h* t" @" j$ c0 V( P) ]串行端口: MCS-51系列單片機(jī)片內(nèi)有一個(gè)串行I/O端口,通過(guò)引腳RXD(P3.0)和TXD(P3.1)可與外設(shè)電路進(jìn)行全雙工的串行異步通信,。 # [# D: x J6 _4 y
1.串行端口的基本特點(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 J0 y- B$ A" R
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 K S) A: z9 x% X5 R
管腳說(shuō)明.files/mcu1-426.gif) 0 A, S- c% Z( X) e8 D
10位異步通信方式。其中,,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ù)。 / ^) S- Z4 H$ f6 g# L0 k
$ ^( s% a; H+ d9 v" d" [$ m4 z& U 發(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)志等。
/ p. H( x' W" D' R. B0 ?5 ?管腳說(shuō)明.files/mcu1-427.gif)
8 a, [+ d/ z2 s+ s& ?: |3 f管腳說(shuō)明.files/mcu1-428.gif) ( u$ P" j) o5 D0 p# C# |
4 I! ^, P+ P6 E; V5 K) S |