河北工業(yè)大學單片機課第6章 基礎內部IO_第1頁
河北工業(yè)大學單片機課第6章 基礎內部IO_第2頁
河北工業(yè)大學單片機課第6章 基礎內部IO_第3頁
河北工業(yè)大學單片機課第6章 基礎內部IO_第4頁
河北工業(yè)大學單片機課第6章 基礎內部IO_第5頁
已閱讀5頁,還剩107頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章MCS-51內部的I/O口、定時器及其應用重點內容和要求本章重點討論MCS-51單片機內部的資源的原理及其應用

并行I/O口

定時器/計數器

串行I/O口基本要求:

掌握P0~P3的特性及其應用

掌握T/C的原理、工作方式、程序設計方法及應用

學會綜合運用

了解串行口的原理、制式16.3MCS-51串行I/O口及串行通信

第六章MCS-51內部的I/O口、定時器及其應用6.1MCS-51內部的并行I/O口及應用6.2MCS-51的定時器/計數器2

6.1.1

P0口

6.1.2

P1口

6.1.3

P2口

6.1.4

P3口

6.1.5

MCS-51內部并行I/O口的應用

6.1MCS-51內部的并行I/O口及應用36.2.1定時器/計數器的組成6.2.2定時器/計數器的控制6.2.3定時器的四種工作方式6.2.4T/C的初始化6.2.5定時器/計數器的溢出校準和實時讀取6.2.6應用舉例

6.2MCS-51的定時器/計數器4

6.3MCS-51串行I/O口及串行通信6.3.1串行通信基礎知識6.3.2MCS-51的串行I/O口及控制寄存器6.3.5MCS-51串行口的多機通信6.3.3MCS-51串行口雙機異步通信6.3.4MCS-51串行口的應用5

8051單片機內部有四個8位并行I/O口:

P0、P1、P2和P3

P0~P3這4個并行I/O口都可以作準雙向通用I/O口

P0、P2和P3口還有復用的第二功能每個口都包含:

一個(8位)鎖存器(即特殊功能寄存器P0~P3)

一個輸出驅動器

兩個三態(tài)緩沖器6.1MCS-51內部的并行I/O口及應用6

6.1.1P0口

功能:

控制=0:

P0口可作通用I/O口,是漏級開路的。因此必須外接上拉電阻,以保證“1”信號正常輸出??刂?1:

P0口分時作為地址/數據總線使用。內部結構:如圖所示當外部擴展存儲器或I/O口時,由EA、PC指針從外部程序存儲器取指令碼、執(zhí)行指令MOVC、MOVX時,控制信號=1,使MUX與反向器3連通,作分時地址/數據總線。76.1.2P1口

功能:

P1口作通用I/O口

P1口也是一個“準雙向”口,作輸入口時要先將輸出驅動管截止。即先執(zhí)行一條指令

MOVP1,#0FFH內部結構:如圖所示86.1.3P2口

功能:

控制=0:

P2口用作通用I/O口與P1口類似控制=1:

P2口用作高8位地址總線

內部結構:

如圖所示96.1.4P3口功能:

第二輸出功能端=1:P3口用作通用I/O口

P3口用作第二功能

三根第二功能輸出引腳

TXD、WR和RD

五根第二功能輸入引腳

INT0、INT1、

T0、T1和RXD內部結構:如圖所示106.1.5

MCS-51內部并行I/O口的應用“讀鎖存器”和“讀引腳”的指令P0、P2、P3口復用作片外擴展系統的系統總線直接輸入/輸出11

一、“讀鎖存器”和“讀引腳”的指令

1.“讀鎖存器”的指令

P0~P3作目的操作數的指令,能實現“讀—修改—寫”口鎖存器的操作,這類指令有:(1)字節(jié)操作指令(2)位操作指令

ANLPx,—JBCPX.Y,relORLPx,—CPLPX.YXRLPx,—CLRPX.Y DECPxSETBPX.YDJNZPx

,relMOVPX.Y,CINCPx

其中:X是口的序號0~3,Y是位的序號0~7P0~P3編程和使用的方法12

2.“讀引腳”的指令“讀引腳”指令的特點是:P0~P3作為源操作數出現在指令中,但在讀引腳數據之前,必須對所讀的口或口位的D鎖存器寫入“1”.

要正確讀引腳數據,必須先寫一條MOVPX,#0FFH指令或能對所讀的口或口位的D鎖存器寫入“1”的指令,而后緊接著寫下面的指令:(1)字節(jié)操作指令

MOV A,PxANLA,PXMOV direct,PxORLA,PXXCH A,PXXRLA,PXPUSH PX ANLdirect,PXADD A,PX ORLdirect,PXADDC A,PXXRLdirect,PXSUBB A,PX Q引腳信號13(2)位操作指令同理,必須先寫一條SETBPX.Y或能對所讀口位的D鎖存器寫入“1”的指令,在其后再緊跟如下指令。

MOVC,PX.YANLC,PX.YORLC,PX.YJNBPX.Y,relJBPX.Y,rel

14P0、P2、P3口復用作片外擴展系統的系統總線15無條件輸入/輸出程序

查詢輸入/輸出程序中斷輸入/輸出程序三、直接輸入/輸出[例6-1]簡單開關量的輸入/輸出161)P1.7~P1.4并行輸出程序通過驅動P1.7~P1.4輸出,使LED3~LED0巡回顯示,程序如下:ORG0000HMAIN1:MOVSP,#6FHMOVA,#0FFHMOVP1,AANLA,#0EFHLOOP:MOVP1,A;P1.4=0ACALLDLYRLAJBACC.0,LOOPMOVA,#0EFHSJMPLOOP;延時子程序

DLY: MOVR6,#0FHDLY1:MOVR5,#0FFHDLY2:MOVR4,#0FFHDLY3:DJNZR4,DLY3DJNZR5,DLY2DJNZR6,DLY1 RETENDLED“0”亮“1”滅17

2)讀入P1.3~P 1.0引腳上的開關K3~K0的預置狀態(tài),再經P1.7~P1.4輸出去驅動LED3~LED0發(fā)光二極管,使發(fā)光二極管顯示開關狀態(tài)。對應參考程序:ORG0100HMAIN2:MOVA,#0FFHMOVP1,AMOVA,P1

SWAPA

MOVP1,A

HERE:SJMPHERE

END

18(2)查詢輸入/輸出程序

讀入P3.0引腳上的開關K4的預置狀態(tài),若P3.0=1,則驅動P1.7輸出使LED3閃亮一段時間;否則,查詢等待。參考程序如下:

ORG0200HMAIN3:MOVSP,#60HSETBP1.7WAIT:JNBP3.0,WAIT

MOVR7,#0FHLOOP:CPLP1.7ACALLDLYDJNZR7,LOOP SJMPWAITEND196.2MCS-51的定時器/計數器在單片機實時應用系統中,定時和對外部事件計數的功能。定時:對周期已知的脈沖信號計數計數:對外部事件計數,對周期未知的外來脈沖信號計數定時方法:

采用軟件占用CPU的時間,降低了CPU的使用效率;定時或計數方法:

采用專門的硬件電路,參數調節(jié)不便;

采用可編程的定時器/計數器是最好的方法。

可以方便靈活地修改定時或計數的參數或方式

與CPU并行工作,大大提高了CPU的工作效率206.2.1定時器/計數器的組成

Timer/Counter

MCS-51單片機內部有二個16位的可編程的定時器/計數器:定時器/計數器0(T/C0)定時器/計數器1(T/C1)它們都有定時和對外部事件計數的功能,可用于定時控制、延時、對外部事件檢測和計數等場合.T/C0和T/C1的結構及與CPU的關系如圖6-4所示。21結構組成:

T/C0由兩個8位的TH0(8CH)和TL0(8AH)組成

T/C1由TH1(8DH)和TL1(8BH)組成軟件設置:

計數初值:對TH1、TL1、TH0、和TL0的初始化編程

工作方式:通過TMOD和TCON對每個T/C設置定時或計數特殊功能寄存器

TMOD(TimerModeRegister)TCON(TimerControlRegister)

THx

存放計數初值的高8位

TLx

存放計數初值的低8位定時器/計數器(T/C0和T/C1)的組成T/C0和T/C1都是16位的加1計數器22方式0方式1方式2方式3TH0TL0T/C1TH1TL1T/C0方式3串行口波特率發(fā)生器23共同點:都是通過計數器計脈沖的個數來實現的定時方式與計數方式的主要區(qū)別1、定時方式

T/C計數8051內部機器周期信號的個數,由計數個數可以計算出定時時間。每個機器周期使T/C的計數器增加1,直至計滿回零后自動產生溢出中斷請求,表示定時時間到。

f=12MHz,一個機器周期是1μs

2、計數方式

T/C計數來自引腳T0(P3.4)和T1(P3.5)的外部脈沖信號的個數。輸入脈沖由1變0的下降沿時,計數器的值增加1直到回零產生溢出中斷,表示計數已達預期個數。

最高計數頻率為振蕩頻率的1/24。即計數周期=2機器周期。不同點:

246.2.2定時器/計數器的控制

定時器/計數器的工作由TCON和TMOD控制

由軟件把控制字寫入TCON和TMOD,用來設置T/C0和T/C1的工作方式和控制功能。當8051系統復位時,TCON和TMOD所有位都被清0。一、工作模式寄存器TMOD(89H)

TMOD用于控制T/C0和T/C1的工作模式,其各位的定義格式如下:

其中,低4位用于T/C0,高4位用于T/C1。各位功能如下:

251.M1和M0工作方式選擇位這兩位可形成四種編碼,對應四種工作方式:

M1M0方式功能描述

000為13位定時器/計數器,TL存放低5位,TH存高8位

011為16位定時器/計數器

102常數自動裝入8位定時器/計數器

113僅適于T/C0,兩個8位定時器/計數器2.C/T計數/定時選擇位

C/T=0,設為定時方式,對機器周期計數;

C/T=1,設為計數方式,對來自T0或T1引腳的外來脈沖計數。26

3.GATE門控位(控制啟動方式)

GATE=0時,T/C的啟動只要用軟件使TR0(或TR1)置1即可,而不管/INT0(或/INT1)的電平是高還是低。

GATE=1時,只有/INT0(或/INT1)引腳為高電平且由軟件使TR0(或TR1)置1時,才啟動T/C工作。也就是T/C的啟動受雙重控制。注意:TMOD不能位尋址,只能由字節(jié)設置T/C的工作方式,低半字節(jié)設定T/C0,高半字節(jié)設定T/C1。2728二、

控制寄存器TCON(88H)控制寄存器TCON除可字節(jié)尋址外,各位還可位尋址。各位定義及格式如下:

1)TF1(TCON.7)T/C1的溢出標志位。當T/C1被允許計數后,T/C1從初值開始加1計數,回零時由高位產生溢出,由硬件自動置TF1為“1”,并向CPU請求中斷,當CPU響應并進入中斷服務程序后,TF1又被硬件自動清0。TF1也可以由程序查詢和清0。

2)TF0(TCON.5)T/C0溢出標志位。其功能同TF1。29

3)TR1(TCON.6)T/C1運行控制位。由軟件置位或復位。當GATE(TMOD.7)為0時,

TR1為1時,啟動T/C1計數;

TR1為0時,停止T/C1計數。

4)TR0(TCON.4)T/C0運行控制位。其功能同TR1,只是GATE為TMOD.3。

5)IE1、IT1、IE0、IT0(TCON.3~TCON.0)

外部中斷INT1、INT0的中斷標志位和申請信號的觸發(fā)方式控制位。30316.2.3定時器的四種工作方式

TMOD中控制位C/T設置定時或計數功能

M1、M0位的設置選擇四種工作方式,

即方式0、方式1、方式2和方式3

方式0、1和2時,T/C0和T/C1的工作相同;

方式3時,T/C0和T/C1的工作不同。32方式0

高8位和低5位的一個13位計數器的運行方式當TL1的低5位溢出時,向TH1進位,而TH1溢出(回零)時向TF1標志進位(硬件置位TF1),并申請中斷。還可以通過查詢TF1是否置位來判斷TH1是否回零溢出。33啟動控制

B=TR1

A=TR1

(INT1+GATE)

GATETRx

INTx

啟動情況

00X停止

01X啟動定時/計數

10X停止

11啟動定時/計數

11停止

其中:1表示高電平,0表示低電平,X表示任意狀態(tài)

舉例:利用GATE位測正脈沖的寬度34

方式1

方式1是一個16為定時器/計數器,見圖6-7。方式1的結構幾乎與方式0完全一樣,唯一的差別是:方式1中的TH1(TH0)和TL1(TL0)均是8位的,構成16位計數器。35

方式2

在方式2時,T/C被拆成一個8位的寄存器TH1(TH0)和一個8位計數器TL1(TL0),兩者構成可以自動重裝載的8位T/C,如圖6-8所示。36每當它計滿回零時

一方面向CPU發(fā)出溢出中斷請求,另一方面從TH1(或TH0)中重新獲得初值并啟動計數;

也就是CPU自動將TH1(或TH0)中存放的初值重新裝回到TL1(或TL0),并在此初值的基礎上對TL1(或TL0)開始新一輪計數,周而復始,直到下停止計數或更改工作方式命令為止。37方式3

方式3下T/C0和T/C1功能就不同了。此時,TH0和TL0按兩個獨立的8位計數器工作,如圖6-9所示。T/C1只能按不中斷的方式工作,常常利用它的定時功能作串行口波特率發(fā)生器,如圖6-10所示。T/C0方式3時,TL0占用了T/C0的C/T、GATE、TR0、TF0、T0(P3.4)和INT0控制引腳。

TH0只有簡單的內部定時功能,它占用了T/C1的TR1控制位和TF1中斷標志位,其啟動/關閉僅受TR1控制。38在T/C0工作在方式3時,T/C1仍可設置為方式0~2。由于TR1和TF1已被T/C0(TH0)占用,計數開關已被接通,此時僅用T/C1的C/T來切換其定時或計數工作方式就可使T/C1工作。計數器(8位、13位或16位)回零溢出時,只能將輸出送入串行口或用于不需要中斷的場合。一般情況下,當T/C1用作串行口波特率發(fā)生器時,T/C0才設置為工作方式3。此時,常把T/C1設置為方式2用作波特率發(fā)生器,見圖6-1039406.2.4T/C的初始化

1.初始化的步驟

MCS-51內部的T/C是可編程的,其工作方式和模式通過程序進行設定和控制,稱為對T/C的初始化。初始化的步驟是:

1)

確定工作方式,即根據題目要求先給TMOD送一個方式控制字。

2)計算計數初值/定時初值,并寫入TH0、TL0或TH1、TL1中。

3)根據需要,置位EA使CPU開放中斷,同時置位ETx允許T/C中斷。IP設定中斷優(yōu)先級。

4)給TCON送命令控制字,即置位TRx啟動T/C計數。

412.計數器初值的計算

T/C在計數模式下,計數之前必須給它的計數器TH0、TL0或TH1、TL1選送計數初值。T/C的計數器是在計數初值的基礎上加1計數的,當計數器回“0”時自動產生溢出,置位TFx中斷標志,向CPU提出中斷請求。設需要計數器計數的個數為X,計數初值為C,由此可得出如下計算計數初值的通式:計數初值:C=M-X(6—1)式中,M為計數器的模值,該值和計數器的工作方式有關。當方式0時

M=當方式1時(6—2)當方式2、3時423.定時器初值計算

在定時模式下,計數器對單片機振蕩頻率fosc經12分頻后的機器周期進行加1計數,用X表示計數個數,M表示模,C表示定時初值,Tcy表示機器周期,則1Tcy

=12/fosc,因此,定時時間T的計算公式為:

T=X·Tcy

=(M-C)Tcy

(6—3)

定時初值公式為:C=M-T/Tcy

(6—4)

定時器的溢出率=1/T=

fosc/(12·X)=

fosc/(12·(M-C))(6—5)應用舉例1

舉例2GATE43[例6-2]利用T/C0方式0產生1ms的定時,在P1.0引腳上輸出周期為2ms的方波。設單片機晶振頻率fosc

=12MHZ。解:

(1)確定T/C0的工作方式要在P1.0輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。

(2)送T/C0的方式控制字(TMOD)=00H,即T/C0定時,方式0,只由TR0啟動,因為T/C1不用,高4位取0。即:

GATEC/TM1M0GATEC/TM1M000000000TR0定時方式0,T/C1不用各位均取0啟動44(3)計算定時初值

Tcy=12/fosc=12/(12×106

)S=1μs

計數個數:X=1ms/1μs=1000

定時初值:C=(-X)=8192-1000=7192D

=1C18H=1110000011000B

高8位0E0H低5位18HTH0初值為0E0H,TL0初值為18H。若采用方式1,16位,則定時初值:C=65536-1000=64536=FC18HTH0初值為0FCH,TL0初值為18H

45

(4)

編程方法可以采用中斷或查詢兩種方式編寫程序。

1)中斷方式:當T/C0定時溢出時,TF0被置1,申請中斷。編程使CPU采用響應中斷方式輸出方波效率比較高。程序清單:

ORG0000HAJMPMAIN;轉到主程序MAIN ORG000BHAJMPTC0S;轉到T/C0的中斷服務程序TC0S主程序:ORG1000HMAIN:MOVSP,#6FHMOVTMOD,#00H;置T/C0為方式0,定時。

MOVTH0,#0E0H;送計數初值

MOVTL0,#18HSETBET0;T/C0允許中斷

SETBEA;CPU開中斷

SETBTR0;啟動T/C0定時

HERE:SJMPHERE;等待中斷中斷服務程序:ORG1200HTC0S:MOVTH0,#0E0H;重新裝入計數初值

MOVTL0,#18HCPLP1.0;輸出方波

RETI;中斷返回

END46ORG0000HMOVTMOD,#00H MOVTH0,#0E0HMOVTL0,#18HMOVIE,#00HSETBTR0LOOP:JBCTF0,DO1SJMPLOOPDO1:MOVTH0,#0E0HMOVTL0,#18HCPLP1.0SJMPLOOPEND

2)

查詢方式:還可以使CPU采用查詢TF0的方式處理T/C0定時溢出,編程簡單,但效率較低。程序中查詢采用JBCTF0,DO1指令,目的是當判到TF0=1后,必須用軟件復位TF0,為下次計數器回零溢出做好準備,這條指令具有判TF0為1后清零的雙重功能。47方式最小定時最大定時

01×1/fosc×128192×1/fosc×1211×1/fosc×1265536×1/fosc×122、31×1/fosc×12256×1/fosc×12最大計數值48[例6-5]利用GATE門控位測量從INT1引腳輸入的正脈沖寬度。解:1.確定工作方式(1)送方式控制字(TMOD)=10010000B=90H;

T/C1定時,方式1,GATE=1。(2)計算初值由于被測正脈沖寬度未知,假設寬度<=65.536ms,fosc=12MHz,則:計數個數:X=65536(最大)定時初值:C=65536-X=65536-65536=0,(TH1)=00H,(TL1)=00H。49

對P3.3(INT1)引腳輸入的脈沖采用查詢的方法。

P3.3

(INT1)

被測脈寬置1TR1 TH1TL1從0開始計數清0TR1,停止T/C1計數圖6-12脈沖測試原理(3)編程方法50

ORG0000HMAIN:MOVSP,#6FMOVTMOD,#90HMOVTL1,#00HMOVTH1,#00HLOOP:JBP3.3,LOOPSETBTR1LOOP1:JNBP3.3,LOOP1LOOP2:JBP3.3,LOOP2CLRTR1MOV30H,TL1MOV31H,TH1......ACALLCalc;計算子程序略

ACALLDIR;顯示子程序略

SJMP$END

程序清單:51

6.2.5定時器/計數器的溢出校準和實時讀取為什么要對定時器/計數器的溢出校準?

8051內部定時器/計數器當計數器回零溢出后,

A一方面置位TF0/TF1中斷標志,申請中斷;

A另一方面,方式0、1、3在未再次裝入計數初值時,計數器會自動從0值重新開始計數。如果要求反復計數或定時,由于CPU響應中斷和重新裝入初值都需要時間,這樣會給計數或定時帶來誤差。對于單級中斷的系統,一般中斷延時可以忽略,但在時間上要求確實很嚴格的應用場合,必須精確計入這些延時,這時需要對定時器溢出校準。

52

若在單級中斷的系統中,CPU響應中斷至少用3個機器周期,若有其它指令的延誤,則延誤時間不易計算??刹捎靡韵鲁绦蚨蝸硇省@?,T/C1方式1,定時1MS中斷,fosc=12MHz,則定時初值為:

65536-1MS/1μs=65536-1000=0FC18H

既是[-1000]的補碼。校準方法:53

CLREA ;禁止所有的中斷

CLRTR1 ;停止T/C1計數1MOVA,#LOW(-1000+7);取低8位校準碼1ADDA,TL1 ;校準碼加TL1中的當前值1MOVTL1,A ;要重裝入的校準后的低8位初值1MOVA,#HIGH(-1000+7) ;取高8位校準碼1ADDCA,TH1;校準碼加TH1中的當前值1MOVTH1,A;要重裝入的校準后的高8位初值1SETBTR1 ;啟動T/C1……54擴大計數個數和定時時間

[例6-6]利用MCS-51單片機的T/C,產生電子時鐘的1S基時,并且由P1.7輸出2S的方波。Fosc=12MHz。焦點:

16位計數器最大定時65.536ms,要產生比這個時間長的定時,怎么辦?

1、兩個定時器級聯

2、硬件定時加軟件計數相結合。55一個T/C定時,回0溢出時,使P1.0輸出一個負脈沖送到另一個T/C的外部脈沖輸入端用以計數。當fosc=12MHz時,最大時間可以達到:

T=(65536×65536)×1μs

=4294967296μs

=4294967.296ms

=4294.967296S。若再與軟件計數相結合,會產生更長的時間。兩個T/C級聯的方法:56

在實際應用中,不但計算機與外部設備之間常常要進行信息交換,而且計算機之間也需要交換信息,所有這些信息的交換均稱為“通信”。通信的基本方式分為并行通信和串行通信兩種。一、并行通信與串行通信6.3.1串行通信基礎知識57并行通信——數據的各位同時發(fā)送并行通信是構成1組數據的各位同時進行傳送,例如8位數據或16位數據并行傳送。其特點是傳輸速度快、效率高。但當距離較遠、位數又多時導致了通信線路復雜且成本高。2.串行通信——數據一位一位順序傳送

串行通信是數據一位接一位地順序傳送。其特點是通信線路簡單,只要一對傳輸線就可以實現通信(如電話線),從而大大地降低了成本,特別適用于遠距離通信。缺點是傳送速度慢。

58圖6―14通信的兩種基本方式(a)并行通信;(b)串行通信591.異步通信

異步通信的特點是數據在線路上的傳送不連續(xù)。在傳送時,數據是以一個字符為單位進行傳送的。它用一個起始位表示字符的開始,用停止位表示字符的結束。字符幀由發(fā)送端一幀一幀的發(fā)送,通過傳輸線由接收設備一幀一幀的接收。在異步通信中,發(fā)送端和接收端依靠字符幀格式規(guī)定和波特率來協調數據的發(fā)送和接收。二、異步通信與同步通信60起始位:位于字符幀開頭,只占一位,始終為邏輯0低電平,用于向接收設備表示發(fā)送端開始發(fā)送一幀數據。數據位:緊跟起始位之后,用戶根據情況可取5位、6位、7位或8位,低位在前高位在后。若所傳數據為ASCII字符,則常取7位。奇偶校驗位:位于數據位后,僅占一位,用于表征串行通信中采用奇校驗還是偶校驗,由用戶根據需要決定。停止位:位于字符幀末尾,為邏輯1高電平,通??扇?位、1.5位或2位,用于向接收端表示一幀字符信息已發(fā)送完畢,也為發(fā)送下一幀字符作準備。(1)字符幀:由起始位、數據位、奇偶校驗位和停止位4個部分組成。61圖6―15串行異步傳送的字符格式(a)字符格式;(b)有空閑位的字符格式62(2)波特率:是數據的傳送速率,即每秒鐘傳送的二進制數碼的位數,單位為位/秒(b/s)。它與字符的傳送速率不同,字符的實際傳輸速率是指每秒內所傳字符幀的幀數(字符/秒)。二者之間存在如下關系:波特率=位/字符×字符/秒=位/秒要求發(fā)送端與接收端的波特率必須一致。63

例如:假設字符傳送的速率為120字符/秒而每1個字符為10位,那么傳送的波特率為:

10位/字符×120字符/秒

=1200位/秒=1200波特

每1位二進制位的傳送時間Td就是波特率的倒數,例如上例中

Td=1/1200=0.833ms642.同步通信同步通信是一種連續(xù)串行傳送數據的通信方式,一次通信只傳送一幀信息。

信息幀由同步字符、數據字符和校驗字符等三部分組成。同步字符:位于幀結構開頭,用于確認數據字符的開始數據字符:在同步字符之后,個數不受限制,由所需傳輸的數據塊長度決定;校驗字符:有1~2個,位于幀結構末尾,用于接收端對接收到的數據字符的正確性校驗。65圖6―16串行同步傳送的字符格式(a)單同步信息幀結構;(b)雙同步信息幀格式同步字符數據字符1數據字符2數據字符3數據字符nCRC1CRC2(a)同步字符1同步字符2數據字符1數據字符2數據字符nCRC1CRC2(b)66單工制式:A端為發(fā)送站,B端為接收站,數據僅能從A站發(fā)至B站。2.半雙工制式:數據既可從A站發(fā)送到B站,也可以由B站發(fā)送到A站。不過在同一時間只能作1個方向的傳送。3.全雙工制式:每個站(A、B)既可同時發(fā)送,也可同時接收。三、串行通信的制式67圖6―17串行通信的三種方式(a)單工方式;(b)半雙工方式;(c)全雙工方式68檢錯方法:奇偶校驗、校驗和、循環(huán)冗余碼校驗。糾錯方法:海明碼校驗、交叉奇偶校驗四、通信數據的差錯檢測和校正69

串行通信中的數據是逐位依次傳送的,而計算機系統或計算機終端中的數據是并行發(fā)送的。因此,發(fā)送端必須把并行數據變成串行才能在線路上傳送,接收端接收到的串行數據又需要變換成并行數據才可以送給終端。實現方法:軟件實現、硬件實現。五、串行通信中串行I/O數據的實現707172

MCS-51含有一個可編程全雙工串行通信接口SIO,該接口電路不僅能同時進行數據的發(fā)送和接收,也可作為一個同步移位寄存器使用。它的字符幀格式可以是8位、10位或11位,可以設置各種波特率,能方便的構成雙機、多機串行通信接口,從而能實現8051單片機系統之間點對點的單機通信、多機通信以及與系統機的單機或多機通信。6.3.2MCS-51的串行I/O口及控制寄存器

73

MCS-51單片機通過引腳RxD(P3.0,串行數據接收端)和引腳TxD(P3.1,串行數據發(fā)送端)與外界進行串行通信。

MCS-51串行口主要由兩個物理上獨立的串行數據緩沖寄存器SBUF、發(fā)送控制器、接收控制器、輸入移位寄存器和輸出控制門組成。一、串行口的結構74圖6―22MCS-51串行口的原理結構圖75發(fā)送緩沖寄存器SBUF只能寫,不能讀;接收緩沖寄存器SBUF只能讀,不能寫。兩個緩沖寄存器共用一個地址99H,可以通過讀/寫指令區(qū)分。串行發(fā)送:MOVSBUF,A

串行接收:MOVA,SBUF

76

SCON寄存器用來控制串行口的工作方式和狀態(tài),它可以是位尋址。在復位時所有位被清,字地址為98H。SCON的格式為二、串行口控制寄存器SCOND7D6D5D4D3D2D1D0

SCONSM0SM1SM2RENTB8RB8TIRI9F9E9D9C9B9A9998位地址77SCON各位的功能:1)SM0、SM1:用于定義串行口的操作模式,兩個選擇位對應4種工作方式,見下表。其中fOSC是振蕩器頻率。SM0SM1工作方式功能波特率000110110101同步移位寄存器10位異步收發(fā)

11位異步收發(fā)11位異步收發(fā)fOSC/12由定時器控制fOSC/64或fOSC/32由定時器控制782)SM2:多機通信控制位。在方式0時,SM2不用,應設置為0狀態(tài)。在方式1下,SM2也應設置為0,此時RI只有在接收電路接收到停止位時才被激活成1,并能自動發(fā)出串行口中斷請求。在方式2或方式3中,如SM2=1,則接收到的第9位數據(RB8)為0時不啟動接收中斷標志RI(即RI=0),并且將接收到的前8位數據丟棄;RB8為1時,才將接收到的前8位數據送入SBUF,并置位RI產生中斷請求。當SM2=0時,則不論第9位數據為0或1,都將前8位數據裝入SBUF中,置RI為1,產生中斷請求。793)REN:允許串行接收控制位。若REN=0,則禁止接收;若REN=1,則允許接收。該位由軟件置位或復位。4)TB8:發(fā)送數據第9位。在方式2和方式3時,TB8存放所要發(fā)送的第9位數據。該位由軟件置位或復位。5)RB8:接收數據第9位。用于在方式2和方式3時存放接收數據第9位。在方式1下,若SM2=0,則RB8存放接收到的停止位。在方式0下,不使用RB8。806)TI:發(fā)送中斷標志位,用于指示一幀數據發(fā)送是否完成。在方式0時,發(fā)送電路發(fā)送完第8位數據時,TI由硬件置位;在其他方式下,TI在發(fā)送電路開始發(fā)送停止位時置位。7)RI:接收中斷標志位,用于指示一幀信息是否接收完。在方式0時,當接收到的第8位結束后,由內部硬件使RI置位,向CPU請求中斷。在其它方式時,接收到停止位的中間便由硬件置位RI,必須在響應中斷后,由軟件使其復位。RI也可供查詢使用。81

PCON主要是為CHMOS型單片機的電源控制而設置的專用寄存器,單元地址為87H,不能位尋址。三、電源控制寄存器PCOND7D6D5D4D3D2D1D0

PCONSMODGF1GF0PDIDL8E8D8C8B8A898887位地址

在HMOS單片機中,該寄存器除最高位外,其它位都是虛設的。最高位SMOD為串行口波特率選擇位,當SMOD=1時,方式1、2、3的波特率加倍;當SMOD=0時,系統復位。82串行口有4種工作方式,它是由SCON中的SM0、SM1來定義的。四、串行口的工作方式SM0SM1工作方式功能波特率000110110101同步移位寄存器10位異步收發(fā)

11位異步收發(fā)11位異步收發(fā)fOSC/12由定時器控制fOSC/64或fOSC/32由定時器控制83

1)方式0

串行接口的工作方式0為同步移位寄存器方式,其波特率是固定的,為fosc(振蕩頻率)的1/12。

方式0發(fā)送數據從RXD引腳串行輸出,TXD引腳輸出同步脈沖。當1個數據寫入串行口發(fā)送緩沖器時,串行口將8位數據以fosc/12的固定波特率從RXD引腳輸出,從低位到高位。發(fā)送完后置中斷標志TI為1,呈中斷請求狀態(tài),在再次發(fā)送數據之前,必須用軟件將TI清0。

84方式0接收在滿足REN=1和RI=0的條件下,串行口處于方式0輸入。此時,RXD為數據輸入端,TXD為同步信號輸出端,接收器也以fosc/12的波特率采樣RXD引腳輸入的數據信息。當接收器接收完8位數據后,置中斷標志RI=1為請求中斷,在再次接收之前,必須用軟件將RI清0。85圖6-24-a方式0發(fā)送時序86圖6-24-b方式0接收時序872)方式1

在方式1時,串行口被設置為波特率可變的8位異步通信接口。方式1發(fā)送串行口以方式1發(fā)送時,數據位由TXD端輸出,發(fā)送1幀信息為10位,其中1位起始位、8位數據位(先低位后高位)和一個停止位“1”。CPU執(zhí)行1條數據寫入發(fā)送緩沖器SBUF的指令,就啟動發(fā)送器發(fā)送。當發(fā)送完數據,就置中斷標志TI為1。88方式1所傳送的波特率取決于定時器T1的溢出率和特殊功能寄存器PCON中SMOD的值,即方式1的波特率=(2SMOD/32)×定時器T1的溢出率。方式1接收當串行口置為方式1,且REN=1時,串行口處于方式1輸入狀態(tài)。它以所選波特率的16倍的速率采樣RXD引腳狀態(tài)。

89圖6-25-a方式1發(fā)送時序90圖6-25-b方式1接收時序91

3)方式2

串行口工作于方式2時,被定義為11位異步通信接口。方式2發(fā)送發(fā)送數據由TXD端輸出,發(fā)送1幀信息為11位,其中1位起始位(0)、8位數據位(先低位后高位)、1位可控位為1或0的第9位數據、1位停止位。附加的第9位數據為SCON中的TB8,它由軟件置位或清0,可作為多機通信中地址/數據信息的標志位,也可作為數據的奇偶校驗位。92方式2接收當串行口置為方式2,且REN=1時,串行口以方式2接收數據。方式2的接收與方式1基本相似。數據由RXD端輸入,接收11位信息,其中1位起始位(0)、8位數據位、1位附加的第9位數據、1位停止位(1)。方式2的波特率=(2SMOD/64)×fosc93圖7-12方式2發(fā)送時序94圖7-13方式2的接收時序95

3)方式3

當SM0SM1=11時,串行口工作在方式3。方式3為波特率可變的9位異步通信方式,除了波特率外,方式3和方式2相同。

方式3的波特率由下式確定:方式3波特率=(2SMOD/32)×定時器T1的溢出率96串行通信的4種工作方式對應著3種波特率。

(1)對于方式0,波特率是固定的,為單片機時鐘的十二分之一,即fosc/12。

(2)對于方式2,波特率有兩種可供選擇,即fosc/32和fosc/64。對應于以下公式:

波特率=fosc×2SMOD/64五、波特率的設置97

(3)對于方式1和方式3,波特率都由定時器T1的溢出率來決定,對應于以下公式:

波特率=(2SMOD/32)×(定時器T1的溢出率)

而定時器T1的溢出率則和所采用的定時器工作方式有關,并可用以下公式表示:

定時器T1的溢出率=fosc/[12×(2K-X)]

其中X為定時器T1的計數初

溫馨提示

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

評論

0/150

提交評論