復試單片機課件7接口技術_第1頁
復試單片機課件7接口技術_第2頁
復試單片機課件7接口技術_第3頁
復試單片機課件7接口技術_第4頁
復試單片機課件7接口技術_第5頁
已閱讀5頁,還剩336頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第四章:MCS-51單片機的系統(tǒng)擴展及應用(接口技術)通過地址總線、數(shù)據(jù)總線和控制總線實現(xiàn)ROM、RAM或其它接口電路的擴展(

MOVX指令的運用)。定時器、串行口和A/D、D/A等應用場合下的硬件接口和軟件編程。:程序存儲器的擴展:數(shù)據(jù)存儲器的擴展:輸入、輸出口的擴展:定時計數(shù)器的應用:串行口的應用:MCS-51與D/A轉(zhuǎn)換器的接口:MCS-51與A/D轉(zhuǎn)換器的接口:動態(tài)數(shù)碼顯示及鍵盤掃描電路:單片機的監(jiān)控電路--看門狗電路:單片機應用舉例:智能化數(shù)據(jù)采集系統(tǒng)4.1:程序存儲器ROM的擴展1,單片機的P0、P2口作為外電路的數(shù)據(jù)、地址總線:

P0口做為低8位地址和數(shù)據(jù)復用總線;P2口做為高8位地址總線。2,單片機的/Psen作為數(shù)據(jù)選通信號與外ROM的數(shù)據(jù)輸出三態(tài)控制/OE端連接(參照訪問外存儲器的時序);3,使用一個8位的數(shù)據(jù)鎖存器來鎖定低八位地址信號,使用單片機的ALE信號作鎖存器的鎖存控制。具有三態(tài)功能的8D鎖存器D7

Q774LS373D0

Q0G

/L/L:三態(tài)控制。低電平:允許數(shù)據(jù)輸出,三態(tài)門通;高電平:三態(tài)門關閉,輸出高阻。G:數(shù)據(jù)鎖存控制。高電平時,輸出隨輸入變化;低電平時,Q端將被所存(低電平鎖存)。數(shù)據(jù)輸入端數(shù)據(jù)輸出端①

MCS-51與1片32K

ROM的連接(地址線全譯碼)CEA14::A8A7

O7:

::

::

:A0

O0OE2725632K

ROMMCS-51/CE

=

P2.7(A15)返回前一次完整的地址信號三態(tài)輸出的數(shù)據(jù)口由/OE控制D7

Q774LS373D0

Q0G

/LP2.7:::P2.0P0.7:::P0.0ALE/EAPsen外部ROM的狀態(tài)與地址線A15的關系表ROM引腳/CEA14~A8A7~A0地址范圍ROM工作狀態(tài)單片機引腳A15P2口A14-8P0口A7-0000000000111111100000000111111110000H~7FFFH選中110000000111111100000000111111118000HFFFFH未選中注意:1,ROM地址線與存儲器的容量之間的關系;2,ROM的/OE

與單片機的/psen

連接;3,ROM的/CE信號是存儲器的片選;4,由于采用地址線全譯碼,所以每一個地址對應唯一的存儲單元訪問外部程序存儲器ROM的時序:A15-A8(PC)A7-A0OP存儲器數(shù)據(jù)輸出控制/Psen地址總線(高八位)P2口地址數(shù)據(jù)總線(低8位)P0

口S1S2S6S5S4S374LS373地址鎖存信號

ALE

A15-A8(DPTR+A)A7-A0

常數(shù)MOVC

A,@A+DPTRAB轉(zhuǎn)電路圖返回前一次(參考講義70頁)片外存儲器訪問時序說明P0、P2口作地址和數(shù)據(jù)總線。其中P0口作為地址和數(shù)據(jù)復用總線,前半部(A段)作地址總線,后半部(B段)作為數(shù)據(jù)總線。外部程序存儲器ROM的操作步驟如下:1,必須為ROM其提供完整的(15位)地址信息;2,ROM芯片的/CE

端=0,選中該芯片;3,在滿足上述條件的基礎上,當ROM的/OE=0時(B時間段),存儲器輸出數(shù)據(jù)的三態(tài)門打開,并將與輸入地址相對應的存儲單元中的指令(數(shù)據(jù))向外輸出,單片機通過P0口將指令送至CPU

內(nèi)部。74LS373鎖存器:將A時間段P0口輸出的低位地址進行保存,使ROM在B時間段仍然可以得到完整的地址信號。轉(zhuǎn)電路圖轉(zhuǎn)時序圖②

MCS-51與2片32K

ROM的連接(地址線全譯碼)如何使用兩片32K的ROM芯片擴展為64K的存儲陣列。A15P2口MCS

-

51P0口ALE/EA

Psen/CE2A14A8A7A0/OE2O0~O7/CE1A14A8A7A0/OE1O0~O774LS373由兩片32K的ROM構(gòu)成64K存儲陣列與A15的關系表A15/CEA14~A8P2口A7~A0P0口地址范圍ROM1工作狀態(tài)ROM2工作狀態(tài)000000000111111100000000111111110000H~7FFFH選中/CE=A15未選中110000000111111100000000111111118000H

~FFFFH未選中選中/CE=/A15③

MCS-51與多個ROM的連接(地址線全譯碼)若需要對2片以上的芯片擴展,可以通過譯碼電路實現(xiàn)。P2.7P2.6P2.5P2.4P2.0P0口ALEPsen/CE0A12A8A78K×8A0/OE1O0~O774LS373C

y7BAy

0/CE1A12A8A78K×8A0/OE1O0~O7/CE7A12A8A78K×8A0/OE1O0~O7MCS–5174LS13874LS1383-8線譯碼器A、B、C:選擇輸入。作為與輸出對應的二進制編碼輸入;

G1、/G2A、G2B:使能輸入,作為片選控制輸入;

y7~y0:譯碼器輸出,低電平有效。74LS138G1/G2A/G2BCBAy0y1y2y3y4y5y6y7CBAy7

y6

y5

y4

y3

y2

y1

y00001111111000111111101010111110110111111011110011101111101110111111101011111111101111111采用LS138譯碼器實現(xiàn)ROM擴展示意表P2.7~P2.5138輸入片選/CEi138

輸出選中ROMP2.4~P0.0有效地址范圍0

0

0Y0=0第1片0000H~1FFFH0000H~1FFFH0

0

1Y1=0第2片0000H~1FFFH2000H~3FFFH0

1

0Y2=0第3片0000H~1FFFH4000H~5FFFH0

1

1Y3=0第4片0000H~1FFFH6000H~7FFFH1

0

0Y4=0第5片0000H~1FFFH8000H~9FFFH1

0

1Y5=0第6片0000H~1FFFHA000H~BFFFH1

1

0Y6=0第7片0000H~1FFFHC000H~DFFFH1

1

1Y7=0第8片0000H~1FFFHE000H~FFFFH返回采用不完全譯碼的簡易ROM擴展電路(一)P2.7P2.5P2.5P2.4P2.3P2.2P2.1P2.0P0口ALEPsenMCS–51/CEA12A11A10A9A8A78K×8A0/OE1O0~O774LS373部分譯碼造成的地址重疊(一)P2.7~P2.5P2.4~P2.0P0.7~P0.0有效地址范圍0

0

000000/1111100H/FFH0000H~1FFFH0

0

100000/1111100H/FFH2000H~3FFFH0

1

000000/1111100H/FFH4000H~5FFFH0

1

100000/1111100H/FFH6000H~7FFFH1

0

000000/1111100H/FFH8000H~9FFFH1

0

100000/1111100H/FFHA000H~BFFFH1

1

000000/1111100H/FFHC000H~DFFFH1

1

100000/1111100H/FFHE000H~FFFFH造成了8個地址相互重疊的存儲區(qū)域P2.7P2.5P2.5P2.4P2.3P2.2P2.1P2.0P0口ALEPsenMCS–51/CEA12A11A10A9A8A78K×8A0/OE1O0~O774LS373采用不完全譯碼的簡易ROM擴展電路(二)部分譯碼造成的地址重疊(二)P2.7

P2.6P2.5P2.4~P2.0P0.7~P0.0有效地址范圍0

0000000/1111100H/FFH0000H~1FFFH0

0100000/1111100H/FFH2000H~3FFFH0

1000000/1111100H/FFH4000H~5FFFH0

1100000/1111100H/FFH6000H~7FFFH1

0000000/1111100H/FFH8000H~9FFFH1

0100000/1111100H/FFHA000H~BFFFH1

1000000/1111100H/FFHC000H~DFFFH1

1100000/1111100H/FFHE000H~FFFFH造成了4個地址相互重疊的存儲區(qū)域部分譯碼擴展電路的特點以上面電路(一)為例:由于P2.5~P2.7沒有與存儲器的地址信號連接,所以3位地址信號對于存儲器來說是不起任何作用的。重疊地址的數(shù)量與空余地址線的條數(shù)有關:重疊地址數(shù)=2n

;其中n為空余地址線數(shù)。對于使用ROM空間小于64K時,可以考慮使用部分譯碼的方式,以簡化電路的設計、降低電路成本。一般情況,編程時稍加注意,地址重迭不會帶來使用上的問題。4.2:數(shù)據(jù)存儲器RAM的擴展同程序存儲器擴展,使用P0、P2口作為地址、數(shù)據(jù)總線。1,當使用

MOVX @Ri,A指令時,系統(tǒng)僅使用P0口輸出地址信號(P2口不用);2,當使用

MOVX

@DPTR,A指令時,P0口輸出DPTR提供的低八位地址信號,P2口輸出DPTR提供的高八位地址信號。3,不論哪種情況,P0口都是地址/數(shù)據(jù)復用總線,因此仍要使用74LS373來鎖存P0口的地位地址信號。與ROM擴展不同:使用訪問外部RAM指令MOVX時,在時序中將產(chǎn)生/RD或/WR信號,因此將此信號與外RAM的讀(/RD)

、寫(/WR)控制端相連接就實現(xiàn)系統(tǒng)對外

RAM的讀寫控制。設外部RAM2000H單元中有一個數(shù)x,且DPTR中已存有該數(shù)地址2000H.則CPU

執(zhí)行外部ROM中的指令:movx

a,@dptr

;將外RAM的x送AS1

S2

S3

S4

S5

S6

S1

S2

S3

S4

S5

S6ALEPsenA15-A8(PC)A15-A8(DPH)A7-A0指令A7-

A0數(shù)據(jù)RDP2口P0口選中外部RAM讀外部數(shù)據(jù)存儲器RAM的指令時序MCS-51與32K

RAM的連接P2.5P2.4::P2.0P0.7:::P0.0ALE/RD/WRCEA12

::A8A7

O7:

::

::

:A0

O0/OE

/WED7

Q7D0

Q0CP62648K

RAMMCS-51/CE

=

P2.5(A12)三態(tài)輸出的數(shù)據(jù)口由/OE控制小結(jié):1,外部存儲器是使用P0、P2口作為地址、數(shù)據(jù)總線;2,因為P0口為數(shù)據(jù)、地址復用總線,必須用74LS373來鎖存P0口的低八位地址信號。3,靠MOVC指令的/Psen信號來打開外ROM的數(shù)據(jù)三態(tài)門;靠MOVX指令產(chǎn)生/RD或/WR選中外RAM。4,存儲器的容量M與其地址線條數(shù)n的關系:M=2n5,當使用兩片存儲器擴展時,使用一個反向器擴展;當使

用2片以上的存儲器時,就要使用譯碼器,譯碼器的輸入與

高位地址相連接,輸出端與各ROM的/CE連接(如圖所示)。6,若16位地址線沒全部參與譯碼時,會發(fā)生地址重疊。返回思考題:使用6264(8KRAM)芯片和2764(8KROM)芯片組成16K

RAM和16KROM的外存儲陣列(邏輯圖)。采用74LS138和74LS373實現(xiàn)譯碼和鎖存功能。根據(jù)設計的結(jié)果,寫出RAM和ROM的地址范圍。返回4.3:輸入、輸出口的擴展I/O端口的擴展是使用MCS-51作為嵌入式控制器進行硬件設計中經(jīng)常遇到的問題:,使用8243擴展I/O

端口,使用8155擴展I/O

端口,使用8255擴展I/O

端口4.3.4,使用串行口擴展I/O端口繼續(xù)4.3.1:使用8243擴展I/O端口P4.0P4.1P2.0

P4.2P2.1

P4.3P2.2P2.3

P5.0P5.1P5.2P5.3P6.0P6.1P6.2P6.3PROGP7.0/CE

P7.1P7.2P7.3接單片機8243為4X4位的擴展口。P2口:用于CPU與8243之間傳送命令、數(shù)據(jù)。其中:命令碼中含口地址(兩位)、操作碼(兩位)。數(shù)據(jù)為四位。PROG:控制端。P4~P7:4X4位具有鎖存功能的雙向I/O端口。操作碼口地址P2.3P2.2操作P2.1P2.0端口00讀00P401寫01P510OR10P611AND11P7上一次8243的時序P4.0P4.1P2.0

P4.2P2.1

P4.3P2.2P2.3

P5.0P5.1P5.2P5.3P6.0P6.1P6.2P6.3PROGP7.0/CE

P7.1P7.2P7.3PROGP2口1,由高變低時,將P2口的命令(口地址、操作碼)信息所存到8243

。

2,由低變高時:a,寫操作時:8243將P2口上的數(shù)據(jù)寫入對應的端口;b,讀操作時:當操作碼一譯出,選中的端口的輸入緩沖器與P2口接通,等待CPU讀走。當PROG變高后,結(jié)束讀操作。1

2操作碼、口地址 數(shù)據(jù)(4位)上一次8243應用舉例1:使用51的P2口與8243連接,并從8243的P6口讀入數(shù)據(jù),51的P2.6

P2.7留作輸入。P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7MCS-51P4.0P4.1P4.2P4.3P2.0P2.1P2.2P2.3

P5.0PROG

P5.1/CE

P5.2P5.3P6.0P6.1P6.2P6.3P7.0P7.1P7.2P7.38243IN8243:MOV A,#11010010B

;控制字;輸出控制字;8243接收操作碼;讀取P6口數(shù)據(jù);PROG=1結(jié)束讀;關閉8243MOV

P2,ACLRP2.4MOV

A,P2SETB

P2.4SETB

P2.5RET【注意】:

1,控制字11010010的含義;2,根據(jù)8243的時序,在使PROG

變高前單片機必須讀入P6口中的數(shù)據(jù)。8243應用舉例2:將R2寄存器的低4位寫到P7口。

P2.6

P2.7留作輸入P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7P4.0P4.1P4.2P4.3P2.0P2.1P2.2P2.3

P5.0PROG

P5.1/CE

P5.2P5.3P6.0P6.1P6.2P6.3P7.0P7.1P7.2P7.3;控制字;輸出控OUT:MOV

A,#11010111BMOV

P2,A制字CLRP2.4MOV

A,R2ORL

A,#11110000B;8243接收操作碼;讀取R2數(shù)據(jù);高4位置1低4位不變ORL

P2,#00001111B

;低4位置1高4位不變;A送P2高4位不變;PROG=1數(shù)據(jù)寫入P7口;關閉8243ANL

P2,ASETB

P2.4SETB

P2.5RET【注意】:第1條ORL是保證不影響P2口高4位;第2條ORL指令時保證下面ANL指令能夠正確的將低4位數(shù)據(jù)寫入P2口。

返回4.3.2:使用8155擴展I/O端口8155的簡介1,8155的構(gòu)成:2,CPU對8155的控制3,8155的工作方式4,8155內(nèi)部定時器的使用5,8155應用與編程舉例繼續(xù)8155的簡介同8243一樣,8155、8255等芯片都是美國Intel公司為8086系列微機開發(fā)出的系列通用可編程I/O接口芯片。8155不僅可以提供三個并行的I/O端口,在其內(nèi)部還集成有256個字節(jié)的RAM存儲空間、一個14位的定時/計數(shù)器,因此非常適合與MCS-51單片機連接實現(xiàn)系統(tǒng)功能的擴展。由于8155的特殊性,這里將主要介紹其結(jié)構(gòu)和使用、編程方法。返回本節(jié)目錄1,8155的構(gòu)成:1,雙向數(shù)據(jù)總線緩沖器:傳送CPU與RAM之間的數(shù)據(jù)。2,地址鎖存器:用于鎖存CPU送來得RAM或端口地址。3,地址譯碼(a)和讀寫控制(b):a,接收地址鎖存器的低三位地址,確定命令/狀態(tài)存存器、定時/計數(shù)器和A、B、C口中的某個工作。b,讀寫控制用于接收/RD或/WR上的信息實現(xiàn)CPU與8155之間的信息控制4,256個字節(jié)的RAM數(shù)據(jù)存儲器。5,I/O寄存器:A,B和C雙向通用I/O端口。6,命令寄存器:用來存放CPU送來得命令字。7,定時/計數(shù)器:二進制的14位減一計數(shù)器,可做分頻器。8155的內(nèi)部結(jié)構(gòu)簡圖I/O寄存器A口256字節(jié)RAM雙向數(shù)據(jù)

緩沖器地址鎖存器定時計數(shù)器(14位)讀/寫控制器地址譯碼I/O寄存器B口I/O寄存器C口狀態(tài)命令

寄存器AD7-AD0/CEIO/MALE/RD/WRRESTT

/

INT

/

OUT8155引腳說明AD7-AD0:數(shù)據(jù)/地址總線。與MCS-51的P0口連接,分時傳送地址和數(shù)據(jù)信息,是連接兩者的通道。I/O口線:PA7-0、PB7-0和PC5-0為8155的A、B和C口。其中A、B口為8為的通用I/O口;C口:在“通用I/O模式”下作I/O口;在“選通I/O模式”下作命令/狀態(tài)口。REST、/CE和IO/M

:復位、片選和I/O端口/RAM選擇線。/RD、/WR:讀寫控制線。ALE:8155的地址鎖存信號。ALE=1時,信號進入地址鎖存器,ALE=0時,鎖存器處于“封鎖”狀態(tài),將ALE=1時的地址鎖存到地址鎖存器中。T/IN、T/OUT:計數(shù)器的脈沖輸入線和輸出線,輸出波形與工作方式有關。返回本節(jié)目錄2,CPU對8155的控制8155的A、B和C口的數(shù)據(jù)傳送是由CPU發(fā)出的命令字控制的。(1)8155內(nèi)部的7個寄存器地址/CEIO/MA7-A3A2A1A0所選端口01XXXXX000命令/狀態(tài)寄存器01XXXXX001A口01XXXXX010B口01XXXXX011C口01XXXXX100計數(shù)器低8位01XXXXX101計數(shù)器高8位00XXXXXXXXRAM單元(2)8155的命令字TM2TM1IEBIEAPC2PC1PBPAPB

、PA:A、B口工作方式:0

輸入;1

輸出。PC2、PC1:C口工作方式:00

ALT1(輸入)01

ALT2(輸出)10

ALT3(選通方式)11

ALT4(選通方式)IEBIEA:

A、B口中斷允許位:0禁止中斷;1

允許中斷。

TM2

TM1:計數(shù)器工作方式:00

無操作;01

停止計數(shù);10

計滿后停止;11開始計數(shù)。上一次(3)8155的狀態(tài)字─表征8155的狀態(tài)Ingra:A中斷請求標志。ABF:

A口緩沖器狀態(tài)。

Intel:A口中斷允許位。

Nitro:B中斷請求標志。0

無中斷;1

有中斷。0

空;

1

滿。0

禁止;

1

允許。0

無中斷;1

有中斷。BBF:

B口緩沖器狀態(tài)。

0

空;

1

滿。Intec:

B口中斷允許位。

0

禁止;

1

允許。TIMER:定時器中斷。0

讀狀態(tài)字后或硬件復位后。1

有定時器中斷時。XTIMERINTEbBBFINTRbINTEaABFIngra狀態(tài)字存在于8155的狀態(tài)寄存器中,其地址與命令口地址一樣都是000B,可以用

MOVX A,

@

Ri

指令來讀取8155的狀態(tài)。狀態(tài)字寄存器與命令寄存器是靠輸入、輸出來自動區(qū)分的。返回本節(jié)目錄3,8155的工作方式存儲方式:若IO/M=0、CE=0時,8155處于存儲器模式,此時單片機通過AD7-AD0與8155的RAM單元進行讀寫數(shù)據(jù)。I/O方式:若IO/M=1,CE=0時,8155處于I/O狀態(tài)。

a,通用I/O方式:A,B,C都是通用的數(shù)據(jù)端口;

b,選通I/O方式:A,B為通用I/O方式,C口作為A,B口的聯(lián)絡控制線。選通方式是一種較為特殊的數(shù)據(jù)傳輸方式,它不同于一般并行口的I/O操作。它主要用于高速CPU與低速外設之間的數(shù)據(jù)交換。這里只作基本介紹。C口在四種工作方式下的各位定義C口通用I/O方式選通I/O方式ALT1ALT2ALT3ALT4PC0輸入輸出A

INTR(A口中斷)A

INTR(A口中斷)PC1輸入輸出ABF

(A口緩沖器滿)ABF

(A口緩沖器滿)PC2輸入輸出ASTB(A口選通)ASTB(A口選通)PC3輸入輸出輸出B

INTR(B口中斷)PC4輸入輸出輸出BBF

(B口緩沖器滿)PC5輸入輸出輸出BSTB(B口選通)選通I/O數(shù)據(jù)輸入操作當外設準備好數(shù)據(jù)并送PA口時,發(fā)出低電平的選通信號ASTB;8155接收到ASTB后:1,將PA上的數(shù)據(jù)裝入A口寄存器2,使A口數(shù)據(jù)滿ABF置位以通知外設數(shù)據(jù)已收到。8155在ASTB的上升沿使PC0的AINTR標志置位,以通知單片機數(shù)據(jù)已收到。CPU響應中斷執(zhí)行服務程序,當執(zhí)行到從A口讀取輸入的數(shù)據(jù)(MOVX)時,/RD的上升沿將PC0的INTEA清零并使

PC1的ABF變低,通知外設輸入下一個數(shù)據(jù)。P0INT0PAPD0-7/RDPC1PC2PC0D7-

0ASTBABFMCS-518155外設A

INTRC口為ALT3模式PC0:A口中斷A

INTR標志輸出,送單片機;

PC1:A口緩沖器滿ABF標志輸出,送外設。

PC2:A口選通輸入ASTB,選通I/O數(shù)據(jù)輸出操作CPU執(zhí)行MOVX指令將數(shù)據(jù)送

PA口,8155收到數(shù)據(jù)后ABF變高通知外設數(shù)據(jù)已到達PA口。外設接收到ABF的高電平后:1,從D7-0上接收數(shù)據(jù);2,使ASTB變低,通知8155外設已接收到數(shù)據(jù)。當8155監(jiān)測到ASTB回到高電平時,使PC0D的AINTR變?yōu)楦唠娖?,向單片機申請中斷。單片機在中斷服務程序中巴下一個數(shù)據(jù)送到A口,進行下一個數(shù)據(jù)的輸出。P0INT0PAPD0-7PC1PC2PC0D7-

0ASTBABFMCS-518155外設A

INTRC口為ALT3模式,控制字:00011001BPC0:A口中斷A

INTR標志輸出,送單片機;

PC1:A口緩沖器滿ABF標志輸出,送外設。

PC2:A口選通輸入ASTB,4,8155內(nèi)部定時器的使用嚴格的將,8155的定時器應當稱為計數(shù)器,因為定時器的計數(shù)脈沖來自外部的T/IN引腳的輸入脈沖,所以8155的定時器非常適合做1/n的分頻器(如圖)。定時器共有4中工作方式,由計數(shù)器高8位中的最高兩位M2、M1來確定。不同的工作方式對應著不同的T/OUT波形。8155T/INT/OUT由8155作1/5分頻器MCS-51控制字8155內(nèi)部定時器的4種工作方式1,M1M2=00時:定時器在計數(shù)的后半周期在T/OUT線上輸出低電平,如果計數(shù)初值為奇數(shù),則高電平持續(xù)時間比低電平多一個計數(shù)脈沖;2,M2M1=01時:同上一方式,差別為當計數(shù)器“減1”到

“全0”時,自動裝入計數(shù)初值,所以在T/OUT上為連續(xù)波形;3,M2M1=10時:當計數(shù)器“減1”到“全0”時,在T/OUT線上輸出一個單脈沖;4,M2M1=11時:當計數(shù)器“減1”到“全0”時,在T/OUT線上輸出一個單脈沖,且自動重裝計數(shù)初值,所以在T/OUT線上輸出連續(xù)的波形??刂谱?155定時器工作方式與T/OUT波形M2M1T13T12T11T10T9T8T7T6T5T4T3T2T1T0計數(shù)器高8位(101B)計數(shù)器低8位(100B)T/INM2M1=00時T/OUTM2M1=01時T/OUTM2M1=10時T/OUTM2M1=11時T/OUT1個計數(shù)周期T思考題:哪種工作方式可以使8155完成1/n分頻器的功能?這種分頻器與普通數(shù)字電路中的“計數(shù)器分頻”有何不同?(返回)5,8155應用與編程舉例充分利用8155的內(nèi)部資源可以簡化單片機系統(tǒng)的設計。無論是8155或其它外圍電路與MCS-51的連接可分為兩種方式:最小化連接;按照外部RAM地址統(tǒng)一編址。前者適用于較小的系統(tǒng),后者用于較復雜的系統(tǒng)。這里采用前者,目的是使大家掌握8155最基本的編程方法。8155在I/O工作方式中我們選擇“通用I/O方式”為例。返回本節(jié)目錄8155與MCS-51的最小化連接P2.7P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0ALE/RD/WR/CEIO/M

PAAD7AD6AD5

PBAD4AD3AD2AD1

PCAD0ALE

T/OUT/RD/WR

T/INMCS-518155P2.7-P2.0P0.7-P0.0地址選擇01111110000000007E00HRAM’256存儲單元01111110111111117EFFH01111111000000007F00H命令寄存器01111111000000017F01HPA口01111111000000107F02HPB口01111111000000117F03HPC口01111111000001007F04H計數(shù)器低8位01111111000001017F05H計數(shù)器高8位最小系統(tǒng)對8155內(nèi)部各寄存器的地址分配設定:PA口輸入,PB口輸出,輸入脈沖進行16分頻。ORG

1000HSTRAT:

MOV

DPTR,#7F04HMOV

A,#10H

MOVX

@DPTR,AINC

DPTRMOV

A,#40HMOVX

@DPTR,AMOV

DPTR,#7F00HMOV A,

#

0C2HMOVX

@DPTR,AINPUT:MOV DPTR,#

7F01HMOVX

A,@DPTROUT:;指向定時器低8位;計數(shù)初值16;裝入初值;指向定時器高8位;設定為連續(xù)方波;裝入定時器高8位;指向命令口;控制字:(A輸入B輸出啟動定時器);裝入控制字并啟動定時器;指向PA口;從PA口輸入數(shù)據(jù);指向PB口;從PB口輸出數(shù)據(jù)MOV DPTR,#

7F02HMOVX

@DPTR,AEND【思考題】:如何將PA口輸入的數(shù)據(jù)存到8155內(nèi)部RAM的某一單元?控制字MOVX @DPTR,A或MOVX A,@DPTR的時序S1S2S6S5S4S3S1S2S6S5S4S3ALEPsenA15-A8(PC)A15-A8(DPH)指令A7-A0

(DPL)數(shù)據(jù)RDP2口P0口選中外部RAM第一個階段:取MOVX

指令第二階段:執(zhí)行MOVX(從外部讀取數(shù)據(jù))返回上一次4.3.3:使用8255擴展I/O端口(257頁)1,8255的內(nèi)部結(jié)構(gòu)和引腳功能2,8255的控制字和狀態(tài)字(一)“方式控制字”(二)“C口單一置位復位控制字”(三)8255A的狀態(tài)字1,8255A在模式1時的狀態(tài)字2,8255A在模式2時的狀態(tài)字3,8255的工作模式4,8255A應用舉例繼續(xù)8255的內(nèi)部結(jié)構(gòu)圖A口C口高四位B口C口低四位A組控制器B組控制器數(shù)據(jù)緩沖器讀寫控制邏輯PA7-0PB7-0PC7-4PC3-0D7-D0/RD/WRA0A1RESET/CS返回前一次C口1,8255的內(nèi)部結(jié)構(gòu)和引腳功能(一):內(nèi)部結(jié)構(gòu):由四部分組成。1,A口、B口和C口;3,雙向數(shù)據(jù)緩沖器;2,A、B組控制器;4,讀寫控制器。A口。8位數(shù)據(jù)輸出緩沖/鎖存,輸入緩沖/鎖存的I/O端口。

B、C口。8位數(shù)據(jù)輸出緩沖/鎖存,輸入緩沖的I/O端口。A組控制器,B組控制器。接收CPU發(fā)送的控制字并確定

8255的工作模式。其中:A組控制器控制A口和C口的高4位;

B組控制器控制B口和C口的低4位。數(shù)據(jù)緩沖器。傳送CPU與8255之間的8位數(shù)據(jù)和控制字。讀寫控制邏輯。接收CPU送來的讀(/RD),寫(/WR)和片選(/CS)等信號,用于對8255的讀寫控制。(二)引腳功能:40腳DIP封裝。1,數(shù)據(jù)總線(D7~D0):雙向與內(nèi)部數(shù)據(jù)緩沖器連接,傳送

CPU與8255之間的數(shù)據(jù)字、控制字。2,控制總線:RESET:/CS:復位線,高電平有效;

片選信號,低電平有效;/RD、/WR:讀寫命令線,低電平有效;A0、A1:

用于選擇A、B、C口和控制寄存器的地址線。3,并行I/O總線(24條):PA7~PA0:雙向I/O總線,可設定為輸入、輸出或雙向方式;PB7~PB0:雙向I/O總線,可設定為輸入或輸出方式;

PC7~PC0:雙向I/O總線,可設定為傳送I/O數(shù)據(jù)(模式0)或控制/狀態(tài)信息(模式1,2);4,電源線:Vcc和GND.結(jié)構(gòu)圖8255控制信號功能、地址表(設/CS=C0H)/CS=C0~C3H(11000000)A1

A0/RD/WR端口地址端口功能00

001C0HA口讀A口00

010C0H寫A口00

101C1HB口讀B口00

110C1H寫B(tài)口01

001C2HC口讀C口01

010C2H寫C口01

110C3H控制口寫控制字1XXXXXX未選中返回本節(jié)目錄轉(zhuǎn)8255框圖返回上一次2,8255的控制字和狀態(tài)字8255有“方式控制字”和“C口置復位控制字”兩種控制字,由D7=1或D7=0區(qū)別。①“方式控制字”用于確定端口的工作模式,輸入或輸出等;②“C口置復位控制字”用于在模式1、2時單獨對C口置位或復位,以實現(xiàn)某些控制功能。D7D6D5D4D3D2D1D0標志位

A組方式選擇

A口、C口高4

B組方式

B口、C口低4返回前次D6,D5:A組方式選擇位。00:模式0,01:模式1,1X:模式2。D4:A口輸入/輸出控制位。=0時設定為輸出;=1時為輸入。

D3:C口高4位輸入/輸出控制位。=0時設定為輸出;=0為輸入。

D2:B組方式選擇位。D2=0時設定為模式0;=1時為模式1。D1:B口輸入/輸出控制。D1=0時設定為輸出;=1時為輸入。

D0:C口低4位輸入/輸出控制。=0時為輸出;=1時,為輸入。(一)“方式控制字”(D7=1)D7=1D6D5D4D3D2D1D0標志位

A組方式選擇

A口、C口高4

B組方式

B口、C口低4使C口各位在模式1,2時單獨置位或復位,以實現(xiàn)某些控制功能。如:設置或清除A口、B口的中斷允許位等。【注意】:對C口的置位/復位是通過控制口實現(xiàn)的!D6~D4:不用。D3~D1:C口選擇位。三位二進制數(shù)(000~111),確定C口中8個位(D7~D0)中的某一位(要處理的位)。D0:置、復位控制位。D0=0時,復位;D0=1時,置位。D7=0XXXD3D2D1D0標志位=0D6-D4位不用C口位選擇位置復位控制位返回上一次(二)“C口單一置位、復位控制字”(D7=0)舉例若8255的控制寄存器選口地址為C3H,試寫出令PC3先置

“1”,后置“0”的程序。【解】:ORG

1000H;設定8255的控制口;令PC3置“1”的控制字送A;令PC3=1(使用P0口傳送命令);PC3置“0”的控制字送A;令PC3置“0”MOV

R0,#0C3HMOV

A,#07HMOVX

@R0,AMOV

A,#06HMOVX

@R0,A:ENDD7=0XXXD3D2D1D0標志位=0D6-D4位不用C口位選擇位置復位控制位例題中8255與89C51的連接示意圖89C51P0ALECP8255PAPC/CEPBD7~D074LS373地址譯碼器凡是使用MOVX指令,數(shù)據(jù)都是通過P0口在指令的第二個機器周期進行傳送。當8255A設定為模式1、模式2時,可以通過讀C口獲得相應的“狀態(tài)字”,以便CPU了解8255A的工作狀態(tài)。狀態(tài)字分為3

種類型:①INTEA:A組的中斷允許觸發(fā)器的狀態(tài)。=1允許中斷,通過CPU對PC4的置位和復位來實現(xiàn)控制(INTRB類同)。②IBFA、OBFA:A口輸入時,輸入緩沖器滿標志;A口輸出時,輸出緩沖器滿標志。該標志位硬件自動置位,作為異步通訊的狀態(tài)和握手信號(IBFB、OBFB類同)。③I/O:引腳上的電平信號。返回前一次8255地址表C口置復位控制字(三)8255A的狀態(tài)字(首先了解3種模式)1,8255A在模式1時的狀態(tài)字(注:I/O為引腳的電平信號)D7D6D5D4D3D2D1D0I/OI/OIBFaINTEaINTRAC口各位

PA口輸入用時/OFBaINTEaI/OI/OINTRAINTEbIBFbINTRbPB口輸入用時INTEb/OBFbINTRbPC7

PC6

PC5PA口輸出用時PC4

PC3PC0

PC2

PC1PB口輸出用時PC7

PC6

PC5

PC4

PC3PC2

PC1

PC02,8255A在模式2時的狀態(tài)字IBFb

:B口“輸入緩沖器滿”標志。

INTRb:B口中斷請求信號,高電平有效。/OBFaINTE1IBFaINTE2IngraINTEbIBFbINTRbC口各位:

D7

D6

D5

D4D3D2

D1

D0返回上一次A組模式2(輸入、輸出)

B組模式1

輸出(或輸入)/OBFa:A口“輸出緩沖器滿”標志。INTE1

:A口與輸出相關的中斷允許位,軟件置位。IBFa

:A口“輸入緩沖器滿”標志。INTE2:A口與輸入相關的中斷允許位,軟件置位。

INTRa:A口中斷請求信號,高電平有效。INTEb:B口中斷允許位,軟件置位。返回本節(jié)目錄3,8255的工作模式8255A有三種工作模式:模式0,模式1,和模式2。用戶可以通過“8255A方式控制字”來設定所需的工作模式。模式0:

基本的輸入/輸出方式(同步數(shù)據(jù)傳送);模式1:

選通輸入、選通輸出方式(與低速外設之間的 異步數(shù)據(jù)傳送)。此時:A口、B口作為輸入或輸出,C口做聯(lián)絡線;模式2:

A口的雙向選通(輸入/輸出)異步傳送方式。轉(zhuǎn)控制字同步(模式0)與異步(模式1、2)示意圖接口電路接口電路打印機驅(qū)動燈開關量輸入用于通用I/O方式的接口電路(同步傳輸方)對于低速外設使用選通方式的接口電路(異步數(shù)據(jù)傳輸)握手信號(1)模式0:基本的輸入/輸出方式--同步傳送A口、B口和C口均可設定為此種模式?!纠纭浚涸O定A口和C口的高4位為模式0的輸出方式(A組),B口和C口的低4位為模式0的輸入方式(B組)。MOVR0,

#0C3H;控制寄存器地址送R0MOVA,#10000011B;方式控制字83H送AMOVX@R0,A;控制字83H送控制寄存器MOVR0,#0C1H;選擇B口MOVXA,@R0;從8255的B口輸入到AMOVR0,#0C0H;選擇A口MOVX@R0,A;從A口輸出累加器A的數(shù)據(jù)轉(zhuǎn)控制字模式0時,CPU可以對8255A進行同步的I/O數(shù)據(jù)傳送。輸出時:數(shù)據(jù)可以在8255A對應的鎖存器中鎖存;輸入時:外設I/O數(shù)據(jù)可以送到各端口得到鎖存或緩沖。模式0

主要適用于快速外設或不需要CPU去等待的場合。接口電路驅(qū)動燈開關量輸入例題中模式0時的電路示意圖89C51P0ALECP8255PAPCH/CEPCLPBD7~D074LS373地址譯碼器采用與存儲器統(tǒng)一編址的8255接口電路連接(2)模式1:選通輸入、輸出方式-異步查詢A口、B口均可獨立的設置為這種工作模式。①:A口、B口用于傳送I/O數(shù)據(jù);②:C口作為A口、B口與外設之間的聯(lián)絡握手信號。CPU與外設之間以“中斷”或“查詢”的方式進行異步

I/O數(shù)據(jù)傳送。轉(zhuǎn)8255邏輯圖返回上一次接口電路打印機/ACK/OBFDB/OBF:對外發(fā)送的“數(shù)據(jù)好”信號/ACK:外設回答的“收到數(shù)據(jù)”信號D7D6D5D4D3D2D1D0I/OI/OIBFaINTEaINTRAPA口輸入用時/OFBaINTEaI/OI/OINTRAPA口輸出用時INTEbIBFbINTRbPB口輸入用時INTEb/OBFbINTRbPC7

PC6

PC5PC4

PC3PC2

PC1

PC0PB口輸出用時PC7

PC6

PC5PC4

PC3PC2

PC1

PC0C口各位狀態(tài)字C口各位模式1模式2輸入方式輸出方式雙向I/O方式PC7I/O/OBFa/OBFaPC6I/O/ACKa/ACKaPC5IBFaI/OIBFaPC4/STBaI/O/STBaPC3INTRAINTRAINTRAPC2STBb/ACKb由B口模式?jīng)Q定PC1IBFb/OBFb由B口模式?jīng)Q定PC0INTRbINTRb由B口模式?jīng)Q定模式1下C口各位引腳定義(參見245頁)INTR:8255A發(fā)出的中斷請求信號,經(jīng)反相后送單片機。IBF:

8255A發(fā)出“輸入緩沖器滿”信號。/OBF:輸出緩沖器滿信號/STB:輸入操作時,外設發(fā)出的“選通信號”,用于8255A的數(shù)據(jù)鎖存用。/ACK:輸出操作時,外設發(fā)出通知8255A的“已接收到數(shù)據(jù)”的應答信號?!咀⒁狻浚阂_定義不同于狀態(tài)字:①狀態(tài)字是通過讀8255的C口讀入的,供CPU查詢的狀態(tài);②引腳定義則是8255在模式1、2時與外部設部之間的聯(lián)絡線(握手信號)連接。(1)8255的模式1:選通輸入方式(A口)P08031/INT0(高速)D7-D0

PAPC4PC5PC3D7-D0輸入設備(低速)INTEa/STBaIBFa12轉(zhuǎn)符號說明模式一時的狀態(tài)字INTR

A(參見246頁)1,當外設輸入數(shù)據(jù)到PA口時,發(fā)送/STBa低電平選通信號;2,8255A收到/STBa上的負脈沖后作兩件事:①將數(shù)據(jù)存入A口輸入緩沖/鎖存器中;②向外設輸出“緩沖器滿”的IBFa高電平信號,通知收到數(shù)據(jù)。3,8255A檢測到/STBa變?yōu)楦唠姇r,若Qibfa高電平,

Qintra高電平時,將INTRa變高向CPU申請中斷(Qintra可由用戶對PC4進行單一置復位控制字控制,參見模式一時的狀態(tài)字)。4,CPU響應中斷后,從A口讀取數(shù)據(jù),并在讀走數(shù)據(jù)后8255A撤掉INTRa信號,并使/STBa變低通知外設送下一個字節(jié)的數(shù)據(jù)。(2)8255的模式1:選通輸出方式(B口)P08031/INT0D7-D0

PBPC1PC2PC0D7-D0輸入設備INTEb/ACKbINTRb13/OBFb

2模式一時的狀態(tài)字1,CPU通過MOVX

@Ri

,A

指令將數(shù)據(jù)送到B口輸出鎖存器,8255A收到數(shù)據(jù)后便令“輸出緩沖器滿”/OBFb變?yōu)榈碗娖?通知外設準備接收。2,外設接到/OBFb的低電平后作兩件事情:①從PB上取走數(shù)據(jù);②,使/ACKb線變低,通知8255A外設已收到數(shù)據(jù)。3,8255A接收到/ACKb線變低后,就對/OBFb

,/ACKb

和Qinteb的狀態(tài)進行檢測,當它們皆為“1”時,INTRb變?yōu)楦唠娖较駽PU發(fā)終端申請。4,CPU響應中斷后,通過中斷服務程序?qū)⑾乱粋€數(shù)據(jù)送到8255A的B口,同時撤掉INTRb信號。(參照258頁程序)開中斷等待中斷送控制字到8255數(shù)據(jù)塊指針R1、計數(shù)器R2賦初值從數(shù)據(jù)塊中取數(shù)到8255的A口通過PC0輸出一個負脈沖/STB中斷服務程序RETI修改數(shù)據(jù)指針R1從數(shù)據(jù)塊中取數(shù)到8255的A口通過PC0輸出一個負脈沖/STBR2-1→R2R2=0?開INT0中斷關INT0中斷YesNo主程序流程圖中斷服務程序流程圖參照258頁程序(3)模式2:A口的雙向(輸入/輸出)方式只有A口具有模式2

方式。此時,PA口為雙向I/O總線。1,當PA作輸入口時,由/STBa和IBFa信號控制,過程同模式1的輸入操作。2,當PA作輸出口時,由/OBFa和/ACKa控制,工作過程同模式1的輸出操作。模式2

非常適應像終端一類的外設,如鍵盤、顯示器等設備。P08031/INT0D7-D0

PAD7-D0輸入設備PC7INTE1/OBFa/ACKaIngraPC6PC4PC5PC3/STBaIBFa+INTE2返回本節(jié)目錄模式2

狀態(tài)字回到8255的狀態(tài)字4,8255A應用舉例(方式0)/RD/WRP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0ALE89C51D7

Q7D6

Q6D5

Q5D4

Q4D3

Q3D2

Q2D1

Q1D0

Q074LS373G/E/RD/WRRESET/CSPC口8255AA1A0PB口D7D6D5D4D3D2

PA口D1D0設8255A工作在方式0,且A口輸入,B、C口輸出。/CS=FF7XHA口:

FF7CHB口:FF7DH,C口:FF7EH,控制口:FF7FH程序清單ORG

0100HSTART:MOVA

,#90H;方式0,A口輸入,B口、C口輸出MOVDPTR,#0FF7FH;8255A控制口地址送指針MOVX

@DPTR,A

;控制字送8255A控制寄存器MOVDPTR,#0FF7C;A口地址送指針MOVXA,@DPTR;從A口輸入數(shù)據(jù)到AMOVDPTR,#0FF7DH;B口地址送指針MOVMOVXA,DATA1@DPTR,A;從內(nèi)存DATA1單元中取數(shù)X1到A;數(shù)據(jù)從B口輸出MOVDPTR,#0FF7EH;C口地址送指針MOVA,DATA2;從內(nèi)存DATA2單元中取數(shù)X2到AMOVX

@DPTR,A;數(shù)據(jù)從C口輸出返回本節(jié)目錄4.3.4,使用串行口擴展I/O端口在MCS-51單片機串行口的4種工作模式中模式0

(同步移位模式)可以用來實現(xiàn)系統(tǒng)并行I/O端口的擴展。使用這種方式的特點:擴展I/O端口數(shù)量可以不受限制(N*8位);擴展端口與單片機之間的連線少(2

3條);擴展口與單片機之間的數(shù)據(jù)交換時間較長;需要使用外部的“并入串出”或“串入并出”移位寄存器。MCS-51RXDTXD移位寄存器移位寄存器同步移位脈沖由MCS-51的串口與兩個8位移位寄存器(74LS164)構(gòu)成的16位并行輸出口數(shù)據(jù)線串行口0模式特點:同步移位方式。8位數(shù)據(jù)移位,低位在先;波特率固定為fosc/12;數(shù)據(jù)由RXD(P3.0)出入,同步移位脈沖由TXD發(fā)出。與串行口模式0相關的寄存器SBUF。用來裝載接收或待傳送數(shù)據(jù)的緩沖器;SCON。設定工作模式,存放相關標志的串口控制寄存器。設定串口模式:00000000B00010000B模式0時發(fā)送機的控制字;模式0

時接收機的控制字。【注意】:在接收或發(fā)送前必須將對應的標志RI或TI清零!只要REN=1便開始啟動接收。SM0SM1SM2RENTB8RB8TIRI使用2片74LS165構(gòu)成的16位輸入擴展口MCS-51P3.0P3.1P1.0H

G

F

E

D

C

B

AQH

74LS165

SINS/

L

CLKH

G

F

E

D

C

B

AQH

74LS165

SINS/

L

CLKRXDTXD16位并行I/O端口A~H:8位并行數(shù)據(jù)輸入端;74LS165:并入串出移位寄存器SIN:

串行數(shù)據(jù)輸入端;QH:

串行數(shù)據(jù)輸出端;S/L:

=0時鎖存并行數(shù)據(jù),=1時允許串行移位。編程舉例:讀入20個字節(jié)的數(shù)據(jù)并送入內(nèi)部RAM單元MOVR7,#14H;字節(jié)數(shù)20送計數(shù)器R7MOVR0,#20H;內(nèi)部數(shù)據(jù)區(qū)指針R0賦初值SETBF0;設置“讀入字節(jié)數(shù)奇偶數(shù)”標志RCV0:CLRP1.0;并行置入數(shù)據(jù)SETBP1.0;允許串行移位RCV1:MOVSCON,#00010000B;設定模式0并啟動接收(REN=1)LOOP:JNBRI,$;等待接收結(jié)束CLRRI;清RI準備下一次接收MOVA,SBUF;將接收的數(shù)據(jù)送AMOV@R0,A;數(shù)據(jù)送內(nèi)存INCR0;修改數(shù)據(jù)區(qū)指針R0CPLF0;標志取反JBF0,RCV2;接收偶次后重新置入數(shù)據(jù)DECR7;接收奇次時要再接收一幀SJMP

RCV1;轉(zhuǎn)RCV1接收第二幀數(shù)據(jù)RCV2:DJNZR7,RCV0;是否完成20個字節(jié)的輸入【注意】:F0的作用和程序根據(jù)F0的狀態(tài)轉(zhuǎn)移到RCV1、RCV0的區(qū)別。數(shù)據(jù)塊指針R0、計數(shù)器R7賦初值設定串口命令啟動接收MOV

A,SBUF修改數(shù)據(jù)指針從P1.0輸出負脈沖鎖定并行數(shù)據(jù)RI=1?NYCLRRI標志F0原始置一R7-1→R7CPL

F0NF0=1?YR7-1→R7R7=0?YN結(jié)束CC程序流程圖思考題:編一個在下面的電路中讀入20個字節(jié)的數(shù)據(jù)的程序MCS-51P3.0P3.1P1.0H

G

F

E

D

C

B

AQH

74LS165

SINS/

L

CLKRXDTXD使用2片74LS164構(gòu)成的16位輸出擴展口MCS-51P3.0P3.1P1.0QHQAA,B

74LS164/CLRCLKQA

QHA,B

74LS164/CLR

CLKRXDTXD共陽極LED數(shù)碼管.

g

f

e

d

c

b

a共陽極LED數(shù)碼管.

g

f

e

d

c

b

a+5V編程:利用靜態(tài)數(shù)碼管顯示電路,顯示RAM中的數(shù)據(jù)數(shù)據(jù)存RAM的20H開始的單元,以BCD碼的形式存儲;顯示前必須利用查表程序?qū)CD碼轉(zhuǎn)換為共陽極的字符碼。顯示字型dp

,g,f,e,d,c,b,a字符碼+VCCaaf

g

b

bcde

ced

d

fp

gdp01

1

0

0

0

0

0

0C0H11

1

1

1

1

0

0

1F9H21

0

1

0

0

1

0

0A4H31

0

1

1

0

0

0

0B0H41

0

0

1

1

0

0

199H51

0

0

1

0

0

1

092H61

0

0

0

0

0

1

082H71

1

1

1

1

0

0

0F8H81

0

0

0

0

0

0

080HORG2000HDISP:MOVR7,#02H;設置顯示位數(shù)MOVR0,#20H;設置數(shù)據(jù)區(qū)指針MOVSCON,#00H;設串行口為模式0MOVDPTR,

#TABLE;設置字符表指針DISP0:MOVA

,

@R0;取數(shù)據(jù)到A;從表中取與A對應的字符到A;字符向外傳送;等待傳送結(jié)束;清除標志TI;指向下一個數(shù)據(jù);未完時轉(zhuǎn)DISP0繼續(xù)MOVC

A,@A+DPTRMOV

SBUF,ALOOP:

JNB

TI,$CLR

TIINC

R0DJNZ

R7,DISP0RET;0,1,2,3,4的字符碼;5,6,7,8,9的字符碼TABLE:DB

0C0H,0F9H,0A4H,0B0H,99HDB

92H,82H,0F8H,80H,98H

END返回設定串行口工作模式取數(shù)據(jù)到AMOV

A,@R0查表:MOVC

A,@A+DPTR發(fā)送數(shù)據(jù)MOV

SBUF,A初始化:計數(shù)器R7賦初值02H數(shù)據(jù)指針R0賦20HDPTR賦表頭地址CTI=1?清標志:CLR

TI修改指針I(yè)NC

R0NYNR7-1→R7R7=0?Y返回C程序流程圖(查尋法)采用中斷的方式實現(xiàn)串行口的操作設定串行口工作模式開串行口中斷取數(shù)據(jù)到AMOV

A,@R0查表發(fā)送數(shù)據(jù)MOV

SBUF,A初始化:R7=02H,R0=20HDPTR賦表頭地址等待中斷中斷服務程序返回清除標志修改指針N關閉串口中斷R7-1→R7R7=0?Y取數(shù)據(jù)到A

查表、發(fā)送數(shù)據(jù)ORGLJMPORGLJMP0000HSTART0023HCHUAN程序清單(中斷方式)ORG2000HSTART:MOVR7,02H;設置顯示位數(shù)MOVR0,#20H;設置數(shù)據(jù)區(qū)指針MOVSCON,#00H;設串行口為模式0SETBEASETBES;開串口中斷MOVDPTR,

#

TABLE;設置字符表指針DISP0:MOVA

,

@R0;取數(shù)據(jù)到AMOVCA,@A+DPTR;從表中取與A對應的字符碼到AMOVSBUF,A;字符向外傳送SJMP$;等待中斷ORG

2500HCHUAN:

CLR

TIINC

R0DJNZ

R7,DISP1CLR

ESSJMP

DISP0DISP1:MOV

A,@R0SBUF,A;清除標志TI;修改數(shù)據(jù)指針;未完時轉(zhuǎn)DISP1繼續(xù);完成時關閉串口中斷;轉(zhuǎn)返回;未完時,取下一個數(shù)據(jù);查表;發(fā)送MOVC

A,@A+DPTRMOVRETIDISP0:TABLEDB

0C0H,0F9H,0A4H,0B0H,99H

;0,1,

2,3,4的字符碼

DB

92H,82H,0F8H,80H,98H

;5,6,7,8,9的字符碼

END程序在ROM中的位置LJMP

STARTLJMPCHUANMOV

R7,02HCLR

TIRETIC0HF9H0000H0023H2000H2500HTABLE上電入口ES中斷矢量入口主程序串口服務程序字符表思考題:TI=1時,單片機是如何實現(xiàn)中斷調(diào)用的?在主程序的什么位置上產(chǎn)生中斷調(diào)用的?中斷返回時,返回到主程序的什么位置?如果想把主程序、中斷服務程序和字符表三者

緊密相連(節(jié)省程序空間),程序應如何修改?將查表指令改為

MOVC A,@A+PC時,程序應如何修改?;設置顯示位數(shù);設置數(shù)據(jù)區(qū)指針;設串行口為模式0ORGSTART:

MOVMOVMOVSETBSETBDISP0:2000HR7,02HR0,#20HSCON,#00HEAESMOV A

,

@R0ADD A

,#dataMOVC

A,@A+PCMOV

SBUF,ASJMP

$;開串口中斷;取數(shù)據(jù)到A;調(diào)整data=2+2;從表中取字符碼到A;字符向外傳送;等待中斷TABLEDB

0C0H,0F9H,0A4H,0B0H,99H ;0,1,

2,3,4的字符碼DB

92H,82H,0F8H,80H,98H ;5,6,7,8,9的字符碼

END返回4.4:定時計數(shù)器的應用:定時計數(shù)器的四種工作模式:定時器相關的寄存器:定時器模式1電路:定時計數(shù)器的初始化:定時器方式1應用舉例(一):定時器方式1應用舉例(二):定時器門控位GATE的應用繼續(xù)4.4.1:定時計數(shù)器的四種工作模式M1M0工作模式00模式0:13位計數(shù)器模式01模式1:16位計數(shù)器模式10模式2:8位自動重裝模式11模式3:TH0、TL0和T1各自獨立(3T)模式0、模式1:區(qū)別僅在于長度為13位和16位;

模式2:常用于單片機串行通訊時作“波特率”發(fā)生器。本節(jié)主要介紹模式1

的應用。返回本節(jié)目錄4.4.2:定時器相關的寄存器GATEC/TM1M0GATEC/TM1M0定時/計數(shù)器1定時/計數(shù)器0TF1TR1TF0TR0IE1IT1IE0IT01,模式寄存器TMOD

(

SFR地址:

89H

注意:不能位尋址)2,控制寄存器TCON

(SFR地址:88H)T0、T1的啟動TR和溢出標志TF

外部中斷標志IE和觸發(fā)極性選擇IT返回上一次

返回本節(jié)目錄4.4.3:定時器模式1電路TL1TH1震蕩器1/12(8位)(8位)TF1中斷控制T1

引腳TR1GATEINT1C/T=0C/T=1返回本節(jié)目錄4.4.4:定時計數(shù)器的初始化(一)初始化的步驟:1,根據(jù)需要,設定工作方式(C/T位)計數(shù)或定時;2,確定初值TC;3,若采用中斷方式,則要設置相應的中斷參數(shù)、優(yōu)先級別;4,送命令字,啟動

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論